001// -------------------------------------------------------------------------------- 002// Copyright 2002-2024 Echo Three, LLC 003// 004// Licensed under the Apache License, Version 2.0 (the "License"); 005// you may not use this file except in compliance with the License. 006// You may obtain a copy of the License at 007// 008// http://www.apache.org/licenses/LICENSE-2.0 009// 010// Unless required by applicable law or agreed to in writing, software 011// distributed under the License is distributed on an "AS IS" BASIS, 012// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013// See the License for the specific language governing permissions and 014// limitations under the License. 015// -------------------------------------------------------------------------------- 016 017package com.echothree.model.control.workflow.server.transfer; 018 019import com.echothree.model.control.core.common.transfer.EntityInstanceTransfer; 020import com.echothree.model.control.core.server.control.CoreControl; 021import com.echothree.model.control.workeffort.common.transfer.WorkEffortScopeTransfer; 022import com.echothree.model.control.workeffort.server.control.WorkEffortControl; 023import com.echothree.model.control.workflow.common.WorkflowOptions; 024import com.echothree.model.control.workflow.common.transfer.WorkflowEntityStatusTransfer; 025import com.echothree.model.control.workflow.common.transfer.WorkflowStepTransfer; 026import com.echothree.model.control.workflow.server.control.WorkflowControl; 027import com.echothree.model.data.user.server.entity.UserVisit; 028import com.echothree.model.data.workeffort.server.entity.WorkEffortScope; 029import com.echothree.model.data.workflow.server.entity.WorkflowEntityStatus; 030import com.echothree.model.data.workflow.server.entity.WorkflowTrigger; 031import com.echothree.util.server.persistence.Session; 032import java.util.Set; 033 034public class WorkflowEntityStatusTransferCache 035 extends BaseWorkflowTransferCache<WorkflowEntityStatus, WorkflowEntityStatusTransfer> { 036 037 WorkEffortControl workEffortControl; 038 boolean includeTriggerTime; 039 040 /** Creates a new instance of WorkflowEntityStatusTransferCache */ 041 public WorkflowEntityStatusTransferCache(UserVisit userVisit, WorkflowControl workflowControl) { 042 super(userVisit, workflowControl); 043 044 workEffortControl = Session.getModelController(WorkEffortControl.class); 045 046 var options = session.getOptions(); 047 if(options != null) { 048 includeTriggerTime = options.contains(WorkflowOptions.WorkflowEntityStatusIncludeTriggerTime); 049 } 050 } 051 052 public WorkflowEntityStatusTransfer getWorkflowEntityStatusTransfer(WorkflowEntityStatus workflowEntityStatus) { 053 WorkflowEntityStatusTransfer workflowEntityStatusTransfer = get(workflowEntityStatus); 054 055 if(workflowEntityStatusTransfer == null) { 056 CoreControl coreControl = Session.getModelController(CoreControl.class); 057 EntityInstanceTransfer entityInstanceTransfer = coreControl.getEntityInstanceTransfer(userVisit, workflowEntityStatus.getEntityInstance(), false, false, false, false, false, false); 058 WorkflowStepTransfer workflowStepTransfer = workflowControl.getWorkflowStepTransfer(userVisit, workflowEntityStatus.getWorkflowStep()); 059 WorkEffortScope workEffortScope = workflowEntityStatus.getWorkEffortScope(); 060 WorkEffortScopeTransfer workEffortScopeTransfer = workEffortScope == null ? null : workEffortControl.getWorkEffortScopeTransfer(userVisit, workEffortScope); 061 Long unformattedFromTime = workflowEntityStatus.getFromTime(); 062 String fromTime = formatTypicalDateTime(unformattedFromTime); 063 Long unformattedThruTime = workflowEntityStatus.getThruTime(); 064 String thruTime = formatTypicalDateTime(unformattedThruTime); 065 Long unformattedTriggerTime = null; 066 String triggerTime = null; 067 068 if(includeTriggerTime) { 069 WorkflowTrigger workflowTrigger = workflowControl.getWorkflowTrigger(workflowEntityStatus); 070 071 unformattedTriggerTime = workflowTrigger == null ? null : workflowTrigger.getTriggerTime(); 072 triggerTime = unformattedTriggerTime == null ? null : formatTypicalDateTime(unformattedTriggerTime); 073 } 074 075 workflowEntityStatusTransfer = new WorkflowEntityStatusTransfer(entityInstanceTransfer, workflowStepTransfer, workEffortScopeTransfer, 076 unformattedFromTime, fromTime, unformattedThruTime, thruTime, unformattedThruTime, triggerTime); 077 put(workflowEntityStatus, workflowEntityStatusTransfer); 078 } 079 080 return workflowEntityStatusTransfer; 081 } 082}