edu.northwestern.bioinformatics.studycalendar.domain.ScheduledCalendar.java Source code

Java tutorial

Introduction

Here is the source code for edu.northwestern.bioinformatics.studycalendar.domain.ScheduledCalendar.java

Source

/*L
 * Copyright Northwestern University.
 *
 * Distributed under the OSI-approved BSD 3-Clause License.
 * See http://ncip.github.io/psc/LICENSE.txt for details.
 */

package edu.northwestern.bioinformatics.studycalendar.domain;

import gov.nih.nci.cabig.ctms.domain.AbstractMutableDomainObject;
import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;
import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.IndexColumn;
import org.hibernate.annotations.Parameter;

import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Transient;
import java.util.LinkedList;
import java.util.List;
import java.util.ArrayList;

/**
 * @author Rhett Sutphin
 */
@Entity
@Table
@GenericGenerator(name = "id-generator", strategy = "native", parameters = {
        @Parameter(name = "sequence", value = "seq_scheduled_calendars_id") })
public class ScheduledCalendar extends AbstractMutableDomainObject {
    private StudySubjectAssignment assignment;
    private List<ScheduledStudySegment> scheduledStudySegments = new LinkedList<ScheduledStudySegment>();

    ////// LOGIC

    public void addStudySegment(ScheduledStudySegment studySegment) {
        scheduledStudySegments.add(studySegment);
        studySegment.setScheduledCalendar(this);
    }

    @Transient
    public ScheduledStudySegment getCurrentStudySegment() {
        for (ScheduledStudySegment studySegment : getScheduledStudySegments()) {
            if (!studySegment.isComplete())
                return studySegment;
        }
        return getScheduledStudySegments().get(getScheduledStudySegments().size() - 1);
    }

    @Transient
    public List<ScheduledStudySegment> getScheduledStudySegmentsFor(StudySegment source) {
        List<ScheduledStudySegment> matches = new ArrayList<ScheduledStudySegment>(
                getScheduledStudySegments().size());
        for (ScheduledStudySegment scheduledStudySegment : getScheduledStudySegments()) {
            if (scheduledStudySegment.getStudySegment().equals(source))
                matches.add(scheduledStudySegment);
        }
        return matches;
    }

    @Transient
    public List<ScheduledActivity> getScheduledActivitiesFor(PlannedActivity source) {
        List<ScheduledActivity> matches = new ArrayList<ScheduledActivity>();
        for (ScheduledStudySegment scheduledStudySegment : getScheduledStudySegments()) {
            for (ScheduledActivity scheduledActivity : scheduledStudySegment.getActivities()) {
                if (scheduledActivity.getPlannedActivity().equals(source))
                    matches.add(scheduledActivity);
            }
        }
        return matches;
    }

    ////// BEAN PROPERTIES
    @ManyToOne
    @JoinColumn(name = "assignment_id")
    public StudySubjectAssignment getAssignment() {
        return assignment;
    }

    public void setAssignment(StudySubjectAssignment assignment) {
        this.assignment = assignment;
    }

    // This is annotated this way so that the IndexColumn will work with
    // the bidirectional mapping.  See section 2.4.6.2.3 of the hibernate annotations docs.
    @Fetch(FetchMode.JOIN)
    @OneToMany
    @JoinColumn(name = "scheduled_calendar_id", nullable = false)
    @IndexColumn(name = "list_index")
    @Cascade(value = { CascadeType.ALL, CascadeType.DELETE_ORPHAN })
    public List<ScheduledStudySegment> getScheduledStudySegments() {
        return scheduledStudySegments;
    }

    public void setScheduledStudySegments(List<ScheduledStudySegment> studySegments) {
        this.scheduledStudySegments = studySegments;
    }
}