/* * Copyright 2000-2013 Enonic AS * http://www.enonic.com/license */ package com.enonic.cms.core.content; import java.util.Date; import com.enonic.cms.core.security.user.UserEntity; /** * Created by IntelliJ IDEA. * User: rmh * Date: Jun 21, 2010 * Time: 3:24:26 PM */ public class AssignmentActionResolver { public AssignmentAction resolveAssignmentAction( ContentEntity submittedContent, ContentVersionEntity submittedVersion, ContentEntity persistedContent ) { UserEntity existingAssignee = persistedContent.getAssignee(); UserEntity submittedAssignee = submittedContent.getAssignee(); boolean contentIsAssigned = existingAssignee != null; boolean assigneeSubmitted = submittedAssignee != null; if ( !submittedVersion.isDraft() ) { if ( contentIsAssigned && submittedVersion.isApproved() ) { return AssignmentAction.UNASSIGN_SINCE_APPROVED; } else if ( contentIsAssigned ) { return AssignmentAction.UNASSIGN; } else { return AssignmentAction.DONT_TOUCH; } } if ( !contentIsAssigned && assigneeSubmitted ) { return AssignmentAction.ASSIGN; } if ( !contentIsAssigned && !assigneeSubmitted ) { return AssignmentAction.DONT_TOUCH; } if ( contentIsAssigned && !assigneeSubmitted ) { return AssignmentAction.UNASSIGN; } if ( contentIsAssigned && assigneeSubmitted && !existingAssignee.equals( submittedAssignee ) ) { return AssignmentAction.REASSIGN; } if ( assignmentDescriptionModified( persistedContent, submittedContent ) ) { return AssignmentAction.UPDATE_ASSIGNMENT; } if ( assignmentDueDateModified( persistedContent, submittedContent ) ) { return AssignmentAction.UPDATE_ASSIGNMENT; } return AssignmentAction.DONT_TOUCH; } private boolean assignmentDueDateModified( ContentEntity persistedContent, ContentEntity submittedContent ) { Date newDuedate = submittedContent.getAssignmentDueDate(); Date existingDuedate = persistedContent.getAssignmentDueDate(); if ( existingDuedate == null && newDuedate == null ) { return false; } long otherTime = newDuedate != null ? newDuedate.getTime() : -1; long thisTime = existingDuedate != null ? existingDuedate.getTime() : -1; if ( thisTime == otherTime ) { return false; } return true; } private boolean assignmentDescriptionModified( ContentEntity persistedContent, ContentEntity submittedContent ) { boolean modified = false; String existingAssignmentDescription = persistedContent.getAssignmentDescription(); String newAssignmentDescription = submittedContent.getAssignmentDescription(); if ( newAssignmentDescription != null ) { if ( !newAssignmentDescription.equals( existingAssignmentDescription ) ) { return true; } } else if ( persistedContent.getAssignmentDescription() != null ) { return true; } return modified; } }