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.plugins.forms.question.autofill;
017
018import java.util.ArrayList;
019import java.util.HashMap;
020import java.util.List;
021import java.util.Map;
022
023import org.ametys.core.user.User;
024import org.ametys.core.user.UserIdentity;
025import org.ametys.plugins.forms.repository.FormQuestion;
026import org.ametys.runtime.i18n.I18nizableText;
027import org.ametys.runtime.model.ElementDefinition;
028import org.ametys.runtime.model.ModelItem;
029import org.ametys.runtime.model.StaticEnumerator;
030import org.ametys.runtime.model.ViewElement;
031import org.ametys.runtime.model.ViewItem;
032import org.ametys.runtime.model.type.ModelItemTypeConstants;
033import org.ametys.runtime.parameter.DefaultValidator;
034
035/**
036 * Class for using common User attributes as default value
037 */
038public class CurrentUserAutoFillSource extends AbstractStaticAutoFillSource
039{
040    /** Constant for autofill attribute. */
041    public static final String ATTRIBUTE_AUTOFILL = "autofill";
042    
043    /** Name of email autofillStaticEnumerator entry */
044    public static final String EMAIL_AUTOFILL_VALUE = "email";
045    
046    /** Name of id autofillStaticEnumerator entry */
047    public static final String ID_AUTOFILL_VALUE = "id";
048    
049    /** Name of fullname autofillStaticEnumerator entry */
050    public static final String FULLNAME_AUTOFILL_VALUE = "fullName";
051    
052    /** Name of firstName autofillStaticEnumerator entry */
053    public static final String FIRSTNAME_AUTOFILL_VALUE = "firstName";
054    
055    /** Name of lastName autofillStaticEnumerator entry */
056    public static final String LASTNAME_AUTOFILL_VALUE = "lastName";
057    
058
059    /** Map of ModelItems specific to DefaultStaticAutoFillSource */
060    protected Map<String, ModelItem> _defaultAutoFillItems;
061    
062    public String getAutofillValue(FormQuestion question)
063    {
064        UserIdentity userIdentity = _currentUserProvider.getUser();
065        User user = userIdentity != null ? _userManager.getUser(userIdentity) : null;
066        if (user != null)
067        {
068            String autofill = question.getValue(ATTRIBUTE_AUTOFILL);
069            switch (autofill)
070            {
071                case "email":
072                    return user.getEmail();
073                case "id":
074                    return user.getIdentity().getLogin();
075                case "fullName":
076                    return user.getFullName();
077                case "firstName":
078                    return user.getFirstName();
079                case "lastName":
080                    return user.getLastName();
081                default:
082                    return null;
083            }
084        }
085        return null;
086    }
087
088    public Map<String, ModelItem> getModelItems()
089    {
090        _defaultAutoFillItems = new HashMap<>();
091        ElementDefinition<String> autofill = _formElementDefinitionHelper.getElementDefinition(ATTRIBUTE_AUTOFILL, ModelItemTypeConstants.STRING_TYPE_ID, "PLUGINS_FORMS_QUESTIONS_DIALOG_SIMPLE_TEXT_AUTOFILL", "PLUGINS_FORMS_QUESTIONS_DIALOG_SIMPLE_TEXT_AUTOFILL_DESC", new DefaultValidator(null, true));
092
093        StaticEnumerator<String> autofillStaticEnumerator = new StaticEnumerator<>();
094        autofillStaticEnumerator.add(new I18nizableText("plugin.forms", "PLUGINS_FORMS_QUESTIONS_DIALOG_SIMPLE_TEXT_AUTOFILL_EMAIL"), EMAIL_AUTOFILL_VALUE);
095        autofillStaticEnumerator.add(new I18nizableText("plugin.forms", "PLUGINS_FORMS_QUESTIONS_DIALOG_SIMPLE_TEXT_AUTOFILL_ID"), ID_AUTOFILL_VALUE);
096        autofillStaticEnumerator.add(new I18nizableText("plugin.forms", "PLUGINS_FORMS_QUESTIONS_DIALOG_SIMPLE_TEXT_AUTOFILL_FULLNAME"), FULLNAME_AUTOFILL_VALUE);
097        autofillStaticEnumerator.add(new I18nizableText("plugin.forms", "PLUGINS_FORMS_QUESTIONS_DIALOG_SIMPLE_TEXT_AUTOFILL_FIRSTNAME"), FIRSTNAME_AUTOFILL_VALUE);
098        autofillStaticEnumerator.add(new I18nizableText("plugin.forms", "PLUGINS_FORMS_QUESTIONS_DIALOG_SIMPLE_TEXT_AUTOFILL_LASTNAME"), LASTNAME_AUTOFILL_VALUE);
099        autofill.setEnumerator(autofillStaticEnumerator);
100        autofill.setDefaultValue(EMAIL_AUTOFILL_VALUE);
101        
102        _defaultAutoFillItems.put(ATTRIBUTE_AUTOFILL, autofill);
103        
104        return _defaultAutoFillItems;
105    }
106
107    public List<ViewItem> getViewElements()
108    {
109        List<ViewItem> viewElements = new ArrayList<>();
110        
111        ViewElement autofill = new ViewElement();
112        autofill.setDefinition((ElementDefinition< ? >) _defaultAutoFillItems.get(ATTRIBUTE_AUTOFILL));
113        viewElements.add(autofill);
114        
115        return viewElements;
116    }
117
118    public boolean isCacheable(FormQuestion question)
119    {
120        return false;
121    }
122
123}