001/* 002 * Copyright 2018 Anyware Services 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 */ 016package org.ametys.web.frontoffice.search.metamodel.impl; 017 018import java.util.List; 019import java.util.Locale; 020import java.util.Optional; 021 022import org.ametys.cms.search.SearchField; 023import org.ametys.runtime.i18n.I18nizableText; 024import org.ametys.web.frontoffice.search.metamodel.FacetDefinition; 025import org.ametys.web.frontoffice.search.metamodel.Returnable; 026 027/** 028 * {@link FacetDefinition} for {@link ContentReturnable}. 029 * <br>Based on a {@link ContentSearchCriterionDefinition}. 030 */ 031public class ContentFacetDefinition implements FacetDefinition 032{ 033 ContentSearchCriterionDefinition _contentSearchCriterionDefinition; 034 Returnable _returnable; 035 036 /** 037 * Default constructor 038 * @param contentSearchCriterionDefinition the {@link ContentSearchCriterionDefinition} it is based on 039 * @param returnable the {@link Returnable} 040 */ 041 public ContentFacetDefinition(ContentSearchCriterionDefinition contentSearchCriterionDefinition, Returnable returnable) 042 { 043 _contentSearchCriterionDefinition = contentSearchCriterionDefinition; 044 _returnable = returnable; 045 } 046 047 @Override 048 public String getId() 049 { 050 return ContentReturnable.__PREFIX_ID + _contentSearchCriterionDefinition.getId(); 051 } 052 053 @Override 054 public I18nizableText getLabel() 055 { 056 return _contentSearchCriterionDefinition.getLabel(); 057 } 058 059 @Override 060 public SearchField getSearchField() 061 { 062 SearchField searchField = _contentSearchCriterionDefinition.getSearchUICriterion().getSearchField(); 063 return new ProxySearchField(getId(), searchField); 064 } 065 066 @Override 067 public I18nizableText getFacetLabel(String value, String currentLang) 068 { 069 return _contentSearchCriterionDefinition.getSearchUICriterion().getFacetLabel(value, new Locale(currentLang)); 070 } 071 072 @Override 073 public Optional<Returnable> getReturnable() 074 { 075 return Optional.of(_returnable); 076 } 077 078 private static class ProxySearchField implements SearchField 079 { 080 SearchField _proxied; 081 String _realName; 082 083 ProxySearchField(String realName, SearchField proxied) 084 { 085 _proxied = proxied; 086 _realName = realName; 087 } 088 089 @Override 090 public String getName() 091 { 092 return _realName; 093 } 094 095 @Override 096 public String getSortField() 097 { 098 return _proxied.getSortField(); 099 } 100 101 @Override 102 public String getFacetField() 103 { 104 return _proxied.getFacetField(); 105 } 106 107 @Override 108 public boolean isJoined() 109 { 110 return _proxied.isJoined(); 111 } 112 113 @Override 114 public List<String> getJoinedPaths() 115 { 116 return _proxied.getJoinedPaths(); 117 } 118 } 119}