package edu.ualberta.med.biobank.common.action.study; 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.exception.ActionException; import edu.ualberta.med.biobank.common.permission.Permission; import edu.ualberta.med.biobank.common.permission.study.StudyCreatePermission; import edu.ualberta.med.biobank.common.permission.study.StudyUpdatePermission; import edu.ualberta.med.biobank.model.ActivityStatus; import edu.ualberta.med.biobank.model.GlobalEventAttr; import edu.ualberta.med.biobank.model.Study; import edu.ualberta.med.biobank.model.StudyEventAttr; public class StudyEventAttrSaveAction implements Action<IdResult> { private static final long serialVersionUID = 1L; private Integer id = null; public Integer globalEventAttrId; public Boolean required; public String permissible; public ActivityStatus activityStatus; public Integer studyId; public void setId(Integer id) { this.id = id; } public void setGlobalEventAttrId(Integer globalEventAttrId) { this.globalEventAttrId = globalEventAttrId; } public void setRequired(Boolean required) { this.required = required; } public void setPermissible(String permissible) { this.permissible = permissible; } public void setActivityStatus(ActivityStatus activityStatus) { this.activityStatus = activityStatus; } public void setStudyId(Integer studyId) { this.studyId = studyId; } @Override public boolean isAllowed(ActionContext context) throws ActionException { Permission permission; if (studyId == null) permission = new StudyCreatePermission(); else permission = new StudyUpdatePermission(studyId); return permission.isAllowed(context); } @Override public IdResult run(ActionContext context) throws ActionException { StudyEventAttr attr = context.get(StudyEventAttr.class, id, new StudyEventAttr()); GlobalEventAttr globalAttr = context.load(GlobalEventAttr.class, globalEventAttrId); attr.setGlobalEventAttr(globalAttr); attr.setPermissible(permissible); attr.setRequired(required); attr.setActivityStatus(activityStatus); attr.setStudy(context.load(Study.class, studyId)); context.getSession().saveOrUpdate(attr); context.getSession().flush(); return new IdResult(attr.getId()); } }