001package edu.pdx.cs.joy.grader; 002 003import ch.qos.logback.classic.Level; 004import ch.qos.logback.classic.Logger; 005import com.google.common.annotations.VisibleForTesting; 006import edu.pdx.cs.joy.grader.canvas.GradesFromCanvasImporter; 007import edu.pdx.cs.joy.grader.gradebook.ui.GradeBookGUI; 008import edu.pdx.cs.joy.grader.poa.ui.PlanOfAttackGrader; 009import org.slf4j.LoggerFactory; 010 011import java.io.PrintStream; 012import java.lang.reflect.InvocationTargetException; 013import java.lang.reflect.Method; 014import java.util.ArrayList; 015import java.util.List; 016 017public class GraderTools { 018 019 public static void main(String[] args) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException { 020 String tool = null; 021 List<String> toolArgs = new ArrayList<>(); 022 for (String arg : args) { 023 if (arg.equals("-debug")) { 024 setLoggingLevelToDebug(); 025 026 } else if (tool == null) { 027 tool = arg; 028 029 } else { 030 toolArgs.add(arg); 031 } 032 } 033 034 if (tool == null) { 035 usage("Missing tool"); 036 } 037 038 039 invokeMainMethod(getToolClass(tool), toolArgs.toArray(new String[toolArgs.size()])); 040 } 041 042 @VisibleForTesting 043 static void setLoggingLevelToDebug() { 044 Logger logger = (Logger) LoggerFactory.getLogger("edu.pdx.cs.joy.grader"); 045 logger.setLevel(Level.DEBUG); 046 } 047 048 private static Class getToolClass(String tool) { 049 switch (tool) { 050 case "gradebook": 051 return GradeBookGUI.class; 052 053 case "fetch": 054 return FetchAndProcessGraderEmail.class; 055 056 case "importFromCanvas" : 057 return GradesFromCanvasImporter.class; 058 059 case "importFromProjectReports" : 060 return ProjectGradesImporter.class; 061 062 case "mailFileToStudent" : 063 return StudentFileMailer.class; 064 065 case "gradePOAs": 066 return PlanOfAttackGrader.class; 067 068 case "generateGradeSummary": 069 return SummaryReport.class; 070 071 case "htmlForSurveyResults": 072 return SurveyResponsesFromD2LGenerator.class; 073 074 case "fixAndroidZips": 075 return AndroidZipFixer.class; 076 077 case "projectTimeEstimates": 078 return ProjectTimeEstimatesSummary.class; 079 080 case "generateStudentInitialsFile": 081 return GenerateStudentInitialsFile.class; 082 083 case "findUngradedSubmissions": 084 return FindUngradedSubmissions.class; 085 086 default: 087 usage("Unknown tool: " + tool); 088 return null; 089 } 090 } 091 092 @SuppressWarnings("unchecked") 093 private static void invokeMainMethod(Class aClass, String[] args) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException { 094 Method main = aClass.getMethod("main", args.getClass()); 095 main.invoke(aClass, new Object[] { args }); 096 097 } 098 099 private static void usage(String message) { 100 PrintStream err = System.err; 101 err.println("** " + message); 102 err.println(); 103 err.println("Executes one of the Grader tools"); 104 err.println(); 105 err.println("usage: GraderTools tool toolArg*"); 106 err.println(" tool The tool to execute"); 107 err.println(" gradebook The Grade Book GUI"); 108 err.println(" fetch Fetch student surveys or projects from the Grader's"); 109 err.println(" emails account"); 110 err.println(" importFromCanvas Import grades from a Canvas CSV"); 111 err.println(" importFromProjectReports Import grades from graded project reports"); 112 err.println(" mailFileToStudent Email text files to students"); 113 err.println(" gradePOAs Tool for downloading and grading POAs"); 114 err.println(" generateGradeSummary Generate grade summary report for one or more students"); 115 err.println(" htmlForSurveyResults Generate an html file for the responses to a D2L survey"); 116 err.println(" fixAndroidZips Fix zip files for the Android project to work with grading script"); 117 err.println(" projectTimeEstimates Generate markdown that summarizes the estimated project hours"); 118 err.println(" generateStudentInitialsFile Generate a list of student initials from a grade book"); 119 err.println(" findUngradedSubmissions List submissions that need to be tested or graded"); 120 err.println(" toolArg A command line argument to send to the tool"); 121 err.println(); 122 123 System.exit(1); 124 } 125}