001// -------------------------------------------------------------------------------- 002// Copyright 2002-2026 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.wishlist.server.logic; 018 019import com.echothree.control.user.wishlist.common.spec.WishlistPriorityUniversalSpec; 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.wishlist.common.exception.DuplicateWishlistPriorityNameException; 025import com.echothree.model.control.wishlist.common.exception.UnknownDefaultWishlistPriorityException; 026import com.echothree.model.control.wishlist.common.exception.UnknownDefaultWishlistTypeException; 027import com.echothree.model.control.wishlist.common.exception.UnknownWishlistPriorityNameException; 028import com.echothree.model.control.wishlist.server.control.WishlistControl; 029import com.echothree.model.data.party.server.entity.Language; 030import com.echothree.model.data.wishlist.server.entity.WishlistPriority; 031import com.echothree.model.data.wishlist.server.entity.WishlistType; 032import com.echothree.util.common.message.ExecutionErrors; 033import com.echothree.util.common.persistence.BasePK; 034import com.echothree.util.server.control.BaseLogic; 035import com.echothree.util.server.message.ExecutionErrorAccumulator; 036import com.echothree.util.server.persistence.EntityPermission; 037import com.echothree.util.server.validation.ParameterUtils; 038import javax.enterprise.context.ApplicationScoped; 039import javax.enterprise.inject.spi.CDI; 040import javax.inject.Inject; 041 042@ApplicationScoped 043public class WishlistPriorityLogic 044 extends BaseLogic { 045 046 @Inject 047 WishlistControl wishlistControl; 048 049 @Inject 050 EntityInstanceLogic entityInstanceLogic; 051 052 @Inject 053 WishlistTypeLogic wishlistTypeLogic; 054 055 protected WishlistPriorityLogic() { 056 super(); 057 } 058 059 public static WishlistPriorityLogic getInstance() { 060 return CDI.current().select(WishlistPriorityLogic.class).get(); 061 } 062 063 public WishlistPriority createWishlistPriority(final ExecutionErrorAccumulator eea, final String wishlistTypeName, final String wishlistPriorityName, 064 final Boolean isDefault, final Integer sortOrder, final Language language, final String description, final BasePK createdBy) { 065 var wishlistType = wishlistTypeLogic.getWishlistTypeByName(eea, wishlistTypeName); 066 WishlistPriority wishlistPriority = null; 067 068 if(eea == null || !eea.hasExecutionErrors()) { 069 wishlistPriority = createWishlistPriority(eea, wishlistType, wishlistPriorityName, isDefault, sortOrder, language, description, createdBy); 070 } 071 072 return wishlistPriority; 073 } 074 075 public WishlistPriority createWishlistPriority(final ExecutionErrorAccumulator eea, final WishlistType wishlistType, final String wishlistPriorityName, 076 final Boolean isDefault, final Integer sortOrder, final Language language, final String description, final BasePK createdBy) { 077 var wishlistPriority = wishlistControl.getWishlistPriorityByName(wishlistType, wishlistPriorityName); 078 079 if(wishlistPriority == null) { 080 wishlistPriority = wishlistControl.createWishlistPriority(wishlistType, wishlistPriorityName, isDefault, sortOrder, createdBy); 081 082 if(description != null) { 083 wishlistControl.createWishlistPriorityDescription(wishlistPriority, language, description, createdBy); 084 } 085 } else { 086 handleExecutionError(DuplicateWishlistPriorityNameException.class, eea, ExecutionErrors.DuplicateWishlistPriorityName.name(), 087 wishlistType.getLastDetail().getWishlistTypeName(), wishlistPriorityName); 088 } 089 090 return wishlistPriority; 091 } 092 093 public WishlistPriority getWishlistPriorityByName(final ExecutionErrorAccumulator eea, final WishlistType wishlistType, final String wishlistPriorityName, 094 final EntityPermission entityPermission) { 095 var wishlistPriority = wishlistControl.getWishlistPriorityByName(wishlistType, wishlistPriorityName, entityPermission); 096 097 if(wishlistPriority == null) { 098 handleExecutionError(UnknownWishlistPriorityNameException.class, eea, ExecutionErrors.UnknownWishlistPriorityName.name(), 099 wishlistType.getLastDetail().getWishlistTypeName(), wishlistPriorityName); 100 } 101 102 return wishlistPriority; 103 } 104 105 public WishlistPriority getWishlistPriorityByName(final ExecutionErrorAccumulator eea, final WishlistType wishlistType, final String wishlistPriorityName) { 106 return getWishlistPriorityByName(eea, wishlistType, wishlistPriorityName, EntityPermission.READ_ONLY); 107 } 108 109 public WishlistPriority getWishlistPriorityByNameForUpdate(final ExecutionErrorAccumulator eea, final WishlistType wishlistType, final String wishlistPriorityName) { 110 return getWishlistPriorityByName(eea, wishlistType, wishlistPriorityName, EntityPermission.READ_WRITE); 111 } 112 113 public WishlistPriority getWishlistPriorityByName(final ExecutionErrorAccumulator eea, final String wishlistTypeName, final String wishlistPriorityName, 114 final EntityPermission entityPermission) { 115 var wishlistType = wishlistTypeLogic.getWishlistTypeByName(eea, wishlistTypeName); 116 WishlistPriority wishlistPriority = null; 117 118 if(eea == null || !eea.hasExecutionErrors()) { 119 wishlistPriority = getWishlistPriorityByName(eea, wishlistType, wishlistPriorityName, entityPermission); 120 } 121 122 return wishlistPriority; 123 } 124 125 public WishlistPriority getWishlistPriorityByName(final ExecutionErrorAccumulator eea, final String wishlistTypeName, final String wishlistPriorityName) { 126 return getWishlistPriorityByName(eea, wishlistTypeName, wishlistPriorityName, EntityPermission.READ_ONLY); 127 } 128 129 public WishlistPriority getWishlistPriorityByNameForUpdate(final ExecutionErrorAccumulator eea, final String wishlistTypeName, final String wishlistPriorityName) { 130 return getWishlistPriorityByName(eea, wishlistTypeName, wishlistPriorityName, EntityPermission.READ_WRITE); 131 } 132 133 public WishlistPriority getWishlistPriorityByUniversalSpec(final ExecutionErrorAccumulator eea, final WishlistPriorityUniversalSpec universalSpec, 134 final boolean allowDefault, final EntityPermission entityPermission) { 135 var wishlistTypeName = universalSpec.getWishlistTypeName(); 136 var wishlistPriorityName = universalSpec.getWishlistPriorityName(); 137 var nameParameterCount= ParameterUtils.getInstance().countNonNullParameters(wishlistTypeName, wishlistPriorityName); 138 var possibleEntitySpecs= entityInstanceLogic.countPossibleEntitySpecs(universalSpec); 139 WishlistPriority wishlistPriority = null; 140 141 if(nameParameterCount < 3 && possibleEntitySpecs == 0) { 142 WishlistType wishlistType = null; 143 144 if(wishlistTypeName == null) { 145 if(allowDefault) { 146 wishlistType = wishlistControl.getDefaultWishlistType(); 147 148 if(wishlistType == null) { 149 handleExecutionError(UnknownDefaultWishlistTypeException.class, eea, ExecutionErrors.UnknownDefaultWishlistType.name()); 150 } 151 } else { 152 handleExecutionError(InvalidParameterCountException.class, eea, ExecutionErrors.InvalidParameterCount.name()); 153 } 154 } else { 155 wishlistType = wishlistTypeLogic.getWishlistTypeByName(eea, wishlistTypeName); 156 } 157 158 if(eea == null || !eea.hasExecutionErrors()) { 159 if(wishlistPriorityName == null) { 160 if(allowDefault) { 161 wishlistPriority = wishlistControl.getDefaultWishlistPriority(wishlistType, entityPermission); 162 163 if(wishlistPriority == null) { 164 handleExecutionError(UnknownDefaultWishlistPriorityException.class, eea, ExecutionErrors.UnknownDefaultWishlistPriority.name()); 165 } 166 } else { 167 handleExecutionError(InvalidParameterCountException.class, eea, ExecutionErrors.InvalidParameterCount.name()); 168 } 169 } else { 170 wishlistPriority = getWishlistPriorityByName(eea, wishlistType, wishlistPriorityName, entityPermission); 171 } 172 } 173 } else if(nameParameterCount == 0 && possibleEntitySpecs == 1) { 174 var entityInstance = entityInstanceLogic.getEntityInstance(eea, universalSpec, 175 ComponentVendors.ECHO_THREE.name(), EntityTypes.WishlistPriority.name()); 176 177 if(eea == null || !eea.hasExecutionErrors()) { 178 wishlistPriority = wishlistControl.getWishlistPriorityByEntityInstance(entityInstance, entityPermission); 179 } 180 } else { 181 handleExecutionError(InvalidParameterCountException.class, eea, ExecutionErrors.InvalidParameterCount.name()); 182 } 183 184 return wishlistPriority; 185 } 186 187 public WishlistPriority getWishlistPriorityByUniversalSpec(final ExecutionErrorAccumulator eea, final WishlistPriorityUniversalSpec universalSpec, 188 boolean allowDefault) { 189 return getWishlistPriorityByUniversalSpec(eea, universalSpec, allowDefault, EntityPermission.READ_ONLY); 190 } 191 192 public WishlistPriority getWishlistPriorityByUniversalSpecForUpdate(final ExecutionErrorAccumulator eea, final WishlistPriorityUniversalSpec universalSpec, 193 boolean allowDefault) { 194 return getWishlistPriorityByUniversalSpec(eea, universalSpec, allowDefault, EntityPermission.READ_WRITE); 195 } 196 197 public void deleteWishlistPriority(final ExecutionErrorAccumulator eea, final WishlistPriority wishlistPriority, 198 final BasePK deletedBy) { 199 wishlistControl.deleteWishlistPriority(wishlistPriority, deletedBy); 200 } 201 202}