Search in sources :

Example 1 with StudentContactLogEntry

use of fi.otavanopisto.pyramus.domainmodel.students.StudentContactLogEntry in project pyramus by otavanopisto.

the class ManageStudentContactEntriesViewController method process.

/**
 * Processes the page request.
 *
 * In parameters
 * - person
 *
 * Page parameters
 * - person - Person object
 * - contactEntries - List of StudentContactLogEntry objects
 *
 * @param pageRequestContext pageRequestContext
 */
public void process(PageRequestContext pageRequestContext) {
    StudentDAO studentDAO = DAOFactory.getInstance().getStudentDAO();
    PersonDAO personDAO = DAOFactory.getInstance().getPersonDAO();
    StudentContactLogEntryDAO logEntryDAO = DAOFactory.getInstance().getStudentContactLogEntryDAO();
    StudentContactLogEntryCommentDAO entryCommentDAO = DAOFactory.getInstance().getStudentContactLogEntryCommentDAO();
    Long personId = pageRequestContext.getLong("person");
    Person person = personDAO.findById(personId);
    pageRequestContext.getRequest().setAttribute("person", person);
    List<Student> students = studentDAO.listByPerson(person);
    Collections.sort(students, new Comparator<Student>() {

        @Override
        public int compare(Student o1, Student o2) {
            /**
             * Ordering study programmes as follows
             *  1. studies that have start date but no end date (ongoing)
             *  2. studies that have no start nor end date
             *  3. studies that have ended
             *  4. studies that are archived
             */
            int o1class = (o1.getArchived()) ? 4 : (o1.getStudyStartDate() != null && o1.getStudyEndDate() == null) ? 1 : (o1.getStudyStartDate() == null && o1.getStudyEndDate() == null) ? 2 : (o1.getStudyEndDate() != null) ? 3 : 5;
            int o2class = (o2.getArchived()) ? 4 : (o2.getStudyStartDate() != null && o2.getStudyEndDate() == null) ? 1 : (o2.getStudyStartDate() == null && o2.getStudyEndDate() == null) ? 2 : (o2.getStudyEndDate() != null) ? 3 : 5;
            if (o1class == o2class) {
                // classes are the same, we try to do last comparison from the start dates
                return ((o1.getStudyStartDate() != null) && (o2.getStudyStartDate() != null)) ? o1.getStudyStartDate().compareTo(o2.getStudyStartDate()) : 0;
            } else
                return o1class < o2class ? -1 : o1class == o2class ? 0 : 1;
        }
    });
    Map<Long, List<StudentContactLogEntry>> contactEntries = new HashMap<>();
    final Map<Long, List<StudentContactLogEntryComment>> contactEntryComments = new HashMap<>();
    for (int i = 0; i < students.size(); i++) {
        Student student = students.get(i);
        List<StudentContactLogEntry> listStudentContactEntries = logEntryDAO.listByStudent(student);
        for (int j = 0; j < listStudentContactEntries.size(); j++) {
            StudentContactLogEntry entry = listStudentContactEntries.get(j);
            List<StudentContactLogEntryComment> listComments = entryCommentDAO.listByEntry(entry);
            Collections.sort(listComments, new Comparator<StudentContactLogEntryComment>() {

                public int compare(StudentContactLogEntryComment o1, StudentContactLogEntryComment o2) {
                    Date d1 = o1.getCommentDate();
                    Date d2 = o2.getCommentDate();
                    int val = d1 == null ? d2 == null ? 0 : 1 : d2 == null ? -1 : d1.compareTo(d2);
                    if (val == 0)
                        return o1.getId().compareTo(o2.getId());
                    else
                        return val;
                }
            });
            contactEntryComments.put(entry.getId(), listComments);
        }
        // Now we can sort entries based on date of entry and/or dates of the comments on the entry
        Collections.sort(listStudentContactEntries, new Comparator<StudentContactLogEntry>() {

            private Date getDateForEntry(StudentContactLogEntry entry) {
                Date d = entry.getEntryDate();
                List<StudentContactLogEntryComment> comments = contactEntryComments.get(entry.getId());
                for (int i = 0; i < comments.size(); i++) {
                    StudentContactLogEntryComment comment = comments.get(i);
                    if (d == null) {
                        d = comment.getCommentDate();
                    } else {
                        if (d.before(comment.getCommentDate()))
                            d = comment.getCommentDate();
                    }
                }
                return d;
            }

            public int compare(StudentContactLogEntry o1, StudentContactLogEntry o2) {
                Date d1 = getDateForEntry(o1);
                Date d2 = getDateForEntry(o2);
                int val = d1 == null ? d2 == null ? 0 : 1 : d2 == null ? -1 : d2.compareTo(d1);
                if (val == 0)
                    return o2.getId().compareTo(o1.getId());
                else
                    return val;
            }
        });
        contactEntries.put(student.getId(), listStudentContactEntries);
    }
    pageRequestContext.getRequest().setAttribute("students", students);
    pageRequestContext.getRequest().setAttribute("contactEntries", contactEntries);
    pageRequestContext.getRequest().setAttribute("contactEntryComments", contactEntryComments);
    pageRequestContext.setIncludeJSP("/templates/students/managestudentcontactentries.jsp");
}
Also used : HashMap(java.util.HashMap) StudentContactLogEntryDAO(fi.otavanopisto.pyramus.dao.students.StudentContactLogEntryDAO) StudentContactLogEntry(fi.otavanopisto.pyramus.domainmodel.students.StudentContactLogEntry) Student(fi.otavanopisto.pyramus.domainmodel.students.Student) Date(java.util.Date) StudentDAO(fi.otavanopisto.pyramus.dao.students.StudentDAO) StudentContactLogEntryComment(fi.otavanopisto.pyramus.domainmodel.students.StudentContactLogEntryComment) PersonDAO(fi.otavanopisto.pyramus.dao.base.PersonDAO) StudentContactLogEntryCommentDAO(fi.otavanopisto.pyramus.dao.students.StudentContactLogEntryCommentDAO) List(java.util.List) Person(fi.otavanopisto.pyramus.domainmodel.base.Person)

