use of com.eden.orchid.api.server.OrchidResponse in project Orchid by JavaEden.
the class AdminAssetResponse method getResponse.
static OrchidResponse getResponse(OrchidContext context, File targetFile, String targetPath) {
AdminTheme theme = context.getAdminTheme();
OrchidResource res = theme.getResourceSource().getResourceEntry(context, targetPath);
String mimeType = StaticFileResponse.mimeTypes.getOrDefault(FilenameUtils.getExtension(targetFile.getName()), "text/plain");
Clog.i("Rendering admin File: #{$1}", targetPath);
if (res != null) {
if (context.isBinaryExtension(FilenameUtils.getExtension(targetFile.getName()))) {
InputStream stream = res.getContentStream();
return new OrchidResponse(context).contentStream(stream).mimeType(mimeType);
} else {
OrchidPage page = new OrchidPage(res, RenderService.RenderMode.TEMPLATE, "", null);
return new OrchidResponse(context).mimeType(mimeType).content(page.getContent()).mimeType(mimeType);
}
}
return null;
}
use of com.eden.orchid.api.server.OrchidResponse in project Orchid by JavaEden.
the class NotFound404Response method getResponse.
static OrchidResponse getResponse(OrchidContext context, String targetPath) {
String content = "";
Clog.i("Rendering 404: #{$1}", targetPath);
OrchidResource resource = context.getFlexibleResourceSource(LocalResourceSource.INSTANCE, null).locateResourceEntry(context, "404");
OrchidPage page = null;
if (resource != null) {
page = new OrchidPage(resource, RenderService.RenderMode.TEMPLATE, "404", "Not Found!");
} else {
resource = context.getDefaultResourceSource(null, null).getResourceEntry(context, "templates/server/404.peb");
Map<String, Object> indexPageVars = new HashMap<>();
indexPageVars.put("title", "Not Found - " + targetPath);
indexPageVars.put("path", targetPath);
Map<String, Object> object = new HashMap<>(context.getConfig());
object.put("page", indexPageVars);
object.put("theme", context.getTheme());
String notFoundIndexContent;
if (resource != null) {
notFoundIndexContent = context.compile(resource, resource.getReference().getExtension(), resource.getContent(), object);
} else {
notFoundIndexContent = context.serialize("json", object);
}
page = new OrchidPage(new StringResource(new OrchidReference(context, "404.txt"), notFoundIndexContent), RenderService.RenderMode.TEMPLATE, "404", "Not Found!");
}
return new OrchidResponse(context).page(page).status(404);
}
use of com.eden.orchid.api.server.OrchidResponse in project Orchid by JavaEden.
the class IndexFileResponse method getResponse.
// TODO: convert this to a component
static OrchidResponse getResponse(OrchidContext context, File targetFile, String targetPath) {
if (targetFile.isDirectory()) {
Clog.i("Rendering directory index: {}", targetPath);
File[] files = targetFile.listFiles();
if (files != null) {
List<FileRow> jsonDirs = new ArrayList<>();
List<FileRow> jsonFiles = new ArrayList<>();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy.MM.dd-hh:mm:ss z", Locale.getDefault());
jsonDirs.add(new FileRow(OrchidUtils.applyBaseUrl(context, StringUtils.strip(targetPath, "/")) + "/..", StringUtils.strip(targetPath, "/") + "/..", ".. (Go up)", "", "", "assets/svg/folder.svg"));
for (File file : files) {
FileRow newFile = new FileRow();
newFile.url = OrchidUtils.applyBaseUrl(context, StringUtils.strip(targetPath, "/") + "/" + file.getName());
newFile.path = StringUtils.strip(targetPath, "/") + "/" + file.getName();
newFile.name = file.getName();
newFile.date = formatter.format(new Date(file.lastModified()));
String icon;
if (file.isDirectory()) {
icon = "folder";
newFile.size = file.listFiles().length + " entries";
jsonDirs.add(newFile);
} else {
icon = FilenameUtils.getExtension(file.getName());
newFile.size = humanReadableByteCount(file.length(), true);
jsonFiles.add(newFile);
}
newFile.icon = "assets/svg/" + icon + ".svg";
}
jsonDirs.sort(Comparator.comparing(fileRow -> fileRow.name));
jsonFiles.sort(Comparator.comparing(fileRow -> fileRow.name));
OrchidResource resource = context.getDefaultResourceSource(null, context.getTheme()).getResourceEntry(context, "templates/server/directoryListing.peb");
Map<String, Object> indexPageVars = new HashMap<>();
indexPageVars.put("title", "List of files/dirs under " + targetPath);
indexPageVars.put("path", targetPath);
indexPageVars.put("dirs", jsonDirs);
indexPageVars.put("files", jsonFiles);
Map<String, Object> object = new HashMap<>(context.getConfig());
object.put("page", indexPageVars);
object.put("theme", context.getTheme());
String directoryListingContent;
if (resource != null) {
directoryListingContent = context.compile(resource, resource.getReference().getExtension(), resource.getContent(), object);
} else {
directoryListingContent = context.serialize("json", object);
}
OrchidPage page = new OrchidPage(new StringResource(new OrchidReference(context, "directoryListing.txt"), directoryListingContent), RenderService.RenderMode.TEMPLATE, "directoryListing", "Index");
return new OrchidResponse(context).page(page).status(404);
}
}
return new OrchidResponse(context).content("");
}
use of com.eden.orchid.api.server.OrchidResponse in project Orchid by JavaEden.
the class FileController method findFile.
@Override
public OrchidResponse findFile(OrchidContext context, String targetPath) {
if (this.rootFolder == null) {
this.rootFolder = new File(this.destination);
}
File targetFile = new File(rootFolder, targetPath);
if (targetFile.exists()) {
if (targetFile.isDirectory()) {
for (String indexFile : indexFiles) {
String indexPath = StringUtils.strip(targetPath, "/") + "/" + indexFile;
File targetIndexFile = new File(rootFolder, indexPath.replace('/', File.separatorChar));
if (targetIndexFile.exists()) {
return StaticFileResponse.getResponse(context, targetIndexFile, indexPath);
}
}
return IndexFileResponse.getResponse(context, targetFile, targetPath);
} else {
return StaticFileResponse.getResponse(context, targetFile, targetPath);
}
} else {
OrchidResponse adminAsset = AdminAssetResponse.getResponse(context, targetFile, targetPath);
if (adminAsset != null) {
return adminAsset;
} else {
return NotFound404Response.getResponse(context, targetPath);
}
}
}
use of com.eden.orchid.api.server.OrchidResponse in project Orchid by JavaEden.
the class FileController method findPage.
@Override
public OrchidResponse findPage(OrchidContext context, String targetPath) {
List<String> possibleMatches = CollectionsKt.listOf(targetPath, targetPath + "/" + indexFiles[0], targetPath + "/" + indexFiles[1]);
OrchidPage matchedPage = null;
for (String possibleMatch : possibleMatches) {
Stream<OrchidPage> indexedPagesStream = context.getIndex().getAllIndexedPages().values().stream().flatMap(it -> it.getFirst().getAllPages().stream());
Stream<AssetPage> assetPagesStream = context.getAssetManager().getAllAssetPages();
Stream<OrchidPage> allOrchidPagesStream = Stream.concat(indexedPagesStream, assetPagesStream);
OrchidPage page = OrchidExtensionsKt.findPageByServerPath(allOrchidPagesStream, possibleMatch);
if (page != null) {
matchedPage = page;
break;
}
}
if (matchedPage != null) {
return new OrchidResponse(context).page(matchedPage).status(200);
} else {
return findFile(context, targetPath);
}
}
Aggregations