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