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