001/*
002 *  Copyright 2015 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.systemprop;
017
018import java.util.Map;
019
020import org.ametys.cms.contenttype.MetadataType;
021import org.ametys.cms.repository.Content;
022import org.ametys.cms.search.model.SystemProperty;
023import org.ametys.cms.search.query.Query;
024import org.ametys.cms.search.query.Query.Operator;
025import org.ametys.cms.search.query.UsersQuery;
026import org.ametys.core.user.UserIdentity;
027
028/**
029 * Abstract class providing base functionality for a user-typed {@link SystemProperty}.
030 */
031public abstract class AbstractUserSystemProperty extends AbstractSystemProperty
032{
033    @Override
034    public MetadataType getType()
035    {
036        return MetadataType.USER;
037    }
038    
039    @Override
040    public String getRenderer()
041    {
042        return "Ametys.plugins.cms.search.SearchGridHelper.renderUser";
043    }
044    
045    @Override
046    public Query getQuery(Object value, Operator operator, String language, Map<String, Object> contextualParameters)
047    {
048        UserIdentity[] users = parseUserArray(value);
049        return new UsersQuery(_getSolrFieldName(), operator, users);
050    }
051    
052    /**
053     * Get the Solr field name
054     * @return the field name
055     */
056    protected abstract String _getSolrFieldName();
057    
058    /**
059     * Get the value as {@link UserIdentity}
060     * @param content the content
061     * @return the user identity
062     */
063    protected abstract UserIdentity _getUserIdentityValue(Content content);
064    
065    @Override
066    public Object getValue(Content content)
067    {
068        return _getUserIdentityValue(content);
069    }
070    
071    @Override
072    public Object getJsonValue(Content content, boolean full)
073    {
074        if (full)
075        {
076            return _userHelper.user2json(_getUserIdentityValue(content), true);
077        }
078        else
079        {
080            return UserIdentity.userIdentityToString(_getUserIdentityValue(content));
081        }
082    }
083    
084    @Override
085    public Object getSortValue(Content content)
086    {
087        UserIdentity user = (UserIdentity) getValue(content);
088        if (user != null)
089        {
090            return _userHelper.getUserSortableName(user);
091        }
092        
093        return user;
094    }
095}