Nesta Bentum 4 лет назад
Родитель
Сommit
89b938df58

+ 4 - 3
jplag/src/main/java/de/jplag/reporting/jsonfactory/DirectoryCreator.java

@@ -1,6 +1,7 @@
 package de.jplag.reporting.jsonfactory;
 
 import java.io.File;
+import java.io.IOException;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -14,10 +15,10 @@ public class DirectoryCreator {
      * @param name The name of the new directory
      * @return The created directory
      */
-    public static File createDirectory(String path, String name) {
+    public static File createDirectory(String path, String name) throws IOException {
         File directory = new File(path.concat("/").concat(name));
         if (!directory.exists() && !directory.mkdirs()) {
-            logger.error("Failed to create dir.");
+            throw new IOException("Failed to create dir.");
         }
         return directory;
     }
@@ -26,7 +27,7 @@ public class DirectoryCreator {
      * Create a directory with the given path
      * @param path The path of the new directory
      */
-    public static void createDirectory(String path) {
+    public static void createDirectory(String path) throws IOException {
         createDirectory(path, "");
     }
 }

+ 52 - 21
jplag/src/main/java/de/jplag/reporting/reportobject/ReportObjectFactory.java

@@ -48,11 +48,16 @@ public class ReportObjectFactory {
     public void createAndSaveReport(JPlagResult result, String path) {
 
         buildSubmissionToIdMap(result);
-        createDirectory(path);
-        copySubmissionFilesToReport(path, result);
+        try {
+            createDirectory(path);
+            copySubmissionFilesToReport(path, result);
 
-        writeComparisons(result, path);
-        writeOverview(result, path);
+            writeComparisons(result, path);
+            writeOverview(result, path);
+
+        } catch (IOException e) {
+            logger.error("Could not create directory " + path + " for report viewer generation", e);
+        }
 
     }
 
@@ -61,6 +66,49 @@ public class ReportObjectFactory {
         submissionToIdFunction = (Submission submission) -> submissionNameToIdMap.get(submission.getName());
     }
 
+    private void copySubmissionFilesToReport(String path, JPlagResult result) {
+        List<JPlagComparison> comparisons = result.getComparisons(result.getOptions().getMaximumNumberOfComparisons());
+        var submissions = getSubmissions(comparisons);
+        var submissionsPath = createSubmissionsDirectory(path);
+        if (submissionsPath == null)
+            return;
+        Language language = result.getOptions().getLanguage();
+        for (var submission : submissions) {
+            File directory = createSubmissionDirectory(path, submissionsPath, submission);
+            if (directory == null)
+                continue;   for (var file : submission.getFiles()) {
+                var fileToCopy = language.useViewFiles() ? new File(file.getPath() + language.viewFileSuffix()) : file;
+                try {
+                    Files.copy(fileToCopy.toPath(), (new File(directory, file.getName())).toPath(), StandardCopyOption.REPLACE_EXISTING);
+                } catch (IOException e) {
+                    logger.error("Could not save submission file " + fileToCopy, e);
+                }
+            }
+        }
+    }
+
+
+    private File createSubmissionDirectory(String path, File submissionsPath, Submission submission) {
+        File directory;
+        try {
+            directory = createDirectory(submissionsPath.getPath(), submissionToIdFunction.apply(submission));
+        } catch (IOException e) {
+            logger.error("Could not create directory " + path + " for report viewer generation", e);
+            return null;
+        }
+        return directory;
+    }
+
+    private File createSubmissionsDirectory(String path) {
+        File submissionsPath;
+        try {
+            submissionsPath = createDirectory(path, SUBMISSIONS_FOLDER);
+        } catch (IOException e) {
+            logger.error("Could not create directory " + path + " for report viewer generation", e);
+            return null;
+        }
+        return submissionsPath;
+    }
 
     private void writeComparisons(JPlagResult result, String path) {
         ComparisonReportWriter comparisonReportWriter = new ComparisonReportWriter(submissionToIdFunction);
@@ -94,23 +142,6 @@ public class ReportObjectFactory {
 
     }
 
-    private void copySubmissionFilesToReport(String path, JPlagResult result) {
-        List<JPlagComparison> comparisons = result.getComparisons(result.getOptions().getMaximumNumberOfComparisons());
-        var submissions = getSubmissions(comparisons);
-        var submissionsPath = createDirectory(path, SUBMISSIONS_FOLDER);
-        Language language = result.getOptions().getLanguage();
-        for (var submission : submissions) {
-            File directory = createDirectory(submissionsPath.getPath(), submissionToIdFunction.apply(submission));
-            for (var file : submission.getFiles()) {
-                var fileToCopy = language.useViewFiles() ? new File(file.getPath() + language.viewFileSuffix()) : file;
-                try {
-                    Files.copy(fileToCopy.toPath(), (new File(directory, file.getName())).toPath(), StandardCopyOption.REPLACE_EXISTING);
-                } catch (IOException e) {
-                    logger.error("Could not save submission file " + fileToCopy, e);
-                }
-            }
-        }
-    }
 
     private Set<Submission> getSubmissions(List<JPlagComparison> comparisons) {
         var submissions = comparisons.stream().map(JPlagComparison::getFirstSubmission).collect(Collectors.toSet());