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}