package edu.pdx.cs410J.grader; import com.google.common.io.ByteStreams; import edu.pdx.cs410J.ParserException; import javax.mail.Message; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.Collections; public class SurveySubmissionsProcessor extends StudentEmailAttachmentProcessor { public SurveySubmissionsProcessor(File directory, GradeBook gradeBook) { super(directory, gradeBook); } @Override public Iterable<? extends String> getSupportedContentTypes() { return Collections.singleton("text/xml"); } @Override public String getEmailFolder() { return "Student Surveys"; } @Override public void processAttachment(Message message, String fileName, InputStream inputStream) { debug(" File name: " + fileName); debug(" InputStream: " + inputStream); File file = new File(directory, fileName); try { if (file.exists()) { warnOfPreExistingFile(file); return; } ByteStreams.copy(inputStream, new FileOutputStream(file)); } catch (IOException ex) { logException("While writing \"" + fileName + "\" to \"" + directory + "\"", ex); } addStudentFromFileToGradeBook(file, gradeBook); } private void addStudentFromFileToGradeBook(File file, GradeBook gradeBook) { Student student; try { XmlStudentParser parser = new XmlStudentParser(file); student = parser.parseStudent(); } catch (IOException | ParserException ex) { logException("While parsing \"" + file + "\"", ex); return; } if (gradeBook.containsStudent(student.getId())) { warn("Student \"" + student.getId() + "\" already exists in " + gradeBook.getClassName()); return; } gradeBook.addStudent(student); info("Added " + student.getFullName() + " to " + gradeBook.getClassName()); logNotesAboutStudent(student); } private void logNotesAboutStudent(Student student) { student.getNotes().forEach((note) -> info(" " + note)); } private void warnOfPreExistingFile(File file) { warn("Not processing existing file \"" + file + "\""); } }