Example 2 with StudentContactLogEntry

use of fi.otavanopisto.pyramus.domainmodel.students.StudentContactLogEntry in project pyramus by otavanopisto.

the class StudentRESTService method findStudentContactLogEntryById.

@Path("/students/{STUDENTID:[0-9]*}/contactLogEntries/{ID:[0-9]*}")
@GET
@RESTPermit(StudentContactLogEntryPermissions.FIND_STUDENTCONTACTLOGENTRY)
public Response findStudentContactLogEntryById(@PathParam("STUDENTID") Long studentId, @PathParam("ID") Long id) {
    Student student = studentController.findStudentById(studentId);
    Status studentStatus = checkStudent(student);
    if (studentStatus != Status.OK)
        return Response.status(studentStatus).build();
    StudentContactLogEntry contactLogEntry = studentContactLogEntryController.findContactLogEntryById(id);
    if (contactLogEntry == null) {
        return Response.status(Status.NOT_FOUND).build();
    }
    if (contactLogEntry.getArchived()) {
        return Response.status(Status.NOT_FOUND).build();
    }
    if (!contactLogEntry.getStudent().getId().equals(contactLogEntry.getStudent().getId())) {
        return Response.status(Status.NOT_FOUND).build();
    }
    return Response.ok(objectFactory.createModel(contactLogEntry)).build();
}
Also used : Status(javax.ws.rs.core.Response.Status) StudentContactLogEntry(fi.otavanopisto.pyramus.domainmodel.students.StudentContactLogEntry) CourseStudent(fi.otavanopisto.pyramus.domainmodel.courses.CourseStudent) StudentGroupStudent(fi.otavanopisto.pyramus.domainmodel.students.StudentGroupStudent) Student(fi.otavanopisto.pyramus.domainmodel.students.Student) Path(javax.ws.rs.Path) RESTPermit(fi.otavanopisto.pyramus.rest.annotation.RESTPermit) GET(javax.ws.rs.GET)

Example 3 with StudentContactLogEntry

use of fi.otavanopisto.pyramus.domainmodel.students.StudentContactLogEntry in project pyramus by otavanopisto.

the class StudentRESTService method updateStudentContactLogEntry.

@Path("/students/{STUDENTID:[0-9]*}/contactLogEntries/{ID:[0-9]*}")
@PUT
@RESTPermit(StudentContactLogEntryPermissions.UPDATE_STUDENTCONTACTLOGENTRY)
public Response updateStudentContactLogEntry(@PathParam("STUDENTID") Long studentId, @PathParam("ID") Long id, fi.otavanopisto.pyramus.rest.model.StudentContactLogEntry entity) {
    if (entity == null) {
        return Response.status(Status.BAD_REQUEST).build();
    }
    Student student = studentController.findStudentById(studentId);
    Status studentStatus = checkStudent(student);
    if (studentStatus != Status.OK)
        return Response.status(studentStatus).build();
    StudentContactLogEntry contactLogEntry = studentContactLogEntryController.findContactLogEntryById(id);
    if (contactLogEntry == null) {
        return Response.status(Status.NOT_FOUND).build();
    }
    if (contactLogEntry.getArchived()) {
        return Response.status(Status.NOT_FOUND).build();
    }
    if (!contactLogEntry.getStudent().getId().equals(contactLogEntry.getStudent().getId())) {
        return Response.status(Status.NOT_FOUND).build();
    }
    StudentContactLogEntryType type = entity.getType() != null ? StudentContactLogEntryType.valueOf(entity.getType().name()) : null;
    studentContactLogEntryController.updateContactLogEntry(contactLogEntry, type, entity.getText(), toDate(entity.getEntryDate()), entity.getCreatorName());
    return Response.ok(objectFactory.createModel(contactLogEntry)).build();
}
Also used : Status(javax.ws.rs.core.Response.Status) StudentContactLogEntryType(fi.otavanopisto.pyramus.domainmodel.students.StudentContactLogEntryType) StudentContactLogEntry(fi.otavanopisto.pyramus.domainmodel.students.StudentContactLogEntry) CourseStudent(fi.otavanopisto.pyramus.domainmodel.courses.CourseStudent) StudentGroupStudent(fi.otavanopisto.pyramus.domainmodel.students.StudentGroupStudent) Student(fi.otavanopisto.pyramus.domainmodel.students.Student) Path(javax.ws.rs.Path) RESTPermit(fi.otavanopisto.pyramus.rest.annotation.RESTPermit) PUT(javax.ws.rs.PUT)

