001/*
002 *  Copyright 2024 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.cms.search.model.impl;
017
018import java.util.Map;
019
020import org.apache.avalon.framework.service.ServiceException;
021
022import org.ametys.cms.search.model.LanguageAwareCriterionDefinition;
023import org.ametys.cms.search.model.SearchModelCriterionDefinition;
024import org.ametys.cms.search.model.SearchModelCriterionDefinitionHelper;
025import org.ametys.runtime.model.ElementDefinition;
026
027/**
028 * Implementation for {@link SearchModelCriterionDefinition} searching on language
029 */
030public class LanguageAwareReferencingCriterionDefinition extends ReferencingSearchModelCriterionDefinition<String> implements LanguageAwareCriterionDefinition
031{
032    /** The search model criterion definition helper */
033    protected SearchModelCriterionDefinitionHelper _searchModelCriterionDefinitionHelper;
034    
035    /**
036     * Default constructor.
037     */
038    public LanguageAwareReferencingCriterionDefinition()
039    {
040        // Nothing to do
041    }
042    
043    /**
044     * Constructor used to create simple criteria
045     * @param reference the item referenced by this criterion
046     * @param referencePath the path of the criterion's reference
047     */
048    public LanguageAwareReferencingCriterionDefinition(ElementDefinition reference, String referencePath)
049    {
050        super(reference, referencePath);
051    }
052    
053    public String getLanguage(Object value, Map<String, Object> allValues, Map<String, Object> contextualParameters)
054    {
055        return _getSearchModelCriterionDefinitionHelper().getLanguageValue(this, value, allValues, contextualParameters);
056    }
057    
058    /**
059     * Retrieves the search model criterion definition helper
060     * @return the search model criterion definition helper
061     */
062    protected SearchModelCriterionDefinitionHelper _getSearchModelCriterionDefinitionHelper()
063    {
064        if (_searchModelCriterionDefinitionHelper == null)
065        {
066            try
067            {
068                _searchModelCriterionDefinitionHelper = (SearchModelCriterionDefinitionHelper) __serviceManager.lookup(SearchModelCriterionDefinitionHelper.ROLE);
069            }
070            catch (ServiceException e)
071            {
072                throw new RuntimeException("Unable to lookup after the search model criterion definition helper", e);
073            }
074        }
075        
076        return _searchModelCriterionDefinitionHelper;
077    }
078}