001package edu.pdx.cs.joy.grader.poa;
002
003import com.google.common.eventbus.EventBus;
004import com.google.common.eventbus.Subscribe;
005import com.google.inject.Inject;
006import com.google.inject.Singleton;
007
008import java.time.LocalDateTime;
009import java.time.format.DateTimeFormatter;
010
011@Singleton
012public class POASubmissionPresenter {
013  private final POASubmissionView view;
014  private final EventBus bus;
015
016  @Inject
017  public POASubmissionPresenter(EventBus bus, POASubmissionView view) {
018    this.view = view;
019
020    bus.register(this);
021    this.bus = bus;
022  }
023
024  @Subscribe
025  public void displayPOASubmissionInformation(POASubmissionSelected event) {
026    POASubmission submission = event.getSubmission();
027
028    this.view.setSubmissionSubject(submission.getSubject());
029    this.view.setSubmissionSubmitter(submission.getSubmitter());
030    this.view.setSubmissionTime(formatSubmissionTime(submission.getSubmitTime()));
031    String contentType = submission.getContentType();
032    boolean isHtml = contentType.toLowerCase().contains("text/html");
033
034    try {
035      this.view.setContent(submission.getContent(), isHtml ? POASubmissionView.POAContentType.HTML : POASubmissionView.POAContentType.TEXT);
036
037    } catch (POASubmissionView.CouldNotParseContent ex) {
038      this.bus.post(new UnhandledExceptionEvent(ex));
039    }
040  }
041
042  static String formatSubmissionTime(LocalDateTime submitTime) {
043    return submitTime.format(DateTimeFormatter.ofPattern("E M/d/yyyy h:mm a"));
044  }
045}