Example 4 with StudentContactLogEntry

use of fi.otavanopisto.pyramus.domainmodel.students.StudentContactLogEntry in project pyramus by otavanopisto.

the class StudentRESTService method createStudentContactLogEntry.

@Path("/students/{ID:[0-9]*}/contactLogEntries")
@POST
@RESTPermit(StudentContactLogEntryPermissions.CREATE_STUDENTCONTACTLOGENTRY)
public Response createStudentContactLogEntry(@PathParam("ID") Long id, fi.otavanopisto.pyramus.rest.model.StudentContactLogEntry entity) {
    if (entity == null) {
        return Response.status(Status.BAD_REQUEST).build();
    }
    Student student = studentController.findStudentById(id);
    Status studentStatus = checkStudent(student);
    if (studentStatus != Status.OK)
        return Response.status(studentStatus).build();
    if (!restSecurity.hasPermission(new String[] { StudentPermissions.FIND_STUDENT, UserPermissions.USER_OWNER }, student, Style.OR)) {
        return Response.status(Status.FORBIDDEN).build();
    }
    StudentContactLogEntryType type = entity.getType() != null ? StudentContactLogEntryType.valueOf(entity.getType().name()) : null;
    StudentContactLogEntry contactLogEntry = studentContactLogEntryController.createContactLogEntry(student, type, entity.getText(), toDate(entity.getEntryDate()), entity.getCreatorName());
    return Response.ok(objectFactory.createModel(contactLogEntry)).build();
}
Also used : Status(javax.ws.rs.core.Response.Status) StudentContactLogEntryType(fi.otavanopisto.pyramus.domainmodel.students.StudentContactLogEntryType) StudentContactLogEntry(fi.otavanopisto.pyramus.domainmodel.students.StudentContactLogEntry) CourseStudent(fi.otavanopisto.pyramus.domainmodel.courses.CourseStudent) StudentGroupStudent(fi.otavanopisto.pyramus.domainmodel.students.StudentGroupStudent) Student(fi.otavanopisto.pyramus.domainmodel.students.Student) Path(javax.ws.rs.Path) RESTPermit(fi.otavanopisto.pyramus.rest.annotation.RESTPermit) POST(javax.ws.rs.POST)

Example 5 with StudentContactLogEntry

use of fi.otavanopisto.pyramus.domainmodel.students.StudentContactLogEntry in project pyramus by otavanopisto.

the class ArchiveContactEntryJSONRequestController method process.

public void process(JSONRequestContext requestContext) {
    StudentContactLogEntryDAO entryDAO = DAOFactory.getInstance().getStudentContactLogEntryDAO();
    Long entryId = requestContext.getLong("entryId");
    StudentContactLogEntry entry = entryDAO.findById(entryId);
    entryDAO.archive(entry);
}
Also used : StudentContactLogEntryDAO(fi.otavanopisto.pyramus.dao.students.StudentContactLogEntryDAO) StudentContactLogEntry(fi.otavanopisto.pyramus.domainmodel.students.StudentContactLogEntry)

Aggregations

StudentContactLogEntry (fi.otavanopisto.pyramus.domainmodel.students.StudentContactLogEntry)14 Student (fi.otavanopisto.pyramus.domainmodel.students.Student)8 StudentContactLogEntryDAO (fi.otavanopisto.pyramus.dao.students.StudentContactLogEntryDAO)7 HashMap (java.util.HashMap)7 CourseStudent (fi.otavanopisto.pyramus.domainmodel.courses.CourseStudent)6 Date (java.util.Date)6 StudentGroupStudent (fi.otavanopisto.pyramus.domainmodel.students.StudentGroupStudent)5 SmvcRuntimeException (fi.internetix.smvc.SmvcRuntimeException)4 StudentContactLogEntryType (fi.otavanopisto.pyramus.domainmodel.students.StudentContactLogEntryType)4 StudentDAO (fi.otavanopisto.pyramus.dao.students.StudentDAO)3 Person (fi.otavanopisto.pyramus.domainmodel.base.Person)3 RESTPermit (fi.otavanopisto.pyramus.rest.annotation.RESTPermit)3 List (java.util.List)3 Path (javax.ws.rs.Path)3 Status (javax.ws.rs.core.Response.Status)3 PersonDAO (fi.otavanopisto.pyramus.dao.base.PersonDAO)2 StudentContactLogEntryCommentDAO (fi.otavanopisto.pyramus.dao.students.StudentContactLogEntryCommentDAO)2 Subject (fi.otavanopisto.pyramus.domainmodel.base.Subject)2 Course (fi.otavanopisto.pyramus.domainmodel.courses.Course)2 CourseAssessment (fi.otavanopisto.pyramus.domainmodel.grading.CourseAssessment)2