X-Git-Url: https://git.pterodactylus.net/?p=jSite.git;a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fde%2Ftodesbaum%2Fjsite%2Fapplication%2FProjectInserter.java;fp=src%2Fmain%2Fjava%2Fde%2Ftodesbaum%2Fjsite%2Fapplication%2FProjectInserter.java;h=e43c8b14ce8d8195f238130fd611581a6c2d01b6;hp=c7dad3b11f9d77b62d7cdb9a33cb50f6e1e6bc54;hb=2d6256e4191697fdc4d033e93d53a59308a516fe;hpb=37618fed55c2d4afe2fdcb9b4b8de1539fdf163d diff --git a/src/main/java/de/todesbaum/jsite/application/ProjectInserter.java b/src/main/java/de/todesbaum/jsite/application/ProjectInserter.java index c7dad3b..e43c8b1 100644 --- a/src/main/java/de/todesbaum/jsite/application/ProjectInserter.java +++ b/src/main/java/de/todesbaum/jsite/application/ProjectInserter.java @@ -23,17 +23,9 @@ import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; -import java.util.ArrayList; -import java.util.Arrays; import java.util.Collection; -import java.util.HashSet; -import java.util.Iterator; import java.util.List; -import java.util.Map; -import java.util.Map.Entry; import java.util.Optional; -import java.util.Set; -import java.util.concurrent.CountDownLatch; import java.util.concurrent.atomic.AtomicInteger; import java.util.logging.Level; import java.util.logging.Logger; @@ -227,92 +219,6 @@ public class ProjectInserter implements FileScannerListener, Runnable { } /** - * Validates the given project. The project will be checked for any invalid - * conditions, such as invalid insert or request keys, missing path names, - * missing default file, and so on. - * - * @param project - * The project to check - * @return The encountered warnings and errors - */ - public static CheckReport validateProject(Project project) { - CheckReport checkReport = new CheckReport(); - if ((project.getLocalPath() == null) || (project.getLocalPath().trim().length() == 0)) { - checkReport.addIssue("error.no-local-path", true); - } - if ((project.getPath() == null) || (project.getPath().trim().length() == 0)) { - checkReport.addIssue("error.no-path", true); - } - if ((project.getIndexFile() == null) || (project.getIndexFile().length() == 0)) { - checkReport.addIssue("warning.empty-index", false); - } else { - File indexFile = new File(project.getLocalPath(), project.getIndexFile()); - if (!indexFile.exists()) { - checkReport.addIssue("error.index-missing", true); - } - } - String indexFile = project.getIndexFile(); - boolean hasIndexFile = (indexFile != null) && (indexFile.length() > 0); - List allowedIndexContentTypes = Arrays.asList("text/html", "application/xhtml+xml"); - if (hasIndexFile && !allowedIndexContentTypes.contains(project.getFileOption(indexFile).getMimeType())) { - checkReport.addIssue("warning.index-not-html", false); - } - Map fileOptions = project.getFileOptions(); - Set> fileOptionEntries = fileOptions.entrySet(); - boolean insert = fileOptionEntries.isEmpty(); - for (Entry fileOptionEntry : fileOptionEntries) { - String fileName = fileOptionEntry.getKey(); - FileOption fileOption = fileOptionEntry.getValue(); - insert |= fileOption.isInsert() || fileOption.isInsertRedirect(); - if (fileName.equals(project.getIndexFile()) && !fileOption.isInsert() && !fileOption.isInsertRedirect()) { - checkReport.addIssue("error.index-not-inserted", true); - } - if (!fileOption.isInsert() && fileOption.isInsertRedirect() && ((fileOption.getCustomKey().length() == 0) || "CHK@".equals(fileOption.getCustomKey()))) { - checkReport.addIssue("error.no-custom-key", true, fileName); - } - } - if (!insert) { - checkReport.addIssue("error.no-files-to-insert", true); - } - Set fileNames = new HashSet(); - for (Entry fileOptionEntry : fileOptionEntries) { - FileOption fileOption = fileOptionEntry.getValue(); - if (!fileOption.isInsert() && !fileOption.isInsertRedirect()) { - logger.log(Level.FINEST, "Ignoring {0}.", fileOptionEntry.getKey()); - continue; - } - String fileName = fileOption.getChangedName().orElse(fileOptionEntry.getKey()); - logger.log(Level.FINEST, "Adding “{0}” for {1}.", new Object[] { fileName, fileOptionEntry.getKey() }); - if (!fileNames.add(fileName)) { - checkReport.addIssue("error.duplicate-file", true, fileName); - } - } - long totalSize = 0; - final CountDownLatch completionLatch = new CountDownLatch(1); - FileScanner fileScanner = new FileScanner(project, (error, files) -> completionLatch.countDown()); - fileScanner.startInBackground(); - while (completionLatch.getCount() > 0) { - try { - completionLatch.await(); - } catch (InterruptedException ie1) { - /* TODO: logging */ - } - } - for (ScannedFile scannedFile : fileScanner.getFiles()) { - String fileName = scannedFile.getFilename(); - FileOption fileOption = project.getFileOption(fileName); - if ((fileOption != null) && !fileOption.isInsert()) { - continue; - } - totalSize += new File(project.getLocalPath(), fileName).length(); - } - if (totalSize > 2 * 1024 * 1024) { - checkReport.addIssue("warning.site-larger-than-2-mib", false); - } - return checkReport; - } - - /** * {@inheritDoc} */ @Override @@ -435,139 +341,4 @@ public class ProjectInserter implements FileScannerListener, Runnable { } } - /** - * Container class that collects all warnings and errors that occured during - * {@link ProjectInserter#validateProject(Project) project validation}. - * - * @author David ‘Bombe’ Roden - */ - public static class CheckReport implements Iterable { - - /** The issures that occured. */ - private final List issues = new ArrayList(); - - /** - * Adds an issue. - * - * @param issue - * The issue to add - */ - public void addIssue(Issue issue) { - issues.add(issue); - } - - /** - * Creates an {@link Issue} from the given error key and fatality flag - * and {@link #addIssue(Issue) adds} it. - * - * @param errorKey - * The error key - * @param fatal - * {@code true} if the error is fatal, {@code false} if only - * a warning should be generated - * @param parameters - * Any additional parameters - */ - public void addIssue(String errorKey, boolean fatal, String... parameters) { - addIssue(new Issue(errorKey, fatal, parameters)); - } - - /** - * {@inheritDoc} - */ - @Override - public Iterator iterator() { - return issues.iterator(); - } - - /** - * Returns whether this check report does not contain any errors. - * - * @return {@code true} if this check report does not contain any - * errors, {@code false} if this check report does contain - * errors - */ - public boolean isEmpty() { - return issues.isEmpty(); - } - - /** - * Returns the number of issues in this check report. - * - * @return The number of issues - */ - public int size() { - return issues.size(); - } - - } - - /** - * Container class for a single issue. An issue contains an error key - * that describes the error, and a fatality flag that determines whether - * the insert has to be aborted (if the flag is {@code true}) or if it - * can still be performed and only a warning should be generated (if the - * flag is {@code false}). - * - * @author David ‘Bombe’ - * Roden - */ - public static class Issue { - - /** The error key. */ - private final String errorKey; - - /** The fatality flag. */ - private final boolean fatal; - - /** Additional parameters. */ - private String[] parameters; - - /** - * Creates a new issue. - * - * @param errorKey - * The error key - * @param fatal - * The fatality flag - * @param parameters - * Any additional parameters - */ - protected Issue(String errorKey, boolean fatal, String... parameters) { - this.errorKey = errorKey; - this.fatal = fatal; - this.parameters = parameters; - } - - /** - * Returns the key of the encountered error. - * - * @return The error key - */ - public String getErrorKey() { - return errorKey; - } - - /** - * Returns whether the issue is fatal and the insert has to be - * aborted. Otherwise only a warning should be shown. - * - * @return {@code true} if the insert needs to be aborted, {@code - * false} otherwise - */ - public boolean isFatal() { - return fatal; - } - - /** - * Returns any additional parameters. - * - * @return The additional parameters - */ - public String[] getParameters() { - return parameters; - } - - } - }