001// -------------------------------------------------------------------------------- 002// Copyright 2002-2024 Echo Three, LLC 003// 004// Licensed under the Apache License, Version 2.0 (the "License"); 005// you may not use this file except in compliance with the License. 006// You may obtain a copy of the License at 007// 008// http://www.apache.org/licenses/LICENSE-2.0 009// 010// Unless required by applicable law or agreed to in writing, software 011// distributed under the License is distributed on an "AS IS" BASIS, 012// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013// See the License for the specific language governing permissions and 014// limitations under the License. 015// -------------------------------------------------------------------------------- 016 017package com.echothree.model.control.core.server.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.common.transfer.EntityAttributeTypeTransfer; 024import com.echothree.model.control.core.common.transfer.EntityTypeTransfer; 025import com.echothree.model.control.core.server.control.CoreControl; 026import com.echothree.model.control.sequence.server.control.SequenceControl; 027import com.echothree.model.control.uom.server.control.UomControl; 028import com.echothree.model.data.core.server.entity.EntityAttribute; 029import com.echothree.model.data.core.server.entity.EntityAttributeBlob; 030import com.echothree.model.data.core.server.entity.EntityAttributeDetail; 031import com.echothree.model.data.core.server.entity.EntityAttributeListItem; 032import com.echothree.model.data.core.server.entity.EntityAttributeNumeric; 033import com.echothree.model.data.core.server.entity.EntityAttributeString; 034import com.echothree.model.data.core.server.entity.EntityAttributeType; 035import com.echothree.model.data.core.server.entity.EntityBlobAttribute; 036import com.echothree.model.data.core.server.entity.EntityBooleanAttribute; 037import com.echothree.model.data.core.server.entity.EntityClobAttribute; 038import com.echothree.model.data.core.server.entity.EntityDateAttribute; 039import com.echothree.model.data.core.server.entity.EntityEntityAttribute; 040import com.echothree.model.data.core.server.entity.EntityGeoPointAttribute; 041import com.echothree.model.data.core.server.entity.EntityInstance; 042import com.echothree.model.data.core.server.entity.EntityIntegerAttribute; 043import com.echothree.model.data.core.server.entity.EntityListItemAttribute; 044import com.echothree.model.data.core.server.entity.EntityLongAttribute; 045import com.echothree.model.data.core.server.entity.EntityNameAttribute; 046import com.echothree.model.data.core.server.entity.EntityStringAttribute; 047import com.echothree.model.data.core.server.entity.EntityTimeAttribute; 048import com.echothree.model.data.sequence.server.entity.Sequence; 049import com.echothree.model.data.uom.server.entity.UnitOfMeasureType; 050import com.echothree.model.data.user.server.entity.UserVisit; 051import com.echothree.util.common.form.TransferProperties; 052import com.echothree.util.common.transfer.ListWrapper; 053import com.echothree.util.server.persistence.Session; 054import java.util.Set; 055 056public class EntityAttributeTransferCache 057 extends BaseCoreTransferCache<EntityAttribute, EntityAttributeTransfer> { 058 059 CoreControl coreControl = Session.getModelController(CoreControl.class); 060 SequenceControl sequenceControl = Session.getModelController(SequenceControl.class); 061 UomControl uomControl = Session.getModelController(UomControl.class); 062 063 boolean includeValue; 064 boolean includeEntityListItems; 065 boolean includeEntityListItemsCount; 066 boolean includeEntityAttributeEntityTypes; 067 boolean includeEntityAttributeEntityTypesCount; 068 069 TransferProperties transferProperties; 070 boolean filterEntityType; 071 boolean filterEntityAttributeName; 072 boolean filterEntityAttributeType; 073 boolean filterTrackRevisions; 074 boolean filterCheckContentWebAddress; 075 boolean filterValidationPattern; 076 boolean filterEntityListItemSequence; 077 boolean filterUnitOfMeasureType; 078 boolean filterSortOrder; 079 boolean filterDescription; 080 boolean filterEntityInstance; 081 082 /** Creates a new instance of EntityAttributeTransferCache */ 083 public EntityAttributeTransferCache(UserVisit userVisit) { 084 super(userVisit); 085 086 var options = session.getOptions(); 087 if(options != null) { 088 includeValue = options.contains(CoreOptions.EntityAttributeIncludeValue); 089 includeEntityListItems = options.contains(CoreOptions.EntityAttributeIncludeEntityListItems); 090 includeEntityListItemsCount = options.contains(CoreOptions.EntityAttributeIncludeEntityListItemsCount); 091 includeEntityAttributeEntityTypes = options.contains(CoreOptions.EntityAttributeIncludeEntityAttributeEntityTypes); 092 includeEntityAttributeEntityTypesCount = options.contains(CoreOptions.EntityAttributeIncludeEntityAttributeEntityTypesCount); 093 } 094 095 transferProperties = session.getTransferProperties(); 096 if(transferProperties != null) { 097 var properties = transferProperties.getProperties(EntityAttributeTransfer.class); 098 099 if(properties != null) { 100 filterEntityType = !properties.contains(CoreProperties.ENTITY_TYPE); 101 filterEntityAttributeName = !properties.contains(CoreProperties.ENTITY_ATTRIBUTE_NAME); 102 filterEntityAttributeType = !properties.contains(CoreProperties.ENTITY_ATTRIBUTE_TYPE); 103 filterTrackRevisions = !properties.contains(CoreProperties.TRACK_REVISIONS); 104 filterCheckContentWebAddress = !properties.contains(CoreProperties.CHECK_CONTENT_WEB_ADDRESS); 105 filterValidationPattern = !properties.contains(CoreProperties.VALIDATION_PATTERN); 106 filterEntityListItemSequence = !properties.contains(CoreProperties.ENTITY_LIST_ITEM_SEQUENCE); 107 filterUnitOfMeasureType = !properties.contains(CoreProperties.UNIT_OF_MEASURE_TYPE); 108 filterSortOrder = !properties.contains(CoreProperties.SORT_ORDER); 109 filterDescription = !properties.contains(CoreProperties.DESCRIPTION); 110 filterEntityInstance = !properties.contains(CoreProperties.ENTITY_INSTANCE); 111 } 112 } 113 114 setIncludeEntityInstance(!filterEntityInstance); 115 } 116 117 public EntityAttributeTransfer getEntityAttributeTransfer(EntityAttribute entityAttribute, EntityInstance entityInstance) { 118 EntityAttributeTransfer entityAttributeTransfer = get(entityAttribute); 119 120 if(entityAttributeTransfer == null) { 121 EntityAttributeDetail entityAttributeDetail = entityAttribute.getLastDetail(); 122 EntityTypeTransfer entityTypeTransfer = filterEntityType ? null : coreControl.getEntityTypeTransfer(userVisit, entityAttributeDetail.getEntityType()); 123 String entityAttributeName = filterEntityAttributeName ? null : entityAttributeDetail.getEntityAttributeName(); 124 EntityAttributeType entityAttributeType = entityAttributeDetail.getEntityAttributeType(); 125 EntityAttributeTypeTransfer entityAttributeTypeTransfer = filterEntityAttributeType ? null : coreControl.getEntityAttributeTypeTransfer(userVisit, entityAttributeType); 126 Boolean trackRevisions = filterTrackRevisions ? null : entityAttributeDetail.getTrackRevisions(); 127 Integer sortOrder = filterSortOrder ? null : entityAttributeDetail.getSortOrder(); 128 String description = filterDescription ? null : coreControl.getBestEntityAttributeDescription(entityAttribute, getLanguage()); 129 130 entityAttributeTransfer = new EntityAttributeTransfer(entityTypeTransfer, entityAttributeTypeTransfer, entityAttributeName, 131 trackRevisions, sortOrder, description); 132 133 String entityAttributeTypeName = entityAttributeType.getEntityAttributeTypeName(); 134 switch(EntityAttributeTypes.valueOf(entityAttributeTypeName)) { 135 case BLOB: 136 if(!filterCheckContentWebAddress) { 137 EntityAttributeBlob entityAttributeBlob = coreControl.getEntityAttributeBlob(entityAttribute); 138 139 entityAttributeTransfer.setCheckContentWebAddress(entityAttributeBlob.getCheckContentWebAddress()); 140 } 141 break; 142 case STRING: 143 if(!filterValidationPattern) { 144 EntityAttributeString entityAttributeString = coreControl.getEntityAttributeString(entityAttribute); 145 146 if(entityAttributeString != null) { 147 entityAttributeTransfer.setValidationPattern(filterValidationPattern ? null : entityAttributeString.getValidationPattern()); 148 } 149 } 150 break; 151 case INTEGER: { 152 // TODO 153 154 if(!filterUnitOfMeasureType) { 155 EntityAttributeNumeric entityAttributeNumeric = coreControl.getEntityAttributeNumeric(entityAttribute); 156 157 if(entityAttributeNumeric != null) { 158 if(!filterUnitOfMeasureType) { 159 UnitOfMeasureType unitOfMeasureType = entityAttributeNumeric.getUnitOfMeasureType(); 160 161 entityAttributeTransfer.setUnitOfMeasureType(unitOfMeasureType == null ? null : uomControl.getUnitOfMeasureTypeTransfer(userVisit, unitOfMeasureType)); 162 } 163 } 164 } 165 } 166 break; 167 case LONG: { 168 // TODO 169 170 if(!filterUnitOfMeasureType) { 171 EntityAttributeNumeric entityAttributeNumeric = coreControl.getEntityAttributeNumeric(entityAttribute); 172 173 if(entityAttributeNumeric != null) { 174 if(!filterUnitOfMeasureType) { 175 UnitOfMeasureType unitOfMeasureType = entityAttributeNumeric.getUnitOfMeasureType(); 176 177 entityAttributeTransfer.setUnitOfMeasureType(unitOfMeasureType == null ? null : uomControl.getUnitOfMeasureTypeTransfer(userVisit, unitOfMeasureType)); 178 } 179 } 180 } 181 } 182 break; 183 case LISTITEM: 184 case MULTIPLELISTITEM: 185 if(!filterEntityListItemSequence) { 186 EntityAttributeListItem entityAttributeListItem = coreControl.getEntityAttributeListItem(entityAttribute); 187 188 if(entityAttributeListItem != null) { 189 if(!filterEntityListItemSequence) { 190 Sequence entityListItemSequence = entityAttributeListItem.getEntityListItemSequence(); 191 192 entityAttributeTransfer.setEntityListItemSequence(entityListItemSequence == null ? null : sequenceControl.getSequenceTransfer(userVisit, entityListItemSequence)); 193 } 194 } 195 } 196 break; 197 default: 198 break; 199 } 200 201 if(entityInstance == null) { 202 put(entityAttribute, entityAttributeTransfer); 203 } else { 204 setupEntityInstance(entityAttribute, null, entityAttributeTransfer); 205 } 206 207 if(includeValue) { 208 if(entityInstance != null) { 209 if(entityAttributeTypeName.equals(EntityAttributeTypes.BOOLEAN.name())) { 210 EntityBooleanAttribute entityBooleanAttribute = coreControl.getEntityBooleanAttribute(entityAttribute, entityInstance); 211 212 entityAttributeTransfer.setEntityBooleanAttribute(entityBooleanAttribute == null ? null : coreControl.getEntityBooleanAttributeTransfer(userVisit, entityBooleanAttribute, entityInstance)); 213 } else if(entityAttributeTypeName.equals(EntityAttributeTypes.NAME.name())) { 214 EntityNameAttribute entityNameAttribute = coreControl.getEntityNameAttribute(entityAttribute, entityInstance); 215 216 entityAttributeTransfer.setEntityNameAttribute(entityNameAttribute == null ? null : coreControl.getEntityNameAttributeTransfer(userVisit, entityNameAttribute, entityInstance)); 217 } else if(entityAttributeTypeName.equals(EntityAttributeTypes.INTEGER.name())) { 218 EntityIntegerAttribute entityIntegerAttribute = coreControl.getEntityIntegerAttribute(entityAttribute, entityInstance); 219 220 entityAttributeTransfer.setEntityIntegerAttribute(entityIntegerAttribute == null ? null : coreControl.getEntityIntegerAttributeTransfer(userVisit, entityIntegerAttribute, entityInstance)); 221 } else if(entityAttributeTypeName.equals(EntityAttributeTypes.LONG.name())) { 222 EntityLongAttribute entityLongAttribute = coreControl.getEntityLongAttribute(entityAttribute, entityInstance); 223 224 entityAttributeTransfer.setEntityLongAttribute(entityLongAttribute == null ? null : coreControl.getEntityLongAttributeTransfer(userVisit, entityLongAttribute, entityInstance)); 225 } else if(entityAttributeTypeName.equals(EntityAttributeTypes.STRING.name())) { 226 EntityStringAttribute entityStringAttribute = coreControl.getBestEntityStringAttribute(entityAttribute, entityInstance, getLanguage()); 227 228 entityAttributeTransfer.setEntityStringAttribute(entityStringAttribute == null ? null : coreControl.getEntityStringAttributeTransfer(userVisit, entityStringAttribute, entityInstance)); 229 } else if(entityAttributeTypeName.equals(EntityAttributeTypes.GEOPOINT.name())) { 230 EntityGeoPointAttribute entityGeoPointAttribute = coreControl.getEntityGeoPointAttribute(entityAttribute, entityInstance); 231 232 entityAttributeTransfer.setEntityGeoPointAttribute(entityGeoPointAttribute == null ? null : coreControl.getEntityGeoPointAttributeTransfer(userVisit, entityGeoPointAttribute, entityInstance)); 233 } else if(entityAttributeTypeName.equals(EntityAttributeTypes.BLOB.name())) { 234 EntityBlobAttribute entityBlobAttribute = coreControl.getBestEntityBlobAttribute(entityAttribute, entityInstance, getLanguage()); 235 236 entityAttributeTransfer.setEntityBlobAttribute(entityBlobAttribute == null ? null : coreControl.getEntityBlobAttributeTransfer(userVisit, entityBlobAttribute, entityInstance)); 237 } else if(entityAttributeTypeName.equals(EntityAttributeTypes.CLOB.name())) { 238 EntityClobAttribute entityClobAttribute = coreControl.getBestEntityClobAttribute(entityAttribute, entityInstance, getLanguage()); 239 240 entityAttributeTransfer.setEntityClobAttribute(entityClobAttribute == null ? null : coreControl.getEntityClobAttributeTransfer(userVisit, entityClobAttribute, entityInstance)); 241 } else if(entityAttributeTypeName.equals(EntityAttributeTypes.ENTITY.name())) { 242 EntityEntityAttribute entityEntityAttribute = coreControl.getEntityEntityAttribute(entityAttribute, entityInstance); 243 244 entityAttributeTransfer.setEntityEntityAttribute(entityEntityAttribute == null ? null : coreControl.getEntityEntityAttributeTransfer(userVisit, entityEntityAttribute, entityInstance)); 245 } else if(entityAttributeTypeName.equals(EntityAttributeTypes.COLLECTION.name())) { 246 entityAttributeTransfer.setEntityCollectionAttributes(new ListWrapper<>(coreControl.getEntityCollectionAttributeTransfers(userVisit, entityAttribute, entityInstance))); 247 } else if(entityAttributeTypeName.equals(EntityAttributeTypes.DATE.name())) { 248 EntityDateAttribute entityDateAttribute = coreControl.getEntityDateAttribute(entityAttribute, entityInstance); 249 250 entityAttributeTransfer.setEntityDateAttribute(entityDateAttribute == null ? null : coreControl.getEntityDateAttributeTransfer(userVisit, entityDateAttribute, entityInstance)); 251 } else if(entityAttributeTypeName.equals(EntityAttributeTypes.TIME.name())) { 252 EntityTimeAttribute entityTimeAttribute = coreControl.getEntityTimeAttribute(entityAttribute, entityInstance); 253 254 entityAttributeTransfer.setEntityTimeAttribute(entityTimeAttribute == null ? null : coreControl.getEntityTimeAttributeTransfer(userVisit, entityTimeAttribute, entityInstance)); 255 } else if(entityAttributeTypeName.equals(EntityAttributeTypes.LISTITEM.name())) { 256 EntityListItemAttribute entityListItemAttribute = coreControl.getEntityListItemAttribute(entityAttribute, entityInstance); 257 258 entityAttributeTransfer.setEntityListItemAttribute(entityListItemAttribute == null ? null : coreControl.getEntityListItemAttributeTransfer(userVisit, entityListItemAttribute, entityInstance)); 259 } else if(entityAttributeTypeName.equals(EntityAttributeTypes.MULTIPLELISTITEM.name())) { 260 entityAttributeTransfer.setEntityMultipleListItemAttributes(new ListWrapper<>(coreControl.getEntityMultipleListItemAttributeTransfers(userVisit, entityAttribute, entityInstance))); 261 } 262 } else { 263 getLog().error("entityInstance is null"); 264 } 265 } 266 267 if(includeEntityListItemsCount) { 268 entityAttributeTransfer.setEntityListItemsCount(coreControl.countEntityListItems(entityAttribute)); 269 } 270 271 if(includeEntityListItems) { 272 entityAttributeTransfer.setEntityListItems(new ListWrapper<>(coreControl.getEntityListItemTransfersByEntityAttribute(userVisit, entityAttribute, entityInstance))); 273 } 274 275 if(includeEntityAttributeEntityTypesCount) { 276 entityAttributeTransfer.setEntityAttributeEntityTypesCount(coreControl.countEntityAttributeEntityTypesByEntityAttribute(entityAttribute)); 277 } 278 279 if(includeEntityAttributeEntityTypes) { 280 entityAttributeTransfer.setEntityAttributeEntityTypes(new ListWrapper<>(coreControl.getEntityAttributeEntityTypeTransfersByEntityAttribute(userVisit, entityAttribute, entityInstance))); 281 } 282 } 283 return entityAttributeTransfer; 284 } 285 286}