package edu.ualberta.med.biobank.common.action.processingEvent; import java.util.Date; import java.util.Set; import edu.ualberta.med.biobank.common.action.Action; import edu.ualberta.med.biobank.common.action.ActionContext; import edu.ualberta.med.biobank.common.action.IdResult; import edu.ualberta.med.biobank.common.action.comment.CommentUtil; import edu.ualberta.med.biobank.common.action.exception.ActionException; import edu.ualberta.med.biobank.common.permission.Permission; import edu.ualberta.med.biobank.common.permission.processingEvent.ProcessingEventCreatePermission; import edu.ualberta.med.biobank.common.permission.processingEvent.ProcessingEventUpdatePermission; import edu.ualberta.med.biobank.model.ActivityStatus; import edu.ualberta.med.biobank.model.Center; import edu.ualberta.med.biobank.model.Comment; import edu.ualberta.med.biobank.model.ProcessingEvent; import edu.ualberta.med.biobank.model.Specimen; public class ProcessingEventSaveAction implements Action<IdResult> { private static final long serialVersionUID = 1L; private Integer peventId; private Integer centerId; private Date createdAt; private String worksheet; private ActivityStatus activityStatus; private String commentText; private Set<Integer> addedSpecimenIds; private Set<Integer> removedSpecimenIds; public ProcessingEventSaveAction(Integer peventId, Integer centerId, Date createdAt, String worksheet, ActivityStatus activityStatus, String commentText, Set<Integer> addedSpecimenIds, Set<Integer> removedSpecimenIds) { this.peventId = peventId; this.centerId = centerId; this.createdAt = createdAt; this.worksheet = worksheet; this.activityStatus = activityStatus; this.commentText = commentText; this.addedSpecimenIds = addedSpecimenIds; this.removedSpecimenIds = removedSpecimenIds; } @Override public boolean isAllowed(ActionContext context) { Permission permission; if (peventId == null) { permission = new ProcessingEventCreatePermission(centerId); } else { permission = new ProcessingEventUpdatePermission(peventId); } return permission.isAllowed(context); } @Override public IdResult run(ActionContext context) throws ActionException { ProcessingEvent peventToSave; if (peventId == null) { peventToSave = new ProcessingEvent(); } else { peventToSave = context.load(ProcessingEvent.class, peventId); } // FIXME Version check? peventToSave.setActivityStatus(activityStatus); peventToSave.setCenter(context.load(Center.class, centerId)); setComments(context, peventToSave); peventToSave.setCreatedAt(createdAt); peventToSave.setWorksheet(worksheet); // set processing event on added specimens for (Integer specimen : addedSpecimenIds) { Specimen spec = context.load(Specimen.class, specimen); spec.setProcessingEvent(peventToSave); spec.setActivityStatus(ActivityStatus.CLOSED); context.getSession().saveOrUpdate(spec); } for (Integer specimen : removedSpecimenIds) { Specimen spec = context.load(Specimen.class, specimen); spec.setProcessingEvent(null); spec.setActivityStatus(ActivityStatus.ACTIVE); context.getSession().saveOrUpdate(spec); } context.getSession().saveOrUpdate(peventToSave); return new IdResult(peventToSave.getId()); } protected void setComments(ActionContext context, ProcessingEvent peventToSave) { Comment comment = CommentUtil.create(context.getUser(), commentText); if (comment != null) { context.getSession().save(comment); peventToSave.getComments().add(comment); } } }