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.chain.server.logic; 018 019import com.echothree.control.user.chain.common.spec.ChainActionSetUniversalSpec; 020import com.echothree.model.control.chain.common.exception.UnknownChainActionSetNameException; 021import com.echothree.model.control.chain.common.exception.UnknownDefaultChainActionSetException; 022import com.echothree.model.control.chain.common.exception.UnknownDefaultChainException; 023import com.echothree.model.control.chain.common.exception.UnknownDefaultChainKindException; 024import com.echothree.model.control.chain.common.exception.UnknownDefaultChainTypeException; 025import com.echothree.model.control.chain.server.control.ChainControl; 026import com.echothree.model.control.core.common.ComponentVendors; 027import com.echothree.model.control.core.common.EntityTypes; 028import com.echothree.model.control.core.common.exception.InvalidParameterCountException; 029import com.echothree.model.control.core.server.logic.EntityInstanceLogic; 030import com.echothree.model.data.chain.server.entity.Chain; 031import com.echothree.model.data.chain.server.entity.ChainActionSet; 032import com.echothree.model.data.chain.server.entity.ChainKind; 033import com.echothree.model.data.chain.server.entity.ChainType; 034import com.echothree.util.common.message.ExecutionErrors; 035import com.echothree.util.server.control.BaseLogic; 036import com.echothree.util.server.message.ExecutionErrorAccumulator; 037import com.echothree.util.server.persistence.EntityPermission; 038import com.echothree.util.server.validation.ParameterUtils; 039import javax.enterprise.context.ApplicationScoped; 040import javax.inject.Inject; 041 042@ApplicationScoped 043public class ChainActionSetLogic 044 extends BaseLogic { 045 046 @Inject 047 ChainControl chainControl; 048 049 @Inject 050 ChainKindLogic chainKindLogic; 051 052 @Inject 053 ChainLogic chainLogic; 054 055 @Inject 056 ChainTypeLogic chainTypeLogic; 057 058 @Inject 059 EntityInstanceLogic entityInstanceLogic; 060 061 @Inject 062 ParameterUtils parameterUtils; 063 064 protected ChainActionSetLogic() { 065 super(); 066 } 067 068 public ChainActionSet getChainActionSetByName(final ExecutionErrorAccumulator eea, final Chain chain, final String chainActionSetName, 069 final EntityPermission entityPermission) { 070 var chainActionSet = chainControl.getChainActionSetByName(chain, chainActionSetName, entityPermission); 071 072 if(chainActionSet == null) { 073 handleExecutionError(UnknownChainActionSetNameException.class, eea, ExecutionErrors.UnknownChainActionSetName.name(), 074 chain.getLastDetail().getChainType().getLastDetail().getChainKind().getLastDetail().getChainKindName(), 075 chain.getLastDetail().getChainType().getLastDetail().getChainTypeName(), 076 chain.getLastDetail().getChainName(), 077 chainActionSetName); 078 } 079 080 return chainActionSet; 081 } 082 083 public ChainActionSet getChainActionSetByName(final ExecutionErrorAccumulator eea, final Chain chain, final String chainActionSetName) { 084 return getChainActionSetByName(eea, chain, chainActionSetName, EntityPermission.READ_ONLY); 085 } 086 087 public ChainActionSet getChainActionSetByNameForUpdate(final ExecutionErrorAccumulator eea, final Chain chain, final String chainActionSetName) { 088 return getChainActionSetByName(eea, chain, chainActionSetName, EntityPermission.READ_WRITE); 089 } 090 091 public ChainActionSet getChainActionSetByName(final ExecutionErrorAccumulator eea, final String chainKindName, 092 final String chainTypeName, final String chainName, final String chainActionSetName, final EntityPermission entityPermission) { 093 var chain = chainLogic.getChainByName(eea, chainKindName, chainTypeName, chainName); 094 ChainActionSet chainActionSet = null; 095 096 if(!hasExecutionErrors(eea)) { 097 chainActionSet = getChainActionSetByName(eea, chain, chainActionSetName, entityPermission); 098 } 099 100 return chainActionSet; 101 } 102 103 public ChainActionSet getChainActionSetByName(final ExecutionErrorAccumulator eea, final String chainKindName, 104 final String chainTypeName, final String chainName, final String chainActionSetName) { 105 return getChainActionSetByName(eea, chainKindName, chainTypeName, chainName, chainActionSetName, EntityPermission.READ_ONLY); 106 } 107 108 public ChainActionSet getChainActionSetByNameForUpdate(final ExecutionErrorAccumulator eea, final String chainKindName, 109 final String chainTypeName, final String chainName, final String chainActionSetName) { 110 return getChainActionSetByName(eea, chainKindName, chainTypeName, chainName, chainActionSetName, EntityPermission.READ_WRITE); 111 } 112 113 public ChainActionSet getChainActionSetByUniversalSpec(final ExecutionErrorAccumulator eea, 114 final ChainActionSetUniversalSpec universalSpec, final boolean allowDefault, final EntityPermission entityPermission) { 115 var chainKindName = universalSpec.getChainKindName(); 116 var chainTypeName = universalSpec.getChainTypeName(); 117 var chainName = universalSpec.getChainName(); 118 var chainActionSetName = universalSpec.getChainActionSetName(); 119 var nameParameterCount = parameterUtils.countNonNullParameters(chainKindName, chainTypeName, chainName, chainActionSetName); 120 var possibleEntitySpecs = entityInstanceLogic.countPossibleEntitySpecs(universalSpec); 121 ChainActionSet chainActionSet = null; 122 123 if(nameParameterCount != 0 && possibleEntitySpecs == 0) { 124 ChainKind chainKind = null; 125 ChainType chainType = null; 126 Chain chain = null; 127 128 if(chainKindName == null) { 129 if(allowDefault) { 130 chainKind = chainControl.getDefaultChainKind(); 131 132 if(chainKind == null) { 133 handleExecutionError(UnknownDefaultChainKindException.class, eea, ExecutionErrors.UnknownDefaultChainKind.name()); 134 } 135 } else { 136 handleExecutionError(InvalidParameterCountException.class, eea, ExecutionErrors.InvalidParameterCount.name()); 137 } 138 } else { 139 chainKind = chainKindLogic.getChainKindByName(eea, chainKindName); 140 } 141 142 if(!eea.hasExecutionErrors()) { 143 if(chainTypeName == null) { 144 if(allowDefault) { 145 chainType = chainControl.getDefaultChainType(chainKind); 146 147 if(chainType == null) { 148 handleExecutionError(UnknownDefaultChainTypeException.class, eea, ExecutionErrors.UnknownDefaultChainType.name(), 149 chainKind.getLastDetail().getChainKindName()); 150 } 151 } else { 152 handleExecutionError(InvalidParameterCountException.class, eea, ExecutionErrors.InvalidParameterCount.name()); 153 } 154 } else { 155 chainType = chainTypeLogic.getChainTypeByName(eea, chainKind, chainTypeName); 156 } 157 } 158 159 if(!eea.hasExecutionErrors()) { 160 if(chainName == null) { 161 if(allowDefault) { 162 chain = chainControl.getDefaultChain(chainType, entityPermission); 163 164 if(chain == null) { 165 handleExecutionError(UnknownDefaultChainException.class, eea, ExecutionErrors.UnknownDefaultChain.name(), 166 chainKind.getLastDetail().getChainKindName(), 167 chainType.getLastDetail().getChainTypeName()); 168 } 169 } else { 170 handleExecutionError(InvalidParameterCountException.class, eea, ExecutionErrors.InvalidParameterCount.name()); 171 } 172 } else { 173 chain = chainLogic.getChainByName(eea, chainType, chainName, entityPermission); 174 } 175 } 176 177 if(!eea.hasExecutionErrors()) { 178 if(chainActionSetName == null) { 179 if(allowDefault) { 180 chainActionSet = chainControl.getDefaultChainActionSet(chain, entityPermission); 181 182 if(chainActionSet == null) { 183 handleExecutionError(UnknownDefaultChainActionSetException.class, eea, ExecutionErrors.UnknownDefaultChainActionSet.name(), 184 chain.getLastDetail().getChainType().getLastDetail().getChainKind().getLastDetail().getChainKindName(), 185 chain.getLastDetail().getChainType().getLastDetail().getChainTypeName(), 186 chain.getLastDetail().getChainName()); 187 } 188 } else { 189 handleExecutionError(InvalidParameterCountException.class, eea, ExecutionErrors.InvalidParameterCount.name()); 190 } 191 } else { 192 chainActionSet = getChainActionSetByName(eea, chain, chainActionSetName, entityPermission); 193 } 194 } 195 } else if(nameParameterCount == 0 && possibleEntitySpecs == 1) { 196 var entityInstance = entityInstanceLogic.getEntityInstance(eea, universalSpec, 197 ComponentVendors.ECHO_THREE.name(), EntityTypes.ChainActionSet.name()); 198 199 if(!eea.hasExecutionErrors()) { 200 chainActionSet = chainControl.getChainActionSetByEntityInstance(entityInstance, entityPermission); 201 } 202 } else { 203 handleExecutionError(InvalidParameterCountException.class, eea, ExecutionErrors.InvalidParameterCount.name()); 204 } 205 206 return chainActionSet; 207 } 208 209 public ChainActionSet getChainActionSetByUniversalSpec(final ExecutionErrorAccumulator eea, 210 final ChainActionSetUniversalSpec universalSpec, final boolean allowDefault) { 211 return getChainActionSetByUniversalSpec(eea, universalSpec, allowDefault, EntityPermission.READ_ONLY); 212 } 213 214 public ChainActionSet getChainActionSetByUniversalSpecForUpdate(final ExecutionErrorAccumulator eea, 215 final ChainActionSetUniversalSpec universalSpec, final boolean allowDefault) { 216 return getChainActionSetByUniversalSpec(eea, universalSpec, allowDefault, EntityPermission.READ_WRITE); 217 } 218 219}