Java tutorial
/* * Copyright (c) 2002-2014, Mairie de Paris * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright notice * and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright notice * and the following disclaimer in the documentation and/or other materials * provided with the distribution. * * 3. Neither the name of 'Mairie de Paris' nor 'Lutece' nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * * License 1.0 */ package fr.paris.lutece.plugins.document.service.attributes; import fr.paris.lutece.plugins.document.business.attributes.AttributeTypeParameter; import fr.paris.lutece.plugins.document.business.attributes.DocumentAttributeHome; import fr.paris.lutece.portal.web.constants.Messages; import org.apache.commons.lang.StringUtils; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Locale; import java.util.Map; import javax.servlet.http.HttpServletRequest; /** * Manager for ListBox Attribute */ public class ListBoxManager extends DefaultManager { // TEMPLATES private static final String TEMPLATE_CREATE_ATTRIBUTE = "admin/plugins/document/attributes/create_listbox.html"; private static final String TEMPLATE_MODIFY_ATTRIBUTE = "admin/plugins/document/attributes/modify_listbox.html"; private static final String TEMPLATE_CREATE_PARAMETERS_ATTRIBUTE = "admin/plugins/document/attributes/create_parameters_listbox.html"; private static final String TEMPLATE_MODIFY_PARAMETERS_ATTRIBUTE = "admin/plugins/document/attributes/modify_parameters_listbox.html"; // PARAMETERS private static final String PARAMETER_ITEMS_VALUE = "items_value"; private static final String PARAMETER_ITEMS_SELECT = "items_select"; private static final String PARAMETER_ADD = "add"; private static final String PARAMETER_DELETE = "delete"; private static final String PARAMETER_BY_DEFAULT = "bydefault"; // NAMES private static final String NAME_ITEMS = "items"; private static final String NAME_VALUE = "value"; /** * Gets the template to enter the attribute value * @return The template to enter the attribute value */ String getCreateTemplate() { return TEMPLATE_CREATE_ATTRIBUTE; } /** * Gets the template to modify the attribute value * @return The template to modify the attribute value */ String getModifyTemplate() { return TEMPLATE_MODIFY_ATTRIBUTE; } /** * Gets the template to enter the parameters of the attribute value * @return The template to enter the parameters of the attribute value */ String getCreateParametersTemplate() { return TEMPLATE_CREATE_PARAMETERS_ATTRIBUTE; } /** * Gets the template to modify the parameters of the attribute value * @return The template to modify the parameters of the attribute value */ String getModifyParametersTemplate() { return TEMPLATE_MODIFY_PARAMETERS_ATTRIBUTE; } /** * Validate the value for the parameters * @param listParameters The list of parameters to check * @param locale The current Locale * @return null if valid, otherwise message property */ public String validateValueParameters(List<AttributeTypeParameter> listParameters, Locale locale) { for (AttributeTypeParameter parameter : listParameters) { if (!parameter.getValueList().iterator().hasNext()) { return Messages.MANDATORY_FIELDS; } } return null; } /** * {@inheritDoc} */ @Override public String getCreateParametersFormHtml(List<AttributeTypeParameter> listParameters, Locale locale) { // We sort parameters values alphabetically if (listParameters != null) { for (AttributeTypeParameter attributeParameter : listParameters) { List<String> listValues = attributeParameter.getValueList(); if ((listValues != null) && (listValues.size() > 0)) { Collections.sort(listValues); attributeParameter.setValueList(listValues); } } } return super.getCreateParametersFormHtml(listParameters, locale); } /** * {@inheritDoc} */ @Override public List<AttributeTypeParameter> getExtraParametersValues(Locale locale, int nAttributeId) { List<AttributeTypeParameter> listParameters = getExtraParameters(locale); for (AttributeTypeParameter parameter : listParameters) { List<String> listValues = DocumentAttributeHome.getAttributeParameterValues(nAttributeId, parameter.getName()); Collections.sort(listValues); parameter.setValueList(listValues); } return listParameters; } /** * {@inheritDoc} */ @Override public List<AttributeTypeParameter> getValueParameters(HttpServletRequest request, Locale locale) { // Button "Add" new parameter boolean bAddNewValue = StringUtils.isNotBlank(request.getParameter(PARAMETER_ADD)); // Button "Delete" parameters boolean bDeleteValue = StringUtils.isNotBlank(request.getParameter(PARAMETER_DELETE)); boolean bByDefault = StringUtils.isNotBlank(request.getParameter(PARAMETER_BY_DEFAULT)); List<AttributeTypeParameter> listParameters = super.getExtraParameters(locale); for (AttributeTypeParameter parameter : listParameters) { List<String> listValues = new ArrayList<String>(); String[] arrayStrValues = request.getParameterValues(parameter.getName()); if (NAME_VALUE.equals(parameter.getName())) { // Define default value if (bByDefault) { String strValue = request.getParameter(PARAMETER_ITEMS_SELECT); if (StringUtils.isNotBlank(strValue)) { listValues.add(strValue); } } else { if ((arrayStrValues != null) && (arrayStrValues.length > 0)) { listValues.addAll(Arrays.asList(arrayStrValues)); } } } else if (NAME_ITEMS.equals(parameter.getName())) { if ((arrayStrValues != null) && (arrayStrValues.length > 0)) { listValues.addAll(Arrays.asList(arrayStrValues)); } // Add new value if (bAddNewValue) { String strNewValue = request.getParameter(PARAMETER_ITEMS_VALUE); if (StringUtils.isNotBlank(strNewValue)) { listValues.add(strNewValue); } } // Remove value if (bDeleteValue) { String strValue = request.getParameter(PARAMETER_ITEMS_SELECT); if (StringUtils.isNotBlank(strValue)) { listValues.remove(strValue); removeParameterValue(listParameters, strValue); } } } parameter.setValueList(listValues); listValues.clear(); } return listParameters; } /** * {@inheritDoc} */ @Override protected Map<String, List<String>> getParameters(int nAttributeId, Locale locale) { HashMap<String, List<String>> mapParameters = new HashMap<String, List<String>>(); Collection<AttributeTypeParameter> listParameters = getAttributeParametersValues(nAttributeId, locale); for (AttributeTypeParameter parameter : listParameters) { // We sort attributes alphabetically List<String> listValues = parameter.getValueList(); Collections.sort(listValues); mapParameters.put(parameter.getName(), listValues); } // Set all missing parameters with their default values for (AttributeTypeParameter parameter : getExtraParameters(locale)) { if (!mapParameters.containsKey(parameter.getName())) { mapParameters.put(parameter.getName(), parameter.getDefaultValue()); } } return mapParameters; } /** * Remove a parameter value from a list * @param listParameters the list of parameters * @param strValueToRemove the value to remove */ private void removeParameterValue(List<AttributeTypeParameter> listParameters, String strValueToRemove) { for (AttributeTypeParameter parameter : listParameters) { if (NAME_VALUE.equals(parameter.getName())) { if (StringUtils.isNotBlank(strValueToRemove)) { List<String> listValues = parameter.getValueList(); listValues.remove(strValueToRemove); parameter.setValueList(listValues); break; } } } } }