/*
* Copyright (C) 2003-2007 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.ecm.webui.component.explorer;
import java.util.ArrayList;
import java.util.List;
import javax.portlet.PortletPreferences;
import org.exoplatform.ecm.webui.form.UIFormInputSetWithAction;
import org.exoplatform.ecm.webui.selector.UISelectable;
import org.exoplatform.services.cms.drives.DriveData;
import org.exoplatform.web.application.ApplicationMessage;
import org.exoplatform.webui.application.WebuiRequestContext;
import org.exoplatform.webui.application.portlet.PortletRequestContext;
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.UIPopupWindow;
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.Event.Phase;
import org.exoplatform.webui.event.EventListener;
import org.exoplatform.webui.form.UIForm;
import org.exoplatform.webui.form.UIFormSelectBox;
import org.exoplatform.webui.form.UIFormStringInput;
import org.exoplatform.webui.form.input.UICheckBoxInput;
/**
* Created by The eXo Platform SARL
* Author : Ly Dinh Quang
* quang.ly@exoplatform.com
* 3 févr. 09
*/
@ComponentConfig(lifecycle = UIFormLifecycle.class, template = "system:/groovy/webui/form/UIFormWithTitle.gtmpl", events = {
@EventConfig(phase = Phase.DECODE, listeners = UIJcrExplorerEditForm.SaveActionListener.class),
@EventConfig(phase = Phase.DECODE, listeners = UIJcrExplorerEditForm.CancelActionListener.class),
@EventConfig(phase = Phase.DECODE, listeners = UIJcrExplorerEditForm.SelectTypeActionListener.class),
@EventConfig(phase = Phase.DECODE, listeners = UIJcrExplorerEditForm.SelectDriveActionListener.class),
@EventConfig(phase = Phase.DECODE, listeners = UIJcrExplorerEditForm.SelectNodePathActionListener.class) }
)
public class UIJcrExplorerEditForm extends UIForm implements UISelectable {
private boolean flagSelectRender = false;
public static final String PARAM_PATH_ACTION = "SelectNodePath";
public static final String PARAM_PATH_INPUT = "nodePath";
private static final String POPUP_SELECT_PATH_INPUT = "PopupSelectPath";
public UIJcrExplorerEditForm() throws Exception {
List<SelectItemOption<String>> listType = new ArrayList<SelectItemOption<String>>();
String usecase = getPreference().getValue(UIJCRExplorerPortlet.USECASE, "");
listType.add(new SelectItemOption<String>("Selection", "selection"));
listType.add(new SelectItemOption<String>("Jailed", "jailed"));
listType.add(new SelectItemOption<String>("Personal", "personal"));
listType.add(new SelectItemOption<String>("Parameterize", "parameterize"));
UIFormSelectBox typeSelectBox = new UIFormSelectBox(UIJCRExplorerPortlet.USECASE, UIJCRExplorerPortlet.USECASE, listType);
typeSelectBox.setValue(usecase);
typeSelectBox.setOnChange("SelectType");
addChild(typeSelectBox);
UIFormInputSetWithAction driveNameInput = new UIFormInputSetWithAction("DriveNameInput");
UIFormStringInput stringInputDrive = new UIFormStringInput(UIJCRExplorerPortlet.DRIVE_NAME,
UIJCRExplorerPortlet.DRIVE_NAME,
null);
stringInputDrive.setValue(getPreference().getValue(UIJCRExplorerPortlet.DRIVE_NAME, ""));
stringInputDrive.setDisabled(true);
driveNameInput.addUIFormInput(stringInputDrive);
driveNameInput.setActionInfo(UIJCRExplorerPortlet.DRIVE_NAME, new String[] {"SelectDrive"});
addUIComponentInput(driveNameInput);
UIFormInputSetWithAction uiParamPathInput = new UIFormInputSetWithAction(PARAM_PATH_ACTION);
UIFormStringInput pathInput = new UIFormStringInput(UIJCRExplorerPortlet.PARAMETERIZE_PATH,
UIJCRExplorerPortlet.PARAMETERIZE_PATH,
null);
pathInput.setValue(getPreference().getValue(UIJCRExplorerPortlet.PARAMETERIZE_PATH, ""));
pathInput.setDisabled(true);
uiParamPathInput.addUIFormInput(pathInput);
uiParamPathInput.setActionInfo(UIJCRExplorerPortlet.PARAMETERIZE_PATH, new String[] {PARAM_PATH_ACTION});
addUIComponentInput(uiParamPathInput);
driveNameInput.setRendered(true);
uiParamPathInput.setRendered(false);
UICheckBoxInput uiFormCheckBoxTop = new UICheckBoxInput(UIJCRExplorerPortlet.SHOW_TOP_BAR,
UIJCRExplorerPortlet.SHOW_TOP_BAR,
true);
uiFormCheckBoxTop.setChecked(Boolean.parseBoolean(getPreference().getValue(UIJCRExplorerPortlet.SHOW_TOP_BAR, "true")));
addUIFormInput(uiFormCheckBoxTop);
UICheckBoxInput uiFormCheckBoxAction = new UICheckBoxInput(UIJCRExplorerPortlet.SHOW_ACTION_BAR,
UIJCRExplorerPortlet.SHOW_ACTION_BAR,
true);
uiFormCheckBoxAction.setChecked(Boolean.parseBoolean(getPreference().getValue(UIJCRExplorerPortlet.SHOW_ACTION_BAR, "true")));
addUIFormInput(uiFormCheckBoxAction);
UICheckBoxInput uiFormCheckBoxSide = new UICheckBoxInput(UIJCRExplorerPortlet.SHOW_SIDE_BAR,
UIJCRExplorerPortlet.SHOW_SIDE_BAR,
true);
uiFormCheckBoxSide.setChecked(Boolean.parseBoolean(getPreference().getValue(UIJCRExplorerPortlet.SHOW_SIDE_BAR, "true")));
addUIFormInput(uiFormCheckBoxSide);
UICheckBoxInput uiFormCheckBoxFilter = new UICheckBoxInput(UIJCRExplorerPortlet.SHOW_FILTER_BAR,
UIJCRExplorerPortlet.SHOW_FILTER_BAR,
true);
uiFormCheckBoxFilter.setChecked(Boolean.parseBoolean(getPreference().getValue(UIJCRExplorerPortlet.SHOW_FILTER_BAR, "true")));
addUIFormInput(uiFormCheckBoxFilter);
if (usecase.equals(UIJCRExplorerPortlet.JAILED)) {
setFlagSelectRender(true);
} else if(usecase.equals(UIJCRExplorerPortlet.PERSONAL)) {
driveNameInput.setRendered(false);
setFlagSelectRender(true);
} else if (usecase.equals(UIJCRExplorerPortlet.PARAMETERIZE)) {
uiParamPathInput.setRendered(true);
setFlagSelectRender(true);
}
setActions(new String[] {"Save", "Cancel"});
}
public boolean isFlagSelectRender() {
return flagSelectRender;
}
public void setFlagSelectRender(boolean flagSelectRender) {
this.flagSelectRender = flagSelectRender;
}
private PortletPreferences getPreference() {
PortletRequestContext pcontext = (PortletRequestContext)WebuiRequestContext.getCurrentInstance();
return pcontext.getRequest().getPreferences();
}
public static class CancelActionListener extends EventListener<UIJcrExplorerEditForm>{
public void execute(Event<UIJcrExplorerEditForm> event) throws Exception {
UIJcrExplorerEditForm uiForm = event.getSource();
PortletPreferences pref = uiForm.getPreference();
UIFormSelectBox typeSelectBox = uiForm.getChildById(UIJCRExplorerPortlet.USECASE);
typeSelectBox.setValue(pref.getValue(UIJCRExplorerPortlet.USECASE, ""));
UIFormInputSetWithAction driveNameInput = uiForm.getChildById("DriveNameInput");
UIFormStringInput stringInputDrive = driveNameInput.getUIStringInput(UIJCRExplorerPortlet.DRIVE_NAME);
stringInputDrive.setValue(pref.getValue(UIJCRExplorerPortlet.DRIVE_NAME, ""));
UICheckBoxInput checkBoxShowTopBar = uiForm.getChildById(UIJCRExplorerPortlet.SHOW_TOP_BAR);
checkBoxShowTopBar.setChecked(Boolean.parseBoolean(pref.getValue(UIJCRExplorerPortlet.SHOW_TOP_BAR, "true")));
UICheckBoxInput checkBoxShowActionBar = uiForm.getChildById(UIJCRExplorerPortlet.SHOW_ACTION_BAR);
checkBoxShowActionBar.setChecked(Boolean.parseBoolean(pref.getValue(UIJCRExplorerPortlet.SHOW_ACTION_BAR, "true")));
UICheckBoxInput checkBoxShowLeftBar = uiForm.getChildById(UIJCRExplorerPortlet.SHOW_SIDE_BAR);
checkBoxShowLeftBar.setChecked(Boolean.parseBoolean(pref.getValue(UIJCRExplorerPortlet.SHOW_SIDE_BAR, "true")));
UICheckBoxInput checkBoxShowFilterBar = uiForm.getChildById(UIJCRExplorerPortlet.SHOW_FILTER_BAR);
checkBoxShowFilterBar.setChecked(Boolean.parseBoolean(pref.getValue(UIJCRExplorerPortlet.SHOW_FILTER_BAR,
"true")));
// update
UIFormInputSetWithAction uiParamPathInput = uiForm.getChildById(PARAM_PATH_ACTION);
UIFormStringInput stringInputPath = uiParamPathInput.getUIStringInput(UIJCRExplorerPortlet.PARAMETERIZE_PATH);
stringInputPath.setValue(pref.getValue(UIJCRExplorerPortlet.PARAMETERIZE_PATH, ""));
if (pref.getValue(UIJCRExplorerPortlet.USECASE, "").equals(UIJCRExplorerPortlet.JAILED)) {
driveNameInput.setRendered(true);
uiParamPathInput.setRendered(false);
} else if (pref.getValue(UIJCRExplorerPortlet.USECASE, "").equals(UIJCRExplorerPortlet.PARAMETERIZE)) {
driveNameInput.setRendered(true);
uiParamPathInput.setRendered(true);
} else {
driveNameInput.setRendered(false);
uiParamPathInput.setRendered(false);
}
UIApplication uiApp = uiForm.getAncestorOfType(UIApplication.class);
uiApp.addMessage(new ApplicationMessage("UIJcrExplorerEditForm.msg.fields-cancelled", null));
event.getRequestContext().addUIComponentToUpdateByAjax(uiForm);
}
}
public static class SelectTypeActionListener extends EventListener<UIJcrExplorerEditForm>{
public void execute(Event<UIJcrExplorerEditForm> event) throws Exception {
UIJcrExplorerEditForm uiForm = event.getSource();
UIJCRExplorerPortlet uiJExplorerPortlet = uiForm.getAncestorOfType(UIJCRExplorerPortlet.class);
UIFormSelectBox typeSelectBox = uiForm.getChildById(UIJCRExplorerPortlet.USECASE);
UIFormInputSetWithAction driveNameInput = uiForm.getChildById("DriveNameInput");
UIFormInputSetWithAction uiParamPathInput = uiForm.getChildById(PARAM_PATH_ACTION);
driveNameInput.setRendered(true);
uiParamPathInput.setRendered(false);
if (typeSelectBox.getValue().equals(UIJCRExplorerPortlet.JAILED)) {
UIFormStringInput stringInputDrive = driveNameInput.getUIStringInput(UIJCRExplorerPortlet.DRIVE_NAME);
stringInputDrive.setRendered(true);
stringInputDrive.setValue("");
driveNameInput.setRendered(true);
} else if(typeSelectBox.getValue().equals(UIJCRExplorerPortlet.SELECTION)) {
UIFormStringInput stringInputDrive =
driveNameInput.getUIStringInput(UIJCRExplorerPortlet.DRIVE_NAME);
if(stringInputDrive.isRendered()) stringInputDrive.setRendered(false);
} else if(typeSelectBox.getValue().equals(UIJCRExplorerPortlet.PERSONAL)) {
DriveData personalPrivateDrive = uiJExplorerPortlet.getUserDrive();
UIFormStringInput stringInputDrive =
driveNameInput.getUIStringInput(UIJCRExplorerPortlet.DRIVE_NAME);
stringInputDrive.setRendered(true);
stringInputDrive.setValue(personalPrivateDrive.getName());
driveNameInput.setRendered(false);
UIApplication uiApp = uiForm.getAncestorOfType(UIApplication.class);
uiApp.addMessage(new ApplicationMessage("UIJcrExplorerEditForm.msg.personal-usecase", null));
} else if(typeSelectBox.getValue().equals(UIJCRExplorerPortlet.PARAMETERIZE)) {
UIFormStringInput stringInputDrive = driveNameInput.getUIStringInput(UIJCRExplorerPortlet.DRIVE_NAME);
stringInputDrive.setRendered(true);
stringInputDrive.setValue("");
driveNameInput.setRendered(true);
UIFormStringInput stringInputDrivePath = uiParamPathInput.getUIStringInput(UIJCRExplorerPortlet.PARAMETERIZE_PATH);
stringInputDrivePath.setValue("");
uiParamPathInput.setRendered(true);
}
event.getRequestContext().addUIComponentToUpdateByAjax(uiForm);
}
}
public static class SaveActionListener extends EventListener<UIJcrExplorerEditForm>{
public void execute(Event<UIJcrExplorerEditForm> event) throws Exception {
UIJcrExplorerEditForm uiForm = event.getSource();
PortletPreferences pref = uiForm.getPreference();
UIFormSelectBox typeSelectBox = uiForm.getChildById(UIJCRExplorerPortlet.USECASE);
UIFormInputSetWithAction driveNameInput = uiForm.getChildById("DriveNameInput");
UIFormStringInput stringInputDrive = driveNameInput.getUIStringInput(UIJCRExplorerPortlet.DRIVE_NAME);
UICheckBoxInput uiFormCheckBoxTop = uiForm.getChildById(UIJCRExplorerPortlet.SHOW_TOP_BAR);
UICheckBoxInput uiFormCheckBoxAction = uiForm.getChildById(UIJCRExplorerPortlet.SHOW_ACTION_BAR);
UICheckBoxInput uiFormCheckBoxSide = uiForm.getChildById(UIJCRExplorerPortlet.SHOW_SIDE_BAR);
UICheckBoxInput uiFormCheckBoxFilter= uiForm.getChildById(UIJCRExplorerPortlet.SHOW_FILTER_BAR);
String nodePath = ((UIFormStringInput)uiForm.findComponentById(UIJCRExplorerPortlet.PARAMETERIZE_PATH)).getValue();
String driveName = stringInputDrive.getValue();
String useCase = typeSelectBox.getValue();
if (useCase.equals(UIJCRExplorerPortlet.JAILED) ) {
if ((driveName == null) || (driveName.length() == 0)) {
UIApplication uiApp = uiForm.getAncestorOfType(UIApplication.class);
uiApp.addMessage(new ApplicationMessage("UIJcrExplorerEditForm.msg.notNullDriveName", null,
ApplicationMessage.WARNING));
return;
}
} else if (useCase.equals(UIJCRExplorerPortlet.PARAMETERIZE)) {
if ((nodePath == null) || (nodePath.length() == 0)) {
UIApplication uiApp = uiForm.getAncestorOfType(UIApplication.class);
uiApp.addMessage(new ApplicationMessage("UIJcrExplorerEditForm.msg.notNullPath", null,
ApplicationMessage.WARNING));
return;
}
}
if (useCase.equals(UIJCRExplorerPortlet.SELECTION)) {
//driveName = pref.getValue("driveName", "");
nodePath = "/";
} else {
// uiForm.setFlagSelectRender(true);
}
uiForm.setFlagSelectRender(true);
pref.setValue(UIJCRExplorerPortlet.USECASE, useCase);
pref.setValue(UIJCRExplorerPortlet.DRIVE_NAME, driveName);
pref.setValue(UIJCRExplorerPortlet.PARAMETERIZE_PATH, nodePath);
pref.setValue(UIJCRExplorerPortlet.SHOW_ACTION_BAR, String.valueOf(uiFormCheckBoxAction.getValue()));
pref.setValue(UIJCRExplorerPortlet.SHOW_TOP_BAR, String.valueOf(uiFormCheckBoxTop.getValue()));
pref.setValue(UIJCRExplorerPortlet.SHOW_SIDE_BAR, String.valueOf(uiFormCheckBoxSide.getValue()));
pref.setValue(UIJCRExplorerPortlet.SHOW_FILTER_BAR, String.valueOf(uiFormCheckBoxFilter.getValue()));
pref.store();
UIApplication uiApp = uiForm.getAncestorOfType(UIApplication.class);
uiApp.addMessage(new ApplicationMessage("UIJcrExplorerEditForm.msg.fields-saved", null));
event.getRequestContext().addUIComponentToUpdateByAjax(uiForm);
}
}
public static class SelectDriveActionListener extends EventListener<UIJcrExplorerEditForm>{
public void execute(Event<UIJcrExplorerEditForm> event) throws Exception {
UIJcrExplorerEditForm uiForm = event.getSource();
UIJcrExplorerEditContainer editContainer = uiForm.getParent();
UIPopupWindow popupWindow = editContainer.initPopup("PopUpSelectDrive");
UIDriveSelector driveSelector = editContainer.createUIComponent(UIDriveSelector.class, null, null);
driveSelector.updateGrid();
popupWindow.setUIComponent(driveSelector);
event.getRequestContext().addUIComponentToUpdateByAjax(uiForm.getParent());
}
}
public static class SelectNodePathActionListener extends EventListener<UIJcrExplorerEditForm>{
public void execute(Event<UIJcrExplorerEditForm> event) throws Exception {
UIJcrExplorerEditForm uiForm = event.getSource();
UIJcrExplorerEditContainer editContainer = uiForm.getParent();
UIFormInputSetWithAction driveNameInput = uiForm.getChildById("DriveNameInput");
UIFormStringInput stringInputDrive = driveNameInput.getUIStringInput(UIJCRExplorerPortlet.DRIVE_NAME);
String driveName = stringInputDrive.getValue();
if (driveName == null || driveName.length() == 0) {
UIApplication uiApp = uiForm.getAncestorOfType(UIApplication.class);
uiApp.addMessage(new ApplicationMessage("UIJcrExplorerEditForm.msg.personal-usecase", null,
ApplicationMessage.WARNING));
return;
}
editContainer.initPopupDriveBrowser(POPUP_SELECT_PATH_INPUT, driveName);
event.getRequestContext().addUIComponentToUpdateByAjax(uiForm.getParent());
}
}
public void doSelect(String selectField, Object value) throws Exception {
String stValue = null;
if ("/".equals(String.valueOf(value))) {
stValue = "/";
} else {
if (String.valueOf(value).split(":/").length > 1) stValue = String.valueOf(value).split(":/")[1];
else stValue = "/";
}
((UIFormStringInput)findComponentById(selectField)).setValue(stValue);
UIJcrExplorerEditContainer uiContainer = getParent();
for (UIComponent uiChild : uiContainer.getChildren()) {
if (uiChild.getId().equals(POPUP_SELECT_PATH_INPUT)) {
UIPopupWindow uiPopup = uiContainer.getChildById(uiChild.getId());
uiPopup.setRendered(false);
uiPopup.setShow(false);
}
}
}
}