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.util.server.persistence; 018 019import com.echothree.model.control.communication.server.control.CommunicationControl; 020import com.echothree.model.control.core.common.ComponentVendors; 021import com.echothree.model.control.core.common.EntityTypes; 022import com.echothree.model.control.core.server.control.ComponentControl; 023import com.echothree.model.control.core.server.control.CoreControl; 024import com.echothree.model.control.core.server.control.EntityAliasControl; 025import com.echothree.model.control.core.server.control.EntityTypeControl; 026import com.echothree.model.control.core.server.control.MimeTypeControl; 027import com.echothree.model.control.forum.common.ForumConstants; 028import com.echothree.model.control.forum.server.control.ForumControl; 029import com.echothree.model.control.item.common.ItemDescriptionTypes; 030import com.echothree.model.control.item.server.control.ItemControl; 031import com.echothree.model.control.party.server.control.PartyControl; 032import com.echothree.model.control.training.server.control.TrainingControl; 033import com.echothree.model.control.user.server.control.UserControl; 034import com.echothree.model.control.vendor.server.control.VendorControl; 035import com.echothree.model.control.warehouse.server.control.WarehouseControl; 036import com.echothree.model.data.core.server.entity.EntityInstance; 037import com.echothree.model.data.forum.server.entity.ForumMessage; 038import com.echothree.model.data.item.server.entity.ItemDescriptionType; 039import com.echothree.model.data.party.server.entity.Language; 040import com.echothree.model.data.user.server.entity.UserVisit; 041 042public class EntityDescriptionUtils { 043 044 private EntityDescriptionUtils() { 045 super(); 046 } 047 048 private static class EntityDescriptionUtilsHolder { 049 static EntityDescriptionUtils instance = new EntityDescriptionUtils(); 050 } 051 052 public static EntityDescriptionUtils getInstance() { 053 return EntityDescriptionUtilsHolder.instance; 054 } 055 056 private ItemDescriptionType getItemDefaultDescriptionType() { 057 var itemControl = Session.getModelController(ItemControl.class); 058 059 // TODO: Context Cache 060 return itemControl.getItemDescriptionTypeByName(ItemDescriptionTypes.DEFAULT_DESCRIPTION.name()); 061 } 062 063 private ItemDescriptionType getItemPurchaseOrderDescriptionType() { 064 var itemControl = Session.getModelController(ItemControl.class); 065 066 // TODO: Context Cache 067 return itemControl.getItemDescriptionTypeByName(ItemDescriptionTypes.PURCHASE_ORDER_DESCRIPTION.name()); 068 } 069 070 private String getDescriptionForForumMessage(UserVisit userVisit, ForumMessage forumMessage) { 071 var forumControl = Session.getModelController(ForumControl.class); 072 String description = null; 073 074 var forumMessagePartType = forumControl.getForumMessagePartTypeByName(ForumConstants.ForumMessagePartType_TITLE); 075 var forumMessagePart = forumControl.getBestForumMessagePart(forumMessage, forumMessagePartType, getLanguage(userVisit)); 076 077 if(forumMessagePart != null) { 078 var forumStringMessagePart = forumControl.getForumStringMessagePart(forumMessagePart); 079 080 description = forumStringMessagePart.getString(); 081 } 082 083 return description; 084 } 085 086 private Language getLanguage(UserVisit userVisit) { 087 var userControl = Session.getModelController(UserControl.class); 088 089 // TODO: Context Cache 090 return userControl.getPreferredLanguageFromUserVisit(userVisit); 091 } 092 093 public String getDescription(UserVisit userVisit, EntityInstance entityInstance) { 094 String description = null; 095 096 if(entityInstance != null) { 097 var entityTypeDetail = entityInstance.getEntityType().getLastDetail(); 098 var componentVendorName = entityTypeDetail.getComponentVendor().getLastDetail().getComponentVendorName(); 099 100 if(componentVendorName.equals(ComponentVendors.ECHO_THREE.name())) { 101 var entityTypeName = entityTypeDetail.getEntityTypeName(); 102 103 if(entityTypeName.equals(EntityTypes.Party.name())) { 104 var partyControl = Session.getModelController(PartyControl.class); 105 var party = partyControl.getPartyByEntityInstance(entityInstance); 106 107 description = party == null ? null : partyControl.getBestPartyDescription(party, getLanguage(userVisit)); 108 } else if(entityTypeName.equals(EntityTypes.CommunicationEvent.name())) { 109 var communicationControl = Session.getModelController(CommunicationControl.class); 110 var communicationEvent = communicationControl.getCommunicationEventByEntityInstance(entityInstance); 111 112 description = communicationEvent == null ? null : communicationEvent.getLastDetail().getCommunicationEventName(); 113 } else if(entityTypeName.equals(EntityTypes.TrainingClass.name())) { 114 var trainingControl = Session.getModelController(TrainingControl.class); 115 var trainingClass = trainingControl.getTrainingClassByEntityInstance(entityInstance); 116 117 if(trainingClass != null) { 118 var trainingClassTranslation = trainingControl.getBestTrainingClassTranslation(trainingClass, getLanguage(userVisit)); 119 120 description = trainingClassTranslation == null ? null : trainingClassTranslation.getDescription(); 121 } 122 } else if(entityTypeName.equals(EntityTypes.PartyTrainingClass.name())) { 123 var trainingControl = Session.getModelController(TrainingControl.class); 124 var partyTrainingClass = trainingControl.getPartyTrainingClassByEntityInstance(entityInstance); 125 126 description = partyTrainingClass == null ? null : partyTrainingClass.getLastDetail().getPartyTrainingClassName(); 127 } else if(entityTypeName.equals(EntityTypes.Item.name())) { 128 var itemControl = Session.getModelController(ItemControl.class); 129 var item = itemControl.getItemByEntityInstance(entityInstance); 130 131 description = item == null ? null : itemControl.getBestItemStringDescription(getItemDefaultDescriptionType(), item, getLanguage(userVisit)); 132 } else if(entityTypeName.equals(EntityTypes.ItemDescription.name())) { 133 var itemControl = Session.getModelController(ItemControl.class); 134 var itemDescription = itemControl.getItemDescriptionByEntityInstance(entityInstance); 135 136 if(itemDescription != null) { 137 var partyControl = Session.getModelController(PartyControl.class); 138 var itemDescriptionDetail = itemDescription.getLastDetail(); 139 var language = getLanguage(userVisit); 140 141 description = itemControl.getBestItemDescriptionTypeDescription(itemDescriptionDetail.getItemDescriptionType(), language) + ", " + itemControl.getBestItemStringDescription(getItemDefaultDescriptionType(), itemDescriptionDetail.getItem(), language) + ", " + partyControl.getBestLanguageDescription(itemDescriptionDetail.getLanguage(), language); 142 } 143 } else if(entityTypeName.equals(EntityTypes.VendorItem.name())) { 144 var vendorControl = Session.getModelController(VendorControl.class); 145 var vendorItem = vendorControl.getVendorItemByEntityInstance(entityInstance); 146 147 if(vendorItem != null) { 148 var vendorItemDetail = vendorItem.getLastDetail(); 149 150 description = vendorItemDetail.getDescription(); 151 152 if(description == null) { 153 var itemControl = Session.getModelController(ItemControl.class); 154 description = itemControl.getBestItemStringDescription(getItemPurchaseOrderDescriptionType(), vendorItemDetail.getItem(), getLanguage(userVisit)); 155 } 156 } 157 } else if(entityTypeName.equals(EntityTypes.ForumGroup.name())) { 158 var forumControl = Session.getModelController(ForumControl.class); 159 var forumGroup = forumControl.getForumGroupByEntityInstance(entityInstance); 160 161 description = forumGroup == null ? null : forumControl.getBestForumGroupDescription(forumGroup, getLanguage(userVisit)); 162 } else if(entityTypeName.equals(EntityTypes.Forum.name())) { 163 var forumControl = Session.getModelController(ForumControl.class); 164 var forum = forumControl.getForumByEntityInstance(entityInstance); 165 166 description = forum == null ? null : forumControl.getBestForumDescription(forum, getLanguage(userVisit)); 167 } else if(entityTypeName.equals(EntityTypes.ForumThread.name())) { 168 // TODO: A method is needed to push the current limit on ForumMessages, and then pop it. A quick implementation of that 169 // proved difficult due to the limitCache in the Session. Its key is the Class for the BaseFactory vs. a String used by 170 // the limits Map. 171 var forumControl = Session.getModelController(ForumControl.class); 172 var forumThread = forumControl.getForumThreadByEntityInstance(entityInstance); 173 174 if(forumThread != null) { 175 var forumMessages = forumControl.getForumMessagesByForumThread(forumThread); 176 177 if(!forumMessages.isEmpty()) { 178 description = getDescriptionForForumMessage(userVisit, forumMessages.getFirst()); 179 } 180 } 181 } else if(entityTypeName.equals(EntityTypes.ForumMessage.name())) { 182 var forumControl = Session.getModelController(ForumControl.class); 183 var forumMessage = forumControl.getForumMessageByEntityInstance(entityInstance); 184 185 description = forumMessage == null ? null : getDescriptionForForumMessage(userVisit, forumMessage); 186 } else if(entityTypeName.equals(EntityTypes.MimeType.name())) { 187 var mimeTypeControl = Session.getModelController(MimeTypeControl.class); 188 var mimeType = mimeTypeControl.getMimeTypeByEntityInstance(entityInstance); 189 190 description = mimeType == null ? null : mimeTypeControl.getBestMimeTypeDescription(mimeType, getLanguage(userVisit)); 191 } else if(entityTypeName.equals(EntityTypes.Location.name())) { 192 var warehouseControl = Session.getModelController(WarehouseControl.class); 193 var location = warehouseControl.getLocationByEntityInstance(entityInstance); 194 195 description = location == null ? null : warehouseControl.getBestLocationDescription(location, getLanguage(userVisit)); 196 } else if(entityTypeName.equals(EntityTypes.ComponentVendor.name())) { 197 var componentControl = Session.getModelController(ComponentControl.class); 198 var componentVendor = componentControl.getComponentVendorByEntityInstance(entityInstance); 199 200 description = componentVendor == null ? null : componentVendor.getLastDetail().getDescription(); 201 } else if(entityTypeName.equals(EntityTypes.EntityType.name())) { 202 var entityTypeControl = Session.getModelController(EntityTypeControl.class); 203 var entityType = entityTypeControl.getEntityTypeByEntityInstance(entityInstance); 204 205 description = entityType == null ? null : entityTypeControl.getBestEntityTypeDescription(entityType, getLanguage(userVisit)); 206 } else if(entityTypeName.equals(EntityTypes.EntityAliasType.name())) { 207 var entityAliasControl = Session.getModelController(EntityAliasControl.class); 208 var entityAliasType = entityAliasControl.getEntityAliasTypeByEntityInstance(entityInstance); 209 210 description = entityAliasType == null ? null : entityAliasControl.getBestEntityAliasTypeDescription(entityAliasType, getLanguage(userVisit)); 211 } else if(entityTypeName.equals(EntityTypes.EntityAttribute.name())) { 212 var coreControl = Session.getModelController(CoreControl.class); 213 var entityAttribute = coreControl.getEntityAttributeByEntityInstance(entityInstance); 214 215 description = entityAttribute == null ? null : coreControl.getBestEntityAttributeDescription(entityAttribute, getLanguage(userVisit)); 216 } else if(entityTypeName.equals(EntityTypes.EntityListItem.name())) { 217 var coreControl = Session.getModelController(CoreControl.class); 218 var entityListItem = coreControl.getEntityListItemByEntityInstance(entityInstance); 219 220 description = entityListItem == null ? null : coreControl.getBestEntityListItemDescription(entityListItem, getLanguage(userVisit)); 221 } else if(entityTypeName.equals(EntityTypes.EntityAttributeGroup.name())) { 222 var coreControl = Session.getModelController(CoreControl.class); 223 var entityAttributeGroup = coreControl.getEntityAttributeGroupByEntityInstance(entityInstance); 224 225 description = entityAttributeGroup == null ? null : coreControl.getBestEntityAttributeGroupDescription(entityAttributeGroup, getLanguage(userVisit)); 226 } 227 } 228 } 229 230 return description; 231 } 232 233}