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.core.server.logic; 018 019import com.echothree.control.user.core.common.spec.EntityAttributeGroupUniversalSpec; 020import com.echothree.model.control.core.common.ComponentVendors; 021import com.echothree.model.control.core.common.EntityTypes; 022import com.echothree.model.control.core.common.exception.DuplicateEntityAttributeGroupNameException; 023import com.echothree.model.control.core.common.exception.InvalidParameterCountException; 024import com.echothree.model.control.core.common.exception.UnknownEntityAttributeGroupNameException; 025import com.echothree.model.control.core.server.control.EntityAttributeGroupControl; 026import com.echothree.model.control.sequence.common.SequenceTypes; 027import com.echothree.model.control.sequence.server.control.SequenceControl; 028import com.echothree.model.control.sequence.server.logic.SequenceGeneratorLogic; 029import com.echothree.model.data.core.server.entity.EntityAttributeGroup; 030import com.echothree.model.data.core.server.entity.EntityType; 031import com.echothree.model.data.party.server.entity.Language; 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 javax.enterprise.context.ApplicationScoped; 038import javax.inject.Inject; 039 040@ApplicationScoped 041public class EntityAttributeGroupLogic 042 extends BaseLogic { 043 044 @Inject 045 protected EntityAttributeGroupControl entityAttributeGroupControl; 046 047 @Inject 048 protected SequenceControl sequenceControl; 049 050 @Inject 051 protected EntityInstanceLogic entityInstanceLogic; 052 053 @Inject 054 protected EntityTypeLogic entityTypeLogic; 055 056 @Inject 057 protected SequenceGeneratorLogic sequenceGeneratorLogic; 058 059 protected EntityAttributeGroupLogic() { 060 super(); 061 } 062 063 public EntityAttributeGroup createEntityAttributeGroup(final ExecutionErrorAccumulator eea, final EntityType entityType, String entityAttributeGroupName, 064 final Boolean isDefault, final Integer sortOrder, final String description, final Language language, final BasePK createdBy) { 065 if(entityAttributeGroupName == null) { 066 var sequence = sequenceControl.getDefaultSequenceUsingNames(SequenceTypes.ENTITY_ATTRIBUTE_GROUP.name()); 067 068 entityAttributeGroupName = sequenceGeneratorLogic.getNextSequenceValue(sequence); 069 } 070 071 var entityAttributeGroup = entityAttributeGroupControl.getEntityAttributeGroupByName(entityType, entityAttributeGroupName); 072 073 if(entityAttributeGroup == null) { 074 entityAttributeGroup = entityAttributeGroupControl.createEntityAttributeGroup(entityType, entityAttributeGroupName, isDefault, sortOrder, createdBy); 075 076 if(description != null) { 077 entityAttributeGroupControl.createEntityAttributeGroupDescription(entityAttributeGroup, language, description, createdBy); 078 } 079 } else { 080 handleExecutionError(DuplicateEntityAttributeGroupNameException.class, eea, ExecutionErrors.DuplicateEntityAttributeGroupName.name(), 081 entityType.getLastDetail().getComponentVendor().getLastDetail().getComponentVendorName(), 082 entityType.getLastDetail().getEntityTypeName(), entityAttributeGroupName); 083 } 084 085 return entityAttributeGroup; 086 } 087 088 public EntityAttributeGroup getEntityAttributeGroupByName(final ExecutionErrorAccumulator eea, final EntityType entityType, final String entityAttributeGroupName, 089 final EntityPermission entityPermission) { 090 var entityAttributeGroup = entityAttributeGroupControl.getEntityAttributeGroupByName(entityType, entityAttributeGroupName, entityPermission); 091 092 if(entityAttributeGroup == null) { 093 handleExecutionError(UnknownEntityAttributeGroupNameException.class, eea, ExecutionErrors.UnknownEntityAttributeGroupName.name(), 094 entityType.getLastDetail().getComponentVendor().getLastDetail().getComponentVendorName(), 095 entityType.getLastDetail().getEntityTypeName(), entityAttributeGroupName); 096 } 097 098 return entityAttributeGroup; 099 } 100 101 public EntityAttributeGroup getEntityAttributeGroupByName(final ExecutionErrorAccumulator eea, final EntityType entityType, final String entityAttributeGroupName) { 102 return getEntityAttributeGroupByName(eea, entityType, entityAttributeGroupName, EntityPermission.READ_ONLY); 103 } 104 105 public EntityAttributeGroup getEntityAttributeGroupByNameForUpdate(final ExecutionErrorAccumulator eea, final EntityType entityType, final String entityAttributeGroupName) { 106 return getEntityAttributeGroupByName(eea, entityType, entityAttributeGroupName, EntityPermission.READ_WRITE); 107 } 108 109 public EntityAttributeGroup getEntityAttributeGroupByName(final ExecutionErrorAccumulator eea, 110 final String componentVendorName, final String entityTypeName, final String entityAttributeGroupName, 111 final EntityPermission entityPermission) { 112 var entityType = entityTypeLogic.getEntityTypeByName(eea, componentVendorName, entityTypeName); 113 114 return hasExecutionErrors(eea) ? null : getEntityAttributeGroupByName(eea, entityType, entityAttributeGroupName, entityPermission); 115 } 116 117 public EntityAttributeGroup getEntityAttributeGroupByName(final ExecutionErrorAccumulator eea, 118 final String componentVendorName, final String entityTypeName, final String entityAttributeGroupName) { 119 return getEntityAttributeGroupByName(eea, componentVendorName, entityTypeName, entityAttributeGroupName, EntityPermission.READ_ONLY); 120 } 121 122 public EntityAttributeGroup getEntityAttributeGroupByUniversalSpec(final ExecutionErrorAccumulator eea, 123 final EntityAttributeGroupUniversalSpec universalSpec, final EntityPermission entityPermission) { 124 EntityAttributeGroup entityAttributeGroup = null; 125 var entityAttributeGroupName = universalSpec.getEntityAttributeGroupName(); 126 var componentVendorName = universalSpec.getComponentVendorName(); 127 var entityTypeName = universalSpec.getEntityTypeName(); 128 var nameCount = (componentVendorName == null ? 0 : 1) + (entityTypeName == null ? 0 : 1) 129 + (entityAttributeGroupName == null ? 0 : 1); 130 if(nameCount != 0 && nameCount != 3) { 131 handleExecutionError(InvalidParameterCountException.class, eea, ExecutionErrors.InvalidParameterCount.name()); 132 return null; 133 } 134 var parameterCount = (nameCount == 3 ? 1 : 0) + entityInstanceLogic.countPossibleEntitySpecs(universalSpec); 135 136 switch(parameterCount) { 137 case 1 -> { 138 if(entityAttributeGroupName == null) { 139 var entityInstance = entityInstanceLogic.getEntityInstance(eea, universalSpec, 140 ComponentVendors.ECHO_THREE.name(), EntityTypes.EntityAttributeGroup.name()); 141 142 if(eea == null || !eea.hasExecutionErrors()) { 143 entityAttributeGroup = entityAttributeGroupControl.getEntityAttributeGroupByEntityInstance(entityInstance, entityPermission); 144 } 145 } else { 146 entityAttributeGroup = getEntityAttributeGroupByName(eea, componentVendorName, entityTypeName, entityAttributeGroupName, entityPermission); 147 } 148 } 149 default -> 150 handleExecutionError(InvalidParameterCountException.class, eea, ExecutionErrors.InvalidParameterCount.name()); 151 } 152 153 return entityAttributeGroup; 154 } 155 156 public EntityAttributeGroup getEntityAttributeGroupByUniversalSpec(final ExecutionErrorAccumulator eea, 157 final EntityAttributeGroupUniversalSpec universalSpec) { 158 return getEntityAttributeGroupByUniversalSpec(eea, universalSpec, EntityPermission.READ_ONLY); 159 } 160 161 public EntityAttributeGroup getEntityAttributeGroupByUniversalSpecForUpdate(final ExecutionErrorAccumulator eea, 162 final EntityAttributeGroupUniversalSpec universalSpec) { 163 return getEntityAttributeGroupByUniversalSpec(eea, universalSpec, EntityPermission.READ_WRITE); 164 } 165 166}