Преглед изворни кода

Replace language option argument values. Fix code triplication.

Sebastian Hahner пре 5 година
родитељ
комит
7beed68bcb

+ 7 - 6
jplag/src/main/java/jplag/CLI.java

@@ -22,9 +22,9 @@ public class CLI {
 
     private static final String DESCRIPTION = "JPlag - Detecting Software Plagiarism";
     private static final String PROGRAM_NAME = "jplag";
+
+    // TODO SH: Replace verbosity when integrating a real logging library
     private static final String[] verbosityOptions = {"parser", "quiet", "long", "details"};
-    private static final String[] languageOptions = new String[]{"java_1_1", "java_1_2", "java_1_5", "java_1_5_dm", "java_1_7", "java_1_9",
-            "python_3", "c_cpp", "c_sharp", "char", "text", "scheme"};
 
     private final ArgumentParser parser;
 
@@ -55,17 +55,18 @@ public class CLI {
      */
     public CLI() {
         parser = ArgumentParsers.newFor(PROGRAM_NAME).build().defaultHelp(true).description(DESCRIPTION);
+
         parser.addArgument("rootDir").help("The root-directory that contains all submissions");
-        parser.addArgument("-l").choices(languageOptions).setDefault("java_1_9").help("Select the language to parse the submissions");
+        parser.addArgument("-l").choices(LanguageOption.getAllDisplayNames()).setDefault("java9").help("Select the language to parse the submissions");
         parser.addArgument("-bc").help("Name of the directory which contains the base code (common framework)");
         parser.addArgument("-v").choices(verbosityOptions).setDefault("quiet").help("Verbosity");
         parser.addArgument("-d").help("(Debug) parser. Non-parsable files will be stored").action(storeTrue());
         parser.addArgument("-S").help("Look in directories <root-dir>/*/<dir> for programs");
         parser.addArgument("-p").help("comma-separated list of all filename suffixes that are included");
-        parser.addArgument("-x").help("All files named in <file> will be ignored");
+        parser.addArgument("-x").help("All files named in this file will be ignored in the comparison (line-separated list)");
         parser.addArgument("-t").help("Tune the sensitivity of the comparison. A smaller <n> increases the sensitivity");
         parser.addArgument("-s").setDefault(0f).help("Similarity Threshold [0-100]: all matches above this threshold will be saved");
-        parser.addArgument("-r").setDefault("result").help("Name of directory in which the web pages will be stored");
+        parser.addArgument("-r").setDefault("result").help("Name of directory in which the comparison results will be stored");
     }
 
     /**
@@ -96,7 +97,7 @@ public class CLI {
         if (fileSuffixString != null) {
             fileSuffixes = fileSuffixString.replaceAll("\\s+", "").split(",");
         }
-        LanguageOption language = LanguageOption.fromOption(namespace.getString("l"));
+        LanguageOption language = LanguageOption.fromDisplayName(namespace.getString("l"));
         Verbosity verbosity = Verbosity.fromOption(namespace.getString("v"));
 
         JPlagOptions options = new JPlagOptions(namespace.getString("rootDir"), language);

+ 4 - 2
jplag/src/main/java/jplag/JPlag.java

@@ -117,8 +117,10 @@ public class JPlag implements ProgramI {
      */
     public boolean hasValidSuffix(File file) {
         String[] validSuffixes = options.getFileSuffixes();
+
+        // This is the case if either the language frontends or the CLI did not set the valid suffixes array in options
         if (validSuffixes == null || validSuffixes.length == 0) {
-            return true; // TODO TS: Why does this return true if the valid suffixes are not set?
+            return true;
         }
         return Arrays.stream(validSuffixes).anyMatch(suffix -> file.getName().endsWith(suffix));
     }
@@ -380,7 +382,7 @@ public class JPlag implements ProgramI {
     /**
      * Parse all given submissions.
      */
-    private void parseSubmissions(Vector<Submission> submissions) throws ExitException {
+    private void parseSubmissions(Vector<Submission> submissions) {
         if (submissions == null) {
             System.out.println("Nothing to parse!");
             return;

+ 30 - 29
jplag/src/main/java/jplag/options/LanguageOption.java

@@ -1,25 +1,31 @@
 package jplag.options;
 
+import jplag.java19.Language;
+
+import java.util.Arrays;
+
 /**
  * The available languages.
  */
 public enum LanguageOption {
-    JAVA_1_1("jplag.javax.Language"),
-    JAVA_1_2("jplag.java.Language"),
-    JAVA_1_5("jplag.java15.Language"),
-    JAVA_1_5_DM("jplag.java15.LanguageWithDelimitedMethods"),
-    JAVA_1_7("jplag.java17.Language"),
-    JAVA_1_9("jplag.java19.Language"),
-    PYTHON_3("jplag.python3.Language"),
-    C_CPP("jplag.cpp.Language"),
-    C_SHARP("jplag.csharp.Language"),
-    CHAR("jplag.chars.Language"),
-    TEXT("jplag.text.Language"),
-    SCHEME("jplag.scheme.Language");
+    JAVA_1_1("java1", "jplag.javax.Language"),
+    JAVA_1_2("java2", "jplag.java.Language"),
+    JAVA_1_5("java5", "jplag.java15.Language"),
+    JAVA_1_5_DM("java5dm", "jplag.java15.LanguageWithDelimitedMethods"),
+    JAVA_1_7("java7", "jplag.java17.Language"),
+    JAVA_1_9("java9", "jplag.java19.Language"),
+    PYTHON_3("python3", "jplag.python3.Language"),
+    C_CPP("cpp", "jplag.cpp.Language"),
+    C_SHARP("csharp", "jplag.csharp.Language"),
+    CHAR("char", "jplag.chars.Language"),
+    TEXT("text", "jplag.text.Language"),
+    SCHEME("scheme", "jplag.scheme.Language");
 
     private final String classPath;
+    private final String displayName;
 
-    LanguageOption(String classPath) {
+    LanguageOption(String displayName, String classPath) {
+        this.displayName = displayName;
         this.classPath = classPath;
     }
 
@@ -27,21 +33,16 @@ public enum LanguageOption {
         return this.classPath;
     }
 
-    public static LanguageOption fromOption(String optionName) {
-        switch(optionName) {
-            case "java_1_1": return JAVA_1_1;
-            case "java_1_2": return JAVA_1_2;
-            case "java_1_5": return JAVA_1_5;
-            case "java_1_5_dm": return JAVA_1_5_DM;
-            case "java_1_7": return JAVA_1_7;
-            case "java_1_9": return JAVA_1_9;
-            case "python_3": return PYTHON_3;
-            case "c_cpp": return C_CPP;
-            case "c_sharp": return C_SHARP;
-            case "char": return CHAR;
-            case "text": return TEXT;
-            case "scheme": return SCHEME;
-            default: return JAVA_1_9;
-        }
+    public static LanguageOption fromDisplayName(String displayName) {
+        return Arrays.stream(LanguageOption.values())
+                .filter(languageOption -> languageOption.displayName.equals(displayName))
+                .findFirst()
+                .orElse(LanguageOption.JAVA_1_9);
+    }
+
+    public static String[] getAllDisplayNames() {
+        return Arrays.stream(LanguageOption.values())
+                .map(languageOption -> languageOption.displayName)
+                .toArray(String[]::new);
     }
 }