diff --git a/core/src/main/java/de/jplag/reporting/jsonfactory/ComparisonReportWriter.java b/core/src/main/java/de/jplag/reporting/jsonfactory/ComparisonReportWriter.java index 981662d0a..0157aeca8 100644 --- a/core/src/main/java/de/jplag/reporting/jsonfactory/ComparisonReportWriter.java +++ b/core/src/main/java/de/jplag/reporting/jsonfactory/ComparisonReportWriter.java @@ -106,9 +106,9 @@ private Match convertMatchToReportMatch(JPlagComparison comparison, de.jplag.Mat private String relativizedFilePath(File file, Submission submission) { if (file.toPath().equals(submission.getRoot().toPath())) { - return Path.of(submission.getName(), submission.getName()).toString(); + return Path.of(submissionToIdFunction.apply(submission), submission.getName()).toString(); } - return Path.of(submission.getName(), submission.getRoot().toPath().relativize(file.toPath()).toString()).toString(); + return Path.of(submissionToIdFunction.apply(submission), submission.getRoot().toPath().relativize(file.toPath()).toString()).toString(); } } diff --git a/core/src/main/java/de/jplag/reporting/jsonfactory/DirectoryManager.java b/core/src/main/java/de/jplag/reporting/jsonfactory/DirectoryManager.java index 43d019319..8bbe60593 100644 --- a/core/src/main/java/de/jplag/reporting/jsonfactory/DirectoryManager.java +++ b/core/src/main/java/de/jplag/reporting/jsonfactory/DirectoryManager.java @@ -32,15 +32,14 @@ public class DirectoryManager { */ public static File createDirectory(String path, String name, File file, File submissionRoot) throws IOException { File directory; - String fileName = file.getPath(); + String fileFullPath = file.getPath(); String submissionRootPath = submissionRoot.getPath(); - int lastDirectoryIndex = findRootDirIndex(name, submissionRootPath); - fileName = fileName.substring(lastDirectoryIndex).replaceFirst(name, ""); + String filePathWithoutRootName = fileFullPath.substring(submissionRootPath.length()); String outputRootDirectory = Path.of(path, name).toString(); - if ("".equals(fileName)) { + if ("".equals(filePathWithoutRootName)) { directory = new File(Path.of(outputRootDirectory, name).toString()); } else { - directory = new File(outputRootDirectory + fileName); + directory = new File(outputRootDirectory + filePathWithoutRootName); } if (!directory.exists() && !directory.mkdirs()) { throw new IOException("Failed to create dir."); @@ -119,15 +118,4 @@ public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOExce logger.info("Display the results with the report viewer at https://jplag.github.io/JPlag/"); return true; } - - /** - * finds the start index of root directory according to this name - * @param name The name of the root directory. According to this name we can find the index of this directory. - * @param submissionRootPath The path of the root directory - * @return The start index of the root directory - */ - public static int findRootDirIndex(String name, String submissionRootPath) { - int submissionRootPathLength = submissionRootPath.length(); - return submissionRootPathLength - name.length(); - } } diff --git a/core/src/main/java/de/jplag/reporting/reportobject/ReportObjectFactory.java b/core/src/main/java/de/jplag/reporting/reportobject/ReportObjectFactory.java index 438b940e5..605d48c85 100644 --- a/core/src/main/java/de/jplag/reporting/reportobject/ReportObjectFactory.java +++ b/core/src/main/java/de/jplag/reporting/reportobject/ReportObjectFactory.java @@ -43,7 +43,7 @@ public class ReportObjectFactory { private static final ToDiskWriter fileWriter = new ToDiskWriter(); public static final String OVERVIEW_FILE_NAME = "overview.json"; - public static final String SUBMISSIONS_FOLDER = "submissions"; + public static final String SUBMISSIONS_FOLDER = "files"; public static final Version REPORT_VIEWER_VERSION = JPlag.JPLAG_VERSION; private Map submissionNameToIdMap; diff --git a/report-viewer/src/components/FilesContainer.vue b/report-viewer/src/components/FilesContainer.vue index 5a04ecce9..61ad83d9d 100644 --- a/report-viewer/src/components/FilesContainer.vue +++ b/report-viewer/src/components/FilesContainer.vue @@ -3,7 +3,7 @@ --> - diff --git a/report-viewer/src/views/ComparisonView.vue b/report-viewer/src/views/ComparisonView.vue index c95088fc4..791414e17 100644 --- a/report-viewer/src/views/ComparisonView.vue +++ b/report-viewer/src/views/ComparisonView.vue @@ -41,17 +41,23 @@ @@ -191,7 +197,7 @@ export default defineComponent({ const isAnonymous = (id: string) => store.state.anonymous.has(id); //Left panel - const hideLeftPanel = ref(true); + const hideLeftPanel = ref(false); const togglePanel = () => { hideLeftPanel.value = !hideLeftPanel.value; }; diff --git a/report-viewer/src/views/FileUploadView.vue b/report-viewer/src/views/FileUploadView.vue index c761e3637..a38920b45 100644 --- a/report-viewer/src/views/FileUploadView.vue +++ b/report-viewer/src/views/FileUploadView.vue @@ -6,6 +6,7 @@ JPlag

JPlag Report Viewer

Select an overview or comparison file or a zip to display.

+

(No files get uploaded anywhere)

Drop a .json or .zip on this page

@@ -54,23 +55,38 @@ export default defineComponent({ }, }); }; + + const extractRootName = (filePath: path.ParsedPath) => { + const folders = filePath.dir.split("/"); + return folders[0]; + }; const extractSubmissionFileName = (filePath: path.ParsedPath) => { const folders = filePath.dir.split("/"); - const submissionFolderIndex = folders.findIndex( - (folder) => folder === "submissions" - ); + const rootName = folders[0]; + let submissionFolderIndex = -1; + if(rootName === "files") { + submissionFolderIndex = folders.findIndex( + (folder) => folder === "files" + ); + }else { + submissionFolderIndex = folders.findIndex( + (folder) => folder === "submissions" + ); + } return folders[submissionFolderIndex + 1]; }; const extractFileNameWithFullPath = (filePath: path.ParsedPath, originalFileName: string) => { - let fullPath=""; - const unixPathWithoutSubmissions = filePath.dir.split("submissions"); - const originalPathWithoutSubmissions = originalFileName.split("submissions"); - const unixSubfolderPathAfterSubmissions = unixPathWithoutSubmissions[1].substring(1); - if(originalPathWithoutSubmissions[1].charAt(0)==='\\'){ - fullPath=(unixSubfolderPathAfterSubmissions + path.sep + filePath.base).replaceAll('/','\\'); - }else { - fullPath=(unixSubfolderPathAfterSubmissions + path.sep + filePath.base); - } + let fullPath = ""; + const rootName = extractRootName(filePath); + const filesOrSubmissionsIndex_filePath = filePath.dir.indexOf(rootName ==="files" ? "files" : "submissions"); + const filesOrSubmissionsIndex_originalFileName = originalFileName.indexOf(rootName === "files" ? "files" : "submissions"); + const unixSubfolderPathAfterSubmissions = filePath.dir.substring(filesOrSubmissionsIndex_filePath + (rootName === "files" ? "files".length : "submissions".length) + 1); + const originalPathWithoutSubmissions = originalFileName.substring(filesOrSubmissionsIndex_originalFileName + (rootName === "files" ? "files".length : "submissions".length)); + if(originalPathWithoutSubmissions.charAt(0)==='\\'){ + fullPath = (unixSubfolderPathAfterSubmissions + path.sep + filePath.base).replaceAll('/','\\'); + }else { + fullPath = (unixSubfolderPathAfterSubmissions + path.sep + filePath.base); + } return fullPath; }; /** @@ -82,7 +98,7 @@ export default defineComponent({ for (const originalFileName of Object.keys(zip.files)) { const unixFileName = slash(originalFileName); if ( - /((.+\/)*)submissions\/(.+)\/(.+)/.test(unixFileName) && + /((.+\/)*)(files|submissions)\/(.+)\/(.+)/.test(unixFileName) && !/^__MACOSX\//.test(unixFileName) ) { const filePath = path.parse(unixFileName);