001// -------------------------------------------------------------------------------- 002// Copyright 2002-2025 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.order.server.logic; 018 019import com.echothree.control.user.order.common.spec.OrderPriorityUniversalSpec; 020import com.echothree.model.control.core.common.ComponentVendors; 021import com.echothree.model.control.core.common.EntityTypes; 022import com.echothree.model.control.core.common.exception.InvalidParameterCountException; 023import com.echothree.model.control.core.server.logic.EntityInstanceLogic; 024import com.echothree.model.control.order.common.exception.DuplicateOrderPriorityNameException; 025import com.echothree.model.control.order.common.exception.UnknownDefaultOrderPriorityException; 026import com.echothree.model.control.order.common.exception.UnknownDefaultOrderTypeException; 027import com.echothree.model.control.order.common.exception.UnknownOrderPriorityNameException; 028import com.echothree.model.control.order.server.control.OrderPriorityControl; 029import com.echothree.model.control.order.server.control.OrderTypeControl; 030import com.echothree.model.data.order.server.entity.OrderPriority; 031import com.echothree.model.data.order.server.entity.OrderType; 032import com.echothree.model.data.order.server.value.OrderPriorityDetailValue; 033import com.echothree.model.data.party.server.entity.Language; 034import com.echothree.util.common.message.ExecutionErrors; 035import com.echothree.util.common.persistence.BasePK; 036import com.echothree.util.server.control.BaseLogic; 037import com.echothree.util.server.message.ExecutionErrorAccumulator; 038import com.echothree.util.server.persistence.EntityPermission; 039import com.echothree.util.server.persistence.Session; 040import com.echothree.util.server.validation.ParameterUtils; 041 042public class BaseOrderPriorityLogic 043 extends BaseLogic { 044 045 protected BaseOrderPriorityLogic() { 046 super(); 047 } 048 049 public OrderPriority createOrderPriority(final ExecutionErrorAccumulator eea, final String orderTypeName, final String orderPriorityName, 050 final Integer priority, final Boolean isDefault, final Integer sortOrder, final Language language, final String description, final BasePK createdBy) { 051 var orderType = OrderTypeLogic.getInstance().getOrderTypeByName(eea, orderTypeName); 052 OrderPriority orderPriority = null; 053 054 if(eea == null || !eea.hasExecutionErrors()) { 055 orderPriority = createOrderPriority(eea, orderType, orderPriorityName, priority, isDefault, sortOrder, language, description, createdBy); 056 } 057 058 return orderPriority; 059 } 060 061 public OrderPriority createOrderPriority(final ExecutionErrorAccumulator eea, final OrderType orderType, final String orderPriorityName, 062 final Integer priority, final Boolean isDefault, final Integer sortOrder, final Language language, final String description, final BasePK createdBy) { 063 var orderPriorityControl = Session.getModelController(OrderPriorityControl.class); 064 var orderPriority = orderPriorityControl.getOrderPriorityByName(orderType, orderPriorityName); 065 066 if(orderPriority == null) { 067 orderPriority = orderPriorityControl.createOrderPriority(orderType, orderPriorityName, priority, isDefault, sortOrder, createdBy); 068 069 if(description != null) { 070 orderPriorityControl.createOrderPriorityDescription(orderPriority, language, description, createdBy); 071 } 072 } else { 073 handleExecutionError(DuplicateOrderPriorityNameException.class, eea, ExecutionErrors.DuplicateOrderPriorityName.name(), 074 orderType.getLastDetail().getOrderTypeName(), orderPriorityName); 075 } 076 077 return orderPriority; 078 } 079 080 public OrderPriority getOrderPriorityByName(final ExecutionErrorAccumulator eea, final OrderType orderType, final String orderPriorityName, 081 final EntityPermission entityPermission) { 082 var orderPriorityControl = Session.getModelController(OrderPriorityControl.class); 083 var orderPriority = orderPriorityControl.getOrderPriorityByName(orderType, orderPriorityName, entityPermission); 084 085 if(orderPriority == null) { 086 handleExecutionError(UnknownOrderPriorityNameException.class, eea, ExecutionErrors.UnknownOrderPriorityName.name(), 087 orderType.getLastDetail().getOrderTypeName(), orderPriorityName); 088 } 089 090 return orderPriority; 091 } 092 093 public OrderPriority getOrderPriorityByName(final ExecutionErrorAccumulator eea, final OrderType orderType, final String orderPriorityName) { 094 return getOrderPriorityByName(eea, orderType, orderPriorityName, EntityPermission.READ_ONLY); 095 } 096 097 public OrderPriority getOrderPriorityByNameForUpdate(final ExecutionErrorAccumulator eea, final OrderType orderType, final String orderPriorityName) { 098 return getOrderPriorityByName(eea, orderType, orderPriorityName, EntityPermission.READ_WRITE); 099 } 100 101 public OrderPriority getOrderPriorityByName(final ExecutionErrorAccumulator eea, final String orderTypeName, final String orderPriorityName, 102 final EntityPermission entityPermission) { 103 var orderType = OrderTypeLogic.getInstance().getOrderTypeByName(eea, orderTypeName); 104 OrderPriority orderPriority = null; 105 106 if(!eea.hasExecutionErrors()) { 107 orderPriority = getOrderPriorityByName(eea, orderType, orderPriorityName, entityPermission); 108 } 109 110 return orderPriority; 111 } 112 113 public OrderPriority getOrderPriorityByName(final ExecutionErrorAccumulator eea, final String orderTypeName, final String orderPriorityName) { 114 return getOrderPriorityByName(eea, orderTypeName, orderPriorityName, EntityPermission.READ_ONLY); 115 } 116 117 public OrderPriority getOrderPriorityByNameForUpdate(final ExecutionErrorAccumulator eea, final String orderTypeName, final String orderPriorityName) { 118 return getOrderPriorityByName(eea, orderTypeName, orderPriorityName, EntityPermission.READ_WRITE); 119 } 120 121 public OrderPriority getOrderPriorityByUniversalSpec(final ExecutionErrorAccumulator eea, final OrderPriorityUniversalSpec universalSpec, 122 final boolean allowDefault, final EntityPermission entityPermission) { 123 var orderPriorityControl = Session.getModelController(OrderPriorityControl.class); 124 var orderTypeName = universalSpec.getOrderTypeName(); 125 var orderPriorityName = universalSpec.getOrderPriorityName(); 126 var nameParameterCount= ParameterUtils.getInstance().countNonNullParameters(orderTypeName, orderPriorityName); 127 var possibleEntitySpecs= EntityInstanceLogic.getInstance().countPossibleEntitySpecs(universalSpec); 128 OrderPriority orderPriority = null; 129 130 if(nameParameterCount < 3 && possibleEntitySpecs == 0) { 131 OrderType orderType = null; 132 133 if(orderTypeName == null) { 134 if(allowDefault) { 135 var orderTypeControl = Session.getModelController(OrderTypeControl.class); 136 orderType = orderTypeControl.getDefaultOrderType(); 137 138 if(orderType == null) { 139 handleExecutionError(UnknownDefaultOrderTypeException.class, eea, ExecutionErrors.UnknownDefaultOrderType.name()); 140 } 141 } else { 142 handleExecutionError(InvalidParameterCountException.class, eea, ExecutionErrors.InvalidParameterCount.name()); 143 } 144 } else { 145 orderType = OrderTypeLogic.getInstance().getOrderTypeByName(eea, orderTypeName); 146 } 147 148 if(!eea.hasExecutionErrors()) { 149 if(orderPriorityName == null) { 150 if(allowDefault) { 151 orderPriority = orderPriorityControl.getDefaultOrderPriority(orderType, entityPermission); 152 153 if(orderPriority == null) { 154 handleExecutionError(UnknownDefaultOrderPriorityException.class, eea, ExecutionErrors.UnknownDefaultOrderPriority.name()); 155 } 156 } else { 157 handleExecutionError(InvalidParameterCountException.class, eea, ExecutionErrors.InvalidParameterCount.name()); 158 } 159 } else { 160 orderPriority = getOrderPriorityByName(eea, orderType, orderPriorityName, entityPermission); 161 } 162 } 163 } else if(nameParameterCount == 0 && possibleEntitySpecs == 1) { 164 var entityInstance = EntityInstanceLogic.getInstance().getEntityInstance(eea, universalSpec, 165 ComponentVendors.ECHO_THREE.name(), EntityTypes.OrderPriority.name()); 166 167 if(!eea.hasExecutionErrors()) { 168 orderPriority = orderPriorityControl.getOrderPriorityByEntityInstance(entityInstance, entityPermission); 169 } 170 } else { 171 handleExecutionError(InvalidParameterCountException.class, eea, ExecutionErrors.InvalidParameterCount.name()); 172 } 173 174 return orderPriority; 175 } 176 177 public OrderPriority getOrderPriorityByUniversalSpec(final ExecutionErrorAccumulator eea, final OrderPriorityUniversalSpec universalSpec, 178 boolean allowDefault) { 179 return getOrderPriorityByUniversalSpec(eea, universalSpec, allowDefault, EntityPermission.READ_ONLY); 180 } 181 182 public OrderPriority getOrderPriorityByUniversalSpecForUpdate(final ExecutionErrorAccumulator eea, final OrderPriorityUniversalSpec universalSpec, 183 boolean allowDefault) { 184 return getOrderPriorityByUniversalSpec(eea, universalSpec, allowDefault, EntityPermission.READ_WRITE); 185 } 186 187 public void updateOrderPriorityFromValue(final ExecutionErrorAccumulator eea, OrderPriorityDetailValue orderPriorityDetailValue, 188 BasePK updatedBy) { 189 var orderPriorityControl = Session.getModelController(OrderPriorityControl.class); 190 191 orderPriorityControl.updateOrderPriorityFromValue(orderPriorityDetailValue, updatedBy); 192 } 193 194 public void deleteOrderPriority(final ExecutionErrorAccumulator eea, final OrderPriority orderPriority, 195 final BasePK deletedBy) { 196 var orderPriorityControl = Session.getModelController(OrderPriorityControl.class); 197 198 orderPriorityControl.deleteOrderPriority(orderPriority, deletedBy); 199 } 200 201}