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.workrequirement.server.transfer; 018 019import com.echothree.model.control.selector.common.transfer.SelectorTransfer; 020import com.echothree.model.control.selector.server.control.SelectorControl; 021import com.echothree.model.control.sequence.common.transfer.SequenceTransfer; 022import com.echothree.model.control.sequence.server.control.SequenceControl; 023import com.echothree.model.control.uom.common.UomConstants; 024import com.echothree.model.control.uom.server.control.UomControl; 025import com.echothree.model.control.workeffort.common.transfer.WorkEffortScopeTransfer; 026import com.echothree.model.control.workeffort.server.control.WorkEffortControl; 027import com.echothree.model.control.workrequirement.common.WorkRequirementOptions; 028import com.echothree.model.control.workrequirement.common.transfer.WorkRequirementScopeTransfer; 029import com.echothree.model.control.workrequirement.common.transfer.WorkRequirementTypeTransfer; 030import com.echothree.model.control.workrequirement.server.control.WorkRequirementControl; 031import com.echothree.model.data.selector.server.entity.Selector; 032import com.echothree.model.data.sequence.server.entity.Sequence; 033import com.echothree.model.data.uom.server.entity.UnitOfMeasureKind; 034import com.echothree.model.data.user.server.entity.UserVisit; 035import com.echothree.model.data.workrequirement.server.entity.WorkRequirementScope; 036import com.echothree.model.data.workrequirement.server.entity.WorkRequirementScopeDetail; 037import com.echothree.util.common.transfer.ListWrapper; 038import com.echothree.util.server.persistence.Session; 039import java.util.Set; 040 041public class WorkRequirementScopeTransferCache 042 extends BaseWorkRequirementTransferCache<WorkRequirementScope, WorkRequirementScopeTransfer> { 043 044 SelectorControl selectorControl = Session.getModelController(SelectorControl.class); 045 SequenceControl sequenceControl = Session.getModelController(SequenceControl.class); 046 UomControl uomControl = Session.getModelController(UomControl.class); 047 WorkEffortControl workEffortControl = Session.getModelController(WorkEffortControl.class); 048 boolean includeWorkRequirements; 049 050 /** Creates a new instance of WorkRequirementScopeTransferCache */ 051 public WorkRequirementScopeTransferCache(UserVisit userVisit, WorkRequirementControl workRequirementControl) { 052 super(userVisit, workRequirementControl); 053 054 var options = session.getOptions(); 055 if(options != null) { 056 includeWorkRequirements = options.contains(WorkRequirementOptions.WorkRequirementScopeIncludeWorkRequirements); 057 } 058 059 setIncludeEntityInstance(true); 060 } 061 062 public WorkRequirementScopeTransfer getWorkRequirementScopeTransfer(WorkRequirementScope workRequirementScope) { 063 WorkRequirementScopeTransfer workRequirementScopeTransfer = get(workRequirementScope); 064 065 if(workRequirementScopeTransfer == null) { 066 WorkRequirementScopeDetail workRequirementScopeDetail = workRequirementScope.getLastDetail(); 067 WorkEffortScopeTransfer workEffortScopeTransfer = workEffortControl.getWorkEffortScopeTransfer(userVisit, workRequirementScopeDetail.getWorkEffortScope()); 068 WorkRequirementTypeTransfer workRequirementTypeTransfer = workRequirementControl.getWorkRequirementTypeTransfer(userVisit, workRequirementScopeDetail.getWorkRequirementType()); 069 Sequence workRequirementSequence = workRequirementScopeDetail.getWorkRequirementSequence(); 070 SequenceTransfer workRequirementSequenceTransfer = workRequirementSequence == null? null: sequenceControl.getSequenceTransfer(userVisit, workRequirementSequence); 071 Sequence workTimeSequence = workRequirementScopeDetail.getWorkTimeSequence(); 072 SequenceTransfer workTimeSequenceTransfer = workTimeSequence == null? null: sequenceControl.getSequenceTransfer(userVisit, workTimeSequence); 073 Selector workAssignmentSelector = workRequirementScopeDetail.getWorkAssignmentSelector(); 074 SelectorTransfer workAssignmentSelectorTransfer = workAssignmentSelector == null? null: selectorControl.getSelectorTransfer(userVisit, workAssignmentSelector); 075 UnitOfMeasureKind timeUnitOfMeasureKind = uomControl.getUnitOfMeasureKindByUnitOfMeasureKindUseTypeUsingNames(UomConstants.UnitOfMeasureKindUseType_TIME); 076 String estimatedTimeAllowed = formatUnitOfMeasure(timeUnitOfMeasureKind, workRequirementScopeDetail.getEstimatedTimeAllowed()); 077 String maximumTimeAllowed = formatUnitOfMeasure(timeUnitOfMeasureKind, workRequirementScopeDetail.getMaximumTimeAllowed()); 078 079 workRequirementScopeTransfer = new WorkRequirementScopeTransfer(workEffortScopeTransfer, workRequirementTypeTransfer, 080 workRequirementSequenceTransfer, workTimeSequenceTransfer, workAssignmentSelectorTransfer, estimatedTimeAllowed, 081 maximumTimeAllowed); 082 put(workRequirementScope, workRequirementScopeTransfer); 083 084 if(includeWorkRequirements) { 085 workRequirementScopeTransfer.setWorkRequirements(new ListWrapper<>(workRequirementControl.getWorkRequirementTransfersByWorkRequirementScope(userVisit, workRequirementScope))); 086 } 087 } 088 089 return workRequirementScopeTransfer; 090 } 091 092}