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.util.server.persistence.translator; 018 019import com.echothree.model.control.core.server.control.CoreControl; 020import com.echothree.model.control.order.common.OrderTypes; 021import com.echothree.model.control.order.server.control.OrderControl; 022import com.echothree.model.control.order.server.logic.OrderLogic; 023import com.echothree.model.control.sequence.common.SequenceTypes; 024import com.echothree.model.data.core.server.entity.EntityInstance; 025import com.echothree.model.data.order.common.pk.OrderPK; 026import com.echothree.model.data.order.server.entity.OrderDetail; 027import com.echothree.model.data.order.server.factory.OrderFactory; 028import com.echothree.util.common.persistence.EntityNames; 029import com.echothree.util.common.persistence.Names; 030import com.echothree.util.common.persistence.Targets; 031import com.echothree.util.common.transfer.MapWrapper; 032import com.echothree.util.server.persistence.EntityPermission; 033import com.echothree.util.server.persistence.Session; 034import java.util.Collections; 035import java.util.HashMap; 036import java.util.Map; 037 038public class OrderNameTranslator 039 implements EntityInstanceTranslator, SequenceTypeTranslator { 040 041 private final static Map<String, String> orderTypesToTargets; 042 private final static Map<String, String> sequenceTypesToOrderTypes; 043 private final static Map<String, String> sequenceTypesToTargets; 044 045 static { 046 var orderTypesToTargetsMap = new HashMap<String, String>(); 047 048 orderTypesToTargetsMap.put(OrderTypes.PURCHASE_ORDER.name(), Targets.PurchaseOrder.name()); 049 orderTypesToTargetsMap.put(OrderTypes.SALES_ORDER.name(), Targets.SalesOrder.name()); 050 orderTypesToTargetsMap.put(OrderTypes.WISHLIST.name(), Targets.Wishlist.name()); 051 052 orderTypesToTargets = Collections.unmodifiableMap(orderTypesToTargetsMap); 053 054 var sequenceTypesToOrderTypesMap = new HashMap<String, String>(); 055 056 sequenceTypesToOrderTypesMap.put(SequenceTypes.PURCHASE_ORDER.name(), OrderTypes.PURCHASE_ORDER.name()); 057 sequenceTypesToOrderTypesMap.put(SequenceTypes.SALES_ORDER.name(), OrderTypes.SALES_ORDER.name()); 058 sequenceTypesToOrderTypesMap.put(SequenceTypes.WISHLIST.name(), OrderTypes.WISHLIST.name()); 059 060 sequenceTypesToOrderTypes = Collections.unmodifiableMap(sequenceTypesToOrderTypesMap); 061 062 var sequenceTypesToTargetsMap = new HashMap<String, String>(); 063 064 sequenceTypesToTargetsMap.put(SequenceTypes.PURCHASE_ORDER.name(), Targets.PurchaseOrder.name()); 065 sequenceTypesToTargetsMap.put(SequenceTypes.SALES_ORDER.name(), Targets.SalesOrder.name()); 066 sequenceTypesToTargetsMap.put(SequenceTypes.WISHLIST.name(), Targets.Wishlist.name()); 067 068 sequenceTypesToTargets = Collections.unmodifiableMap(sequenceTypesToTargetsMap); 069 } 070 071 private EntityNames getNames(final Map<String, String> targetMap, final String key, final OrderDetail orderDetail) { 072 String target = targetMap.get(key); 073 EntityNames result = null; 074 075 if(target != null) { 076 MapWrapper<String> names = new MapWrapper<>(1); 077 078 names.put(Names.OrderName.name(), orderDetail.getOrderName()); 079 080 result = new EntityNames(target, names); 081 } 082 083 return result; 084 } 085 086 @Override 087 public EntityNames getNames(final EntityInstance entityInstance) { 088 var orderDetail = OrderFactory.getInstance().getEntityFromPK(EntityPermission.READ_ONLY, 089 new OrderPK(entityInstance.getEntityUniqueId())).getLastDetail(); 090 var orderTypeName = orderDetail.getOrderType().getLastDetail().getOrderTypeName(); 091 092 return getNames(orderTypesToTargets, orderTypeName, orderDetail); 093 } 094 095 @Override 096 public EntityInstanceAndNames getNames(final String sequenceTypeName, final String orderName, 097 final boolean includeEntityInstance) { 098 EntityInstanceAndNames result = null; 099 var orderControl = Session.getModelController(OrderControl.class); 100 var orderTypeName = sequenceTypesToOrderTypes.get(sequenceTypeName); 101 102 if(orderTypeName != null) { 103 var orderType = OrderLogic.getInstance().getOrderTypeByName(null, orderTypeName); 104 var order = orderControl.getOrderByName(orderType, orderName); 105 106 if(order != null) { 107 var coreControl = Session.getModelController(CoreControl.class); 108 EntityNames entityNames = getNames(sequenceTypesToTargets, sequenceTypeName, order.getLastDetail()); 109 110 result = entityNames == null ? null : new EntityInstanceAndNames(includeEntityInstance ? coreControl.getEntityInstanceByBasePK(order.getPrimaryKey()) : null, entityNames); 111 } 112 } 113 114 return result; 115 } 116 117}