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.edit.EntityListItemAttributeEdit; 020import com.echothree.control.user.core.common.spec.EntityAttributeSpec; 021import com.echothree.control.user.core.common.spec.EntityAttributeUniversalSpec; 022import com.echothree.control.user.core.common.spec.EntityAttributeUuid; 023import com.echothree.control.user.core.common.spec.EntityInstanceAttributeSpec; 024import com.echothree.control.user.core.common.spec.EntityListItemUniversalSpec; 025import com.echothree.control.user.core.common.spec.EntityListItemUuid; 026import com.echothree.model.control.core.common.ComponentVendors; 027import com.echothree.model.control.core.common.EntityAttributeTypes; 028import com.echothree.model.control.core.common.EntityTypes; 029import com.echothree.model.control.core.common.exception.DuplicateEntityAttributeNameException; 030import com.echothree.model.control.core.common.exception.DuplicateEntityBooleanAttributeException; 031import com.echothree.model.control.core.common.exception.DuplicateEntityBooleanDefaultException; 032import com.echothree.model.control.core.common.exception.DuplicateEntityClobAttributeException; 033import com.echothree.model.control.core.common.exception.DuplicateEntityDateAttributeException; 034import com.echothree.model.control.core.common.exception.DuplicateEntityDateDefaultException; 035import com.echothree.model.control.core.common.exception.DuplicateEntityGeoPointAttributeException; 036import com.echothree.model.control.core.common.exception.DuplicateEntityGeoPointDefaultException; 037import com.echothree.model.control.core.common.exception.DuplicateEntityIntegerAttributeException; 038import com.echothree.model.control.core.common.exception.DuplicateEntityIntegerDefaultException; 039import com.echothree.model.control.core.common.exception.DuplicateEntityListItemAttributeException; 040import com.echothree.model.control.core.common.exception.DuplicateEntityListItemDefaultException; 041import com.echothree.model.control.core.common.exception.DuplicateEntityListItemNameException; 042import com.echothree.model.control.core.common.exception.DuplicateEntityLongAttributeException; 043import com.echothree.model.control.core.common.exception.DuplicateEntityLongDefaultException; 044import com.echothree.model.control.core.common.exception.DuplicateEntityMultipleListItemAttributeException; 045import com.echothree.model.control.core.common.exception.DuplicateEntityMultipleListItemDefaultException; 046import com.echothree.model.control.core.common.exception.DuplicateEntityNameAttributeException; 047import com.echothree.model.control.core.common.exception.DuplicateEntityStringAttributeException; 048import com.echothree.model.control.core.common.exception.DuplicateEntityStringDefaultException; 049import com.echothree.model.control.core.common.exception.DuplicateEntityTimeAttributeException; 050import com.echothree.model.control.core.common.exception.DuplicateEntityTimeDefaultException; 051import com.echothree.model.control.core.common.exception.DuplicateWorkflowUsageInEntityAttributeException; 052import com.echothree.model.control.core.common.exception.EntityTypeIsNotExtensibleException; 053import com.echothree.model.control.core.common.exception.InvalidEntityAttributeTypeException; 054import com.echothree.model.control.core.common.exception.InvalidParameterCountException; 055import com.echothree.model.control.core.common.exception.InvalidStringAttributeException; 056import com.echothree.model.control.core.common.exception.LowerRangeExceededException; 057import com.echothree.model.control.core.common.exception.MismatchedEntityAttributeTypeException; 058import com.echothree.model.control.core.common.exception.MismatchedEntityListItemException; 059import com.echothree.model.control.core.common.exception.MismatchedEntityTypeException; 060import com.echothree.model.control.core.common.exception.UnknownEntityAttributeNameException; 061import com.echothree.model.control.core.common.exception.UnknownEntityAttributeTypeNameException; 062import com.echothree.model.control.core.common.exception.UnknownEntityBooleanDefaultException; 063import com.echothree.model.control.core.common.exception.UnknownEntityDateDefaultException; 064import com.echothree.model.control.core.common.exception.UnknownEntityGeoPointDefaultException; 065import com.echothree.model.control.core.common.exception.UnknownEntityIntegerDefaultException; 066import com.echothree.model.control.core.common.exception.UnknownEntityListItemDefaultException; 067import com.echothree.model.control.core.common.exception.UnknownEntityListItemNameException; 068import com.echothree.model.control.core.common.exception.UnknownEntityLongDefaultException; 069import com.echothree.model.control.core.common.exception.UnknownEntityMultipleListItemDefaultException; 070import com.echothree.model.control.core.common.exception.UnknownEntityStringDefaultException; 071import com.echothree.model.control.core.common.exception.UnknownEntityTimeDefaultException; 072import com.echothree.model.control.core.common.exception.UpperRangeExceededException; 073import com.echothree.model.control.core.server.control.EntityAttributeGroupControl; 074import com.echothree.model.control.core.server.database.EntityInstancePKResult; 075import com.echothree.model.control.core.server.database.EntityInstancePKsByBlobEntityAttributeQuery; 076import com.echothree.model.control.core.server.database.EntityInstancePKsByBooleanEntityAttributeQuery; 077import com.echothree.model.control.core.server.database.EntityInstancePKsByClobEntityAttributeQuery; 078import com.echothree.model.control.core.server.database.EntityInstancePKsByCollectionEntityAttributeQuery; 079import com.echothree.model.control.core.server.database.EntityInstancePKsByDateEntityAttributeQuery; 080import com.echothree.model.control.core.server.database.EntityInstancePKsByEntityEntityAttributeQuery; 081import com.echothree.model.control.core.server.database.EntityInstancePKsByGeoPointEntityAttributeQuery; 082import com.echothree.model.control.core.server.database.EntityInstancePKsByIntegerEntityAttributeQuery; 083import com.echothree.model.control.core.server.database.EntityInstancePKsByListItemEntityAttributeQuery; 084import com.echothree.model.control.core.server.database.EntityInstancePKsByLongEntityAttributeQuery; 085import com.echothree.model.control.core.server.database.EntityInstancePKsByMultipleListItemEntityAttributeQuery; 086import com.echothree.model.control.core.server.database.EntityInstancePKsByNameEntityAttributeQuery; 087import com.echothree.model.control.core.server.database.EntityInstancePKsByStringEntityAttributeQuery; 088import com.echothree.model.control.core.server.database.EntityInstancePKsByTimeEntityAttributeQuery; 089import com.echothree.model.control.core.server.database.EntityInstancesMissingBooleanEntityAttributeQuery; 090import com.echothree.model.control.core.server.database.EntityInstancesMissingDateEntityAttributeQuery; 091import com.echothree.model.control.core.server.database.EntityInstancesMissingGeoPointEntityAttributeQuery; 092import com.echothree.model.control.core.server.database.EntityInstancesMissingIntegerEntityAttributeQuery; 093import com.echothree.model.control.core.server.database.EntityInstancesMissingListItemEntityAttributeQuery; 094import com.echothree.model.control.core.server.database.EntityInstancesMissingLongEntityAttributeQuery; 095import com.echothree.model.control.core.server.database.EntityInstancesMissingMultipleListItemEntityAttributeQuery; 096import com.echothree.model.control.core.server.database.EntityInstancesMissingStringEntityAttributeQuery; 097import com.echothree.model.control.core.server.database.EntityInstancesMissingTimeEntityAttributeQuery; 098import com.echothree.model.control.index.server.control.IndexControl; 099import com.echothree.model.control.queue.common.QueueTypes; 100import com.echothree.model.control.queue.server.control.QueueControl; 101import com.echothree.model.control.queue.server.logic.QueueTypeLogic; 102import com.echothree.model.control.sequence.common.SequenceTypes; 103import com.echothree.model.control.sequence.common.exception.MissingDefaultSequenceException; 104import com.echothree.model.control.sequence.server.control.SequenceControl; 105import com.echothree.model.control.sequence.server.logic.SequenceGeneratorLogic; 106import com.echothree.model.control.workflow.common.exception.UnknownWorkflowEntityTypeException; 107import com.echothree.model.control.workflow.server.control.WorkflowControl; 108import com.echothree.model.data.core.server.entity.ComponentVendor; 109import com.echothree.model.data.core.server.entity.EntityAttribute; 110import com.echothree.model.data.core.server.entity.EntityAttributeGroup; 111import com.echothree.model.data.core.server.entity.EntityAttributeType; 112import com.echothree.model.data.core.server.entity.EntityBooleanAttribute; 113import com.echothree.model.data.core.server.entity.EntityBooleanDefault; 114import com.echothree.model.data.core.server.entity.EntityClobAttribute; 115import com.echothree.model.data.core.server.entity.EntityDateAttribute; 116import com.echothree.model.data.core.server.entity.EntityDateDefault; 117import com.echothree.model.data.core.server.entity.EntityGeoPointAttribute; 118import com.echothree.model.data.core.server.entity.EntityGeoPointDefault; 119import com.echothree.model.data.core.server.entity.EntityInstance; 120import com.echothree.model.data.core.server.entity.EntityIntegerAttribute; 121import com.echothree.model.data.core.server.entity.EntityIntegerDefault; 122import com.echothree.model.data.core.server.entity.EntityListItem; 123import com.echothree.model.data.core.server.entity.EntityListItemAttribute; 124import com.echothree.model.data.core.server.entity.EntityListItemDefault; 125import com.echothree.model.data.core.server.entity.EntityLongAttribute; 126import com.echothree.model.data.core.server.entity.EntityLongDefault; 127import com.echothree.model.data.core.server.entity.EntityMultipleListItemAttribute; 128import com.echothree.model.data.core.server.entity.EntityMultipleListItemDefault; 129import com.echothree.model.data.core.server.entity.EntityNameAttribute; 130import com.echothree.model.data.core.server.entity.EntityStringAttribute; 131import com.echothree.model.data.core.server.entity.EntityStringDefault; 132import com.echothree.model.data.core.server.entity.EntityTimeAttribute; 133import com.echothree.model.data.core.server.entity.EntityTimeDefault; 134import com.echothree.model.data.core.server.entity.EntityType; 135import com.echothree.model.data.core.server.entity.MimeType; 136import com.echothree.model.data.core.server.value.EntityAttributeDetailValue; 137import com.echothree.model.data.core.server.value.EntityListItemDetailValue; 138import com.echothree.model.data.party.common.pk.PartyPK; 139import com.echothree.model.data.party.server.entity.Language; 140import com.echothree.model.data.queue.server.value.QueuedEntityValue; 141import com.echothree.model.data.sequence.server.entity.Sequence; 142import com.echothree.model.data.uom.server.entity.UnitOfMeasureType; 143import com.echothree.model.data.workflow.server.entity.Workflow; 144import com.echothree.util.common.message.ExecutionErrors; 145import com.echothree.util.common.persistence.BasePK; 146import com.echothree.util.server.control.BaseLogic; 147import com.echothree.util.server.message.ExecutionErrorAccumulator; 148import com.echothree.util.server.persistence.EntityPermission; 149import com.echothree.util.server.persistence.Session; 150import java.util.ArrayList; 151import java.util.List; 152import java.util.regex.Pattern; 153import javax.enterprise.context.ApplicationScoped; 154import javax.inject.Inject; 155 156@ApplicationScoped 157public class EntityAttributeLogic 158 extends BaseLogic { 159 160 @Inject 161 protected EntityAttributeGroupControl entityAttributeGroupControl; 162 163 @Inject 164 IndexControl indexControl; 165 166 @Inject 167 QueueControl queueControl; 168 169 @Inject 170 SequenceControl sequenceControl; 171 172 @Inject 173 WorkflowControl workflowControl; 174 175 @Inject 176 protected EntityAttributeGroupLogic entityAttributeGroupLogic; 177 178 @Inject 179 EntityInstanceLogic entityInstanceLogic; 180 181 @Inject 182 EntityTypeLogic entityTypeLogic; 183 184 @Inject 185 QueueTypeLogic queueTypeLogic; 186 187 @Inject 188 SequenceGeneratorLogic sequenceGeneratorLogic; 189 190 protected EntityAttributeLogic() { 191 super(); 192 } 193 194 public EntityAttributeType getEntityAttributeTypeByName(final ExecutionErrorAccumulator eea, final String entityAttributeTypeName) { 195 var entityAttributeType = coreControl.getEntityAttributeTypeByName(entityAttributeTypeName); 196 197 if(entityAttributeType == null) { 198 handleExecutionError(UnknownEntityAttributeTypeNameException.class, eea, ExecutionErrors.UnknownEntityAttributeTypeName.name(), entityAttributeTypeName); 199 } 200 201 return entityAttributeType; 202 } 203 204 public EntityAttributeType getEntityAttributeTypeByUuid(final ExecutionErrorAccumulator eea, final String uuid, final EntityPermission entityPermission) { 205 EntityAttributeType entityAttributeType = null; 206 207 var entityInstance = entityInstanceLogic.getEntityInstance(eea, (String)null, uuid, 208 ComponentVendors.ECHO_THREE.name(), EntityTypes.EntityAttributeType.name()); 209 210 if(eea == null || !eea.hasExecutionErrors()) { 211 entityAttributeType = coreControl.getEntityAttributeTypeByEntityInstance(entityInstance, entityPermission); 212 } 213 214 return entityAttributeType; 215 } 216 217 public EntityAttributeType getEntityAttributeTypeByUuid(final ExecutionErrorAccumulator eea, final String uuid) { 218 return getEntityAttributeTypeByUuid(eea, uuid, EntityPermission.READ_ONLY); 219 } 220 221 public EntityAttributeType getEntityAttributeTypeByUuidForUpdate(final ExecutionErrorAccumulator eea, final String uuid) { 222 return getEntityAttributeTypeByUuid(eea, uuid, EntityPermission.READ_WRITE); 223 } 224 225 public EntityAttributeGroup getEntityAttributeGroupByName(final ExecutionErrorAccumulator eea, final EntityType entityType, final String entityAttributeGroupName) { 226 return entityAttributeGroupLogic.getEntityAttributeGroupByName(eea, entityType, entityAttributeGroupName); 227 } 228 229 public EntityAttributeGroup getEntityAttributeGroupByUuid(final ExecutionErrorAccumulator eea, final String uuid, final EntityPermission entityPermission) { 230 EntityAttributeGroup entityAttributeGroup = null; 231 232 var entityInstance = entityInstanceLogic.getEntityInstance(eea, (String)null, uuid, 233 ComponentVendors.ECHO_THREE.name(), EntityTypes.EntityAttributeGroup.name()); 234 235 if(eea == null || !eea.hasExecutionErrors()) { 236 entityAttributeGroup = entityAttributeGroupControl.getEntityAttributeGroupByEntityInstance(entityInstance, entityPermission); 237 } 238 239 return entityAttributeGroup; 240 } 241 242 public EntityAttributeGroup getEntityAttributeGroupByUuid(final ExecutionErrorAccumulator eea, final String uuid) { 243 return getEntityAttributeGroupByUuid(eea, uuid, EntityPermission.READ_ONLY); 244 } 245 246 public EntityAttributeGroup getEntityAttributeGroupByUuidForUpdate(final ExecutionErrorAccumulator eea, final String uuid) { 247 return getEntityAttributeGroupByUuid(eea, uuid, EntityPermission.READ_WRITE); 248 } 249 250 public EntityAttribute createEntityAttribute(final ExecutionErrorAccumulator eea, final EntityType entityType, 251 String entityAttributeName, final EntityAttributeType entityAttributeType, final Boolean trackRevisions, 252 final Boolean checkContentWebAddress, final String validationPattern, final Integer upperRangeIntegerValue, 253 final Integer upperLimitIntegerValue, final Integer lowerLimitIntegerValue, final Integer lowerRangeIntegerValue, 254 final Long upperRangeLongValue, final Long upperLimitLongValue, final Long lowerLimitLongValue, 255 final Long lowerRangeLongValue, final Sequence entityListItemSequence, final UnitOfMeasureType unitOfMeasureType, 256 final Workflow workflow, final Integer sortOrder, final BasePK createdBy, final Language language, 257 final String description) { 258 EntityAttribute entityAttribute = null; 259 var entityTypeDetail = entityType.getLastDetail(); 260 261 if(entityTypeDetail.getIsExtensible()) { 262 if(entityAttributeName == null) { 263 var sequence = sequenceControl.getDefaultSequenceUsingNames(SequenceTypes.ENTITY_ATTRIBUTE.name()); 264 265 entityAttributeName = sequenceGeneratorLogic.getNextSequenceValue(sequence); 266 } 267 268 entityAttribute = coreControl.getEntityAttributeByName(entityType, entityAttributeName); 269 270 if(entityAttribute == null) { 271 var entityAttributeTypeEnum = EntityAttributeTypes.valueOf(entityAttributeType.getEntityAttributeTypeName()); 272 273 switch(entityAttributeTypeEnum) { 274 case WORKFLOW -> { 275 if(coreControl.countEntityAttributesByEntityTypeAndWorkflow(entityType, workflow) != 0) { 276 handleExecutionError(DuplicateWorkflowUsageInEntityAttributeException.class, eea, ExecutionErrors.DuplicateWorkflowUsageInEntityAttribute.name(), 277 entityTypeDetail.getComponentVendor().getLastDetail().getComponentVendorName(), entityTypeDetail.getEntityTypeName(), 278 workflow.getLastDetail().getWorkflowName()); 279 } else { 280 if(!workflowControl.workflowEntityTypeExists(workflow, entityType)) { 281 handleExecutionError(UnknownWorkflowEntityTypeException.class, eea, ExecutionErrors.UnknownWorkflowEntityType.name(), 282 workflow.getLastDetail().getWorkflowName(), entityTypeDetail.getComponentVendor().getLastDetail().getComponentVendorName(), 283 entityTypeDetail.getEntityTypeName()); 284 } 285 286 } 287 } 288 default -> { 289 // Nothing required for other EntityAttributeTypes 290 } 291 } 292 293 if(!hasExecutionErrors(eea)) { 294 entityAttribute = coreControl.createEntityAttribute(entityType, entityAttributeName, entityAttributeType, 295 trackRevisions, sortOrder, createdBy); 296 297 if(description != null) { 298 coreControl.createEntityAttributeDescription(entityAttribute, language, description, createdBy); 299 } 300 301 switch(entityAttributeTypeEnum) { 302 case BLOB -> 303 coreControl.createEntityAttributeBlob(entityAttribute, checkContentWebAddress, createdBy); 304 case STRING -> { 305 if(validationPattern != null) { 306 coreControl.createEntityAttributeString(entityAttribute, validationPattern, createdBy); 307 } 308 } 309 case INTEGER -> { 310 if(upperRangeIntegerValue != null || upperLimitIntegerValue != null || lowerLimitIntegerValue != null || lowerRangeIntegerValue != null) { 311 coreControl.createEntityAttributeInteger(entityAttribute, upperRangeIntegerValue, upperLimitIntegerValue, 312 lowerLimitIntegerValue, lowerRangeIntegerValue, createdBy); 313 } 314 if(unitOfMeasureType != null) { 315 coreControl.createEntityAttributeNumeric(entityAttribute, unitOfMeasureType, createdBy); 316 } 317 } 318 case LONG -> { 319 if(upperRangeLongValue != null || upperLimitLongValue != null || lowerLimitLongValue != null || lowerRangeLongValue != null) { 320 coreControl.createEntityAttributeLong(entityAttribute, upperRangeLongValue, upperLimitLongValue, 321 lowerLimitLongValue, lowerRangeLongValue, createdBy); 322 } 323 if(unitOfMeasureType != null) { 324 coreControl.createEntityAttributeNumeric(entityAttribute, unitOfMeasureType, createdBy); 325 } 326 } 327 case LISTITEM, MULTIPLELISTITEM -> { 328 if(entityListItemSequence != null) { 329 coreControl.createEntityAttributeListItem(entityAttribute, entityListItemSequence, createdBy); 330 } 331 } 332 case WORKFLOW -> { 333 if(workflow != null) { 334 coreControl.createEntityAttributeWorkflow(entityAttribute, workflow, createdBy); 335 } 336 } 337 default -> { 338 // Nothing required for other EntityAttributeTypes 339 } 340 } 341 } 342 } else { 343 handleExecutionError(DuplicateEntityAttributeNameException.class, eea, ExecutionErrors.DuplicateEntityAttributeName.name(), 344 entityTypeDetail.getComponentVendor().getLastDetail().getComponentVendorName(), entityTypeDetail.getEntityTypeName(), entityAttributeName); 345 } 346 } else { 347 handleExecutionError(EntityTypeIsNotExtensibleException.class, eea, ExecutionErrors.EntityTypeIsNotExtensible.name(), 348 entityTypeDetail.getComponentVendor().getLastDetail().getComponentVendorName(), entityTypeDetail.getEntityTypeName()); 349 } 350 351 return entityAttribute; 352 } 353 354 public EntityAttribute getEntityAttributeByName(final ExecutionErrorAccumulator eea, final EntityType entityType, 355 final String entityAttributeName, EntityPermission entityPermission) { 356 var entityAttribute = coreControl.getEntityAttributeByName(entityType, entityAttributeName, entityPermission); 357 358 if(entityAttribute == null) { 359 var entityTypeDetail = entityType.getLastDetail(); 360 361 handleExecutionError(UnknownEntityAttributeNameException.class, eea, ExecutionErrors.UnknownEntityAttributeName.name(), 362 entityTypeDetail.getComponentVendor().getLastDetail().getComponentVendorName(), entityTypeDetail.getEntityTypeName(), entityAttributeName); 363 } 364 365 return entityAttribute; 366 } 367 368 public EntityAttribute getEntityAttributeByName(final ExecutionErrorAccumulator eea, final EntityType entityType, 369 final String entityAttributeName) { 370 return getEntityAttributeByName(eea, entityType, entityAttributeName, EntityPermission.READ_ONLY); 371 } 372 373 public EntityAttribute getEntityAttributeByNameForUpdate(final ExecutionErrorAccumulator eea, final EntityType entityType, 374 final String entityAttributeName) { 375 return getEntityAttributeByName(eea, entityType, entityAttributeName, EntityPermission.READ_WRITE); 376 } 377 378 public EntityAttribute getEntityAttributeByName(final ExecutionErrorAccumulator eea, final ComponentVendor componentVendor, 379 final String entityTypeName, final String entityAttributeName, EntityPermission entityPermission) { 380 var entityType = entityTypeLogic.getEntityTypeByName(eea, componentVendor, entityTypeName); 381 EntityAttribute entityAttribute = null; 382 383 if(eea == null || !eea.hasExecutionErrors()) { 384 entityAttribute = getEntityAttributeByName(eea, entityType, entityAttributeName, entityPermission); 385 } 386 387 return entityAttribute; 388 } 389 390 public EntityAttribute getEntityAttributeByName(final ExecutionErrorAccumulator eea, final ComponentVendor componentVendor, 391 final String entityTypeName, final String entityAttributeName) { 392 return getEntityAttributeByName(eea, componentVendor, entityTypeName, entityAttributeName, EntityPermission.READ_ONLY); 393 } 394 395 public EntityAttribute getEntityAttributeByNameForUpdate(final ExecutionErrorAccumulator eea, final ComponentVendor componentVendor, 396 final String entityTypeName, final String entityAttributeName) { 397 return getEntityAttributeByName(eea, componentVendor, entityTypeName, entityAttributeName, EntityPermission.READ_WRITE); 398 } 399 400 public EntityAttribute getEntityAttributeByName(final ExecutionErrorAccumulator eea, final String componentVendorName, 401 final String entityTypeName, final String entityAttributeName, EntityPermission entityPermission) { 402 var entityType = entityTypeLogic.getEntityTypeByName(eea, componentVendorName, entityTypeName); 403 EntityAttribute entityAttribute = null; 404 405 if(eea == null || !eea.hasExecutionErrors()) { 406 entityAttribute = getEntityAttributeByName(eea, entityType, entityAttributeName, entityPermission); 407 } 408 409 return entityAttribute; 410 } 411 412 public EntityAttribute getEntityAttributeByName(final ExecutionErrorAccumulator eea, final String componentVendorName, 413 final String entityTypeName, final String entityAttributeName) { 414 return getEntityAttributeByName(eea, componentVendorName, entityTypeName, entityAttributeName, EntityPermission.READ_ONLY); 415 } 416 417 public EntityAttribute getEntityAttributeByNameForUpdate(final ExecutionErrorAccumulator eea, final String componentVendorName, 418 final String entityTypeName, final String entityAttributeName) { 419 return getEntityAttributeByName(eea, componentVendorName, entityTypeName, entityAttributeName, EntityPermission.READ_WRITE); 420 } 421 422 public EntityAttribute getEntityAttributeByUuid(final ExecutionErrorAccumulator eea, final String uuid, 423 final EntityPermission entityPermission) { 424 EntityAttribute entityAttribute = null; 425 426 var entityInstance = entityInstanceLogic.getEntityInstance(eea, (String)null, uuid, 427 ComponentVendors.ECHO_THREE.name(), EntityTypes.EntityAttribute.name()); 428 429 if(eea == null || !eea.hasExecutionErrors()) { 430 entityAttribute = coreControl.getEntityAttributeByEntityInstance(entityInstance, entityPermission); 431 } 432 433 return entityAttribute; 434 } 435 436 public EntityAttribute getEntityAttributeByUuid(final ExecutionErrorAccumulator eea, final String uuid) { 437 return getEntityAttributeByUuid(eea, uuid, EntityPermission.READ_ONLY); 438 } 439 440 public EntityAttribute getEntityAttributeByUuidForUpdate(final ExecutionErrorAccumulator eea, final String uuid) { 441 return getEntityAttributeByUuid(eea, uuid, EntityPermission.READ_WRITE); 442 } 443 444 // For when we need to determine the EntityType from what the user passes in: 445 public EntityAttribute getEntityAttributeByUniversalSpec(final ExecutionErrorAccumulator eea, final EntityAttributeUniversalSpec universalSpec, 446 final EntityPermission entityPermission) { 447 EntityAttribute entityAttribute = null; 448 var componentVendorName = universalSpec.getComponentVendorName(); 449 var entityTypeName = universalSpec.getEntityTypeName(); 450 var entityAttributeName = universalSpec.getEntityAttributeName(); 451 var universalSpecCount = entityInstanceLogic.countPossibleEntitySpecs(universalSpec); 452 var parameterCount = (componentVendorName == null && entityTypeName == null && entityAttributeName == null ? 0 : 1) 453 + universalSpecCount; 454 455 switch(parameterCount) { 456 case 1 -> { 457 if(universalSpecCount == 1) { 458 var entityInstance = entityInstanceLogic.getEntityInstance(eea, universalSpec, 459 ComponentVendors.ECHO_THREE.name(), EntityTypes.EntityAttribute.name()); 460 461 if(eea == null || !eea.hasExecutionErrors()) { 462 entityAttribute = coreControl.getEntityAttributeByEntityInstance(entityInstance, entityPermission); 463 } 464 } else { 465 entityAttribute = getEntityAttributeByName(eea, componentVendorName, entityTypeName, entityAttributeName, entityPermission); 466 } 467 } 468 default -> { 469 handleExecutionError(InvalidParameterCountException.class, eea, ExecutionErrors.InvalidParameterCount.name()); 470 } 471 } 472 473 return entityAttribute; 474 } 475 476 public EntityAttribute getEntityAttributeByUniversalSpec(final ExecutionErrorAccumulator eea, final EntityAttributeUniversalSpec universalSpec) { 477 return getEntityAttributeByUniversalSpec(eea, universalSpec, EntityPermission.READ_ONLY); 478 } 479 480 public EntityAttribute getEntityAttributeByUniversalSpecForUpdate(final ExecutionErrorAccumulator eea, final EntityAttributeUniversalSpec universalSpec) { 481 return getEntityAttributeByUniversalSpec(eea, universalSpec, EntityPermission.READ_WRITE); 482 } 483 484 // For when we can get the EntityType from the EntityInstance: 485 public EntityAttribute getEntityAttribute(final ExecutionErrorAccumulator eea, final EntityInstance entityInstance, 486 final EntityAttributeSpec spec, final EntityAttributeUuid uuid, final EntityPermission entityPermission, 487 final EntityAttributeTypes... entityAttributeTypes) { 488 EntityAttribute entityAttribute = null; 489 var entityAttributeName = spec.getEntityAttributeName(); 490 var entityAttributeUuid = uuid.getEntityAttributeUuid(); 491 var parameterCount = (entityAttributeName == null ? 0 : 1) + (entityAttributeUuid == null ? 0 : 1); 492 493 if (parameterCount == 1) { 494 entityAttribute = entityAttributeName == null 495 ? getEntityAttributeByUuid(eea, entityAttributeUuid, entityPermission) 496 : getEntityAttributeByName(eea, entityInstance.getEntityType(), entityAttributeName, entityPermission); 497 } else { 498 handleExecutionError(InvalidParameterCountException.class, eea, ExecutionErrors.InvalidParameterCount.name()); 499 } 500 501 // If there are no other errors, and the EntityAttribute was specified by ULID, then verify the EntityType... 502 if((eea == null || !eea.hasExecutionErrors()) && entityAttributeUuid != null) { 503 if(!entityInstance.getEntityType().equals(entityAttribute.getLastDetail().getEntityType())) { 504 var expectedEntityTypeDetail = entityAttribute.getLastDetail().getEntityType().getLastDetail(); 505 var suppliedEntityTypeDetail = entityInstance.getEntityType().getLastDetail(); 506 507 handleExecutionError(MismatchedEntityTypeException.class, eea, ExecutionErrors.MismatchedEntityType.name(), 508 expectedEntityTypeDetail.getComponentVendor().getLastDetail().getComponentVendorName(), 509 expectedEntityTypeDetail.getEntityTypeName(), 510 suppliedEntityTypeDetail.getComponentVendor().getLastDetail().getComponentVendorName(), 511 suppliedEntityTypeDetail.getEntityTypeName()); 512 } 513 } 514 515 // If there are no other errors, and there are one of more entityAttributeTypes specified, then verify the EntityAttributeType... 516 if((eea == null || !eea.hasExecutionErrors()) && entityAttributeTypes.length > 0) { 517 var entityAttributeTypeName = entityAttribute.getLastDetail().getEntityAttributeType().getEntityAttributeTypeName(); 518 var found = false; 519 520 for(var entityAttributeType : entityAttributeTypes) { 521 if(entityAttributeTypeName.equals(entityAttributeType.name())) { 522 found = true; 523 break; 524 } 525 } 526 527 if(!found) { 528 handleExecutionError(MismatchedEntityAttributeTypeException.class, eea, ExecutionErrors.MismatchedEntityAttributeType.name(), 529 entityAttributeTypeName); 530 entityAttribute = null; 531 } 532 } 533 534 return entityAttribute; 535 } 536 537 public EntityAttribute getEntityAttribute(final ExecutionErrorAccumulator eea, final EntityInstance entityInstance, 538 final EntityAttributeSpec spec, final EntityAttributeUuid uuid, final EntityAttributeTypes... entityAttributeTypes) { 539 return getEntityAttribute(eea, entityInstance, spec, uuid, EntityPermission.READ_ONLY, entityAttributeTypes); 540 } 541 542 public EntityAttribute getEntityAttributeForUpdate(final ExecutionErrorAccumulator eea, final EntityInstance entityInstance, 543 final EntityAttributeSpec spec, final EntityAttributeUuid uuid, final EntityAttributeTypes... entityAttributeTypes) { 544 return getEntityAttribute(eea, entityInstance, spec, uuid, EntityPermission.READ_WRITE, entityAttributeTypes); 545 } 546 547 public EntityInstance getEntityInstanceAttribute(final ExecutionErrorAccumulator eea, 548 final EntityInstanceAttributeSpec entityInstanceAttributeSpec) { 549 var entityRef = entityInstanceAttributeSpec.getEntityRefAttribute(); 550 var uuid = entityInstanceAttributeSpec.getUuidAttribute(); 551 552 return entityInstanceLogic.getEntityInstance(eea, entityRef, uuid, null); 553 } 554 555 private List<EntityInstancePKResult> getEntityInstanceResultsByEntityAttributeTypeName(EntityAttribute entityAttribute) { 556 List<EntityInstancePKResult> entityInstanceResults = null; 557 var entityAttributeTypeName = entityAttribute.getLastDetail().getEntityAttributeType().getEntityAttributeTypeName(); 558 559 if(entityAttributeTypeName.equals(EntityAttributeTypes.BOOLEAN.name())) { 560 entityInstanceResults = new EntityInstancePKsByBooleanEntityAttributeQuery().execute(entityAttribute); 561 } else if(entityAttributeTypeName.equals(EntityAttributeTypes.NAME.name())) { 562 entityInstanceResults = new EntityInstancePKsByNameEntityAttributeQuery().execute(entityAttribute); 563 } else if(entityAttributeTypeName.equals(EntityAttributeTypes.INTEGER.name())) { 564 entityInstanceResults = new EntityInstancePKsByIntegerEntityAttributeQuery().execute(entityAttribute); 565 } else if(entityAttributeTypeName.equals(EntityAttributeTypes.LONG.name())) { 566 entityInstanceResults = new EntityInstancePKsByLongEntityAttributeQuery().execute(entityAttribute); 567 } else if(entityAttributeTypeName.equals(EntityAttributeTypes.STRING.name())) { 568 entityInstanceResults = new EntityInstancePKsByStringEntityAttributeQuery().execute(entityAttribute); 569 } else if(entityAttributeTypeName.equals(EntityAttributeTypes.GEOPOINT.name())) { 570 entityInstanceResults = new EntityInstancePKsByGeoPointEntityAttributeQuery().execute(entityAttribute); 571 } else if(entityAttributeTypeName.equals(EntityAttributeTypes.BLOB.name())) { 572 entityInstanceResults = new EntityInstancePKsByBlobEntityAttributeQuery().execute(entityAttribute); 573 } else if(entityAttributeTypeName.equals(EntityAttributeTypes.CLOB.name())) { 574 entityInstanceResults = new EntityInstancePKsByClobEntityAttributeQuery().execute(entityAttribute); 575 } else if(entityAttributeTypeName.equals(EntityAttributeTypes.DATE.name())) { 576 entityInstanceResults = new EntityInstancePKsByDateEntityAttributeQuery().execute(entityAttribute); 577 } else if(entityAttributeTypeName.equals(EntityAttributeTypes.TIME.name())) { 578 entityInstanceResults = new EntityInstancePKsByTimeEntityAttributeQuery().execute(entityAttribute); 579 } else if(entityAttributeTypeName.equals(EntityAttributeTypes.LISTITEM.name())) { 580 entityInstanceResults = new EntityInstancePKsByListItemEntityAttributeQuery().execute(entityAttribute); 581 } else if(entityAttributeTypeName.equals(EntityAttributeTypes.MULTIPLELISTITEM.name())) { 582 entityInstanceResults = new EntityInstancePKsByMultipleListItemEntityAttributeQuery().execute(entityAttribute); 583 } else if(entityAttributeTypeName.equals(EntityAttributeTypes.ENTITY.name())) { 584 entityInstanceResults = new EntityInstancePKsByEntityEntityAttributeQuery().execute(entityAttribute); 585 } else if(entityAttributeTypeName.equals(EntityAttributeTypes.COLLECTION.name())) { 586 entityInstanceResults = new EntityInstancePKsByCollectionEntityAttributeQuery().execute(entityAttribute); 587 } 588 589 return entityInstanceResults; 590 } 591 592 public void updateEntityAttributeFromValue(final Session session, final EntityAttributeDetailValue entityAttributeDetailValue, 593 final BasePK updatedBy) { 594 if(entityAttributeDetailValue.getEntityAttributeNameHasBeenModified()) { 595 final var entityAttribute = coreControl.getEntityAttributeByPK(entityAttributeDetailValue.getEntityAttributePK()); 596 597 if(indexControl.countIndexTypesByEntityType(entityAttribute.getLastDetail().getEntityType()) > 0) { 598 final var queueTypePK = queueTypeLogic.getQueueTypeByName(null, QueueTypes.INDEXING.name()).getPrimaryKey(); 599 final var entityInstanceResults = getEntityInstanceResultsByEntityAttributeTypeName(entityAttribute); 600 final var queuedEntities = new ArrayList<QueuedEntityValue>(entityInstanceResults.size()); 601 602 for(final var entityInstanceResult : entityInstanceResults) { 603 queuedEntities.add(new QueuedEntityValue(queueTypePK, entityInstanceResult.getEntityInstancePK(), session.getStartTime())); 604 } 605 606 queueControl.createQueuedEntities(queuedEntities); 607 } 608 } 609 610 coreControl.updateEntityAttributeFromValue(entityAttributeDetailValue, updatedBy); 611 } 612 613 public void deleteEntityAttribute(final ExecutionErrorAccumulator eea, final EntityAttribute entityAttribute, 614 final PartyPK deletedByPK) { 615 coreControl.deleteEntityAttribute(entityAttribute, deletedByPK); 616 } 617 618 public EntityListItem createEntityListItem(final ExecutionErrorAccumulator eea, final EntityAttribute entityAttribute, 619 String entityListItemName, final Boolean isDefault, final Integer sortOrder, final BasePK createdBy, 620 final Language language, final String description) { 621 EntityListItem entityListItem = null; 622 var entityAttributeTypeName = entityAttribute.getLastDetail().getEntityAttributeType().getEntityAttributeTypeName(); 623 624 if(entityAttributeTypeName.equals(EntityAttributeTypes.LISTITEM.name()) 625 || entityAttributeTypeName.equals(EntityAttributeTypes.MULTIPLELISTITEM.name())) { 626 if(entityListItemName == null) { 627 var entityAttributeListItem = coreControl.getEntityAttributeListItem(entityAttribute); 628 var entityListItemSequence = entityAttributeListItem == null ? null : entityAttributeListItem.getEntityListItemSequence(); 629 630 if(entityListItemSequence == null) { 631 entityListItemSequence = sequenceGeneratorLogic.getDefaultSequence(eea, SequenceTypes.ENTITY_LIST_ITEM.name()); 632 } 633 634 if(eea != null && !hasExecutionErrors(eea)) { 635 entityListItemName = sequenceGeneratorLogic.getNextSequenceValue(eea, entityListItemSequence); 636 } else { 637 handleExecutionError(MissingDefaultSequenceException.class, eea, ExecutionErrors.MissingDefaultSequence.name(), 638 SequenceTypes.ENTITY_LIST_ITEM.name()); 639 } 640 } 641 642 if(eea != null && !hasExecutionErrors(eea)) { 643 entityListItem = entityListItemName == null ? null : coreControl.getEntityListItemByName(entityAttribute, entityListItemName); 644 645 if(entityListItem == null) { 646 entityListItem = coreControl.createEntityListItem(entityAttribute, entityListItemName, isDefault, sortOrder, 647 createdBy); 648 649 if(description != null) { 650 coreControl.createEntityListItemDescription(entityListItem, language, description, createdBy); 651 } 652 } else { 653 var entityAttributeDetail = entityAttribute.getLastDetail(); 654 var entityTypeDetail = entityAttributeDetail.getEntityType().getLastDetail(); 655 656 handleExecutionError(DuplicateEntityListItemNameException.class, eea, ExecutionErrors.DuplicateEntityListItemName.name(), 657 entityTypeDetail.getComponentVendor().getLastDetail().getComponentVendorName(), 658 entityTypeDetail.getEntityTypeName(), entityAttributeDetail.getEntityAttributeName(), 659 entityListItemName); 660 } 661 } 662 } else { 663 var entityAttributeDetail = entityAttribute.getLastDetail(); 664 var entityTypeDetail = entityAttributeDetail.getEntityType().getLastDetail(); 665 666 handleExecutionError(InvalidEntityAttributeTypeException.class, eea, ExecutionErrors.InvalidEntityAttributeType.name(), 667 entityTypeDetail.getComponentVendor().getLastDetail().getComponentVendorName(), 668 entityTypeDetail.getEntityTypeName(), entityAttributeDetail.getEntityAttributeName(), 669 entityAttributeTypeName); 670 } 671 672 return entityListItem; 673 } 674 675 public EntityListItem getEntityListItemByName(final ExecutionErrorAccumulator eea, final EntityAttribute entityAttribute, 676 final String entityListItemName, final EntityPermission entityPermission) { 677 var entityListItem = coreControl.getEntityListItemByName(entityAttribute, entityListItemName, entityPermission); 678 679 if(entityListItem == null) { 680 var entityAttributeDetail = entityAttribute.getLastDetail(); 681 var entityTypeDetail = entityAttributeDetail.getEntityType().getLastDetail(); 682 683 handleExecutionError(UnknownEntityListItemNameException.class, eea, ExecutionErrors.UnknownEntityListItemName.name(), 684 entityTypeDetail.getComponentVendor().getLastDetail().getComponentVendorName(), 685 entityTypeDetail.getEntityTypeName(), entityListItemName); 686 } 687 688 return entityListItem; 689 } 690 691 public EntityListItem getEntityListItemByName(final ExecutionErrorAccumulator eea, final EntityAttribute entityAttribute, 692 final String entityListItemName) { 693 return getEntityListItemByName(eea, entityAttribute, entityListItemName, EntityPermission.READ_ONLY); 694 } 695 696 public EntityListItem getEntityListItemByNameForUpdate(final ExecutionErrorAccumulator eea, final EntityAttribute entityAttribute, 697 final String entityListItemName) { 698 return getEntityListItemByName(eea, entityAttribute, entityListItemName, EntityPermission.READ_WRITE); 699 } 700 701 public EntityListItem getEntityListItemByName(final ExecutionErrorAccumulator eea, final String componentVendorName, 702 final String entityTypeName, final String entityAttributeName, final String entityListItemName, 703 final EntityPermission entityPermission) { 704 var entityAttribute = this.getEntityAttributeByName(eea, componentVendorName, 705 entityTypeName, entityAttributeName); 706 EntityListItem entityListItem = null; 707 708 if(eea == null || !eea.hasExecutionErrors()) { 709 entityListItem = getEntityListItemByName(eea, entityAttribute, entityListItemName, entityPermission); 710 } 711 712 return entityListItem; 713 } 714 715 public EntityListItem getEntityListItemByName(final ExecutionErrorAccumulator eea, final String componentVendorName, 716 final String entityTypeName, final String entityAttributeName, final String entityListItemName) { 717 return getEntityListItemByName(eea, componentVendorName, entityTypeName, entityAttributeName, entityListItemName, 718 EntityPermission.READ_ONLY); 719 } 720 721 public EntityListItem getEntityListItemByNameForUpdate(final ExecutionErrorAccumulator eea, final String componentVendorName, 722 final String entityTypeName, final String entityAttributeName, final String entityListItemName) { 723 return getEntityListItemByName(eea, componentVendorName, entityTypeName, entityAttributeName, entityListItemName, 724 EntityPermission.READ_WRITE); 725 } 726 727 public EntityListItem getEntityListItemByUuid(final ExecutionErrorAccumulator eea, final String uuid, final EntityPermission entityPermission) { 728 EntityListItem entityListItem = null; 729 730 var entityInstance = entityInstanceLogic.getEntityInstance(eea, (String)null, uuid, 731 ComponentVendors.ECHO_THREE.name(), EntityTypes.EntityListItem.name()); 732 733 if(eea == null || !eea.hasExecutionErrors()) { 734 entityListItem = coreControl.getEntityListItemByEntityInstance(entityInstance, entityPermission); 735 } 736 737 return entityListItem; 738 } 739 740 public EntityListItem getEntityListItemByUuid(final ExecutionErrorAccumulator eea, final String uuid) { 741 return getEntityListItemByUuid(eea, uuid, EntityPermission.READ_ONLY); 742 } 743 744 public EntityListItem getEntityListItemByUuidForUpdate(final ExecutionErrorAccumulator eea, final String uuid) { 745 return getEntityListItemByUuid(eea, uuid, EntityPermission.READ_WRITE); 746 } 747 748 public EntityListItem getEntityListItemByUniversalSpec(final ExecutionErrorAccumulator eea, final EntityListItemUniversalSpec universalSpec, 749 final EntityPermission entityPermission) { 750 EntityListItem entityListItem = null; 751 var componentVendorName = universalSpec.getComponentVendorName(); 752 var entityTypeName = universalSpec.getEntityTypeName(); 753 var entityAttributeName = universalSpec.getEntityAttributeName(); 754 var entityListItemName = universalSpec.getEntityListItemName(); 755 var universalSpecCount = entityInstanceLogic.countPossibleEntitySpecs(universalSpec); 756 var parameterCount = (componentVendorName == null && entityTypeName == null && entityAttributeName == null && entityListItemName == null ? 0 : 1) 757 + universalSpecCount; 758 759 switch(parameterCount) { 760 case 1 -> { 761 if(universalSpecCount == 1) { 762 var entityInstance = entityInstanceLogic.getEntityInstance(eea, universalSpec, 763 ComponentVendors.ECHO_THREE.name(), EntityTypes.EntityListItem.name()); 764 765 if(eea == null || !eea.hasExecutionErrors()) { 766 entityListItem = coreControl.getEntityListItemByEntityInstance(entityInstance, entityPermission); 767 } 768 } else { 769 entityListItem = getEntityListItemByName(eea, componentVendorName, entityTypeName, entityAttributeName, 770 entityListItemName, entityPermission); 771 } 772 } 773 default -> { 774 handleExecutionError(InvalidParameterCountException.class, eea, ExecutionErrors.InvalidParameterCount.name()); 775 } 776 } 777 778 return entityListItem; 779 } 780 781 public EntityListItem getEntityListItemByUniversalSpec(final ExecutionErrorAccumulator eea, final EntityListItemUniversalSpec universalSpec) { 782 return getEntityListItemByUniversalSpec(eea, universalSpec, EntityPermission.READ_ONLY); 783 } 784 785 public EntityListItem getEntityListItemByUniversalSpecForUpdate(final ExecutionErrorAccumulator eea, final EntityListItemUniversalSpec universalSpec) { 786 return getEntityListItemByUniversalSpec(eea, universalSpec, EntityPermission.READ_WRITE); 787 } 788 789 public EntityListItem getEntityListItem(final ExecutionErrorAccumulator eea, final EntityAttribute entityAttribute, 790 final EntityListItemAttributeEdit edit, final EntityPermission entityPermission) { 791 EntityListItem entityListItem = null; 792 var entityListItemName = edit.getEntityListItemName(); 793 var entityListItemUuid = edit.getEntityListItemUuid(); 794 var parameterCount = (entityListItemName == null ? 0 : 1) + (entityListItemUuid == null ? 0 : 1); 795 796 if (parameterCount == 1) { 797 entityListItem = entityListItemName == null 798 ? getEntityListItemByUuid(eea, entityListItemUuid, entityPermission) 799 : getEntityListItemByName(eea, entityAttribute, entityListItemName, entityPermission); 800 } else { 801 handleExecutionError(InvalidParameterCountException.class, eea, ExecutionErrors.InvalidParameterCount.name()); 802 } 803 804 if((eea == null || !eea.hasExecutionErrors()) && entityListItemUuid != null) { 805 var foundEntityAttribute = entityListItem.getLastDetail().getEntityAttribute(); 806 807 if(!foundEntityAttribute.equals(entityAttribute)) { 808 handleExecutionError(MismatchedEntityListItemException.class, eea, ExecutionErrors.MismatchedEntityListItem.name(), 809 entityAttribute.getLastDetail().getEntityType().getLastDetail().getComponentVendor().getLastDetail().getComponentVendorName(), 810 entityAttribute.getLastDetail().getEntityType().getLastDetail().getEntityTypeName(), 811 entityAttribute.getLastDetail().getEntityAttributeName(), 812 foundEntityAttribute.getLastDetail().getEntityType().getLastDetail().getComponentVendor().getLastDetail().getComponentVendorName(), 813 foundEntityAttribute.getLastDetail().getEntityType().getLastDetail().getEntityTypeName(), 814 foundEntityAttribute.getLastDetail().getEntityAttributeName(), 815 entityListItem.getLastDetail().getEntityListItem()); 816 } 817 } 818 819 return entityListItem; 820 } 821 822 public EntityListItem getEntityListItem(final ExecutionErrorAccumulator eea, final EntityAttribute entityAttribute, 823 final EntityListItemAttributeEdit edit) { 824 return getEntityListItem(eea, entityAttribute, edit, EntityPermission.READ_ONLY); 825 } 826 827 public EntityListItem getEntityListItemForUpdate(final ExecutionErrorAccumulator eea, final EntityAttribute entityAttribute, 828 final EntityListItemAttributeEdit edit, final EntityListItemUuid uuid) { 829 return getEntityListItem(eea, entityAttribute, edit, EntityPermission.READ_WRITE); 830 } 831 832 public void updateEntityListItemFromValue(final Session session, EntityListItemDetailValue entityListItemDetailValue, BasePK updatedBy) { 833 if(entityListItemDetailValue.getEntityListItemNameHasBeenModified()) { 834 var entityListItem = coreControl.getEntityListItemByPK(entityListItemDetailValue.getEntityListItemPK()); 835 var entityAttributeDetail = entityListItem.getLastDetail().getEntityAttribute().getLastDetail(); 836 837 if(indexControl.countIndexTypesByEntityType(entityAttributeDetail.getEntityType()) > 0) { 838 var queueTypePK = queueTypeLogic.getQueueTypeByName(null, QueueTypes.INDEXING.name()).getPrimaryKey(); 839 var entityAttributeTypeName = entityAttributeDetail.getEntityAttributeType().getEntityAttributeTypeName(); 840 841 if(entityAttributeTypeName.equals(EntityAttributeTypes.LISTITEM.name())) { 842 var entityListItemAttributes = coreControl.getEntityListItemAttributesByEntityListItem(entityListItem); 843 List<QueuedEntityValue> queuedEntities = new ArrayList<>(entityListItemAttributes.size()); 844 845 entityListItemAttributes.forEach((entityListItemAttribute) -> { 846 queuedEntities.add(new QueuedEntityValue(queueTypePK, entityListItemAttribute.getEntityInstancePK(), session.getStartTime())); 847 }); 848 849 queueControl.createQueuedEntities(queuedEntities); 850 } else if(entityAttributeTypeName.equals(EntityAttributeTypes.MULTIPLELISTITEM.name())) { 851 var entityMultipleListItemAttributes = coreControl.getEntityMultipleListItemAttributesByEntityListItem(entityListItem); 852 List<QueuedEntityValue> queuedEntities = new ArrayList<>(entityMultipleListItemAttributes.size()); 853 854 entityMultipleListItemAttributes.forEach((entityMultipleListItemAttribute) -> { 855 queuedEntities.add(new QueuedEntityValue(queueTypePK, entityMultipleListItemAttribute.getEntityInstancePK(), session.getStartTime())); 856 }); 857 858 queueControl.createQueuedEntities(queuedEntities); 859 } 860 } 861 } 862 863 coreControl.updateEntityListItemFromValue(entityListItemDetailValue, updatedBy); 864 } 865 866 public void deleteEntityListItem(final ExecutionErrorAccumulator eea, EntityListItem entityListItem, BasePK deletedBy) { 867 coreControl.deleteEntityListItem(entityListItem, deletedBy); 868 } 869 870 private void checkEntityType(final ExecutionErrorAccumulator eea, final EntityAttribute entityAttribute, 871 final EntityInstance entityInstance) { 872 if(!entityInstance.getEntityType().equals(entityAttribute.getLastDetail().getEntityType())) { 873 var expectedEntityTypeDetail = entityAttribute.getLastDetail().getEntityType().getLastDetail(); 874 var suppliedEntityTypeDetail = entityInstance.getEntityType().getLastDetail(); 875 876 handleExecutionError(MismatchedEntityTypeException.class, eea, ExecutionErrors.MismatchedEntityType.name(), 877 expectedEntityTypeDetail.getComponentVendor().getLastDetail().getComponentVendorName(), 878 expectedEntityTypeDetail.getEntityTypeName(), 879 suppliedEntityTypeDetail.getComponentVendor().getLastDetail().getComponentVendorName(), 880 suppliedEntityTypeDetail.getEntityTypeName()); 881 } 882 } 883 884 private void checkEntityType(final ExecutionErrorAccumulator eea, final EntityAttribute entityAttribute, 885 final EntityAttributeTypes entityAttributeType) { 886 var entityAttributeTypeName = entityAttributeType.name(); 887 888 if(!entityAttribute.getLastDetail().getEntityAttributeType().getEntityAttributeTypeName().equals(entityAttributeTypeName)) { 889 var expectedEntityTypeDetail = entityAttribute.getLastDetail().getEntityType().getLastDetail(); 890 891 handleExecutionError(MismatchedEntityAttributeTypeException.class, eea, ExecutionErrors.MismatchedEntityAttributeType.name(), 892 expectedEntityTypeDetail.getComponentVendor().getLastDetail().getComponentVendorName(), 893 expectedEntityTypeDetail.getEntityTypeName(), 894 entityAttributeTypeName); 895 } 896 } 897 898 public EntityBooleanDefault createEntityBooleanDefault(final ExecutionErrorAccumulator eea, final EntityAttribute entityAttribute, 899 final Boolean booleanAttribute, final boolean addMissingAttributes, final BasePK createdBy) { 900 EntityBooleanDefault entityBooleanDefault = null; 901 902 checkEntityType(eea, entityAttribute, EntityAttributeTypes.BOOLEAN); 903 904 if(eea == null || !eea.hasExecutionErrors()) { 905 entityBooleanDefault = coreControl.getEntityBooleanDefault(entityAttribute); 906 907 if(entityBooleanDefault == null) { 908 coreControl.createEntityBooleanDefault(entityAttribute, booleanAttribute, createdBy); 909 910 if(addMissingAttributes) { 911 new EntityInstancesMissingBooleanEntityAttributeQuery().execute(entityAttribute).forEach(entityInstanceResult -> 912 coreControl.createEntityBooleanAttribute(entityAttribute.getPrimaryKey(), 913 entityInstanceResult.getEntityInstance(), booleanAttribute, createdBy)); 914 } 915 } else { 916 handleExecutionError(DuplicateEntityBooleanDefaultException.class, eea, ExecutionErrors.DuplicateEntityBooleanDefault.name(), 917 entityAttribute.getLastDetail().getEntityAttributeName()); 918 } 919 } 920 921 return entityBooleanDefault; 922 } 923 924 public void deleteEntityBooleanDefault(final ExecutionErrorAccumulator eea, final EntityAttribute entityAttribute, 925 final BasePK deletedBy) { 926 checkEntityType(eea, entityAttribute, EntityAttributeTypes.BOOLEAN); 927 928 if(eea == null || !eea.hasExecutionErrors()) { 929 var entityBooleanDefault = coreControl.getEntityBooleanDefaultForUpdate(entityAttribute); 930 931 if(entityBooleanDefault == null) { 932 handleExecutionError(UnknownEntityBooleanDefaultException.class, eea, ExecutionErrors.UnknownEntityBooleanDefault.name(), 933 entityAttribute.getLastDetail().getEntityAttributeName()); 934 } else { 935 coreControl.deleteEntityBooleanDefault(entityBooleanDefault, deletedBy); 936 } 937 } 938 } 939 940 public EntityBooleanAttribute createEntityBooleanAttribute(final ExecutionErrorAccumulator eea, final EntityAttribute entityAttribute, 941 final EntityInstance entityInstance, final Boolean booleanAttribute, final BasePK createdBy) { 942 EntityBooleanAttribute entityBooleanAttribute = null; 943 944 checkEntityType(eea, entityAttribute, entityInstance); 945 946 if(eea == null || !eea.hasExecutionErrors()) { 947 entityBooleanAttribute = coreControl.getEntityBooleanAttribute(entityAttribute, entityInstance); 948 949 if(entityBooleanAttribute == null) { 950 coreControl.createEntityBooleanAttribute(entityAttribute, entityInstance, booleanAttribute, createdBy); 951 } else { 952 handleExecutionError(DuplicateEntityBooleanAttributeException.class, eea, ExecutionErrors.DuplicateEntityBooleanAttribute.name(), 953 entityInstanceLogic.getEntityRefFromEntityInstance(entityInstance), 954 entityAttribute.getLastDetail().getEntityAttributeName()); 955 } 956 } 957 958 return entityBooleanAttribute; 959 } 960 961 public EntityIntegerDefault createEntityIntegerDefault(final ExecutionErrorAccumulator eea, final EntityAttribute entityAttribute, 962 final Integer integerAttribute, final boolean addMissingAttributes, final BasePK createdBy) { 963 EntityIntegerDefault entityIntegerDefault = null; 964 965 checkEntityType(eea, entityAttribute, EntityAttributeTypes.INTEGER); 966 967 if(eea == null || !eea.hasExecutionErrors()) { 968 var entityAttributeInteger = coreControl.getEntityAttributeInteger(entityAttribute); 969 970 if(entityAttributeInteger != null) { 971 var upperRangeIntegerValue = entityAttributeInteger.getUpperRangeIntegerValue(); 972 var lowerRangeIntegerValue = entityAttributeInteger.getLowerRangeIntegerValue(); 973 974 if(upperRangeIntegerValue != null && integerAttribute > upperRangeIntegerValue){ 975 handleExecutionError(UpperRangeExceededException.class, eea, ExecutionErrors.UpperRangeExceeded.name(), 976 upperRangeIntegerValue, integerAttribute); 977 } 978 979 if(lowerRangeIntegerValue != null && integerAttribute < lowerRangeIntegerValue) { 980 handleExecutionError(LowerRangeExceededException.class, eea, ExecutionErrors.LowerRangeExceeded.name(), 981 lowerRangeIntegerValue, integerAttribute); 982 } 983 } 984 985 if(eea == null || !eea.hasExecutionErrors()) { 986 entityIntegerDefault = coreControl.getEntityIntegerDefault(entityAttribute); 987 988 if(entityIntegerDefault == null) { 989 coreControl.createEntityIntegerDefault(entityAttribute, integerAttribute, createdBy); 990 991 if(addMissingAttributes) { 992 new EntityInstancesMissingIntegerEntityAttributeQuery().execute(entityAttribute).forEach(entityInstanceResult -> 993 coreControl.createEntityIntegerAttribute(entityAttribute.getPrimaryKey(), 994 entityInstanceResult.getEntityInstance(), integerAttribute, createdBy)); 995 } 996 } else { 997 handleExecutionError(DuplicateEntityIntegerDefaultException.class, eea, ExecutionErrors.DuplicateEntityIntegerDefault.name(), 998 entityAttribute.getLastDetail().getEntityAttributeName()); 999 } 1000 } 1001 } 1002 1003 return entityIntegerDefault; 1004 } 1005 1006 public void deleteEntityIntegerDefault(final ExecutionErrorAccumulator eea, final EntityAttribute entityAttribute, 1007 final BasePK deletedBy) { 1008 checkEntityType(eea, entityAttribute, EntityAttributeTypes.INTEGER); 1009 1010 if(eea == null || !eea.hasExecutionErrors()) { 1011 var entityIntegerDefault = coreControl.getEntityIntegerDefaultForUpdate(entityAttribute); 1012 1013 if(entityIntegerDefault == null) { 1014 handleExecutionError(UnknownEntityIntegerDefaultException.class, eea, ExecutionErrors.UnknownEntityIntegerDefault.name(), 1015 entityAttribute.getLastDetail().getEntityAttributeName()); 1016 } else { 1017 coreControl.deleteEntityIntegerDefault(entityIntegerDefault, deletedBy); 1018 } 1019 } 1020 } 1021 1022 public EntityIntegerAttribute createEntityIntegerAttribute(final ExecutionErrorAccumulator eea, final EntityAttribute entityAttribute, 1023 final EntityInstance entityInstance, final Integer integerAttribute, final BasePK createdBy) { 1024 EntityIntegerAttribute entityIntegerAttribute = null; 1025 1026 checkEntityType(eea, entityAttribute, entityInstance); 1027 1028 if(eea == null || !eea.hasExecutionErrors()) { 1029 var entityAttributeInteger = coreControl.getEntityAttributeInteger(entityAttribute); 1030 1031 if(entityAttributeInteger != null) { 1032 var upperRangeIntegerValue = entityAttributeInteger.getUpperRangeIntegerValue(); 1033 var lowerRangeIntegerValue = entityAttributeInteger.getLowerRangeIntegerValue(); 1034 1035 if(upperRangeIntegerValue != null && integerAttribute > upperRangeIntegerValue){ 1036 handleExecutionError(UpperRangeExceededException.class, eea, ExecutionErrors.UpperRangeExceeded.name(), 1037 upperRangeIntegerValue, integerAttribute); 1038 } 1039 1040 if(lowerRangeIntegerValue != null && integerAttribute < lowerRangeIntegerValue) { 1041 handleExecutionError(LowerRangeExceededException.class, eea, ExecutionErrors.LowerRangeExceeded.name(), 1042 lowerRangeIntegerValue, integerAttribute); 1043 } 1044 } 1045 1046 if(eea == null || !eea.hasExecutionErrors()) { 1047 entityIntegerAttribute = coreControl.getEntityIntegerAttribute(entityAttribute, entityInstance); 1048 1049 if(entityIntegerAttribute == null) { 1050 coreControl.createEntityIntegerAttribute(entityAttribute, entityInstance, integerAttribute, createdBy); 1051 } else { 1052 handleExecutionError(DuplicateEntityIntegerAttributeException.class, eea, ExecutionErrors.DuplicateEntityIntegerAttribute.name(), 1053 entityInstanceLogic.getEntityRefFromEntityInstance(entityInstance), 1054 entityAttribute.getLastDetail().getEntityAttributeName()); 1055 } 1056 } 1057 } 1058 1059 return entityIntegerAttribute; 1060 } 1061 1062 public EntityLongDefault createEntityLongDefault(final ExecutionErrorAccumulator eea, final EntityAttribute entityAttribute, 1063 final Long longAttribute, final boolean addMissingAttributes, BasePK createdBy) { 1064 EntityLongDefault entityLongDefault = null; 1065 1066 checkEntityType(eea, entityAttribute, EntityAttributeTypes.LONG); 1067 1068 if(eea == null || !eea.hasExecutionErrors()) { 1069 var entityAttributeLong = coreControl.getEntityAttributeLong(entityAttribute); 1070 1071 if(entityAttributeLong != null) { 1072 var upperRangeLongValue = entityAttributeLong.getUpperRangeLongValue(); 1073 var lowerRangeLongValue = entityAttributeLong.getLowerRangeLongValue(); 1074 1075 if(upperRangeLongValue != null && longAttribute > upperRangeLongValue){ 1076 handleExecutionError(UpperRangeExceededException.class, eea, ExecutionErrors.UpperRangeExceeded.name(), 1077 upperRangeLongValue, longAttribute); 1078 } 1079 1080 if(lowerRangeLongValue != null && longAttribute < lowerRangeLongValue) { 1081 handleExecutionError(LowerRangeExceededException.class, eea, ExecutionErrors.LowerRangeExceeded.name(), 1082 lowerRangeLongValue, longAttribute); 1083 } 1084 } 1085 1086 if(eea == null || !eea.hasExecutionErrors()) { 1087 entityLongDefault = coreControl.getEntityLongDefault(entityAttribute); 1088 1089 if(entityLongDefault == null) { 1090 coreControl.createEntityLongDefault(entityAttribute, longAttribute, createdBy); 1091 1092 if(addMissingAttributes) { 1093 new EntityInstancesMissingLongEntityAttributeQuery().execute(entityAttribute).forEach(entityInstanceResult -> 1094 coreControl.createEntityLongAttribute(entityAttribute.getPrimaryKey(), 1095 entityInstanceResult.getEntityInstance(), longAttribute, createdBy)); 1096 } 1097 } else { 1098 handleExecutionError(DuplicateEntityLongDefaultException.class, eea, ExecutionErrors.DuplicateEntityLongDefault.name(), 1099 entityAttribute.getLastDetail().getEntityAttributeName()); 1100 } 1101 } 1102 } 1103 1104 return entityLongDefault; 1105 } 1106 1107 public void deleteEntityLongDefault(final ExecutionErrorAccumulator eea, final EntityAttribute entityAttribute, 1108 final BasePK deletedBy) { 1109 checkEntityType(eea, entityAttribute, EntityAttributeTypes.LONG); 1110 1111 if(eea == null || !eea.hasExecutionErrors()) { 1112 var entityLongDefault = coreControl.getEntityLongDefaultForUpdate(entityAttribute); 1113 1114 if(entityLongDefault == null) { 1115 handleExecutionError(UnknownEntityLongDefaultException.class, eea, ExecutionErrors.UnknownEntityLongDefault.name(), 1116 entityAttribute.getLastDetail().getEntityAttributeName()); 1117 } else { 1118 coreControl.deleteEntityLongDefault(entityLongDefault, deletedBy); 1119 } 1120 } 1121 } 1122 1123 public EntityLongAttribute createEntityLongAttribute(final ExecutionErrorAccumulator eea, final EntityAttribute entityAttribute, 1124 final EntityInstance entityInstance, final Long longAttribute, final BasePK createdBy) { 1125 EntityLongAttribute entityLongAttribute = null; 1126 1127 checkEntityType(eea, entityAttribute, entityInstance); 1128 1129 if(eea == null || !eea.hasExecutionErrors()) { 1130 var entityAttributeLong = coreControl.getEntityAttributeLong(entityAttribute); 1131 1132 if(entityAttributeLong != null) { 1133 var upperRangeLongValue = entityAttributeLong.getUpperRangeLongValue(); 1134 var lowerRangeLongValue = entityAttributeLong.getLowerRangeLongValue(); 1135 1136 if(upperRangeLongValue != null && longAttribute > upperRangeLongValue){ 1137 handleExecutionError(UpperRangeExceededException.class, eea, ExecutionErrors.UpperRangeExceeded.name(), 1138 upperRangeLongValue, longAttribute); 1139 } 1140 1141 if(lowerRangeLongValue != null && longAttribute < lowerRangeLongValue) { 1142 handleExecutionError(LowerRangeExceededException.class, eea, ExecutionErrors.LowerRangeExceeded.name(), 1143 lowerRangeLongValue, longAttribute); 1144 } 1145 } 1146 1147 if(eea == null || !eea.hasExecutionErrors()) { 1148 entityLongAttribute = coreControl.getEntityLongAttribute(entityAttribute, entityInstance); 1149 1150 if(entityLongAttribute == null) { 1151 coreControl.createEntityLongAttribute(entityAttribute, entityInstance, longAttribute, createdBy); 1152 } else { 1153 handleExecutionError(DuplicateEntityLongAttributeException.class, eea, ExecutionErrors.DuplicateEntityLongAttribute.name(), 1154 entityInstanceLogic.getEntityRefFromEntityInstance(entityInstance), 1155 entityAttribute.getLastDetail().getEntityAttributeName()); 1156 } 1157 } 1158 } 1159 1160 return entityLongAttribute; 1161 } 1162 1163 public EntityStringDefault createEntityStringDefault(final ExecutionErrorAccumulator eea, final EntityAttribute entityAttribute, 1164 final Language language, final String stringAttribute, final boolean addMissingAttributes, final BasePK createdBy) { 1165 EntityStringDefault entityStringDefault = null; 1166 1167 checkEntityType(eea, entityAttribute, EntityAttributeTypes.STRING); 1168 1169 if(eea == null || !eea.hasExecutionErrors()) { 1170 entityStringDefault = coreControl.getEntityStringDefault(entityAttribute, language); 1171 1172 if(entityStringDefault == null) { 1173 coreControl.createEntityStringDefault(entityAttribute, language, stringAttribute, createdBy); 1174 1175 if(addMissingAttributes) { 1176 new EntityInstancesMissingStringEntityAttributeQuery().execute(entityAttribute, language).forEach(entityInstanceResult -> 1177 coreControl.createEntityStringAttribute(entityAttribute.getPrimaryKey(), 1178 entityInstanceResult.getEntityInstance(), language, stringAttribute, createdBy)); 1179 } 1180 } else { 1181 handleExecutionError(DuplicateEntityStringDefaultException.class, eea, ExecutionErrors.DuplicateEntityStringDefault.name(), 1182 entityAttribute.getLastDetail().getEntityAttributeName()); 1183 } 1184 } 1185 1186 return entityStringDefault; 1187 } 1188 1189 public void deleteEntityStringDefault(final ExecutionErrorAccumulator eea, final EntityAttribute entityAttribute, 1190 final Language language, final BasePK deletedBy) { 1191 checkEntityType(eea, entityAttribute, EntityAttributeTypes.STRING); 1192 1193 if(eea == null || !eea.hasExecutionErrors()) { 1194 var entityStringDefault = coreControl.getEntityStringDefaultForUpdate(entityAttribute, language); 1195 1196 if(entityStringDefault == null) { 1197 handleExecutionError(UnknownEntityStringDefaultException.class, eea, ExecutionErrors.UnknownEntityStringDefault.name(), 1198 entityAttribute.getLastDetail().getEntityAttributeName(), 1199 language.getLanguageIsoName()); 1200 } else { 1201 coreControl.deleteEntityStringDefault(entityStringDefault, deletedBy); 1202 } 1203 } 1204 } 1205 1206 public EntityStringAttribute createEntityStringAttribute(final ExecutionErrorAccumulator eea, final EntityAttribute entityAttribute, 1207 final EntityInstance entityInstance, final Language language, final String stringAttribute, final BasePK createdBy) { 1208 EntityStringAttribute entityStringAttribute = null; 1209 1210 checkEntityType(eea, entityAttribute, entityInstance); 1211 1212 if(eea == null || !eea.hasExecutionErrors()) { 1213 var entityAttributeString = coreControl.getEntityAttributeString(entityAttribute); 1214 var validationPattern = entityAttributeString == null ? null : entityAttributeString.getValidationPattern(); 1215 1216 if(validationPattern != null) { 1217 var pattern = Pattern.compile(validationPattern); 1218 var m = pattern.matcher(stringAttribute); 1219 1220 if(!m.matches()) { 1221 handleExecutionError(InvalidStringAttributeException.class, eea, ExecutionErrors.InvalidStringAttribute.name(), 1222 stringAttribute); 1223 } 1224 } 1225 1226 if(eea == null || !eea.hasExecutionErrors()) { 1227 entityStringAttribute = coreControl.getEntityStringAttribute(entityAttribute, entityInstance, language); 1228 1229 if(entityStringAttribute == null) { 1230 coreControl.createEntityStringAttribute(entityAttribute, entityInstance, language, stringAttribute, createdBy); 1231 } else { 1232 handleExecutionError(DuplicateEntityStringAttributeException.class, eea, ExecutionErrors.DuplicateEntityStringAttribute.name(), 1233 entityInstanceLogic.getEntityRefFromEntityInstance(entityInstance), 1234 entityAttribute.getLastDetail().getEntityAttributeName(), 1235 language.getLanguageIsoName()); 1236 } 1237 } 1238 } 1239 1240 return entityStringAttribute; 1241 } 1242 1243 public EntityClobAttribute createEntityClobAttribute(final ExecutionErrorAccumulator eea, final EntityAttribute entityAttribute, 1244 final EntityInstance entityInstance, final Language language, final String clobAttribute, final MimeType mimeType, 1245 final BasePK createdBy) { 1246 EntityClobAttribute entityClobAttribute = null; 1247 1248 checkEntityType(eea, entityAttribute, entityInstance); 1249 1250 if(eea == null || !eea.hasExecutionErrors()) { 1251 entityClobAttribute = coreControl.getEntityClobAttribute(entityAttribute, entityInstance, language); 1252 1253 if(entityClobAttribute == null) { 1254 coreControl.createEntityClobAttribute(entityAttribute, entityInstance, language, clobAttribute, mimeType, createdBy); 1255 } else { 1256 handleExecutionError(DuplicateEntityClobAttributeException.class, eea, ExecutionErrors.DuplicateEntityClobAttribute.name(), 1257 entityInstanceLogic.getEntityRefFromEntityInstance(entityInstance), 1258 entityAttribute.getLastDetail().getEntityAttributeName(), 1259 language.getLanguageIsoName()); 1260 } 1261 } 1262 1263 return entityClobAttribute; 1264 } 1265 1266 public EntityNameAttribute createEntityNameAttribute(final ExecutionErrorAccumulator eea, final EntityAttribute entityAttribute, 1267 final String nameAttribute, final EntityInstance entityInstance, final BasePK createdBy) { 1268 EntityNameAttribute entityNameAttribute = null; 1269 1270 checkEntityType(eea, entityAttribute, entityInstance); 1271 1272 if(eea == null || !eea.hasExecutionErrors()) { 1273 entityNameAttribute = coreControl.getEntityNameAttribute(entityAttribute, entityInstance); 1274 1275 if(entityNameAttribute == null) { 1276 coreControl.createEntityNameAttribute(entityAttribute, nameAttribute, entityInstance, createdBy); 1277 } else { 1278 handleExecutionError(DuplicateEntityNameAttributeException.class, eea, ExecutionErrors.DuplicateEntityNameAttribute.name(), 1279 entityInstanceLogic.getEntityRefFromEntityInstance(entityInstance), 1280 entityAttribute.getLastDetail().getEntityAttributeName()); 1281 } 1282 } 1283 1284 return entityNameAttribute; 1285 } 1286 1287 public EntityDateDefault createEntityDateDefault(final ExecutionErrorAccumulator eea, final EntityAttribute entityAttribute, 1288 final Integer dateAttribute, final boolean addMissingAttributes, BasePK createdBy) { 1289 EntityDateDefault entityDateDefault = null; 1290 1291 checkEntityType(eea, entityAttribute, EntityAttributeTypes.DATE); 1292 1293 if(eea == null || !eea.hasExecutionErrors()) { 1294 entityDateDefault = coreControl.getEntityDateDefault(entityAttribute); 1295 1296 if(entityDateDefault == null) { 1297 coreControl.createEntityDateDefault(entityAttribute, dateAttribute, createdBy); 1298 1299 if(addMissingAttributes) { 1300 new EntityInstancesMissingDateEntityAttributeQuery().execute(entityAttribute).forEach(entityInstanceResult -> 1301 coreControl.createEntityDateAttribute(entityAttribute.getPrimaryKey(), 1302 entityInstanceResult.getEntityInstance(), dateAttribute, createdBy)); 1303 } 1304 } else { 1305 handleExecutionError(DuplicateEntityDateDefaultException.class, eea, ExecutionErrors.DuplicateEntityDateDefault.name(), 1306 entityAttribute.getLastDetail().getEntityAttributeName()); 1307 } 1308 } 1309 1310 return entityDateDefault; 1311 } 1312 1313 public void deleteEntityDateDefault(final ExecutionErrorAccumulator eea, final EntityAttribute entityAttribute, 1314 final BasePK deletedBy) { 1315 checkEntityType(eea, entityAttribute, EntityAttributeTypes.DATE); 1316 1317 if(eea == null || !eea.hasExecutionErrors()) { 1318 var entityDateDefault = coreControl.getEntityDateDefaultForUpdate(entityAttribute); 1319 1320 if(entityDateDefault == null) { 1321 handleExecutionError(UnknownEntityDateDefaultException.class, eea, ExecutionErrors.UnknownEntityDateDefault.name(), 1322 entityAttribute.getLastDetail().getEntityAttributeName()); 1323 } else { 1324 coreControl.deleteEntityDateDefault(entityDateDefault, deletedBy); 1325 } 1326 } 1327 } 1328 1329 public EntityDateAttribute createEntityDateAttribute(final ExecutionErrorAccumulator eea, final EntityAttribute entityAttribute, 1330 final EntityInstance entityInstance, final Integer dateAttribute, final BasePK createdBy) { 1331 EntityDateAttribute entityDateAttribute = null; 1332 1333 checkEntityType(eea, entityAttribute, entityInstance); 1334 1335 if(eea == null || !eea.hasExecutionErrors()) { 1336 entityDateAttribute = coreControl.getEntityDateAttribute(entityAttribute, entityInstance); 1337 1338 if(entityDateAttribute == null) { 1339 coreControl.createEntityDateAttribute(entityAttribute, entityInstance, dateAttribute, createdBy); 1340 } else { 1341 handleExecutionError(DuplicateEntityDateAttributeException.class, eea, ExecutionErrors.DuplicateEntityDateAttribute.name(), 1342 entityInstanceLogic.getEntityRefFromEntityInstance(entityInstance), 1343 entityAttribute.getLastDetail().getEntityAttributeName()); 1344 } 1345 } 1346 1347 return entityDateAttribute; 1348 } 1349 1350 public EntityTimeDefault createEntityTimeDefault(final ExecutionErrorAccumulator eea, final EntityAttribute entityAttribute, 1351 final Long timeAttribute, final boolean addMissingAttributes, BasePK createdBy) { 1352 EntityTimeDefault entityTimeDefault = null; 1353 1354 checkEntityType(eea, entityAttribute, EntityAttributeTypes.TIME); 1355 1356 if(eea == null || !eea.hasExecutionErrors()) { 1357 entityTimeDefault = coreControl.getEntityTimeDefault(entityAttribute); 1358 1359 if(entityTimeDefault == null) { 1360 coreControl.createEntityTimeDefault(entityAttribute, timeAttribute, createdBy); 1361 1362 if(addMissingAttributes) { 1363 new EntityInstancesMissingTimeEntityAttributeQuery().execute(entityAttribute).forEach(entityInstanceResult -> 1364 coreControl.createEntityTimeAttribute(entityAttribute.getPrimaryKey(), 1365 entityInstanceResult.getEntityInstance(), timeAttribute, createdBy)); 1366 } 1367 } else { 1368 handleExecutionError(DuplicateEntityTimeDefaultException.class, eea, ExecutionErrors.DuplicateEntityTimeDefault.name(), 1369 entityAttribute.getLastDetail().getEntityAttributeName()); 1370 } 1371 } 1372 1373 return entityTimeDefault; 1374 } 1375 1376 public void deleteEntityTimeDefault(final ExecutionErrorAccumulator eea, final EntityAttribute entityAttribute, 1377 final BasePK deletedBy) { 1378 checkEntityType(eea, entityAttribute, EntityAttributeTypes.TIME); 1379 1380 if(eea == null || !eea.hasExecutionErrors()) { 1381 var entityTimeDefault = coreControl.getEntityTimeDefaultForUpdate(entityAttribute); 1382 1383 if(entityTimeDefault == null) { 1384 handleExecutionError(UnknownEntityTimeDefaultException.class, eea, ExecutionErrors.UnknownEntityTimeDefault.name(), 1385 entityAttribute.getLastDetail().getEntityAttributeName()); 1386 } else { 1387 coreControl.deleteEntityTimeDefault(entityTimeDefault, deletedBy); 1388 } 1389 } 1390 } 1391 1392 public EntityTimeAttribute createEntityTimeAttribute(final ExecutionErrorAccumulator eea, final EntityAttribute entityAttribute, 1393 final EntityInstance entityInstance, final Long timeAttribute, final BasePK createdBy) { 1394 EntityTimeAttribute entityTimeAttribute = null; 1395 1396 checkEntityType(eea, entityAttribute, entityInstance); 1397 1398 if(eea == null || !eea.hasExecutionErrors()) { 1399 entityTimeAttribute = coreControl.getEntityTimeAttribute(entityAttribute, entityInstance); 1400 1401 if(entityTimeAttribute == null) { 1402 coreControl.createEntityTimeAttribute(entityAttribute, entityInstance, timeAttribute, createdBy); 1403 } else { 1404 handleExecutionError(DuplicateEntityTimeAttributeException.class, eea, ExecutionErrors.DuplicateEntityTimeAttribute.name(), 1405 entityInstanceLogic.getEntityRefFromEntityInstance(entityInstance), 1406 entityAttribute.getLastDetail().getEntityAttributeName()); 1407 } 1408 } 1409 1410 return entityTimeAttribute; 1411 } 1412 1413 public EntityGeoPointDefault createEntityGeoPointDefault(final ExecutionErrorAccumulator eea, final EntityAttribute entityAttribute, 1414 final Integer latitude, final Integer longitude, final Long elevation, final Long altitude, final boolean addMissingAttributes, BasePK createdBy) { 1415 EntityGeoPointDefault entityGeoPointDefault = null; 1416 1417 checkEntityType(eea, entityAttribute, EntityAttributeTypes.GEOPOINT); 1418 1419 if(eea == null || !eea.hasExecutionErrors()) { 1420 entityGeoPointDefault = coreControl.getEntityGeoPointDefault(entityAttribute); 1421 1422 if(entityGeoPointDefault == null) { 1423 coreControl.createEntityGeoPointDefault(entityAttribute, latitude, longitude, elevation, altitude, createdBy); 1424 1425 if(addMissingAttributes) { 1426 new EntityInstancesMissingGeoPointEntityAttributeQuery().execute(entityAttribute).forEach(entityInstanceResult -> 1427 coreControl.createEntityGeoPointAttribute(entityAttribute.getPrimaryKey(), 1428 entityInstanceResult.getEntityInstance(), latitude, longitude, elevation, altitude, createdBy)); 1429 } 1430 } else { 1431 handleExecutionError(DuplicateEntityGeoPointDefaultException.class, eea, ExecutionErrors.DuplicateEntityGeoPointDefault.name(), 1432 entityAttribute.getLastDetail().getEntityAttributeName()); 1433 } 1434 } 1435 1436 return entityGeoPointDefault; 1437 } 1438 1439 public void deleteEntityGeoPointDefault(final ExecutionErrorAccumulator eea, final EntityAttribute entityAttribute, 1440 final BasePK deletedBy) { 1441 checkEntityType(eea, entityAttribute, EntityAttributeTypes.GEOPOINT); 1442 1443 if(eea == null || !eea.hasExecutionErrors()) { 1444 var entityGeoPointDefault = coreControl.getEntityGeoPointDefaultForUpdate(entityAttribute); 1445 1446 if(entityGeoPointDefault == null) { 1447 handleExecutionError(UnknownEntityGeoPointDefaultException.class, eea, ExecutionErrors.UnknownEntityGeoPointDefault.name(), 1448 entityAttribute.getLastDetail().getEntityAttributeName()); 1449 } else { 1450 coreControl.deleteEntityGeoPointDefault(entityGeoPointDefault, deletedBy); 1451 } 1452 } 1453 } 1454 1455 public EntityGeoPointAttribute createEntityGeoPointAttribute(final ExecutionErrorAccumulator eea, final EntityAttribute entityAttribute, 1456 final EntityInstance entityInstance, final Integer latitude, final Integer longitude, final Long elevation, final Long altitude, final BasePK createdBy) { 1457 EntityGeoPointAttribute entityGeoPointAttribute = null; 1458 1459 checkEntityType(eea, entityAttribute, entityInstance); 1460 1461 if(eea == null || !eea.hasExecutionErrors()) { 1462 entityGeoPointAttribute = coreControl.getEntityGeoPointAttribute(entityAttribute, entityInstance); 1463 1464 if(entityGeoPointAttribute == null) { 1465 coreControl.createEntityGeoPointAttribute(entityAttribute, entityInstance, latitude, longitude, elevation, altitude, createdBy); 1466 } else { 1467 handleExecutionError(DuplicateEntityGeoPointAttributeException.class, eea, ExecutionErrors.DuplicateEntityGeoPointAttribute.name(), 1468 entityInstanceLogic.getEntityRefFromEntityInstance(entityInstance), 1469 entityAttribute.getLastDetail().getEntityAttributeName()); 1470 } 1471 } 1472 1473 return entityGeoPointAttribute; 1474 } 1475 1476 public EntityListItemDefault createEntityListItemDefault(final ExecutionErrorAccumulator eea, final EntityAttribute entityAttribute, 1477 final EntityListItem entityListItem, final boolean addMissingAttributes, final BasePK createdBy) { 1478 EntityListItemDefault entityListItemDefault = null; 1479 1480 checkEntityType(eea, entityAttribute, EntityAttributeTypes.LISTITEM); 1481 1482 if(eea == null || !eea.hasExecutionErrors()) { 1483 entityListItemDefault = coreControl.getEntityListItemDefault(entityAttribute); 1484 1485 if(entityListItemDefault == null) { 1486 coreControl.createEntityListItemDefault(entityAttribute, entityListItem, createdBy); 1487 1488 if(addMissingAttributes) { 1489 new EntityInstancesMissingListItemEntityAttributeQuery().execute(entityAttribute).forEach(entityInstanceResult -> 1490 coreControl.createEntityListItemAttribute(entityAttribute.getPrimaryKey(), 1491 entityInstanceResult.getEntityInstance(), entityListItem, createdBy)); 1492 } 1493 } else { 1494 handleExecutionError(DuplicateEntityListItemDefaultException.class, eea, ExecutionErrors.DuplicateEntityListItemDefault.name(), 1495 entityAttribute.getLastDetail().getEntityAttributeName()); 1496 } 1497 } 1498 1499 return entityListItemDefault; 1500 } 1501 1502 public void deleteEntityListItemDefault(final ExecutionErrorAccumulator eea, final EntityAttribute entityAttribute, 1503 final BasePK deletedBy) { 1504 checkEntityType(eea, entityAttribute, EntityAttributeTypes.LISTITEM); 1505 1506 if(eea == null || !eea.hasExecutionErrors()) { 1507 var entityListItemDefault = coreControl.getEntityListItemDefaultForUpdate(entityAttribute); 1508 1509 if(entityListItemDefault == null) { 1510 handleExecutionError(UnknownEntityListItemDefaultException.class, eea, ExecutionErrors.UnknownEntityListItemDefault.name(), 1511 entityAttribute.getLastDetail().getEntityAttributeName()); 1512 } else { 1513 coreControl.deleteEntityListItemDefault(entityListItemDefault, deletedBy); 1514 } 1515 } 1516 } 1517 1518 public EntityListItemAttribute createEntityListItemAttribute(final ExecutionErrorAccumulator eea, final EntityAttribute entityAttribute, 1519 final EntityInstance entityInstance, final EntityListItem entityListItem, final BasePK createdBy) { 1520 EntityListItemAttribute entityListItemAttribute = null; 1521 1522 checkEntityType(eea, entityAttribute, entityInstance); 1523 1524 if(eea == null || !eea.hasExecutionErrors()) { 1525 entityListItemAttribute = coreControl.getEntityListItemAttribute(entityAttribute, entityInstance); 1526 1527 if(entityListItemAttribute == null) { 1528 entityListItemAttribute = coreControl.createEntityListItemAttribute(entityAttribute, entityInstance, entityListItem, createdBy); 1529 } else { 1530 handleExecutionError(DuplicateEntityListItemAttributeException.class, eea, ExecutionErrors.DuplicateEntityListItemAttribute.name(), 1531 entityInstanceLogic.getEntityRefFromEntityInstance(entityInstance), 1532 entityAttribute.getLastDetail().getEntityAttributeName()); 1533 } 1534 } 1535 1536 return entityListItemAttribute; 1537 } 1538 1539 public EntityMultipleListItemDefault createEntityMultipleListItemDefault(final ExecutionErrorAccumulator eea, final EntityAttribute entityAttribute, 1540 final EntityListItem entityListItem, final boolean addMissingAttributes, final BasePK createdBy) { 1541 EntityMultipleListItemDefault entityListItemDefault = null; 1542 1543 checkEntityType(eea, entityAttribute, EntityAttributeTypes.MULTIPLELISTITEM); 1544 1545 if(eea == null || !eea.hasExecutionErrors()) { 1546 entityListItemDefault = coreControl.getEntityMultipleListItemDefault(entityAttribute, entityListItem); 1547 1548 if(entityListItemDefault == null) { 1549 coreControl.createEntityMultipleListItemDefault(entityAttribute, entityListItem, createdBy); 1550 1551 if(addMissingAttributes) { 1552 new EntityInstancesMissingMultipleListItemEntityAttributeQuery().execute(entityAttribute, entityListItem).forEach(entityInstanceResult -> 1553 coreControl.createEntityMultipleListItemAttribute(entityAttribute.getPrimaryKey(), 1554 entityInstanceResult.getEntityInstance(), entityListItem, createdBy)); 1555 } 1556 } else { 1557 handleExecutionError(DuplicateEntityMultipleListItemDefaultException.class, eea, ExecutionErrors.DuplicateEntityMultipleListItemDefault.name(), 1558 entityAttribute.getLastDetail().getEntityAttributeName(), entityListItem.getLastDetail().getEntityListItemName()); 1559 } 1560 } 1561 1562 return entityListItemDefault; 1563 } 1564 1565 public void deleteEntityMultipleListItemDefault(final ExecutionErrorAccumulator eea, final EntityAttribute entityAttribute, 1566 final EntityListItem entityListItem, final BasePK deletedBy) { 1567 checkEntityType(eea, entityAttribute, EntityAttributeTypes.MULTIPLELISTITEM); 1568 1569 if(eea == null || !eea.hasExecutionErrors()) { 1570 var entityListItemDefault = coreControl.getEntityMultipleListItemDefaultForUpdate(entityAttribute, entityListItem); 1571 1572 if(entityListItemDefault == null) { 1573 handleExecutionError(UnknownEntityMultipleListItemDefaultException.class, eea, ExecutionErrors.UnknownEntityMultipleListItemDefault.name(), 1574 entityAttribute.getLastDetail().getEntityAttributeName(), entityListItem.getLastDetail().getEntityListItemName()); 1575 } else { 1576 coreControl.deleteEntityMultipleListItemDefault(entityListItemDefault, deletedBy); 1577 } 1578 } 1579 } 1580 1581 public EntityMultipleListItemAttribute createEntityMultipleListItemAttribute(final ExecutionErrorAccumulator eea, final EntityAttribute entityAttribute, 1582 final EntityInstance entityInstance, final EntityListItem entityListItem, final BasePK createdBy) { 1583 EntityMultipleListItemAttribute entityMultipleListItemAttribute = null; 1584 1585 checkEntityType(eea, entityAttribute, entityInstance); 1586 1587 if(eea == null || !eea.hasExecutionErrors()) { 1588 entityMultipleListItemAttribute = coreControl.getEntityMultipleListItemAttribute(entityAttribute, entityInstance, entityListItem); 1589 1590 if(entityMultipleListItemAttribute == null) { 1591 entityMultipleListItemAttribute = coreControl.createEntityMultipleListItemAttribute(entityAttribute, entityInstance, entityListItem, createdBy); 1592 } else { 1593 handleExecutionError(DuplicateEntityMultipleListItemAttributeException.class, eea, ExecutionErrors.DuplicateEntityMultipleListItemAttribute.name(), 1594 entityInstanceLogic.getEntityRefFromEntityInstance(entityInstance), 1595 entityAttribute.getLastDetail().getEntityAttributeName(), 1596 entityListItem.getLastDetail().getEntityListItemName()); 1597 } 1598 } 1599 1600 return entityMultipleListItemAttribute; 1601 } 1602 1603}