package org.exoplatform.sample.webui.component;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import org.exoplatform.upload.UploadResource;
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.UIComponent;
import org.exoplatform.webui.core.lifecycle.UIFormLifecycle;
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.UIFormInputBase;
import org.exoplatform.webui.form.UIFormMultiValueInputSet;
import org.exoplatform.webui.form.UIFormStringInput;
import org.exoplatform.webui.form.UIFormTextAreaInput;
import org.exoplatform.webui.form.UIFormUploadInput;
import org.exoplatform.webui.form.ext.UIFormColorPicker;
@ComponentConfig(lifecycle = UIFormLifecycle.class, template = "system:/groovy/webui/form/UIFormWithTitle.gtmpl", events = { @EventConfig(listeners = UISampleMultiValueInputSet.SubmitActionListener.class) })
public class UISampleMultiValueInputSet extends UIForm {
public static final String MULTI_UPLOAD = "UploadInput";
public static final String MULTI_DATE = "DateTimeInput";
public static final String MULTI_COLOR = "ColorInput";
public static final String MULTI_STRING = "StringInput";
public static final String MULTI_TEXTAREA = "TextAreaInput";
public static final String[] ACTIONS = { "Submit" };
public UISampleMultiValueInputSet() throws Exception {
UIFormMultiValueInputSet uiFormMultiValueInputSet;
// UIFormUploadInput
addUIFormInput(makeMultiValueInputSet(MULTI_UPLOAD, UIFormUploadInput.class, new Class[] { String.class, String.class,
int.class }));
// UIFormDateTimeInput
addUIFormInput(makeMultiValueInputSet(MULTI_DATE, UIFormDateTimeInput.class));
// UIFormColorPicker
uiFormMultiValueInputSet = new UIFormMultiValueInputSet(MULTI_COLOR, MULTI_COLOR);
uiFormMultiValueInputSet.setType(UIFormColorPicker.class);
uiFormMultiValueInputSet.setConstructorParameterTypes(new Class[] { String.class, String.class, String.class });
uiFormMultiValueInputSet.setConstructorParameterValues(new Object[] { "ABC", "XYZ", null });
addUIFormInput(uiFormMultiValueInputSet);
// UIFormStringInput
addUIFormInput(makeMultiValueInputSet(MULTI_STRING, UIFormStringInput.class));
// UIFormTextAreaInput
addUIFormInput(makeMultiValueInputSet(MULTI_TEXTAREA, UIFormTextAreaInput.class));
setActions(ACTIONS);
}
@SuppressWarnings("unchecked")
private UIFormInput makeMultiValueInputSet(String name, Class<? extends UIFormInputBase> type) throws Exception {
UIFormMultiValueInputSet multiInput = new UIFormMultiValueInputSet(name, null);
multiInput.setType(type);
return multiInput;
}
private UIFormInput makeMultiValueInputSetHasValue(String name, Class<? extends UIFormInputBase> type,
Object[] parameterValues) throws Exception {
UIFormMultiValueInputSet multiInput = new UIFormMultiValueInputSet(name, null);
multiInput.setType(type);
multiInput.setConstructorParameterTypes(new Class[] { String.class, String.class, String.class });
multiInput.setConstructorParameterValues(parameterValues);
return multiInput;
}
private UIFormInput makeMultiValueInputSet(String name, Class<? extends UIFormInputBase> type, Class<?>... parameterTypes)
throws Exception {
UIFormMultiValueInputSet multiInput = new UIFormMultiValueInputSet(name, null);
multiInput.setType(type);
multiInput.setConstructorParameterTypes(parameterTypes);
return multiInput;
}
public static class SubmitActionListener extends EventListener<UISampleMultiValueInputSet> {
@Override
public void execute(Event<UISampleMultiValueInputSet> event) throws Exception {
WebuiRequestContext rcontext = event.getRequestContext();
rcontext.getUIApplication().addMessage(makeMsg(event.getSource()));
}
@SuppressWarnings("unchecked")
private ApplicationMessage makeMsg(UISampleMultiValueInputSet uiForm) {
StringBuilder msgBuild = new StringBuilder();
for (UIComponent child : uiForm.getChildren()) {
UIFormMultiValueInputSet multiInput = (UIFormMultiValueInputSet) child;
if (multiInput.getUIFormInputBase().equals(UIFormUploadInput.class)) {
makeUploadInputMsg(multiInput, msgBuild);
} else if (multiInput.getUIFormInputBase().equals(UIFormDateTimeInput.class)) {
makeDateInputMsg(multiInput, msgBuild);
} else {
for (UIComponent multiInputChild : multiInput.getChildren()) {
msgBuild.append(" " + ((UIFormInputBase) multiInputChild).getValue());
}
}
msgBuild.append("<br/>");
}
return new ApplicationMessage(msgBuild.toString().replace(".", "*"), null);
}
private void makeDateInputMsg(UIFormMultiValueInputSet multiInput, StringBuilder msgBuild) {
for (UIComponent multiInputChild : multiInput.getChildren()) {
UIFormDateTimeInput dateInput = (UIFormDateTimeInput) multiInputChild;
Calendar calendar = dateInput.getCalendar();
if (calendar != null) {
SimpleDateFormat dateFormat = new SimpleDateFormat(dateInput.getDatePattern_());
msgBuild.append(" " + dateFormat.format(dateInput.getCalendar().getTime()));
} else {
msgBuild.append("null");
}
}
}
private void makeUploadInputMsg(UIFormMultiValueInputSet multiInput, StringBuilder msgBuild) {
for (UIComponent multiInputChild : multiInput.getChildren()) {
UploadResource uploadResource = ((UIFormUploadInput) multiInputChild).getUploadResource();
if (uploadResource != null) {
msgBuild.append(" " + uploadResource.getFileName());
} else {
msgBuild.append("null");
}
}
}
}
}