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.core.server.logic; 018 019import com.echothree.control.user.core.common.edit.EntityListItemAttributeEdit; 020import com.echothree.control.user.core.common.spec.EntityAttributeSpec; 021import com.echothree.control.user.core.common.spec.EntityAttributeUlid; 022import com.echothree.control.user.core.common.spec.EntityAttributeUniversalSpec; 023import com.echothree.control.user.core.common.spec.EntityListItemUlid; 024import com.echothree.control.user.core.common.spec.EntityListItemUniversalSpec; 025import com.echothree.model.control.core.common.ComponentVendors; 026import com.echothree.model.control.core.common.EntityAttributeTypes; 027import com.echothree.model.control.core.common.EntityTypes; 028import com.echothree.model.control.core.common.exception.DuplicateEntityAttributeNameException; 029import com.echothree.model.control.core.common.exception.DuplicateEntityBooleanAttributeException; 030import com.echothree.model.control.core.common.exception.DuplicateEntityClobAttributeException; 031import com.echothree.model.control.core.common.exception.DuplicateEntityDateAttributeException; 032import com.echothree.model.control.core.common.exception.DuplicateEntityIntegerAttributeException; 033import com.echothree.model.control.core.common.exception.DuplicateEntityListItemAttributeException; 034import com.echothree.model.control.core.common.exception.DuplicateEntityListItemNameException; 035import com.echothree.model.control.core.common.exception.DuplicateEntityLongAttributeException; 036import com.echothree.model.control.core.common.exception.DuplicateEntityMultipleListItemAttributeException; 037import com.echothree.model.control.core.common.exception.DuplicateEntityNameAttributeException; 038import com.echothree.model.control.core.common.exception.DuplicateEntityStringAttributeException; 039import com.echothree.model.control.core.common.exception.DuplicateEntityTimeAttributeException; 040import com.echothree.model.control.core.common.exception.EntityTypeIsNotExtensibleException; 041import com.echothree.model.control.core.common.exception.InvalidEntityAttributeTypeException; 042import com.echothree.model.control.core.common.exception.InvalidParameterCountException; 043import com.echothree.model.control.core.common.exception.InvalidStringAttributeException; 044import com.echothree.model.control.core.common.exception.LowerRangeExceededException; 045import com.echothree.model.control.core.common.exception.MismatchedEntityAttributeTypeException; 046import com.echothree.model.control.core.common.exception.MismatchedEntityListItemException; 047import com.echothree.model.control.core.common.exception.MismatchedEntityTypeException; 048import com.echothree.model.control.core.common.exception.UnknownEntityAttributeGroupNameException; 049import com.echothree.model.control.core.common.exception.UnknownEntityAttributeNameException; 050import com.echothree.model.control.core.common.exception.UnknownEntityAttributeTypeNameException; 051import com.echothree.model.control.core.common.exception.UnknownEntityListItemNameException; 052import com.echothree.model.control.core.common.exception.UpperRangeExceededException; 053import com.echothree.model.control.core.server.control.CoreControl; 054import com.echothree.model.control.core.server.database.EntityInstanceResult; 055import com.echothree.model.control.core.server.database.EntityInstancesByBlobEntityAttributeQuery; 056import com.echothree.model.control.core.server.database.EntityInstancesByBooleanEntityAttributeQuery; 057import com.echothree.model.control.core.server.database.EntityInstancesByClobEntityAttributeQuery; 058import com.echothree.model.control.core.server.database.EntityInstancesByCollectionEntityAttributeQuery; 059import com.echothree.model.control.core.server.database.EntityInstancesByDateEntityAttributeQuery; 060import com.echothree.model.control.core.server.database.EntityInstancesByEntityEntityAttributeQuery; 061import com.echothree.model.control.core.server.database.EntityInstancesByGeoPointEntityAttributeQuery; 062import com.echothree.model.control.core.server.database.EntityInstancesByIntegerEntityAttributeQuery; 063import com.echothree.model.control.core.server.database.EntityInstancesByListItemEntityAttributeQuery; 064import com.echothree.model.control.core.server.database.EntityInstancesByLongEntityAttributeQuery; 065import com.echothree.model.control.core.server.database.EntityInstancesByMultipleListItemEntityAttributeQuery; 066import com.echothree.model.control.core.server.database.EntityInstancesByNameEntityAttributeQuery; 067import com.echothree.model.control.core.server.database.EntityInstancesByStringEntityAttributeQuery; 068import com.echothree.model.control.core.server.database.EntityInstancesByTimeEntityAttributeQuery; 069import com.echothree.model.control.index.server.control.IndexControl; 070import com.echothree.model.control.queue.common.QueueTypes; 071import com.echothree.model.control.queue.server.control.QueueControl; 072import com.echothree.model.control.queue.server.logic.QueueTypeLogic; 073import com.echothree.model.control.sequence.common.SequenceTypes; 074import com.echothree.model.control.sequence.common.exception.MissingDefaultSequenceException; 075import com.echothree.model.control.sequence.server.control.SequenceControl; 076import com.echothree.model.control.sequence.server.logic.SequenceGeneratorLogic; 077import com.echothree.model.data.core.server.entity.ComponentVendor; 078import com.echothree.model.data.core.server.entity.EntityAttribute; 079import com.echothree.model.data.core.server.entity.EntityAttributeDetail; 080import com.echothree.model.data.core.server.entity.EntityAttributeGroup; 081import com.echothree.model.data.core.server.entity.EntityAttributeInteger; 082import com.echothree.model.data.core.server.entity.EntityAttributeListItem; 083import com.echothree.model.data.core.server.entity.EntityAttributeLong; 084import com.echothree.model.data.core.server.entity.EntityAttributeString; 085import com.echothree.model.data.core.server.entity.EntityAttributeType; 086import com.echothree.model.data.core.server.entity.EntityBooleanAttribute; 087import com.echothree.model.data.core.server.entity.EntityClobAttribute; 088import com.echothree.model.data.core.server.entity.EntityDateAttribute; 089import com.echothree.model.data.core.server.entity.EntityInstance; 090import com.echothree.model.data.core.server.entity.EntityIntegerAttribute; 091import com.echothree.model.data.core.server.entity.EntityListItem; 092import com.echothree.model.data.core.server.entity.EntityListItemAttribute; 093import com.echothree.model.data.core.server.entity.EntityLongAttribute; 094import com.echothree.model.data.core.server.entity.EntityMultipleListItemAttribute; 095import com.echothree.model.data.core.server.entity.EntityNameAttribute; 096import com.echothree.model.data.core.server.entity.EntityStringAttribute; 097import com.echothree.model.data.core.server.entity.EntityTimeAttribute; 098import com.echothree.model.data.core.server.entity.EntityType; 099import com.echothree.model.data.core.server.entity.EntityTypeDetail; 100import com.echothree.model.data.core.server.entity.MimeType; 101import com.echothree.model.data.core.server.value.EntityAttributeDetailValue; 102import com.echothree.model.data.core.server.value.EntityListItemDetailValue; 103import com.echothree.model.data.party.common.pk.PartyPK; 104import com.echothree.model.data.party.server.entity.Language; 105import com.echothree.model.data.queue.common.pk.QueueTypePK; 106import com.echothree.model.data.queue.server.value.QueuedEntityValue; 107import com.echothree.model.data.sequence.server.entity.Sequence; 108import com.echothree.model.data.uom.server.entity.UnitOfMeasureType; 109import com.echothree.util.common.message.ExecutionErrors; 110import com.echothree.util.common.persistence.BasePK; 111import com.echothree.util.server.control.BaseLogic; 112import com.echothree.util.server.message.ExecutionErrorAccumulator; 113import com.echothree.util.server.persistence.EntityPermission; 114import com.echothree.util.server.persistence.Session; 115import java.util.ArrayList; 116import java.util.List; 117import java.util.regex.Matcher; 118import java.util.regex.Pattern; 119 120public class EntityAttributeLogic 121 extends BaseLogic { 122 123 private EntityAttributeLogic() { 124 super(); 125 } 126 127 private static class EntityAttributeLogicHolder { 128 static EntityAttributeLogic instance = new EntityAttributeLogic(); 129 } 130 131 public static EntityAttributeLogic getInstance() { 132 return EntityAttributeLogicHolder.instance; 133 } 134 135 public EntityAttributeType getEntityAttributeTypeByName(final ExecutionErrorAccumulator eea, final String entityAttributeTypeName) { 136 var coreControl = Session.getModelController(CoreControl.class); 137 EntityAttributeType entityAttributeType = coreControl.getEntityAttributeTypeByName(entityAttributeTypeName); 138 139 if(entityAttributeType == null) { 140 handleExecutionError(UnknownEntityAttributeTypeNameException.class, eea, ExecutionErrors.UnknownEntityAttributeTypeName.name(), entityAttributeTypeName); 141 } 142 143 return entityAttributeType; 144 } 145 146 public EntityAttributeType getEntityAttributeTypeByUlid(final ExecutionErrorAccumulator eea, final String ulid, final EntityPermission entityPermission) { 147 EntityAttributeType entityAttributeType = null; 148 149 var entityInstance = EntityInstanceLogic.getInstance().getEntityInstance(eea, (String)null, null, null, ulid, 150 ComponentVendors.ECHO_THREE.name(), EntityTypes.EntityAttributeType.name()); 151 152 if(eea == null || !eea.hasExecutionErrors()) { 153 var coreControl = Session.getModelController(CoreControl.class); 154 155 entityAttributeType = coreControl.getEntityAttributeTypeByEntityInstance(entityInstance, entityPermission); 156 } 157 158 return entityAttributeType; 159 } 160 161 public EntityAttributeType getEntityAttributeTypeByUlid(final ExecutionErrorAccumulator eea, final String ulid) { 162 return getEntityAttributeTypeByUlid(eea, ulid, EntityPermission.READ_ONLY); 163 } 164 165 public EntityAttributeType getEntityAttributeTypeByUlidForUpdate(final ExecutionErrorAccumulator eea, final String ulid) { 166 return getEntityAttributeTypeByUlid(eea, ulid, EntityPermission.READ_WRITE); 167 } 168 169 public EntityAttributeGroup getEntityAttributeGroupByName(final ExecutionErrorAccumulator eea, final String entityAttributeGroupName) { 170 var coreControl = Session.getModelController(CoreControl.class); 171 EntityAttributeGroup entityAttributeGroup = coreControl.getEntityAttributeGroupByName(entityAttributeGroupName); 172 173 if(entityAttributeGroup == null) { 174 handleExecutionError(UnknownEntityAttributeGroupNameException.class, eea, ExecutionErrors.UnknownEntityAttributeGroupName.name(), 175 entityAttributeGroupName); 176 } 177 178 return entityAttributeGroup; 179 } 180 181 public EntityAttributeGroup getEntityAttributeGroupByUlid(final ExecutionErrorAccumulator eea, final String ulid, final EntityPermission entityPermission) { 182 EntityAttributeGroup entityAttributeGroup = null; 183 184 var entityInstance = EntityInstanceLogic.getInstance().getEntityInstance(eea, (String)null, null, null, ulid, 185 ComponentVendors.ECHO_THREE.name(), EntityTypes.EntityAttributeGroup.name()); 186 187 if(eea == null || !eea.hasExecutionErrors()) { 188 var coreControl = Session.getModelController(CoreControl.class); 189 190 entityAttributeGroup = coreControl.getEntityAttributeGroupByEntityInstance(entityInstance, entityPermission); 191 } 192 193 return entityAttributeGroup; 194 } 195 196 public EntityAttributeGroup getEntityAttributeGroupByUlid(final ExecutionErrorAccumulator eea, final String ulid) { 197 return getEntityAttributeGroupByUlid(eea, ulid, EntityPermission.READ_ONLY); 198 } 199 200 public EntityAttributeGroup getEntityAttributeGroupByUlidForUpdate(final ExecutionErrorAccumulator eea, final String ulid) { 201 return getEntityAttributeGroupByUlid(eea, ulid, EntityPermission.READ_WRITE); 202 } 203 204 public EntityAttribute createEntityAttribute(final ExecutionErrorAccumulator eea, final EntityType entityType, 205 String entityAttributeName, final EntityAttributeType entityAttributeType, final Boolean trackRevisions, 206 final Boolean checkContentWebAddress, final String validationPattern, final Integer upperRangeIntegerValue, 207 final Integer upperLimitIntegerValue, final Integer lowerLimitIntegerValue, final Integer lowerRangeIntegerValue, 208 final Long upperRangeLongValue, final Long upperLimitLongValue, final Long lowerLimitLongValue, 209 final Long lowerRangeLongValue, final Sequence entityListItemSequence, final UnitOfMeasureType unitOfMeasureType, 210 final Integer sortOrder, final BasePK createdBy, final Language language, final String description) { 211 EntityAttribute entityAttribute = null; 212 var entityTypeDetail = entityType.getLastDetail(); 213 214 if(entityTypeDetail.getIsExtensible()) { 215 var coreControl = Session.getModelController(CoreControl.class); 216 217 if(entityAttributeName == null) { 218 var sequenceControl = Session.getModelController(SequenceControl.class); 219 var sequence = sequenceControl.getDefaultSequenceUsingNames(SequenceTypes.ENTITY_ATTRIBUTE.name()); 220 221 entityAttributeName = SequenceGeneratorLogic.getInstance().getNextSequenceValue(sequence); 222 } 223 224 entityAttribute = coreControl.getEntityAttributeByName(entityType, entityAttributeName); 225 226 if(entityAttribute == null) { 227 entityAttribute = coreControl.createEntityAttribute(entityType, entityAttributeName, entityAttributeType, 228 trackRevisions, sortOrder, createdBy); 229 230 if(description != null) { 231 coreControl.createEntityAttributeDescription(entityAttribute, language, description, createdBy); 232 } 233 234 switch(EntityAttributeTypes.valueOf(entityAttributeType.getEntityAttributeTypeName())) { 235 case BLOB -> 236 coreControl.createEntityAttributeBlob(entityAttribute, checkContentWebAddress, createdBy); 237 case STRING -> { 238 if(validationPattern != null) { 239 coreControl.createEntityAttributeString(entityAttribute, validationPattern, createdBy); 240 } 241 } 242 case INTEGER -> { 243 if(upperRangeIntegerValue != null || upperLimitIntegerValue != null || lowerLimitIntegerValue != null || lowerRangeIntegerValue != null) { 244 coreControl.createEntityAttributeInteger(entityAttribute, upperRangeIntegerValue, upperLimitIntegerValue, 245 lowerLimitIntegerValue, lowerRangeIntegerValue, createdBy); 246 } 247 if(unitOfMeasureType != null) { 248 coreControl.createEntityAttributeNumeric(entityAttribute, unitOfMeasureType, createdBy); 249 } 250 } 251 case LONG -> { 252 if(upperRangeLongValue != null || upperLimitLongValue != null || lowerLimitLongValue != null || lowerRangeLongValue != null) { 253 coreControl.createEntityAttributeLong(entityAttribute, upperRangeLongValue, upperLimitLongValue, 254 lowerLimitLongValue, lowerRangeLongValue, createdBy); 255 } 256 if(unitOfMeasureType != null) { 257 coreControl.createEntityAttributeNumeric(entityAttribute, unitOfMeasureType, createdBy); 258 } 259 } 260 case LISTITEM, MULTIPLELISTITEM -> { 261 if(entityListItemSequence != null) { 262 coreControl.createEntityAttributeListItem(entityAttribute, entityListItemSequence, createdBy); 263 } 264 } 265 default -> { 266 // Nothing required for other EntityAttributeTypes 267 } 268 } 269 } else { 270 handleExecutionError(DuplicateEntityAttributeNameException.class, eea, ExecutionErrors.DuplicateEntityAttributeName.name(), 271 entityTypeDetail.getComponentVendor().getLastDetail().getComponentVendorName(), entityTypeDetail.getEntityTypeName(), entityAttributeName); 272 } 273 } else { 274 handleExecutionError(EntityTypeIsNotExtensibleException.class, eea, ExecutionErrors.EntityTypeIsNotExtensible.name(), 275 entityTypeDetail.getComponentVendor().getLastDetail().getComponentVendorName(), entityTypeDetail.getEntityTypeName()); 276 } 277 278 return entityAttribute; 279 } 280 281 public EntityAttribute getEntityAttributeByName(final ExecutionErrorAccumulator eea, final EntityType entityType, 282 final String entityAttributeName, EntityPermission entityPermission) { 283 var coreControl = Session.getModelController(CoreControl.class); 284 EntityAttribute entityAttribute = coreControl.getEntityAttributeByName(entityType, entityAttributeName, entityPermission); 285 286 if(entityAttribute == null) { 287 EntityTypeDetail entityTypeDetail = entityType.getLastDetail(); 288 289 handleExecutionError(UnknownEntityAttributeNameException.class, eea, ExecutionErrors.UnknownEntityAttributeName.name(), 290 entityTypeDetail.getComponentVendor().getLastDetail().getComponentVendorName(), entityTypeDetail.getEntityTypeName(), entityAttributeName); 291 } 292 293 return entityAttribute; 294 } 295 296 public EntityAttribute getEntityAttributeByName(final ExecutionErrorAccumulator eea, final EntityType entityType, 297 final String entityAttributeName) { 298 return getEntityAttributeByName(eea, entityType, entityAttributeName, EntityPermission.READ_ONLY); 299 } 300 301 public EntityAttribute getEntityAttributeByNameForUpdate(final ExecutionErrorAccumulator eea, final EntityType entityType, 302 final String entityAttributeName) { 303 return getEntityAttributeByName(eea, entityType, entityAttributeName, EntityPermission.READ_WRITE); 304 } 305 306 public EntityAttribute getEntityAttributeByName(final ExecutionErrorAccumulator eea, final ComponentVendor componentVendor, 307 final String entityTypeName, final String entityAttributeName, EntityPermission entityPermission) { 308 EntityType entityType = EntityTypeLogic.getInstance().getEntityTypeByName(eea, componentVendor, entityTypeName); 309 EntityAttribute entityAttribute = null; 310 311 if(eea == null || !eea.hasExecutionErrors()) { 312 entityAttribute = getEntityAttributeByName(eea, entityType, entityAttributeName, entityPermission); 313 } 314 315 return entityAttribute; 316 } 317 318 public EntityAttribute getEntityAttributeByName(final ExecutionErrorAccumulator eea, final ComponentVendor componentVendor, 319 final String entityTypeName, final String entityAttributeName) { 320 return getEntityAttributeByName(eea, componentVendor, entityTypeName, entityAttributeName, EntityPermission.READ_ONLY); 321 } 322 323 public EntityAttribute getEntityAttributeByNameForUpdate(final ExecutionErrorAccumulator eea, final ComponentVendor componentVendor, 324 final String entityTypeName, final String entityAttributeName) { 325 return getEntityAttributeByName(eea, componentVendor, entityTypeName, entityAttributeName, EntityPermission.READ_WRITE); 326 } 327 328 public EntityAttribute getEntityAttributeByName(final ExecutionErrorAccumulator eea, final String componentVendorName, 329 final String entityTypeName, final String entityAttributeName, EntityPermission entityPermission) { 330 EntityType entityType = EntityTypeLogic.getInstance().getEntityTypeByName(eea, componentVendorName, entityTypeName); 331 EntityAttribute entityAttribute = null; 332 333 if(eea == null || !eea.hasExecutionErrors()) { 334 entityAttribute = getEntityAttributeByName(eea, entityType, entityAttributeName, entityPermission); 335 } 336 337 return entityAttribute; 338 } 339 340 public EntityAttribute getEntityAttributeByName(final ExecutionErrorAccumulator eea, final String componentVendorName, 341 final String entityTypeName, final String entityAttributeName) { 342 return getEntityAttributeByName(eea, componentVendorName, entityTypeName, entityAttributeName, EntityPermission.READ_ONLY); 343 } 344 345 public EntityAttribute getEntityAttributeByNameForUpdate(final ExecutionErrorAccumulator eea, final String componentVendorName, 346 final String entityTypeName, final String entityAttributeName) { 347 return getEntityAttributeByName(eea, componentVendorName, entityTypeName, entityAttributeName, EntityPermission.READ_WRITE); 348 } 349 350 public EntityAttribute getEntityAttributeByUlid(final ExecutionErrorAccumulator eea, final String ulid, 351 final EntityPermission entityPermission) { 352 EntityAttribute entityAttribute = null; 353 354 var entityInstance = EntityInstanceLogic.getInstance().getEntityInstance(eea, (String)null, null, null, ulid, 355 ComponentVendors.ECHO_THREE.name(), EntityTypes.EntityAttribute.name()); 356 357 if(eea == null || !eea.hasExecutionErrors()) { 358 var coreControl = Session.getModelController(CoreControl.class); 359 360 entityAttribute = coreControl.getEntityAttributeByEntityInstance(entityInstance, entityPermission); 361 } 362 363 return entityAttribute; 364 } 365 366 public EntityAttribute getEntityAttributeByUlid(final ExecutionErrorAccumulator eea, final String ulid) { 367 return getEntityAttributeByUlid(eea, ulid, EntityPermission.READ_ONLY); 368 } 369 370 public EntityAttribute getEntityAttributeByUlidForUpdate(final ExecutionErrorAccumulator eea, final String ulid) { 371 return getEntityAttributeByUlid(eea, ulid, EntityPermission.READ_WRITE); 372 } 373 374 // For when we need to determine the EntityType from what the user passes in: 375 public EntityAttribute getEntityAttributeByUniversalSpec(final ExecutionErrorAccumulator eea, final EntityAttributeUniversalSpec universalSpec, 376 final EntityPermission entityPermission) { 377 EntityAttribute entityAttribute = null; 378 var componentVendorName = universalSpec.getComponentVendorName(); 379 var entityTypeName = universalSpec.getEntityTypeName(); 380 var entityAttributeName = universalSpec.getEntityAttributeName(); 381 var universalSpecCount = EntityInstanceLogic.getInstance().countPossibleEntitySpecs(universalSpec); 382 var parameterCount = (componentVendorName == null && entityTypeName == null && entityAttributeName == null ? 0 : 1) 383 + universalSpecCount; 384 385 switch(parameterCount) { 386 case 1 -> { 387 if(universalSpecCount == 1) { 388 var entityInstance = EntityInstanceLogic.getInstance().getEntityInstance(eea, universalSpec, 389 ComponentVendors.ECHO_THREE.name(), EntityTypes.EntityAttribute.name()); 390 391 if(!eea.hasExecutionErrors()) { 392 var coreControl = Session.getModelController(CoreControl.class); 393 394 entityAttribute = coreControl.getEntityAttributeByEntityInstance(entityInstance, entityPermission); 395 } 396 } else { 397 entityAttribute = getEntityAttributeByName(eea, componentVendorName, entityTypeName, entityAttributeName, entityPermission); 398 } 399 } 400 default -> { 401 handleExecutionError(InvalidParameterCountException.class, eea, ExecutionErrors.InvalidParameterCount.name()); 402 } 403 } 404 405 return entityAttribute; 406 } 407 408 public EntityAttribute getEntityAttributeByUniversalSpec(final ExecutionErrorAccumulator eea, final EntityAttributeUniversalSpec universalSpec) { 409 return getEntityAttributeByUniversalSpec(eea, universalSpec, EntityPermission.READ_ONLY); 410 } 411 412 public EntityAttribute getEntityAttributeByUniversalSpecForUpdate(final ExecutionErrorAccumulator eea, final EntityAttributeUniversalSpec universalSpec) { 413 return getEntityAttributeByUniversalSpec(eea, universalSpec, EntityPermission.READ_WRITE); 414 } 415 416 // For when we can get the EntityType from the EntityInstance: 417 public EntityAttribute getEntityAttribute(final ExecutionErrorAccumulator eea, final EntityInstance entityInstance, 418 final EntityAttributeSpec spec, final EntityAttributeUlid ulid, final EntityPermission entityPermission, 419 final EntityAttributeTypes... entityAttributeTypes) { 420 EntityAttribute entityAttribute = null; 421 String entityAttributeName = spec.getEntityAttributeName(); 422 String entityAttributeUlid = ulid.getEntityAttributeUlid(); 423 var parameterCount = (entityAttributeName == null ? 0 : 1) + (entityAttributeUlid == null ? 0 : 1); 424 425 if (parameterCount == 1) { 426 entityAttribute = entityAttributeName == null 427 ? getEntityAttributeByUlid(eea, entityAttributeUlid, entityPermission) 428 : getEntityAttributeByName(eea, entityInstance.getEntityType(), entityAttributeName, entityPermission); 429 } else { 430 handleExecutionError(InvalidParameterCountException.class, eea, ExecutionErrors.InvalidParameterCount.name()); 431 } 432 433 // If there are no other errors, and the EntityAttribute was specified by ULID, then verify the EntityType... 434 if((eea == null || !eea.hasExecutionErrors()) && entityAttributeUlid != null) { 435 if(!entityInstance.getEntityType().equals(entityAttribute.getLastDetail().getEntityType())) { 436 EntityTypeDetail expectedEntityTypeDetail = entityAttribute.getLastDetail().getEntityType().getLastDetail(); 437 EntityTypeDetail suppliedEntityTypeDetail = entityInstance.getEntityType().getLastDetail(); 438 439 handleExecutionError(MismatchedEntityTypeException.class, eea, ExecutionErrors.MismatchedEntityType.name(), 440 expectedEntityTypeDetail.getComponentVendor().getLastDetail().getComponentVendorName(), 441 expectedEntityTypeDetail.getEntityTypeName(), 442 suppliedEntityTypeDetail.getComponentVendor().getLastDetail().getComponentVendorName(), 443 suppliedEntityTypeDetail.getEntityTypeName()); 444 } 445 } 446 447 // If there are no other errors, and there are one of more entityAttributeTypes specified, then verify the EntityAttributeType... 448 if((eea == null || !eea.hasExecutionErrors()) && entityAttributeTypes.length > 0) { 449 String entityAttributeTypeName = entityAttribute.getLastDetail().getEntityAttributeType().getEntityAttributeTypeName(); 450 boolean found = false; 451 452 for(var entityAttributeType : entityAttributeTypes) { 453 if(entityAttributeTypeName.equals(entityAttributeType.name())) { 454 found = true; 455 break; 456 } 457 } 458 459 if(!found) { 460 handleExecutionError(MismatchedEntityAttributeTypeException.class, eea, ExecutionErrors.MismatchedEntityAttributeType.name(), 461 entityAttributeTypeName); 462 entityAttribute = null; 463 } 464 } 465 466 return entityAttribute; 467 } 468 469 public EntityAttribute getEntityAttribute(final ExecutionErrorAccumulator eea, final EntityInstance entityInstance, 470 final EntityAttributeSpec spec, final EntityAttributeUlid ulid, final EntityAttributeTypes... entityAttributeTypes) { 471 return getEntityAttribute(eea, entityInstance, spec, ulid, EntityPermission.READ_ONLY, entityAttributeTypes); 472 } 473 474 public EntityAttribute getEntityAttributeForUpdate(final ExecutionErrorAccumulator eea, final EntityInstance entityInstance, 475 final EntityAttributeSpec spec, final EntityAttributeUlid ulid, final EntityAttributeTypes... entityAttributeTypes) { 476 return getEntityAttribute(eea, entityInstance, spec, ulid, EntityPermission.READ_WRITE, entityAttributeTypes); 477 } 478 479 private List<EntityInstanceResult> getEntityInstanceResultsByEntityAttributeTypeName(EntityAttribute entityAttribute) { 480 List<EntityInstanceResult> entityInstanceResults = null; 481 String entityAttributeTypeName = entityAttribute.getLastDetail().getEntityAttributeType().getEntityAttributeTypeName(); 482 483 if(entityAttributeTypeName.equals(EntityAttributeTypes.BOOLEAN.name())) { 484 entityInstanceResults = new EntityInstancesByBooleanEntityAttributeQuery().execute(entityAttribute); 485 } else if(entityAttributeTypeName.equals(EntityAttributeTypes.NAME.name())) { 486 entityInstanceResults = new EntityInstancesByNameEntityAttributeQuery().execute(entityAttribute); 487 } else if(entityAttributeTypeName.equals(EntityAttributeTypes.INTEGER.name())) { 488 entityInstanceResults = new EntityInstancesByIntegerEntityAttributeQuery().execute(entityAttribute); 489 } else if(entityAttributeTypeName.equals(EntityAttributeTypes.LONG.name())) { 490 entityInstanceResults = new EntityInstancesByLongEntityAttributeQuery().execute(entityAttribute); 491 } else if(entityAttributeTypeName.equals(EntityAttributeTypes.STRING.name())) { 492 entityInstanceResults = new EntityInstancesByStringEntityAttributeQuery().execute(entityAttribute); 493 } else if(entityAttributeTypeName.equals(EntityAttributeTypes.GEOPOINT.name())) { 494 entityInstanceResults = new EntityInstancesByGeoPointEntityAttributeQuery().execute(entityAttribute); 495 } else if(entityAttributeTypeName.equals(EntityAttributeTypes.BLOB.name())) { 496 entityInstanceResults = new EntityInstancesByBlobEntityAttributeQuery().execute(entityAttribute); 497 } else if(entityAttributeTypeName.equals(EntityAttributeTypes.CLOB.name())) { 498 entityInstanceResults = new EntityInstancesByClobEntityAttributeQuery().execute(entityAttribute); 499 } else if(entityAttributeTypeName.equals(EntityAttributeTypes.DATE.name())) { 500 entityInstanceResults = new EntityInstancesByDateEntityAttributeQuery().execute(entityAttribute); 501 } else if(entityAttributeTypeName.equals(EntityAttributeTypes.TIME.name())) { 502 entityInstanceResults = new EntityInstancesByTimeEntityAttributeQuery().execute(entityAttribute); 503 } else if(entityAttributeTypeName.equals(EntityAttributeTypes.LISTITEM.name())) { 504 entityInstanceResults = new EntityInstancesByListItemEntityAttributeQuery().execute(entityAttribute); 505 } else if(entityAttributeTypeName.equals(EntityAttributeTypes.MULTIPLELISTITEM.name())) { 506 entityInstanceResults = new EntityInstancesByMultipleListItemEntityAttributeQuery().execute(entityAttribute); 507 } else if(entityAttributeTypeName.equals(EntityAttributeTypes.ENTITY.name())) { 508 entityInstanceResults = new EntityInstancesByEntityEntityAttributeQuery().execute(entityAttribute); 509 } else if(entityAttributeTypeName.equals(EntityAttributeTypes.COLLECTION.name())) { 510 entityInstanceResults = new EntityInstancesByCollectionEntityAttributeQuery().execute(entityAttribute); 511 } 512 513 return entityInstanceResults; 514 } 515 516 public void updateEntityAttributeFromValue(final Session session, final EntityAttributeDetailValue entityAttributeDetailValue, 517 final BasePK updatedBy) { 518 final var coreControl = Session.getModelController(CoreControl.class); 519 520 if(entityAttributeDetailValue.getEntityAttributeNameHasBeenModified()) { 521 final var indexControl = Session.getModelController(IndexControl.class); 522 final var entityAttribute = coreControl.getEntityAttributeByPK(entityAttributeDetailValue.getEntityAttributePK()); 523 524 if(indexControl.countIndexTypesByEntityType(entityAttribute.getLastDetail().getEntityType()) > 0) { 525 final var queueControl = Session.getModelController(QueueControl.class); 526 final var queueTypePK = QueueTypeLogic.getInstance().getQueueTypeByName(null, QueueTypes.INDEXING.name()).getPrimaryKey(); 527 final var entityInstanceResults = getEntityInstanceResultsByEntityAttributeTypeName(entityAttribute); 528 final var queuedEntities = new ArrayList<QueuedEntityValue>(entityInstanceResults.size()); 529 530 for(final var entityInstanceResult : entityInstanceResults) { 531 queuedEntities.add(new QueuedEntityValue(queueTypePK, entityInstanceResult.getEntityInstancePK(), session.START_TIME_LONG)); 532 } 533 534 queueControl.createQueuedEntities(queuedEntities); 535 } 536 } 537 538 coreControl.updateEntityAttributeFromValue(entityAttributeDetailValue, updatedBy); 539 } 540 541 public void deleteEntityAttribute(final ExecutionErrorAccumulator eea, final EntityAttribute entityAttribute, 542 final PartyPK deletedByPK) { 543 var coreControl = Session.getModelController(CoreControl.class); 544 545 coreControl.deleteEntityAttribute(entityAttribute, deletedByPK); 546 } 547 548 public EntityListItem createEntityListItem(final ExecutionErrorAccumulator eea, final EntityAttribute entityAttribute, 549 String entityListItemName, final Boolean isDefault, final Integer sortOrder, final BasePK createdBy, 550 final Language language, final String description) { 551 EntityListItem entityListItem = null; 552 String entityAttributeTypeName = entityAttribute.getLastDetail().getEntityAttributeType().getEntityAttributeTypeName(); 553 554 if(entityAttributeTypeName.equals(EntityAttributeTypes.LISTITEM.name()) 555 || entityAttributeTypeName.equals(EntityAttributeTypes.MULTIPLELISTITEM.name())) { 556 var coreControl = Session.getModelController(CoreControl.class); 557 558 if(entityListItemName == null) { 559 EntityAttributeListItem entityAttributeListItem = coreControl.getEntityAttributeListItem(entityAttribute); 560 Sequence entityListItemSequence = entityAttributeListItem == null ? null : entityAttributeListItem.getEntityListItemSequence(); 561 562 if(entityListItemSequence == null) { 563 entityListItemSequence = SequenceGeneratorLogic.getInstance().getDefaultSequence(eea, SequenceTypes.ENTITY_LIST_ITEM.name()); 564 } 565 566 if(eea != null && !hasExecutionErrors(eea)) { 567 entityListItemName = SequenceGeneratorLogic.getInstance().getNextSequenceValue(eea, entityListItemSequence); 568 } else { 569 handleExecutionError(MissingDefaultSequenceException.class, eea, ExecutionErrors.MissingDefaultSequence.name(), 570 SequenceTypes.ENTITY_LIST_ITEM.name()); 571 } 572 } 573 574 if(eea != null && !hasExecutionErrors(eea)) { 575 entityListItem = entityListItemName == null ? null : coreControl.getEntityListItemByName(entityAttribute, entityListItemName); 576 577 if(entityListItem == null) { 578 entityListItem = coreControl.createEntityListItem(entityAttribute, entityListItemName, isDefault, sortOrder, 579 createdBy); 580 581 if(description != null) { 582 coreControl.createEntityListItemDescription(entityListItem, language, description, createdBy); 583 } 584 } else { 585 EntityAttributeDetail entityAttributeDetail = entityAttribute.getLastDetail(); 586 EntityTypeDetail entityTypeDetail = entityAttributeDetail.getEntityType().getLastDetail(); 587 588 handleExecutionError(DuplicateEntityListItemNameException.class, eea, ExecutionErrors.DuplicateEntityListItemName.name(), 589 entityTypeDetail.getComponentVendor().getLastDetail().getComponentVendorName(), 590 entityTypeDetail.getEntityTypeName(), entityAttributeDetail.getEntityAttributeName(), 591 entityListItemName); 592 } 593 } 594 } else { 595 EntityAttributeDetail entityAttributeDetail = entityAttribute.getLastDetail(); 596 EntityTypeDetail entityTypeDetail = entityAttributeDetail.getEntityType().getLastDetail(); 597 598 handleExecutionError(InvalidEntityAttributeTypeException.class, eea, ExecutionErrors.InvalidEntityAttributeType.name(), 599 entityTypeDetail.getComponentVendor().getLastDetail().getComponentVendorName(), 600 entityTypeDetail.getEntityTypeName(), entityAttributeDetail.getEntityAttributeName(), 601 entityAttributeTypeName); 602 } 603 604 return entityListItem; 605 } 606 607 public EntityListItem getEntityListItemByName(final ExecutionErrorAccumulator eea, final EntityAttribute entityAttribute, 608 final String entityListItemName, final EntityPermission entityPermission) { 609 var coreControl = Session.getModelController(CoreControl.class); 610 EntityListItem entityListItem = coreControl.getEntityListItemByName(entityAttribute, entityListItemName, entityPermission); 611 612 if(entityListItem == null) { 613 EntityAttributeDetail entityAttributeDetail = entityAttribute.getLastDetail(); 614 EntityTypeDetail entityTypeDetail = entityAttributeDetail.getEntityType().getLastDetail(); 615 616 handleExecutionError(UnknownEntityListItemNameException.class, eea, ExecutionErrors.UnknownEntityListItemName.name(), 617 entityTypeDetail.getComponentVendor().getLastDetail().getComponentVendorName(), 618 entityTypeDetail.getEntityTypeName(), entityListItemName); 619 } 620 621 return entityListItem; 622 } 623 624 public EntityListItem getEntityListItemByName(final ExecutionErrorAccumulator eea, final EntityAttribute entityAttribute, 625 final String entityListItemName) { 626 return getEntityListItemByName(eea, entityAttribute, entityListItemName, EntityPermission.READ_ONLY); 627 } 628 629 public EntityListItem getEntityListItemByNameForUpdate(final ExecutionErrorAccumulator eea, final EntityAttribute entityAttribute, 630 final String entityListItemName) { 631 return getEntityListItemByName(eea, entityAttribute, entityListItemName, EntityPermission.READ_WRITE); 632 } 633 634 public EntityListItem getEntityListItemByName(final ExecutionErrorAccumulator eea, final String componentVendorName, 635 final String entityTypeName, final String entityAttributeName, final String entityListItemName, 636 final EntityPermission entityPermission) { 637 EntityAttribute entityAttribute = EntityAttributeLogic.getInstance().getEntityAttributeByName(eea, componentVendorName, 638 entityTypeName, entityAttributeName); 639 EntityListItem entityListItem = null; 640 641 if(eea == null || !eea.hasExecutionErrors()) { 642 entityListItem = getEntityListItemByName(eea, entityAttribute, entityListItemName, entityPermission); 643 } 644 645 return entityListItem; 646 } 647 648 public EntityListItem getEntityListItemByName(final ExecutionErrorAccumulator eea, final String componentVendorName, 649 final String entityTypeName, final String entityAttributeName, final String entityListItemName) { 650 return getEntityListItemByName(eea, componentVendorName, entityTypeName, entityAttributeName, entityListItemName, 651 EntityPermission.READ_ONLY); 652 } 653 654 public EntityListItem getEntityListItemByNameForUpdate(final ExecutionErrorAccumulator eea, final String componentVendorName, 655 final String entityTypeName, final String entityAttributeName, final String entityListItemName) { 656 return getEntityListItemByName(eea, componentVendorName, entityTypeName, entityAttributeName, entityListItemName, 657 EntityPermission.READ_WRITE); 658 } 659 660 public EntityListItem getEntityListItemByUlid(final ExecutionErrorAccumulator eea, final String ulid, final EntityPermission entityPermission) { 661 EntityListItem entityListItem = null; 662 663 var entityInstance = EntityInstanceLogic.getInstance().getEntityInstance(eea, (String)null, null, null, ulid, 664 ComponentVendors.ECHO_THREE.name(), EntityTypes.EntityListItem.name()); 665 666 if(eea == null || !eea.hasExecutionErrors()) { 667 var coreControl = Session.getModelController(CoreControl.class); 668 669 entityListItem = coreControl.getEntityListItemByEntityInstance(entityInstance, entityPermission); 670 } 671 672 return entityListItem; 673 } 674 675 public EntityListItem getEntityListItemByUlid(final ExecutionErrorAccumulator eea, final String ulid) { 676 return getEntityListItemByUlid(eea, ulid, EntityPermission.READ_ONLY); 677 } 678 679 public EntityListItem getEntityListItemByUlidForUpdate(final ExecutionErrorAccumulator eea, final String ulid) { 680 return getEntityListItemByUlid(eea, ulid, EntityPermission.READ_WRITE); 681 } 682 683 public EntityListItem getEntityListItemByUniversalSpec(final ExecutionErrorAccumulator eea, final EntityListItemUniversalSpec universalSpec, 684 final EntityPermission entityPermission) { 685 EntityListItem entityListItem = null; 686 var componentVendorName = universalSpec.getComponentVendorName(); 687 var entityTypeName = universalSpec.getEntityTypeName(); 688 var entityAttributeName = universalSpec.getEntityAttributeName(); 689 var entityListItemName = universalSpec.getEntityListItemName(); 690 var universalSpecCount = EntityInstanceLogic.getInstance().countPossibleEntitySpecs(universalSpec); 691 var parameterCount = (componentVendorName == null && entityTypeName == null && entityAttributeName == null && entityListItemName == null ? 0 : 1) 692 + universalSpecCount; 693 694 switch(parameterCount) { 695 case 1 -> { 696 if(universalSpecCount == 1) { 697 var entityInstance = EntityInstanceLogic.getInstance().getEntityInstance(eea, universalSpec, 698 ComponentVendors.ECHO_THREE.name(), EntityTypes.EntityListItem.name()); 699 700 if(!eea.hasExecutionErrors()) { 701 var coreControl = Session.getModelController(CoreControl.class); 702 703 entityListItem = coreControl.getEntityListItemByEntityInstance(entityInstance, entityPermission); 704 } 705 } else { 706 entityListItem = getEntityListItemByName(eea, componentVendorName, entityTypeName, entityAttributeName, 707 entityListItemName, entityPermission); 708 } 709 } 710 default -> { 711 handleExecutionError(InvalidParameterCountException.class, eea, ExecutionErrors.InvalidParameterCount.name()); 712 } 713 } 714 715 return entityListItem; 716 } 717 718 public EntityListItem getEntityListItemByUniversalSpec(final ExecutionErrorAccumulator eea, final EntityListItemUniversalSpec universalSpec) { 719 return getEntityListItemByUniversalSpec(eea, universalSpec, EntityPermission.READ_ONLY); 720 } 721 722 public EntityListItem getEntityListItemByUniversalSpecForUpdate(final ExecutionErrorAccumulator eea, final EntityListItemUniversalSpec universalSpec) { 723 return getEntityListItemByUniversalSpec(eea, universalSpec, EntityPermission.READ_WRITE); 724 } 725 726 public EntityListItem getEntityListItem(final ExecutionErrorAccumulator eea, final EntityAttribute entityAttribute, 727 final EntityListItemAttributeEdit edit, final EntityPermission entityPermission) { 728 EntityListItem entityListItem = null; 729 String entityListItemName = edit.getEntityListItemName(); 730 String entityListItemUlid = edit.getEntityListItemUlid(); 731 var parameterCount = (entityListItemName == null ? 0 : 1) + (entityListItemUlid == null ? 0 : 1); 732 733 if (parameterCount == 1) { 734 entityListItem = entityListItemName == null 735 ? getEntityListItemByUlid(eea, entityListItemUlid, entityPermission) 736 : getEntityListItemByName(eea, entityAttribute, entityListItemName, entityPermission); 737 } else { 738 handleExecutionError(InvalidParameterCountException.class, eea, ExecutionErrors.InvalidParameterCount.name()); 739 } 740 741 if((eea == null || !eea.hasExecutionErrors()) && entityListItemUlid != null) { 742 EntityAttribute foundEntityAttribute = entityListItem.getLastDetail().getEntityAttribute(); 743 744 if(!foundEntityAttribute.equals(entityAttribute)) { 745 handleExecutionError(MismatchedEntityListItemException.class, eea, ExecutionErrors.MismatchedEntityListItem.name(), 746 entityAttribute.getLastDetail().getEntityType().getLastDetail().getComponentVendor().getLastDetail().getComponentVendorName(), 747 entityAttribute.getLastDetail().getEntityType().getLastDetail().getEntityTypeName(), 748 entityAttribute.getLastDetail().getEntityAttributeName(), 749 foundEntityAttribute.getLastDetail().getEntityType().getLastDetail().getComponentVendor().getLastDetail().getComponentVendorName(), 750 foundEntityAttribute.getLastDetail().getEntityType().getLastDetail().getEntityTypeName(), 751 foundEntityAttribute.getLastDetail().getEntityAttributeName(), 752 entityListItem.getLastDetail().getEntityListItem()); 753 } 754 } 755 756 return entityListItem; 757 } 758 759 public EntityListItem getEntityListItem(final ExecutionErrorAccumulator eea, final EntityAttribute entityAttribute, 760 final EntityListItemAttributeEdit edit) { 761 return getEntityListItem(eea, entityAttribute, edit, EntityPermission.READ_ONLY); 762 } 763 764 public EntityListItem getEntityListItemForUpdate(final ExecutionErrorAccumulator eea, final EntityAttribute entityAttribute, 765 final EntityListItemAttributeEdit edit, final EntityListItemUlid ulid) { 766 return getEntityListItem(eea, entityAttribute, edit, EntityPermission.READ_WRITE); 767 } 768 769 public void updateEntityListItemFromValue(final Session session, EntityListItemDetailValue entityListItemDetailValue, BasePK updatedBy) { 770 var coreControl = Session.getModelController(CoreControl.class); 771 772 if(entityListItemDetailValue.getEntityListItemNameHasBeenModified()) { 773 var indexControl = Session.getModelController(IndexControl.class); 774 EntityListItem entityListItem = coreControl.getEntityListItemByPK(entityListItemDetailValue.getEntityListItemPK()); 775 EntityAttributeDetail entityAttributeDetail = entityListItem.getLastDetail().getEntityAttribute().getLastDetail(); 776 777 if(indexControl.countIndexTypesByEntityType(entityAttributeDetail.getEntityType()) > 0) { 778 var queueControl = Session.getModelController(QueueControl.class); 779 QueueTypePK queueTypePK = QueueTypeLogic.getInstance().getQueueTypeByName(null, QueueTypes.INDEXING.name()).getPrimaryKey(); 780 String entityAttributeTypeName = entityAttributeDetail.getEntityAttributeType().getEntityAttributeTypeName(); 781 782 if(entityAttributeTypeName.equals(EntityAttributeTypes.LISTITEM.name())) { 783 List<EntityListItemAttribute> entityListItemAttributes = coreControl.getEntityListItemAttributesByEntityListItem(entityListItem); 784 List<QueuedEntityValue> queuedEntities = new ArrayList<>(entityListItemAttributes.size()); 785 786 entityListItemAttributes.forEach((entityListItemAttribute) -> { 787 queuedEntities.add(new QueuedEntityValue(queueTypePK, entityListItemAttribute.getEntityInstancePK(), session.START_TIME_LONG)); 788 }); 789 790 queueControl.createQueuedEntities(queuedEntities); 791 } else if(entityAttributeTypeName.equals(EntityAttributeTypes.MULTIPLELISTITEM.name())) { 792 List<EntityMultipleListItemAttribute> entityMultipleListItemAttributes = coreControl.getEntityMultipleListItemAttributesByEntityListItem(entityListItem); 793 List<QueuedEntityValue> queuedEntities = new ArrayList<>(entityMultipleListItemAttributes.size()); 794 795 entityMultipleListItemAttributes.forEach((entityMultipleListItemAttribute) -> { 796 queuedEntities.add(new QueuedEntityValue(queueTypePK, entityMultipleListItemAttribute.getEntityInstancePK(), session.START_TIME_LONG)); 797 }); 798 799 queueControl.createQueuedEntities(queuedEntities); 800 } 801 } 802 } 803 804 coreControl.updateEntityListItemFromValue(entityListItemDetailValue, updatedBy); 805 } 806 807 public void deleteEntityListItem(final ExecutionErrorAccumulator eea, EntityListItem entityListItem, BasePK deletedBy) { 808 var coreControl = Session.getModelController(CoreControl.class); 809 810 coreControl.deleteEntityListItem(entityListItem, deletedBy); 811 } 812 813 private void checkEntityType(final ExecutionErrorAccumulator eea, final EntityAttribute entityAttribute, 814 final EntityInstance entityInstance) { 815 if(!entityInstance.getEntityType().equals(entityAttribute.getLastDetail().getEntityType())) { 816 EntityTypeDetail expectedEntityTypeDetail = entityAttribute.getLastDetail().getEntityType().getLastDetail(); 817 EntityTypeDetail suppliedEntityTypeDetail = entityInstance.getEntityType().getLastDetail(); 818 819 handleExecutionError(MismatchedEntityTypeException.class, eea, ExecutionErrors.MismatchedEntityType.name(), 820 expectedEntityTypeDetail.getComponentVendor().getLastDetail().getComponentVendorName(), 821 expectedEntityTypeDetail.getEntityTypeName(), 822 suppliedEntityTypeDetail.getComponentVendor().getLastDetail().getComponentVendorName(), 823 suppliedEntityTypeDetail.getEntityTypeName()); 824 } 825 } 826 827 public EntityBooleanAttribute createEntityBooleanAttribute(final ExecutionErrorAccumulator eea, final EntityAttribute entityAttribute, 828 final EntityInstance entityInstance, final Boolean booleanAttribute, final BasePK createdBy) { 829 EntityBooleanAttribute entityBooleanAttribute = null; 830 831 checkEntityType(eea, entityAttribute, entityInstance); 832 833 if(eea == null || !eea.hasExecutionErrors()) { 834 var coreControl = Session.getModelController(CoreControl.class); 835 836 entityBooleanAttribute = coreControl.getEntityBooleanAttribute(entityAttribute, entityInstance); 837 838 if(entityBooleanAttribute == null) { 839 coreControl.createEntityBooleanAttribute(entityAttribute, entityInstance, booleanAttribute, createdBy); 840 } else { 841 handleExecutionError(DuplicateEntityBooleanAttributeException.class, eea, ExecutionErrors.DuplicateEntityBooleanAttribute.name(), 842 EntityInstanceLogic.getInstance().getEntityRefFromEntityInstance(entityInstance), 843 entityAttribute.getLastDetail().getEntityAttributeName()); 844 } 845 } 846 847 return entityBooleanAttribute; 848 } 849 850 public EntityIntegerAttribute createEntityIntegerAttribute(final ExecutionErrorAccumulator eea, final EntityAttribute entityAttribute, 851 final EntityInstance entityInstance, final Integer integerAttribute, final BasePK createdBy) { 852 EntityIntegerAttribute entityIntegerAttribute = null; 853 854 checkEntityType(eea, entityAttribute, entityInstance); 855 856 if(eea == null || !eea.hasExecutionErrors()) { 857 var coreControl = Session.getModelController(CoreControl.class); 858 EntityAttributeInteger entityAttributeInteger = coreControl.getEntityAttributeInteger(entityAttribute); 859 860 if(entityAttributeInteger != null) { 861 Integer upperRangeIntegerValue = entityAttributeInteger.getUpperRangeIntegerValue(); 862 Integer lowerRangeIntegerValue = entityAttributeInteger.getLowerRangeIntegerValue(); 863 864 if(upperRangeIntegerValue != null && integerAttribute > upperRangeIntegerValue){ 865 handleExecutionError(UpperRangeExceededException.class, eea, ExecutionErrors.UpperRangeExceeded.name(), 866 upperRangeIntegerValue, integerAttribute); 867 } 868 869 if(lowerRangeIntegerValue != null && integerAttribute < lowerRangeIntegerValue) { 870 handleExecutionError(LowerRangeExceededException.class, eea, ExecutionErrors.LowerRangeExceeded.name(), 871 lowerRangeIntegerValue, integerAttribute); 872 } 873 } 874 875 if(eea == null || !eea.hasExecutionErrors()) { 876 entityIntegerAttribute = coreControl.getEntityIntegerAttribute(entityAttribute, entityInstance); 877 878 if(entityIntegerAttribute == null) { 879 coreControl.createEntityIntegerAttribute(entityAttribute, entityInstance, integerAttribute, createdBy); 880 } else { 881 handleExecutionError(DuplicateEntityIntegerAttributeException.class, eea, ExecutionErrors.DuplicateEntityIntegerAttribute.name(), 882 EntityInstanceLogic.getInstance().getEntityRefFromEntityInstance(entityInstance), 883 entityAttribute.getLastDetail().getEntityAttributeName()); 884 } 885 } 886 } 887 888 return entityIntegerAttribute; 889 } 890 891 public EntityLongAttribute createEntityLongAttribute(final ExecutionErrorAccumulator eea, final EntityAttribute entityAttribute, 892 final EntityInstance entityInstance, final Long longAttribute, final BasePK createdBy) { 893 EntityLongAttribute entityLongAttribute = null; 894 895 checkEntityType(eea, entityAttribute, entityInstance); 896 897 if(eea == null || !eea.hasExecutionErrors()) { 898 var coreControl = Session.getModelController(CoreControl.class); 899 EntityAttributeLong entityAttributeLong = coreControl.getEntityAttributeLong(entityAttribute); 900 901 if(entityAttributeLong != null) { 902 Long upperRangeLongValue = entityAttributeLong.getUpperRangeLongValue(); 903 Long lowerRangeLongValue = entityAttributeLong.getLowerRangeLongValue(); 904 905 if(upperRangeLongValue != null && longAttribute > upperRangeLongValue){ 906 handleExecutionError(UpperRangeExceededException.class, eea, ExecutionErrors.UpperRangeExceeded.name(), 907 upperRangeLongValue, longAttribute); 908 } 909 910 if(lowerRangeLongValue != null && longAttribute < lowerRangeLongValue) { 911 handleExecutionError(LowerRangeExceededException.class, eea, ExecutionErrors.LowerRangeExceeded.name(), 912 lowerRangeLongValue, longAttribute); 913 } 914 } 915 916 if(eea == null || !eea.hasExecutionErrors()) { 917 entityLongAttribute = coreControl.getEntityLongAttribute(entityAttribute, entityInstance); 918 919 if(entityLongAttribute == null) { 920 coreControl.createEntityLongAttribute(entityAttribute, entityInstance, longAttribute, createdBy); 921 } else { 922 handleExecutionError(DuplicateEntityLongAttributeException.class, eea, ExecutionErrors.DuplicateEntityLongAttribute.name(), 923 EntityInstanceLogic.getInstance().getEntityRefFromEntityInstance(entityInstance), 924 entityAttribute.getLastDetail().getEntityAttributeName()); 925 } 926 } 927 } 928 929 return entityLongAttribute; 930 } 931 932 public EntityStringAttribute createEntityStringAttribute(final ExecutionErrorAccumulator eea, final EntityAttribute entityAttribute, 933 final EntityInstance entityInstance, final Language language, final String stringAttribute, final BasePK createdBy) { 934 EntityStringAttribute entityStringAttribute = null; 935 936 checkEntityType(eea, entityAttribute, entityInstance); 937 938 if(eea == null || !eea.hasExecutionErrors()) { 939 var coreControl = Session.getModelController(CoreControl.class); 940 EntityAttributeString entityAttributeString = coreControl.getEntityAttributeString(entityAttribute); 941 String validationPattern = entityAttributeString == null ? null : entityAttributeString.getValidationPattern(); 942 943 if(validationPattern != null) { 944 Pattern pattern = Pattern.compile(validationPattern); 945 Matcher m = pattern.matcher(stringAttribute); 946 947 if(!m.matches()) { 948 handleExecutionError(InvalidStringAttributeException.class, eea, ExecutionErrors.InvalidStringAttribute.name(), 949 stringAttribute); 950 } 951 } 952 953 if(eea == null || !eea.hasExecutionErrors()) { 954 entityStringAttribute = coreControl.getEntityStringAttribute(entityAttribute, entityInstance, language); 955 956 if(entityStringAttribute == null) { 957 coreControl.createEntityStringAttribute(entityAttribute, entityInstance, language, stringAttribute, createdBy); 958 } else { 959 handleExecutionError(DuplicateEntityStringAttributeException.class, eea, ExecutionErrors.DuplicateEntityStringAttribute.name(), 960 EntityInstanceLogic.getInstance().getEntityRefFromEntityInstance(entityInstance), 961 entityAttribute.getLastDetail().getEntityAttributeName(), 962 language.getLanguageIsoName()); 963 } 964 } 965 } 966 967 return entityStringAttribute; 968 } 969 970 public EntityClobAttribute createEntityClobAttribute(final ExecutionErrorAccumulator eea, final EntityAttribute entityAttribute, 971 final EntityInstance entityInstance, final Language language, final String clobAttribute, final MimeType mimeType, 972 final BasePK createdBy) { 973 EntityClobAttribute entityClobAttribute = null; 974 975 checkEntityType(eea, entityAttribute, entityInstance); 976 977 if(eea == null || !eea.hasExecutionErrors()) { 978 var coreControl = Session.getModelController(CoreControl.class); 979 980 entityClobAttribute = coreControl.getEntityClobAttribute(entityAttribute, entityInstance, language); 981 982 if(entityClobAttribute == null) { 983 coreControl.createEntityClobAttribute(entityAttribute, entityInstance, language, clobAttribute, mimeType, createdBy); 984 } else { 985 handleExecutionError(DuplicateEntityClobAttributeException.class, eea, ExecutionErrors.DuplicateEntityClobAttribute.name(), 986 EntityInstanceLogic.getInstance().getEntityRefFromEntityInstance(entityInstance), 987 entityAttribute.getLastDetail().getEntityAttributeName(), 988 language.getLanguageIsoName()); 989 } 990 } 991 992 return entityClobAttribute; 993 } 994 995 public EntityNameAttribute createEntityNameAttribute(final ExecutionErrorAccumulator eea, final EntityAttribute entityAttribute, 996 final String nameAttribute, final EntityInstance entityInstance, final BasePK createdBy) { 997 EntityNameAttribute entityNameAttribute = null; 998 999 checkEntityType(eea, entityAttribute, entityInstance); 1000 1001 if(eea == null || !eea.hasExecutionErrors()) { 1002 var coreControl = Session.getModelController(CoreControl.class); 1003 1004 entityNameAttribute = coreControl.getEntityNameAttribute(entityAttribute, entityInstance); 1005 1006 if(entityNameAttribute == null) { 1007 coreControl.createEntityNameAttribute(entityAttribute, nameAttribute, entityInstance, createdBy); 1008 } else { 1009 handleExecutionError(DuplicateEntityNameAttributeException.class, eea, ExecutionErrors.DuplicateEntityNameAttribute.name(), 1010 EntityInstanceLogic.getInstance().getEntityRefFromEntityInstance(entityInstance), 1011 entityAttribute.getLastDetail().getEntityAttributeName()); 1012 } 1013 } 1014 1015 return entityNameAttribute; 1016 } 1017 1018 public EntityDateAttribute createEntityDateAttribute(final ExecutionErrorAccumulator eea, final EntityAttribute entityAttribute, 1019 final EntityInstance entityInstance, final Integer dateAttribute, final BasePK createdBy) { 1020 EntityDateAttribute entityDateAttribute = null; 1021 1022 checkEntityType(eea, entityAttribute, entityInstance); 1023 1024 if(eea == null || !eea.hasExecutionErrors()) { 1025 var coreControl = Session.getModelController(CoreControl.class); 1026 1027 entityDateAttribute = coreControl.getEntityDateAttribute(entityAttribute, entityInstance); 1028 1029 if(entityDateAttribute == null) { 1030 coreControl.createEntityDateAttribute(entityAttribute, entityInstance, dateAttribute, createdBy); 1031 } else { 1032 handleExecutionError(DuplicateEntityDateAttributeException.class, eea, ExecutionErrors.DuplicateEntityDateAttribute.name(), 1033 EntityInstanceLogic.getInstance().getEntityRefFromEntityInstance(entityInstance), 1034 entityAttribute.getLastDetail().getEntityAttributeName()); 1035 } 1036 } 1037 1038 return entityDateAttribute; 1039 } 1040 1041 public EntityTimeAttribute createEntityTimeAttribute(final ExecutionErrorAccumulator eea, final EntityAttribute entityAttribute, 1042 final EntityInstance entityInstance, final Long timeAttribute, final BasePK createdBy) { 1043 EntityTimeAttribute entityTimeAttribute = null; 1044 1045 checkEntityType(eea, entityAttribute, entityInstance); 1046 1047 if(eea == null || !eea.hasExecutionErrors()) { 1048 var coreControl = Session.getModelController(CoreControl.class); 1049 1050 entityTimeAttribute = coreControl.getEntityTimeAttribute(entityAttribute, entityInstance); 1051 1052 if(entityTimeAttribute == null) { 1053 coreControl.createEntityTimeAttribute(entityAttribute, entityInstance, timeAttribute, createdBy); 1054 } else { 1055 handleExecutionError(DuplicateEntityTimeAttributeException.class, eea, ExecutionErrors.DuplicateEntityTimeAttribute.name(), 1056 EntityInstanceLogic.getInstance().getEntityRefFromEntityInstance(entityInstance), 1057 entityAttribute.getLastDetail().getEntityAttributeName()); 1058 } 1059 } 1060 1061 return entityTimeAttribute; 1062 } 1063 1064 public EntityListItemAttribute createEntityListItemAttribute(final ExecutionErrorAccumulator eea, final EntityAttribute entityAttribute, 1065 final EntityInstance entityInstance, final EntityListItem entityListItem, final BasePK createdBy) { 1066 EntityListItemAttribute entityListItemAttribute = null; 1067 1068 checkEntityType(eea, entityAttribute, entityInstance); 1069 1070 if(eea == null || !eea.hasExecutionErrors()) { 1071 var coreControl = Session.getModelController(CoreControl.class); 1072 1073 entityListItemAttribute = coreControl.getEntityListItemAttribute(entityAttribute, entityInstance); 1074 1075 if(entityListItemAttribute == null) { 1076 entityListItemAttribute = coreControl.createEntityListItemAttribute(entityAttribute, entityInstance, entityListItem, createdBy); 1077 } else { 1078 handleExecutionError(DuplicateEntityListItemAttributeException.class, eea, ExecutionErrors.DuplicateEntityListItemAttribute.name(), 1079 EntityInstanceLogic.getInstance().getEntityRefFromEntityInstance(entityInstance), 1080 entityAttribute.getLastDetail().getEntityAttributeName()); 1081 } 1082 } 1083 1084 return entityListItemAttribute; 1085 } 1086 1087 public EntityMultipleListItemAttribute createEntityMultipleListItemAttribute(final ExecutionErrorAccumulator eea, final EntityAttribute entityAttribute, 1088 final EntityInstance entityInstance, final EntityListItem entityListItem, final BasePK createdBy) { 1089 EntityMultipleListItemAttribute entityMultipleListItemAttribute = null; 1090 1091 checkEntityType(eea, entityAttribute, entityInstance); 1092 1093 if(eea == null || !eea.hasExecutionErrors()) { 1094 var coreControl = Session.getModelController(CoreControl.class); 1095 1096 entityMultipleListItemAttribute = coreControl.getEntityMultipleListItemAttribute(entityAttribute, entityInstance, entityListItem); 1097 1098 if(entityMultipleListItemAttribute == null) { 1099 entityMultipleListItemAttribute = coreControl.createEntityMultipleListItemAttribute(entityAttribute, entityInstance, entityListItem, createdBy); 1100 } else { 1101 handleExecutionError(DuplicateEntityMultipleListItemAttributeException.class, eea, ExecutionErrors.DuplicateEntityMultipleListItemAttribute.name(), 1102 EntityInstanceLogic.getInstance().getEntityRefFromEntityInstance(entityInstance), 1103 entityAttribute.getLastDetail().getEntityAttributeName(), 1104 entityListItem.getLastDetail().getEntityListItemName()); 1105 } 1106 } 1107 1108 return entityMultipleListItemAttribute; 1109 } 1110 1111}