001// -------------------------------------------------------------------------------- 002// Copyright 2002-2025 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.transfer; 018 019import com.echothree.model.control.core.common.CoreOptions; 020import com.echothree.model.control.core.common.CoreProperties; 021import com.echothree.model.control.core.common.EntityAttributeTypes; 022import com.echothree.model.control.core.common.transfer.EntityAttributeTransfer; 023import com.echothree.model.control.core.server.control.CoreControl; 024import com.echothree.model.control.core.server.control.EntityTypeControl; 025import com.echothree.model.control.sequence.server.control.SequenceControl; 026import com.echothree.model.control.uom.server.control.UomControl; 027import com.echothree.model.data.core.server.entity.EntityAttribute; 028import com.echothree.model.data.core.server.entity.EntityInstance; 029import com.echothree.model.data.user.server.entity.UserVisit; 030import com.echothree.util.common.form.TransferProperties; 031import com.echothree.util.common.transfer.ListWrapper; 032import com.echothree.util.server.persistence.Session; 033import javax.enterprise.context.RequestScoped; 034 035@RequestScoped 036public class EntityAttributeTransferCache 037 extends BaseCoreTransferCache<EntityAttribute, EntityAttributeTransfer> { 038 039 CoreControl coreControl = Session.getModelController(CoreControl.class); 040 EntityTypeControl entityTypeControl = Session.getModelController(EntityTypeControl.class); 041 SequenceControl sequenceControl = Session.getModelController(SequenceControl.class); 042 UomControl uomControl = Session.getModelController(UomControl.class); 043 044 boolean includeDefault; 045 boolean includeValue; 046 boolean includeEntityListItems; 047 boolean includeEntityListItemsCount; 048 boolean includeEntityAttributeEntityTypes; 049 boolean includeEntityAttributeEntityTypesCount; 050 051 TransferProperties transferProperties; 052 boolean filterEntityType; 053 boolean filterEntityAttributeName; 054 boolean filterEntityAttributeType; 055 boolean filterTrackRevisions; 056 boolean filterCheckContentWebAddress; 057 boolean filterValidationPattern; 058 boolean filterEntityListItemSequence; 059 boolean filterUnitOfMeasureType; 060 boolean filterSortOrder; 061 boolean filterDescription; 062 boolean filterEntityInstance; 063 064 /** Creates a new instance of EntityAttributeTransferCache */ 065 protected EntityAttributeTransferCache() { 066 super(); 067 068 var options = session.getOptions(); 069 if(options != null) { 070 includeDefault = options.contains(CoreOptions.EntityAttributeIncludeDefault); 071 includeValue = options.contains(CoreOptions.EntityAttributeIncludeValue); 072 includeEntityListItems = options.contains(CoreOptions.EntityAttributeIncludeEntityListItems); 073 includeEntityListItemsCount = options.contains(CoreOptions.EntityAttributeIncludeEntityListItemsCount); 074 includeEntityAttributeEntityTypes = options.contains(CoreOptions.EntityAttributeIncludeEntityAttributeEntityTypes); 075 includeEntityAttributeEntityTypesCount = options.contains(CoreOptions.EntityAttributeIncludeEntityAttributeEntityTypesCount); 076 } 077 078 transferProperties = session.getTransferProperties(); 079 if(transferProperties != null) { 080 var properties = transferProperties.getProperties(EntityAttributeTransfer.class); 081 082 if(properties != null) { 083 filterEntityType = !properties.contains(CoreProperties.ENTITY_TYPE); 084 filterEntityAttributeName = !properties.contains(CoreProperties.ENTITY_ATTRIBUTE_NAME); 085 filterEntityAttributeType = !properties.contains(CoreProperties.ENTITY_ATTRIBUTE_TYPE); 086 filterTrackRevisions = !properties.contains(CoreProperties.TRACK_REVISIONS); 087 filterCheckContentWebAddress = !properties.contains(CoreProperties.CHECK_CONTENT_WEB_ADDRESS); 088 filterValidationPattern = !properties.contains(CoreProperties.VALIDATION_PATTERN); 089 filterEntityListItemSequence = !properties.contains(CoreProperties.ENTITY_LIST_ITEM_SEQUENCE); 090 filterUnitOfMeasureType = !properties.contains(CoreProperties.UNIT_OF_MEASURE_TYPE); 091 filterSortOrder = !properties.contains(CoreProperties.SORT_ORDER); 092 filterDescription = !properties.contains(CoreProperties.DESCRIPTION); 093 filterEntityInstance = !properties.contains(CoreProperties.ENTITY_INSTANCE); 094 } 095 } 096 097 setIncludeEntityInstance(!filterEntityInstance); 098 } 099 100 public EntityAttributeTransfer getEntityAttributeTransfer(final UserVisit userVisit, final EntityAttribute entityAttribute, final EntityInstance entityInstance) { 101 var entityAttributeTransfer = get(entityAttribute); 102 103 if(entityAttributeTransfer == null) { 104 var entityAttributeDetail = entityAttribute.getLastDetail(); 105 var entityTypeTransfer = filterEntityType ? null : entityTypeControl.getEntityTypeTransfer(userVisit, entityAttributeDetail.getEntityType()); 106 var entityAttributeName = filterEntityAttributeName ? null : entityAttributeDetail.getEntityAttributeName(); 107 var entityAttributeType = entityAttributeDetail.getEntityAttributeType(); 108 var entityAttributeTypeTransfer = filterEntityAttributeType ? null : coreControl.getEntityAttributeTypeTransfer(userVisit, entityAttributeType); 109 var trackRevisions = filterTrackRevisions ? null : entityAttributeDetail.getTrackRevisions(); 110 var sortOrder = filterSortOrder ? null : entityAttributeDetail.getSortOrder(); 111 var description = filterDescription ? null : coreControl.getBestEntityAttributeDescription(entityAttribute, getLanguage(userVisit)); 112 113 entityAttributeTransfer = new EntityAttributeTransfer(entityTypeTransfer, entityAttributeTypeTransfer, entityAttributeName, 114 trackRevisions, sortOrder, description); 115 116 var entityAttributeTypeName = entityAttributeType.getEntityAttributeTypeName(); 117 switch(EntityAttributeTypes.valueOf(entityAttributeTypeName)) { 118 case BLOB -> { 119 if(!filterCheckContentWebAddress) { 120 var entityAttributeBlob = coreControl.getEntityAttributeBlob(entityAttribute); 121 122 entityAttributeTransfer.setCheckContentWebAddress(entityAttributeBlob.getCheckContentWebAddress()); 123 } 124 } 125 case STRING -> { 126 if(!filterValidationPattern) { 127 var entityAttributeString = coreControl.getEntityAttributeString(entityAttribute); 128 129 if(entityAttributeString != null) { 130 entityAttributeTransfer.setValidationPattern(filterValidationPattern ? null : entityAttributeString.getValidationPattern()); 131 } 132 } 133 } 134 case INTEGER -> { 135 // TODO 136 137 if(!filterUnitOfMeasureType) { 138 var entityAttributeNumeric = coreControl.getEntityAttributeNumeric(entityAttribute); 139 140 if(entityAttributeNumeric != null) { 141 if(!filterUnitOfMeasureType) { 142 var unitOfMeasureType = entityAttributeNumeric.getUnitOfMeasureType(); 143 144 entityAttributeTransfer.setUnitOfMeasureType(unitOfMeasureType == null ? null : uomControl.getUnitOfMeasureTypeTransfer(userVisit, unitOfMeasureType)); 145 } 146 } 147 } 148 } 149 case LONG -> { 150 // TODO 151 if(!filterUnitOfMeasureType) { 152 var entityAttributeNumeric = coreControl.getEntityAttributeNumeric(entityAttribute); 153 154 if(entityAttributeNumeric != null) { 155 if(!filterUnitOfMeasureType) { 156 var unitOfMeasureType = entityAttributeNumeric.getUnitOfMeasureType(); 157 158 entityAttributeTransfer.setUnitOfMeasureType(unitOfMeasureType == null ? null : uomControl.getUnitOfMeasureTypeTransfer(userVisit, unitOfMeasureType)); 159 } 160 } 161 } 162 } 163 case LISTITEM, MULTIPLELISTITEM -> { 164 if(!filterEntityListItemSequence) { 165 var entityAttributeListItem = coreControl.getEntityAttributeListItem(entityAttribute); 166 167 if(entityAttributeListItem != null) { 168 if(!filterEntityListItemSequence) { 169 var entityListItemSequence = entityAttributeListItem.getEntityListItemSequence(); 170 171 entityAttributeTransfer.setEntityListItemSequence(entityListItemSequence == null ? null : sequenceControl.getSequenceTransfer(userVisit, entityListItemSequence)); 172 } 173 } 174 } 175 } 176 default -> {} 177 } 178 179 if(entityInstance == null) { 180 put(userVisit, entityAttribute, entityAttributeTransfer); 181 } else { 182 setupEntityInstance(userVisit, entityAttribute, null, entityAttributeTransfer); 183 } 184 185 if(includeDefault || (includeValue && entityInstance != null)) { 186 var entityAttributeTypeEnum = EntityAttributeTypes.valueOf(entityAttributeTypeName); 187 188 switch(entityAttributeTypeEnum) { 189 case BOOLEAN -> { 190 if(includeDefault) { 191 var entityBooleanDefault = coreControl.getEntityBooleanDefault(entityAttribute); 192 193 entityAttributeTransfer.setEntityBooleanDefault(entityBooleanDefault == null ? null : coreControl.getEntityBooleanDefaultTransfer(userVisit, entityBooleanDefault)); 194 } 195 196 if(includeValue && entityInstance != null) { 197 var entityBooleanAttribute = coreControl.getEntityBooleanAttribute(entityAttribute, entityInstance); 198 199 entityAttributeTransfer.setEntityBooleanAttribute(entityBooleanAttribute == null ? null : coreControl.getEntityBooleanAttributeTransfer(userVisit, entityBooleanAttribute, entityInstance)); 200 } 201 } 202 case NAME -> { 203 if(includeValue && entityInstance != null) { 204 var entityNameAttribute = coreControl.getEntityNameAttribute(entityAttribute, entityInstance); 205 206 entityAttributeTransfer.setEntityNameAttribute(entityNameAttribute == null ? null : coreControl.getEntityNameAttributeTransfer(userVisit, entityNameAttribute, entityInstance)); 207 } 208 } 209 case INTEGER -> { 210 if(includeDefault) { 211 var entityIntegerDefault = coreControl.getEntityIntegerDefault(entityAttribute); 212 213 entityAttributeTransfer.setEntityIntegerDefault(entityIntegerDefault == null ? null : coreControl.getEntityIntegerDefaultTransfer(userVisit, entityIntegerDefault)); 214 } 215 216 if(includeValue && entityInstance != null) { 217 var entityIntegerAttribute = coreControl.getEntityIntegerAttribute(entityAttribute, entityInstance); 218 219 entityAttributeTransfer.setEntityIntegerAttribute(entityIntegerAttribute == null ? null : coreControl.getEntityIntegerAttributeTransfer(userVisit, entityIntegerAttribute, entityInstance)); 220 } 221 } 222 case LONG -> { 223 if(includeDefault) { 224 var entityLongDefault = coreControl.getEntityLongDefault(entityAttribute); 225 226 entityAttributeTransfer.setEntityLongDefault(entityLongDefault == null ? null : coreControl.getEntityLongDefaultTransfer(userVisit, entityLongDefault)); 227 } 228 229 if(includeValue && entityInstance != null) { 230 var entityLongAttribute = coreControl.getEntityLongAttribute(entityAttribute, entityInstance); 231 232 entityAttributeTransfer.setEntityLongAttribute(entityLongAttribute == null ? null : coreControl.getEntityLongAttributeTransfer(userVisit, entityLongAttribute, entityInstance)); 233 } 234 } 235 case STRING -> { 236 if(includeDefault) { 237 var entityStringDefault = coreControl.getEntityStringDefault(entityAttribute, getLanguage(userVisit)); 238 239 entityAttributeTransfer.setEntityStringDefault(entityStringDefault == null ? null : coreControl.getEntityStringDefaultTransfer(userVisit, entityStringDefault)); 240 } 241 242 if(includeValue && entityInstance != null) { 243 var entityStringAttribute = coreControl.getBestEntityStringAttribute(entityAttribute, entityInstance, getLanguage(userVisit)); 244 245 entityAttributeTransfer.setEntityStringAttribute(entityStringAttribute == null ? null : coreControl.getEntityStringAttributeTransfer(userVisit, entityStringAttribute, entityInstance)); 246 } 247 } 248 case GEOPOINT -> { 249 if(includeValue && entityInstance != null) { 250 var entityGeoPointAttribute = coreControl.getEntityGeoPointAttribute(entityAttribute, entityInstance); 251 252 entityAttributeTransfer.setEntityGeoPointAttribute(entityGeoPointAttribute == null ? null : coreControl.getEntityGeoPointAttributeTransfer(userVisit, entityGeoPointAttribute, entityInstance)); 253 } 254 } 255 case BLOB -> { 256 if(includeValue && entityInstance != null) { 257 var entityBlobAttribute = coreControl.getBestEntityBlobAttribute(entityAttribute, entityInstance, getLanguage(userVisit)); 258 259 entityAttributeTransfer.setEntityBlobAttribute(entityBlobAttribute == null ? null : coreControl.getEntityBlobAttributeTransfer(userVisit, entityBlobAttribute, entityInstance)); 260 } 261 } 262 case CLOB -> { 263 if(includeValue && entityInstance != null) { 264 var entityClobAttribute = coreControl.getBestEntityClobAttribute(entityAttribute, entityInstance, getLanguage(userVisit)); 265 266 entityAttributeTransfer.setEntityClobAttribute(entityClobAttribute == null ? null : coreControl.getEntityClobAttributeTransfer(userVisit, entityClobAttribute, entityInstance)); 267 } 268 } 269 case ENTITY -> { 270 if(includeValue && entityInstance != null) { 271 var entityEntityAttribute = coreControl.getEntityEntityAttribute(entityAttribute, entityInstance); 272 273 entityAttributeTransfer.setEntityEntityAttribute(entityEntityAttribute == null ? null : coreControl.getEntityEntityAttributeTransfer(userVisit, entityEntityAttribute, entityInstance)); 274 } 275 } 276 case COLLECTION -> { 277 if(includeValue && entityInstance != null) { 278 entityAttributeTransfer.setEntityCollectionAttributes(new ListWrapper<>(coreControl.getEntityCollectionAttributeTransfers(userVisit, entityAttribute, entityInstance))); 279 } 280 } 281 case DATE -> { 282 if(includeDefault) { 283 var entityDateDefault = coreControl.getEntityDateDefault(entityAttribute); 284 285 entityAttributeTransfer.setEntityDateDefault(entityDateDefault == null ? null : coreControl.getEntityDateDefaultTransfer(userVisit, entityDateDefault)); 286 } 287 288 if(includeValue && entityInstance != null) { 289 var entityDateAttribute = coreControl.getEntityDateAttribute(entityAttribute, entityInstance); 290 291 entityAttributeTransfer.setEntityDateAttribute(entityDateAttribute == null ? null : coreControl.getEntityDateAttributeTransfer(userVisit, entityDateAttribute, entityInstance)); 292 } 293 } 294 case TIME -> { 295 if(includeValue && entityInstance != null) { 296 var entityTimeAttribute = coreControl.getEntityTimeAttribute(entityAttribute, entityInstance); 297 298 entityAttributeTransfer.setEntityTimeAttribute(entityTimeAttribute == null ? null : coreControl.getEntityTimeAttributeTransfer(userVisit, entityTimeAttribute, entityInstance)); 299 } 300 } 301 case LISTITEM -> { 302 if(includeDefault) { 303 var entityListItemDefault = coreControl.getEntityListItemDefault(entityAttribute); 304 305 entityAttributeTransfer.setEntityListItemDefault(entityListItemDefault == null ? null : coreControl.getEntityListItemDefaultTransfer(userVisit, entityListItemDefault)); 306 } 307 308 if(includeValue && entityInstance != null) { 309 var entityListItemAttribute = coreControl.getEntityListItemAttribute(entityAttribute, entityInstance); 310 311 entityAttributeTransfer.setEntityListItemAttribute(entityListItemAttribute == null ? null : coreControl.getEntityListItemAttributeTransfer(userVisit, entityListItemAttribute, entityInstance)); 312 } 313 } 314 case MULTIPLELISTITEM -> { 315 if(includeDefault) { 316 var entityMultipleListItemDefaults = coreControl.getEntityMultipleListItemDefaults(entityAttribute); 317 318 entityAttributeTransfer.setEntityMultipleListItemDefaults(new ListWrapper<>(coreControl.getEntityMultipleListItemDefaultTransfers(userVisit, entityMultipleListItemDefaults))); 319 } 320 321 if(includeValue && entityInstance != null) { 322 entityAttributeTransfer.setEntityMultipleListItemAttributes(new ListWrapper<>(coreControl.getEntityMultipleListItemAttributeTransfers(userVisit, entityAttribute, entityInstance))); 323 } 324 } 325 case WORKFLOW -> {} // Nothing 326 } 327 } 328 329 if(includeEntityListItemsCount) { 330 entityAttributeTransfer.setEntityListItemsCount(coreControl.countEntityListItems(entityAttribute)); 331 } 332 333 if(includeEntityListItems) { 334 entityAttributeTransfer.setEntityListItems(new ListWrapper<>(coreControl.getEntityListItemTransfersByEntityAttribute(userVisit, entityAttribute, entityInstance))); 335 } 336 337 if(includeEntityAttributeEntityTypesCount) { 338 entityAttributeTransfer.setEntityAttributeEntityTypesCount(coreControl.countEntityAttributeEntityTypesByEntityAttribute(entityAttribute)); 339 } 340 341 if(includeEntityAttributeEntityTypes) { 342 entityAttributeTransfer.setEntityAttributeEntityTypes(new ListWrapper<>(coreControl.getEntityAttributeEntityTypeTransfersByEntityAttribute(userVisit, entityAttribute, entityInstance))); 343 } 344 } 345 return entityAttributeTransfer; 346 } 347 348}