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.uom.server.logic; 018 019import com.echothree.model.control.core.common.ComponentVendors; 020import com.echothree.model.control.core.common.EntityTypes; 021import com.echothree.model.control.core.server.logic.EntityInstanceLogic; 022import com.echothree.model.control.item.server.control.ItemControl; 023import com.echothree.model.control.uom.common.exception.UnknownUnitOfMeasureKindUseException; 024import com.echothree.model.control.uom.common.exception.UnknownUnitOfMeasureKindUseTypeNameException; 025import com.echothree.model.control.uom.server.control.UomControl; 026import com.echothree.model.data.core.server.entity.EntityInstance; 027import com.echothree.model.data.uom.server.entity.UnitOfMeasureKind; 028import com.echothree.model.data.uom.server.entity.UnitOfMeasureKindUse; 029import com.echothree.model.data.uom.server.entity.UnitOfMeasureKindUseType; 030import com.echothree.util.common.message.ExecutionErrors; 031import com.echothree.util.common.persistence.BasePK; 032import com.echothree.util.server.control.BaseLogic; 033import com.echothree.util.server.message.ExecutionErrorAccumulator; 034import com.echothree.util.server.persistence.EntityPermission; 035import com.echothree.util.server.persistence.Session; 036 037public class UnitOfMeasureKindUseLogic 038 extends BaseLogic { 039 040 private UnitOfMeasureKindUseLogic() { 041 super(); 042 } 043 044 private static class UnitOfMeasureKindUseLogicHolder { 045 static UnitOfMeasureKindUseLogic instance = new UnitOfMeasureKindUseLogic(); 046 } 047 048 public static UnitOfMeasureKindUseLogic getInstance() { 049 return UnitOfMeasureKindUseLogicHolder.instance; 050 } 051 052 public UnitOfMeasureKindUseType getUnitOfMeasureKindUseTypeByName(final ExecutionErrorAccumulator eea, final String unitOfMeasureKindUseTypeName) { 053 var uomControl = Session.getModelController(UomControl.class); 054 UnitOfMeasureKindUseType unitOfMeasureKindUseType = uomControl.getUnitOfMeasureKindUseTypeByName(unitOfMeasureKindUseTypeName); 055 056 if(unitOfMeasureKindUseType == null) { 057 handleExecutionError(UnknownUnitOfMeasureKindUseTypeNameException.class, eea, ExecutionErrors.UnknownUnitOfMeasureKindUseTypeName.name(), unitOfMeasureKindUseTypeName); 058 } 059 060 return unitOfMeasureKindUseType; 061 } 062 063 public UnitOfMeasureKindUseType getUnitOfMeasureKindUseTypeByUlid(final ExecutionErrorAccumulator eea, final String ulid, final EntityPermission entityPermission) { 064 UnitOfMeasureKindUseType unitOfMeasureKindUseType = null; 065 066 var entityInstance = EntityInstanceLogic.getInstance().getEntityInstance(eea, (String)null, null, null, ulid, 067 ComponentVendors.ECHO_THREE.name(), EntityTypes.UnitOfMeasureKindUseType.name()); 068 069 if(eea == null || !eea.hasExecutionErrors()) { 070 var uomControl = Session.getModelController(UomControl.class); 071 072 unitOfMeasureKindUseType = uomControl.getUnitOfMeasureKindUseTypeByEntityInstance(entityInstance, entityPermission); 073 } 074 075 return unitOfMeasureKindUseType; 076 } 077 078 public UnitOfMeasureKindUseType getUnitOfMeasureKindUseTypeByUlid(final ExecutionErrorAccumulator eea, final String ulid) { 079 return getUnitOfMeasureKindUseTypeByUlid(eea, ulid, EntityPermission.READ_ONLY); 080 } 081 082 public UnitOfMeasureKindUseType getUnitOfMeasureKindUseTypeByUlidForUpdate(final ExecutionErrorAccumulator eea, final String ulid) { 083 return getUnitOfMeasureKindUseTypeByUlid(eea, ulid, EntityPermission.READ_WRITE); 084 } 085 086 public UnitOfMeasureKindUse getUnitOfMeasureKindUse(final ExecutionErrorAccumulator eea, final UnitOfMeasureKindUseType unitOfMeasureKindUseType, 087 final UnitOfMeasureKind unitOfMeasureKind) { 088 var uomControl = Session.getModelController(UomControl.class); 089 UnitOfMeasureKindUse unitOfMeasureKindUse = uomControl.getUnitOfMeasureKindUse(unitOfMeasureKindUseType, unitOfMeasureKind); 090 091 if(unitOfMeasureKindUse == null) { 092 handleExecutionError(UnknownUnitOfMeasureKindUseException.class, eea, ExecutionErrors.UnknownUnitOfMeasureKindUse.name(), 093 unitOfMeasureKindUseType.getUnitOfMeasureKindUseTypeName(), unitOfMeasureKind.getLastDetail().getUnitOfMeasureKindName()); 094 } 095 096 return unitOfMeasureKindUse; 097 } 098 099 public UnitOfMeasureKindUse getUnitOfMeasureKindUse(final ExecutionErrorAccumulator eea, final String unitOfMeasureKindUseTypeName, 100 final String unitOfMeasureKindName) { 101 UnitOfMeasureKindUseType unitOfMeasureKindUseType = getUnitOfMeasureKindUseTypeByName(eea, unitOfMeasureKindUseTypeName); 102 UnitOfMeasureKind unitOfMeasureKind = UnitOfMeasureKindLogic.getInstance().getUnitOfMeasureKindByName(eea, unitOfMeasureKindName); 103 UnitOfMeasureKindUse unitOfMeasureKindUse = null; 104 105 if(!hasExecutionErrors(eea)) { 106 unitOfMeasureKindUse = getUnitOfMeasureKindUse(eea, unitOfMeasureKindUseType, unitOfMeasureKind); 107 } 108 109 return unitOfMeasureKindUse; 110 } 111 112 public UnitOfMeasureKindUse getUnitOfMeasureKindUseByUlid(final ExecutionErrorAccumulator eea, final String ulid, final EntityPermission entityPermission) { 113 UnitOfMeasureKindUse unitOfMeasureKindUse = null; 114 115 var entityInstance = EntityInstanceLogic.getInstance().getEntityInstance(eea, (String)null, null, null, ulid, 116 ComponentVendors.ECHO_THREE.name(), EntityTypes.UnitOfMeasureKindUse.name()); 117 118 if(eea == null || !eea.hasExecutionErrors()) { 119 var uomControl = Session.getModelController(UomControl.class); 120 121 unitOfMeasureKindUse = uomControl.getUnitOfMeasureKindUseByEntityInstance(entityInstance, entityPermission); 122 } 123 124 return unitOfMeasureKindUse; 125 } 126 127 public UnitOfMeasureKindUse getUnitOfMeasureKindUseByUlid(final ExecutionErrorAccumulator eea, final String ulid) { 128 return getUnitOfMeasureKindUseByUlid(eea, ulid, EntityPermission.READ_ONLY); 129 } 130 131 public UnitOfMeasureKindUse getUnitOfMeasureKindUseByUlidForUpdate(final ExecutionErrorAccumulator eea, final String ulid) { 132 return getUnitOfMeasureKindUseByUlid(eea, ulid, EntityPermission.READ_WRITE); 133 } 134 135 private String getUnitOfMeasureKindName(final UnitOfMeasureKindUse unitOfMeasureKindUse) { 136 return unitOfMeasureKindUse.getUnitOfMeasureKind().getLastDetail().getUnitOfMeasureKindName(); 137 } 138 139 public void checkDeleteUnitOfMeasureKindUse(final ExecutionErrorAccumulator ema, final UnitOfMeasureKindUse unitOfMeasureKindUse) { 140 UnitOfMeasureKindUseType unitOfMeasureKindUseType = unitOfMeasureKindUse.getUnitOfMeasureKindUseType(); 141 142 if(unitOfMeasureKindUseType.getAllowMultiple()) { 143 var itemControl = Session.getModelController(ItemControl.class); 144 145 if(itemControl.countItemsByUnitOfMeasureKind(unitOfMeasureKindUse.getUnitOfMeasureKind()) != 0) { 146 ema.addExecutionError(ExecutionErrors.CannotDeleteUnitOfMeasureKindUseInUse.name(), unitOfMeasureKindUseType.getUnitOfMeasureKindUseTypeName(), 147 getUnitOfMeasureKindName(unitOfMeasureKindUse)); 148 } 149 } else { 150 ema.addExecutionError(ExecutionErrors.CannotDeleteUnitOfMeasureKindUse.name(), unitOfMeasureKindUseType.getUnitOfMeasureKindUseTypeName(), 151 getUnitOfMeasureKindName(unitOfMeasureKindUse)); 152 } 153 } 154 155 public void deleteUnitOfMeasureKindUse(final UnitOfMeasureKindUse unitOfMeasureKindUse, final BasePK deletedBy) { 156 var uomControl = Session.getModelController(UomControl.class); 157 158 uomControl.deleteUnitOfMeasureKindUse(unitOfMeasureKindUse, deletedBy); 159 } 160 161}