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.control.user.search.server.command; 018 019import com.echothree.control.user.search.common.form.BaseSearchForm; 020import com.echothree.model.control.search.server.control.SearchControl; 021import com.echothree.model.control.search.server.logic.SearchLogic; 022import com.echothree.model.data.party.server.entity.Party; 023import com.echothree.model.data.search.server.entity.PartySearchTypePreference; 024import com.echothree.model.data.search.server.entity.PartySearchTypePreferenceDetail; 025import com.echothree.model.data.search.server.entity.SearchDefaultOperator; 026import com.echothree.model.data.search.server.entity.SearchKind; 027import com.echothree.model.data.search.server.entity.SearchSortDirection; 028import com.echothree.model.data.search.server.entity.SearchSortOrder; 029import com.echothree.model.data.search.server.entity.SearchType; 030import com.echothree.model.data.search.server.value.PartySearchTypePreferenceDetailValue; 031import com.echothree.model.data.user.common.pk.UserVisitPK; 032import com.echothree.util.common.validation.FieldDefinition; 033import com.echothree.util.common.command.BaseResult; 034import com.echothree.util.server.control.BaseSimpleCommand; 035import com.echothree.util.server.control.CommandSecurityDefinition; 036import java.util.List; 037 038public abstract class BaseSearchCommand<F extends BaseSearchForm, R extends BaseResult> 039 extends BaseSimpleCommand<F> { 040 041 protected BaseSearchCommand(UserVisitPK userVisitPK, F form, CommandSecurityDefinition COMMAND_SECURITY_DEFINITION, 042 List<FieldDefinition> FORM_FIELD_DEFINITIONS, boolean allowLimits) { 043 super(userVisitPK, form, COMMAND_SECURITY_DEFINITION, FORM_FIELD_DEFINITIONS, allowLimits); 044 } 045 046 protected BaseSearchCommand(UserVisitPK userVisitPK, CommandSecurityDefinition COMMAND_SECURITY_DEFINITION, boolean allowLimits) { 047 super(userVisitPK, COMMAND_SECURITY_DEFINITION, allowLimits); 048 } 049 050 protected PartySearchTypePreference getPartySearchTypePreference(SearchControl searchControl, SearchType searchType) { 051 Party party = getParty(); 052 053 return party == null ? null : searchControl.getPartySearchTypePreference(party, searchType); 054 } 055 056 protected SearchDefaultOperator getDefaultSearchDefaultOperator(SearchLogic searchLogic, boolean rememberPreferences, 057 PartySearchTypePreferenceDetail partySearchTypePreferenceDetail) { 058 SearchDefaultOperator searchDefaultOperator = partySearchTypePreferenceDetail == null || rememberPreferences ? null 059 : partySearchTypePreferenceDetail.getSearchDefaultOperator(); 060 061 if(searchDefaultOperator == null) { 062 searchDefaultOperator = searchLogic.getDefaultSearchDefaultOperator(this); 063 } 064 065 return searchDefaultOperator; 066 } 067 068 protected SearchSortOrder getDefaultSearchSortOrder(SearchLogic searchLogic, boolean rememberPreferences, SearchKind searchKind, 069 PartySearchTypePreferenceDetail partySearchTypePreferenceDetail) { 070 SearchSortOrder searchSortOrder = partySearchTypePreferenceDetail == null || rememberPreferences ? null 071 : partySearchTypePreferenceDetail.getSearchSortOrder(); 072 073 if(searchSortOrder == null) { 074 searchSortOrder = searchLogic.getDefaultSearchSortOrder(this, searchKind); 075 } 076 077 return searchSortOrder; 078 } 079 080 protected SearchSortDirection getDefaultSearchSortDirection(SearchLogic searchLogic, boolean rememberPreferences, 081 PartySearchTypePreferenceDetail partySearchTypePreferenceDetail) { 082 SearchSortDirection searchSortDirection = partySearchTypePreferenceDetail == null || rememberPreferences ? null 083 : partySearchTypePreferenceDetail.getSearchSortDirection(); 084 085 if(searchSortDirection == null) { 086 searchSortDirection = searchLogic.getDefaultSearchSortDirection(this); 087 } 088 089 return searchSortDirection; 090 } 091 092 protected void updatePartySearchTypePreferences(SearchControl searchControl, SearchType searchType, PartySearchTypePreference partySearchTypePreference, 093 SearchDefaultOperator searchDefaultOperator, SearchSortOrder searchSortOrder, SearchSortDirection searchSortDirection, Party party) { 094 095 searchDefaultOperator = form.getSearchDefaultOperatorName() == null ? null : searchDefaultOperator; 096 searchSortOrder = form.getSearchSortOrderName() == null ? null : searchSortOrder; 097 searchSortDirection = form.getSearchSortDirectionName() == null ? null : searchSortDirection; 098 099 if(partySearchTypePreference == null) { 100 searchControl.createPartySearchTypePreference(party, searchType, searchDefaultOperator, searchSortOrder, searchSortDirection, party.getPrimaryKey()); 101 } else { 102 PartySearchTypePreferenceDetailValue partySearchTypePreferenceDetailValue = searchControl.getPartySearchTypePreferenceDetailValueForUpdate(partySearchTypePreference); 103 104 // Each of the following first check to see if we've fallen back onto the default for each, and will clear 105 // the value if we have. Otherwise, it'll use the new value that the user has selected. 106 partySearchTypePreferenceDetailValue.setSearchDefaultOperatorPK(searchDefaultOperator == null ? null : searchDefaultOperator.getPrimaryKey()); 107 partySearchTypePreferenceDetailValue.setSearchSortOrderPK(searchSortOrder == null ? null : searchSortOrder.getPrimaryKey()); 108 partySearchTypePreferenceDetailValue.setSearchSortDirectionPK(searchSortDirection == null ? null : searchSortDirection.getPrimaryKey()); 109 110 searchControl.updatePartySearchTypePreferenceFromValue(partySearchTypePreferenceDetailValue, party.getPrimaryKey()); 111 } 112 } 113 114}