/* * Copyright (C) 2003-2010 eXo Platform SAS. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License * as published by the Free Software Foundation; either version 3 * of the License, or (at your option) any later version. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see<http://www.gnu.org/licenses/>. */ package org.exoplatform.sample.webui.component; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; import org.exoplatform.web.application.ApplicationMessage; import org.exoplatform.webui.application.WebuiRequestContext; import org.exoplatform.webui.config.annotation.ComponentConfig; import org.exoplatform.webui.config.annotation.EventConfig; import org.exoplatform.webui.core.UIApplication; import org.exoplatform.webui.core.UIComponent; import org.exoplatform.webui.core.lifecycle.UIFormLifecycle; import org.exoplatform.webui.core.model.SelectItemOption; import org.exoplatform.webui.event.Event; import org.exoplatform.webui.event.EventListener; import org.exoplatform.webui.form.UIForm; import org.exoplatform.webui.form.UIFormDateTimeInput; import org.exoplatform.webui.form.UIFormInput; import org.exoplatform.webui.form.UIFormInputSet; import org.exoplatform.webui.form.UIFormInputWithActions; import org.exoplatform.webui.form.UIFormInputWithActions.ActionData; import org.exoplatform.webui.form.UIFormRadioBoxInput; import org.exoplatform.webui.form.UIFormSelectBox; import org.exoplatform.webui.form.UIFormStringInput; import org.exoplatform.webui.form.UIFormTextAreaInput; import org.exoplatform.webui.form.ext.UIFormColorPicker; import org.exoplatform.webui.form.ext.UIFormComboBox; import org.exoplatform.webui.form.input.UICheckBoxInput; import org.exoplatform.webui.form.validator.MandatoryValidator; /** * Created by The eXo Platform SAS Author : Nguyen Duc Khoi khoi.nguyen@exoplatform.com Mar 12, 2010 */ @ComponentConfig(lifecycle = UIFormLifecycle.class, template = "system:/groovy/webui/form/UIFormWithTitle.gtmpl", events = { @EventConfig(listeners = UISampleUIForm.SearchUserActionListener.class), @EventConfig(listeners = UISampleUIForm.SaveActionListener.class), @EventConfig(listeners = UISampleUIForm.ResetActionListener.class) }) public class UISampleUIForm extends UIForm { private static final String[] ACTIONS = { "Save", "Reset" }; public static final String USERNAME = "userName"; public static final String PASSWORD = "password"; public static final String FAVORITE_COLOR = "favoriteColor"; public static final String POSITION = "position"; public static final String RECEIVE_EMAIL = "receiveEmail"; public static final String GENDER = "gender"; private static final String DATE_OF_BIRTH = "dateOfBirth"; private static final String DESCRIPTION = "description"; private static final String COMBOBOX = "ComboBox"; private List<String> userNames = new ArrayList<String>(); public UISampleUIForm() throws Exception { addUIFormInput(makeUIFormInputWithActions()); setActions(ACTIONS); } private UIFormInputWithActions makeUIFormInputWithActions() throws Exception { UIFormInputWithActions inputSet = new UIFormInputWithActions(); addUIComponentToSet(inputSet); List<ActionData> searchUserAction = makeSearchUserActionData(); inputSet.setActionField(USERNAME, searchUserAction); return inputSet; } private void addUIComponentToSet(UIFormInputWithActions inputSet) throws Exception { inputSet.addUIFormInput(new UIFormStringInput(USERNAME, null, null).addValidator(MandatoryValidator.class)); inputSet.addUIFormInput(new UIFormStringInput(PASSWORD, null, null).setType(UIFormStringInput.PASSWORD_TYPE)); inputSet.addUIFormInput(new UIFormColorPicker(FAVORITE_COLOR, null, UIFormColorPicker.Colors.N_RED)); inputSet.addUIFormInput(new UIFormRadioBoxInput(GENDER, "Male", makeRadioOptions()) .addValidator(MandatoryValidator.class)); inputSet.addUIFormInput(new UIFormDateTimeInput(DATE_OF_BIRTH, null, new Date())); inputSet.addUIFormInput(new UIFormTextAreaInput(DESCRIPTION, null, "")); List<SelectItemOption<String>> selectItemOptions = makeSelectItemOptions(); inputSet.addUIFormInput(new UIFormSelectBox(POSITION, null, selectItemOptions)); inputSet.addUIFormInput(new UICheckBoxInput(RECEIVE_EMAIL, null, false)); List<SelectItemOption<String>> comboBoxItemOptions = new ArrayList<SelectItemOption<String>>(); comboBoxItemOptions.add(new SelectItemOption<String>(("VI"))); comboBoxItemOptions.add(new SelectItemOption<String>(("UK"))); comboBoxItemOptions.add(new SelectItemOption<String>(("FR"))); inputSet.addUIFormInput(new UIFormComboBox(COMBOBOX, COMBOBOX, comboBoxItemOptions)); } private List<SelectItemOption<String>> makeRadioOptions() { List<SelectItemOption<String>> selectItemOptions = new ArrayList<SelectItemOption<String>>(); selectItemOptions.add(new SelectItemOption<String>("Male")); selectItemOptions.add(new SelectItemOption<String>("Female")); return selectItemOptions; } private List<SelectItemOption<String>> makeSelectItemOptions() { List<SelectItemOption<String>> selectItemOptions = new ArrayList<SelectItemOption<String>>(); selectItemOptions.add(new SelectItemOption<String>("Boss")); selectItemOptions.add(new SelectItemOption<String>("Employee")); return selectItemOptions; } private List<ActionData> makeSearchUserActionData() { List<ActionData> actions = new ArrayList<ActionData>(); ActionData searchUser = new ActionData(); searchUser.setActionListener("SearchUser"); searchUser.setActionType(ActionData.TYPE_ICON); searchUser.setActionName("SearchUser"); searchUser.setCssIconClass("SearchIcon"); actions.add(searchUser); return actions; } public boolean isUserExist(String userName) { return userNames.contains(userName); } public void saveUser(String userName) { userNames.add(userName); } public static class SearchUserActionListener extends EventListener<UISampleUIForm> { @Override public void execute(Event<UISampleUIForm> event) throws Exception { WebuiRequestContext context = WebuiRequestContext.getCurrentInstance(); UIApplication uiApp = context.getUIApplication(); UISampleUIForm uiForm = event.getSource(); String inputUserName = uiForm.getUIStringInput(USERNAME).getValue().trim(); String[] i18nParams = new String[] { inputUserName }; if (inputUserName.equals("")) { uiApp.addMessage(new ApplicationMessage("UISampleUIForm.msg.empty-input", null, ApplicationMessage.ERROR)); } else if (uiForm.isUserExist(inputUserName)) { uiApp.addMessage(new ApplicationMessage("UISampleUIForm.msg.user-exist", i18nParams, ApplicationMessage.WARNING)); } else { uiApp.addMessage(new ApplicationMessage("UISampleUIForm.msg.user-not-exist", i18nParams, ApplicationMessage.INFO)); } } } public static class SaveActionListener extends EventListener<UISampleUIForm> { @Override public void execute(Event<UISampleUIForm> event) throws Exception { WebuiRequestContext context = WebuiRequestContext.getCurrentInstance(); UIApplication uiApp = context.getUIApplication(); UISampleUIForm uiForm = event.getSource(); String inputUserName = uiForm.getUIStringInput(USERNAME).getValue(); String[] i18nParams = new String[] { inputUserName }; if (uiForm.isUserExist(inputUserName)) { uiApp.addMessage(new ApplicationMessage("UISampleUIForm.msg.user-exist", i18nParams, ApplicationMessage.WARNING)); } else { uiForm.saveUser(inputUserName); uiApp.addMessage(new ApplicationMessage("UISampleUIForm.msg.user-saved", i18nParams, ApplicationMessage.INFO)); } String traceMsg = makeTraceMsg(event); uiApp.addMessage(new ApplicationMessage(traceMsg, null, ApplicationMessage.INFO)); } private String makeTraceMsg(Event<UISampleUIForm> event) throws Exception { UISampleUIForm uiForm = event.getSource(); String userName = uiForm.getUIStringInput(USERNAME).getValue(); String password = uiForm.getUIStringInput(PASSWORD).getValue(); boolean receiveEmail = uiForm.getUICheckBoxInput(RECEIVE_EMAIL).isChecked(); String favoriteColor = (String) uiForm.getUIInput(FAVORITE_COLOR).getValue(); String position = (String) uiForm.getUIInput(POSITION).getValue(); String gender = (String) uiForm.getUIInput(GENDER).getValue(); UIFormDateTimeInput dateInput = uiForm.getUIFormDateTimeInput(DATE_OF_BIRTH); SimpleDateFormat dateFormat = new SimpleDateFormat(dateInput.getDatePattern_()); Calendar calendar = dateInput.getCalendar(); String dateOfBirth = calendar == null ? null : dateFormat.format(calendar.getTime()); StringBuilder strBuilder = new StringBuilder(); strBuilder.append(userName); strBuilder.append("<br/>"); strBuilder.append(password); strBuilder.append("<br/>"); strBuilder.append(favoriteColor); strBuilder.append("<br/>"); strBuilder.append(gender); strBuilder.append("<br/>"); strBuilder.append(dateOfBirth); strBuilder.append("<br/>"); strBuilder.append(position); strBuilder.append("<br/>"); strBuilder.append(receiveEmail); return strBuilder.toString(); } } public static class ResetActionListener extends EventListener<UISampleUIForm> { @SuppressWarnings("unchecked") @Override public void execute(Event<UISampleUIForm> event) throws Exception { UIFormInputSet inputSet = event.getSource().getChild(UIFormInputSet.class); for (UIComponent child : inputSet.getChildren()) { if (child instanceof UIFormColorPicker) { continue; } ((UIFormInput) child).reset(); } } } }