UploadGradeDataJob.java

  1. package edu.ucsb.cs156.courses.jobs;

  2. import edu.ucsb.cs156.courses.entities.GradeHistory;
  3. import edu.ucsb.cs156.courses.repositories.GradeHistoryRepository;
  4. import edu.ucsb.cs156.courses.services.UCSBGradeHistoryServiceImpl;
  5. import edu.ucsb.cs156.courses.services.jobs.JobContext;
  6. import edu.ucsb.cs156.courses.services.jobs.JobContextConsumer;
  7. import java.util.ArrayList;
  8. import java.util.List;
  9. import lombok.AllArgsConstructor;
  10. import lombok.Getter;

  11. @AllArgsConstructor
  12. public class UploadGradeDataJob implements JobContextConsumer {
  13.   @Getter private UCSBGradeHistoryServiceImpl ucsbGradeHistoryServiceImpl;
  14.   @Getter private GradeHistoryRepository gradeHistoryRepository;

  15.   @Override
  16.   public void accept(JobContext ctx) throws Exception {
  17.     ctx.log("Updating UCSB Grade History Data");
  18.     List<String> urls = ucsbGradeHistoryServiceImpl.getUrls();
  19.     GradeHistory previous = new GradeHistory();
  20.     List<GradeHistory> results = null;
  21.     for (String url : urls) {
  22.       results = ucsbGradeHistoryServiceImpl.getGradeData(url);
  23.       GradeHistory topRow = results.get(0);
  24.       upsertAll(gradeHistoryRepository, results);
  25.       logProgress(ctx, topRow, previous);
  26.     }

  27.     ctx.log("Finished updating UCSB Grade History Data");
  28.   }

  29.   private void logProgress(JobContext ctx, GradeHistory topRow, GradeHistory previous) {
  30.     if (!topRow.getYyyyq().equals(previous.getYyyyq())) {
  31.       ctx.log("Processing data for year: " + topRow.getYyyyq());
  32.       previous.setYyyyq(topRow.getYyyyq());
  33.     }
  34.     ctx.log("Processing data for subjectArea: " + topRow.getSubjectArea());
  35.   }

  36.   public static List<GradeHistory> upsertAll(
  37.       GradeHistoryRepository gradeHistoryRepository, List<GradeHistory> gradeHistories) {
  38.     List<GradeHistory> result = new ArrayList<GradeHistory>();
  39.     for (GradeHistory gradeHistory : gradeHistories) {
  40.       List<GradeHistory> query =
  41.           gradeHistoryRepository.findByYyyyqAndCourseAndInstructorAndGrade(
  42.               gradeHistory.getYyyyq(),
  43.               gradeHistory.getCourse(),
  44.               gradeHistory.getInstructor(),
  45.               gradeHistory.getGrade());
  46.       if (query.size() == 0) {
  47.         gradeHistoryRepository.save(gradeHistory);
  48.         result.add(gradeHistory);
  49.       } else {
  50.         GradeHistory existing = query.get(0);
  51.         existing.setCount(gradeHistory.getCount());
  52.         existing = gradeHistoryRepository.save(existing);
  53.         result.add(existing);
  54.       }
  55.     }
  56.     return result;
  57.   }
  58. }