/** * Copyright (C) 2009 eXo Platform SAS. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.exoplatform.webui.form; import java.util.ArrayList; import java.util.List; import org.exoplatform.webui.application.WebuiRequestContext; import org.exoplatform.webui.application.portlet.PortletRequestContext; import org.exoplatform.webui.config.Param; import org.exoplatform.webui.config.annotation.ComponentConfig; import org.exoplatform.webui.config.annotation.ComponentConfigs; import org.exoplatform.webui.config.annotation.EventConfig; import org.exoplatform.webui.config.annotation.ParamConfig; import org.exoplatform.webui.core.UIDropDownControl; import org.exoplatform.webui.core.model.SelectItemOption; import org.exoplatform.webui.event.Event; import org.exoplatform.webui.event.Event.Phase; import org.exoplatform.webui.event.EventListener; /** * Created by The eXo Platform SARL Author : Tuan Nguyen tuan08@users.sourceforge.net Jun 26, 2006 * * Represents an icon selector */ @ComponentConfigs({ @ComponentConfig(template = "system:/groovy/webui/form/UIFormInputIconSelector.gtmpl", events = { @EventConfig(listeners = UIFormInputIconSelector.ChangeOptionSetActionListener.class, phase = Phase.DECODE), @EventConfig(listeners = UIFormInputIconSelector.ChangeIconCategoryActionListener.class, phase = Phase.DECODE), @EventConfig(listeners = UIFormInputIconSelector.SelectIconActionListener.class, phase = Phase.DECODE) }, initParams = { @ParamConfig(name = "IconSet16x16", value = "app:/WEB-INF/conf/uiconf/webui/component/IconSet16x16.groovy") }), @ComponentConfig(type = UIDropDownControl.class, id = "IconDropDown", template = "system:/groovy/webui/core/UIDropDownControl.gtmpl", events = { @EventConfig(listeners = UIFormInputIconSelector.SelectItemActionListener.class) }) }) public class UIFormInputIconSelector extends UIFormInputBase<String> { private List<String> optionSets = new ArrayList<String>(); private List<IconSet> iconSets = new ArrayList<IconSet>(); private String paramDefault = "IconSet16x16"; private CategoryIcon selectedIconCategory; private IconSet selectedIconSet; private String selectedIcon; private String selectType = "page"; public static final String[] SELECT_TYPE = { "portal", "page" }; public UIFormInputIconSelector(String name, String bindingField) throws Exception { super(name, bindingField, String.class); setComponentConfig(UIFormInputIconSelector.class, null); addChild(UIDropDownControl.class, "IconDropDown", null); this.setValues(paramDefault); selectType = "page"; } private List<SelectItemOption<String>> getDropOptions() { List<SelectItemOption<String>> options = new ArrayList<SelectItemOption<String>>(); for (String s : optionSets) { options.add(new SelectItemOption<String>(s)); } return options; } public void setType(String type) { selectType = type; } public String getType() { return selectType; } public void setValues(String paramName) throws Exception { selectedIconCategory = null; selectedIconSet = null; selectedIcon = null; iconSets.clear(); optionSets.clear(); WebuiRequestContext context = WebuiRequestContext.getCurrentInstance(); if (context instanceof PortletRequestContext) { context = (WebuiRequestContext) context.getParentAppRequestContext(); } for (Param param : getComponentConfig().getInitParams().getParams()) { if (param.getName().equals(paramName)) { CategoryIcon categoryIconSet = (CategoryIcon) param.getMapGroovyObject(context); if (selectedIconCategory == null) selectedIconCategory = categoryIconSet; for (IconSet iconset : categoryIconSet.getCategory()) { if (selectedIconSet == null) setSelectedIconSet(iconset); IconCategory iconCategory = iconset.getIconCategory(); if (selectedIcon == null) setSelectedIcon(iconCategory.getValue().get(0)); iconSets.add(iconset); } } optionSets.add(param.getName()); getChild(UIDropDownControl.class).setOptions(getDropOptions()); } } public List<String> getOptionSets() { return optionSets; } public List<IconSet> getListIconSet() { return iconSets; } public CategoryIcon getSelectedCategory() { return selectedIconCategory; } public void setSelectedCategory(CategoryIcon category) { selectedIconCategory = category; } public IconSet getSelectedIconSet() { return selectedIconSet; } public void setSelectedIconSet(IconSet iconset) { selectedIconSet = iconset; } public List<String> getListIcon(IconSet set) { return set.getIconCategory().getValue(); } public String getValue() { return getSelectedIcon(); } public UIFormInput setValue(String value) { selectedIcon = value; return this; } public void setSelectedIcon(String name) { selectedIcon = name; } public String getSelectedIcon() { if (selectedIcon != null) return selectedIcon; IconSet set = getSelectedIconSet(); IconCategory iconCategory = set.getIconCategory(); selectedIcon = iconCategory.getValue().get(0); return selectedIcon; } public void decode(Object input, WebuiRequestContext context) { if (input == null || String.valueOf(input).length() < 1) return; selectedIcon = (String) input; } public static class ChangeOptionSetActionListener extends EventListener<UIFormInputIconSelector> { public void execute(Event<UIFormInputIconSelector> event) throws Exception { UIFormInputIconSelector uiForm = event.getSource(); String paramName = event.getRequestContext().getRequestParameter(OBJECTID); uiForm.setValues(paramName); } } public static class ChangeIconCategoryActionListener extends EventListener<UIFormInputIconSelector> { public void execute(Event<UIFormInputIconSelector> event) throws Exception { UIFormInputIconSelector uiIconSelector = event.getSource(); String setName = event.getRequestContext().getRequestParameter(OBJECTID); uiIconSelector.setSelectedIcon(null); for (IconSet set : uiIconSelector.getListIconSet()) { if (set.getName().equals(setName)) { uiIconSelector.setSelectedIconSet(set); } } UIForm uiForm = uiIconSelector.getAncestorOfType(UIForm.class); event.getRequestContext().addUIComponentToUpdateByAjax(uiForm); } } public static class SelectIconActionListener extends EventListener<UIFormInputIconSelector> { public void execute(Event<UIFormInputIconSelector> event) throws Exception { UIFormInputIconSelector uiIconSelector = event.getSource(); String iconName = event.getRequestContext().getRequestParameter(OBJECTID); if (iconName.equals("Default")) { uiIconSelector.setSelectedIcon("Default"); for (IconSet set : uiIconSelector.getListIconSet()) { if (set.getName().equals("misc")) { uiIconSelector.setSelectedIconSet(set); } } UIForm uiForm = uiIconSelector.getAncestorOfType(UIForm.class); event.getRequestContext().addUIComponentToUpdateByAjax(uiForm); return; } uiIconSelector.setSelectedIcon(iconName); UIForm uiForm = uiIconSelector.getAncestorOfType(UIForm.class); event.getRequestContext().addUIComponentToUpdateByAjax(uiForm); } } public static class CategoryIcon { private String name; private String sizeOption; private List<IconSet> category = new ArrayList<IconSet>(); public CategoryIcon(String n, String s) { name = n; sizeOption = s; } public String getSizeOption() { return sizeOption; } public String getName() { return name; } public CategoryIcon addCategory(IconSet set) { category.add(set); return this; } public List<IconSet> getCategory() { return category; } } public static class IconSet { private String name; private IconCategory iconcate_ = null; private IconSet set_ = null; public IconSet(String n) { name = n; } public String getName() { return name; } public IconCategory getIconCategory() { return iconcate_; } public IconSet addCategories(IconCategory iconCate) { iconcate_ = iconCate; return this; } public IconSet getIconSet() { return set_; } public void addSets(IconSet set) { set_ = set; } } public static class IconCategory extends SelectItemOption<List<String>> { public IconCategory(String name) { super(name, new ArrayList<String>()); } public IconCategory addIcon(String icon) { value_.add(icon); return this; } } // Just for using UIDropDownControl correctly. public static class SelectItemActionListener extends EventListener<UIDropDownControl> { public void execute(Event<UIDropDownControl> event) throws Exception { UIDropDownControl uiDropDown = event.getSource(); event.getRequestContext().addUIComponentToUpdateByAjax(uiDropDown); } } }