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}