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.index.server.analysis; 018 019import com.echothree.model.control.core.common.MimeTypeUsageTypes; 020import com.echothree.model.control.index.common.IndexConstants; 021import com.echothree.model.control.index.common.IndexFieldVariations; 022import com.echothree.model.control.index.common.IndexFields; 023import com.echothree.model.control.item.server.control.ItemControl; 024import com.echothree.model.data.core.server.entity.EntityAliasType; 025import com.echothree.model.data.core.server.entity.EntityAttribute; 026import com.echothree.model.data.core.server.entity.EntityType; 027import com.echothree.model.data.core.server.entity.MimeTypeUsageType; 028import com.echothree.model.data.party.server.entity.Language; 029import com.echothree.model.data.tag.server.entity.TagScope; 030import com.echothree.util.server.message.ExecutionErrorAccumulator; 031import com.echothree.util.server.persistence.Session; 032import java.util.List; 033import java.util.Map; 034import org.apache.lucene.analysis.Analyzer; 035 036public class ItemAnalyzer 037 extends BasicAnalyzer { 038 039 public ItemAnalyzer(final ExecutionErrorAccumulator eea, final Language language, final EntityType entityType, final List<EntityAliasType> entityAliasTypes, final List<EntityAttribute> entityAttributes, 040 final List<TagScope> tagScopes) { 041 super(eea, language, entityType, entityAliasTypes, entityAttributes, tagScopes); 042 } 043 044 public ItemAnalyzer(final ExecutionErrorAccumulator eea, final Language language, final EntityType entityType) { 045 super(eea, language, entityType); 046 } 047 048 protected Map<String, Analyzer> getItemAliasTypeAnalyzers(final Map<String, Analyzer> fieldAnalyzers) { 049 var itemControl = Session.getModelController(ItemControl.class); 050 051 itemControl.getItemAliasTypes().stream().forEach((itemAliasType) -> { 052 fieldAnalyzers.put(itemAliasType.getLastDetail().getItemAliasTypeName(), new WhitespaceLowerCaseAnalyzer()); 053 }); 054 055 return fieldAnalyzers; 056 } 057 058 /** 059 * 060 * @param fieldAnalyzers A Map of field Analyzers. 061 * @return the field Analyzer map with additional Analyzers for ItemDescriptionTypes added. 062 */ 063 protected Map<String, Analyzer> getItemDescriptionAnalyzers(final Map<String, Analyzer> fieldAnalyzers) { 064 var itemControl = Session.getModelController(ItemControl.class); 065 066 itemControl.getItemDescriptionTypes().stream().map((itemDescriptionType) -> itemDescriptionType.getLastDetail()).forEach((itemDescriptionTypeDetail) -> { 067 MimeTypeUsageType mimeTypeUsageType = itemDescriptionTypeDetail.getMimeTypeUsageType(); 068 if (mimeTypeUsageType == null || mimeTypeUsageType.getMimeTypeUsageTypeName().equals(MimeTypeUsageTypes.TEXT.name())) { 069 fieldAnalyzers.put(itemDescriptionTypeDetail.getItemDescriptionTypeName() + IndexConstants.INDEX_FIELD_VARIATION_SEPARATOR + IndexFieldVariations.dictionary.name(), 070 new DictionaryAnalyzer()); 071 } 072 }); 073 074 return fieldAnalyzers; 075 } 076 077 @Override 078 protected Map<String, Analyzer> getEntityTypeAnalyzers(final Map<String, Analyzer> fieldAnalyzers) { 079 super.getEntityTypeAnalyzers(fieldAnalyzers); 080 081 fieldAnalyzers.put(IndexFields.aliases.name(), new WhitespaceLowerCaseAnalyzer()); 082 fieldAnalyzers.put(IndexFields.itemName.name(), new WhitespaceLowerCaseAnalyzer()); 083 fieldAnalyzers.put(IndexFields.itemNameAndAliases.name(), new WhitespaceLowerCaseAnalyzer()); 084 fieldAnalyzers.put(IndexFields.itemTypeName.name(), new WhitespaceLowerCaseAnalyzer()); 085 fieldAnalyzers.put(IndexFields.itemUseTypeName.name(), new WhitespaceLowerCaseAnalyzer()); 086 fieldAnalyzers.put(IndexFields.itemDeliveryTypeName.name(), new WhitespaceLowerCaseAnalyzer()); 087 fieldAnalyzers.put(IndexFields.itemInventoryTypeName.name(), new WhitespaceLowerCaseAnalyzer()); 088 fieldAnalyzers.put(IndexFields.inventorySerialized.name(), new WhitespaceLowerCaseAnalyzer()); 089 fieldAnalyzers.put(IndexFields.shippingChargeExempt.name(), new WhitespaceLowerCaseAnalyzer()); 090 fieldAnalyzers.put(IndexFields.allowClubDiscounts.name(), new WhitespaceLowerCaseAnalyzer()); 091 fieldAnalyzers.put(IndexFields.allowCouponDiscounts.name(), new WhitespaceLowerCaseAnalyzer()); 092 fieldAnalyzers.put(IndexFields.allowAssociatePayments.name(), new WhitespaceLowerCaseAnalyzer()); 093 094 return getItemDescriptionAnalyzers(getItemAliasTypeAnalyzers(fieldAnalyzers)); 095 } 096 097}