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        return new UsersQuery(_getSolrFieldName(), operator, operator != Operator.EXISTS ? parseUserArray(value) : new UserIdentity[] {});
049    }
050    
051    /**
052     * Get the Solr field name
053     * @return the field name
054     */
055    protected abstract String _getSolrFieldName();
056    
057    /**
058     * Get the value as {@link UserIdentity}
059     * @param content the content
060     * @return the user identity
061     */
062    protected abstract UserIdentity _getUserIdentityValue(Content content);
063    
064    @Override
065    public Object getValue(Content content)
066    {
067        return _getUserIdentityValue(content);
068    }
069    
070    @Override
071    public Object getJsonValue(Content content, boolean full)
072    {
073        if (full)
074        {
075            return _userHelper.user2json(_getUserIdentityValue(content), true);
076        }
077        else
078        {
079            return UserIdentity.userIdentityToString(_getUserIdentityValue(content));
080        }
081    }
082    
083    @Override
084    public Object getSortValue(Content content)
085    {
086        UserIdentity user = (UserIdentity) getValue(content);
087        if (user != null)
088        {
089            return _userHelper.getUserSortableName(user);
090        }
091        
092        return user;
093    }
094}