/*************************************************************************** * Copyright (C) 2003-2009 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.admin.taxonomy; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; import org.exoplatform.ecm.webui.component.admin.taxonomy.tree.info.UIPermissionTreeManager; import org.exoplatform.ecm.webui.form.UIFormInputSetWithAction; import org.exoplatform.ecm.webui.form.validator.ECMNameValidator; import org.exoplatform.ecm.webui.utils.Utils; import org.exoplatform.services.cms.BasePath; import org.exoplatform.services.cms.taxonomy.TaxonomyService; import org.exoplatform.services.cms.taxonomy.TaxonomyTreeData; import org.exoplatform.services.jcr.RepositoryService; import org.exoplatform.services.jcr.ext.hierarchy.NodeHierarchyCreator; import org.exoplatform.web.application.ApplicationMessage; 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.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.UIFormInputBase; import org.exoplatform.webui.form.UIFormSelectBox; import org.exoplatform.webui.form.UIFormStringInput; import org.exoplatform.webui.form.validator.MandatoryValidator; /** * Created by The eXo Platform SARL * Author : Hoang Van Hung * hunghvit@gmail.com * Apr 9, 2009 */ @ComponentConfig( lifecycle = UIFormLifecycle.class, template = "system:/groovy/webui/form/UIForm.gtmpl", events = { @EventConfig(listeners = UITaxonomyTreeMainForm.ChangeActionListener.class, phase = Phase.DECODE), @EventConfig(listeners = UITaxonomyTreeMainForm.ResetActionListener.class, phase = Phase.DECODE), @EventConfig(listeners = UITaxonomyTreeMainForm.CancelActionListener.class, phase=Phase.DECODE), @EventConfig(listeners = UITaxonomyTreeMainForm.AddPathActionListener.class, phase = Phase.DECODE), @EventConfig(listeners = UITaxonomyTreeMainForm.NextViewPermissionActionListener.class) } ) public class UITaxonomyTreeMainForm extends UIForm { public static final String FIELD_NAME = "TaxoTreeName"; public static final String FIELD_WORKSPACE = "TaxoTreeWorkspace"; public static final String FIELD_HOMEPATH = "TaxoTreeHomePath"; public UITaxonomyTreeMainForm() throws Exception { addUIFormInput(new UIFormStringInput(FIELD_NAME, FIELD_NAME, null) .addValidator(MandatoryValidator.class).addValidator(ECMNameValidator.class)); UIFormSelectBox uiSelectWorkspace = new UIFormSelectBox(FIELD_WORKSPACE, FIELD_WORKSPACE, null); addChild(uiSelectWorkspace); uiSelectWorkspace.setOnChange("Change"); UIFormInputSetWithAction uiActionHomePath = new UIFormInputSetWithAction("TaxonomyTreeHomePath"); uiActionHomePath.addUIFormInput(new UIFormStringInput(FIELD_HOMEPATH, FIELD_HOMEPATH, null) .setReadOnly(true)); uiActionHomePath.setActionInfo(FIELD_HOMEPATH, new String[] { "AddPath" }); addUIComponentInput(uiActionHomePath); setActions(new String[] {"NextViewPermission","Reset"}); } public void update(TaxonomyTreeData taxonomyTree) throws Exception { String[] wsNames = getApplicationComponent(RepositoryService.class) .getCurrentRepository().getWorkspaceNames(); List<SelectItemOption<String>> workspace = new ArrayList<SelectItemOption<String>>(); String systemWorkspace = getAncestorOfType(UITaxonomyManagerTrees.class).getSystemWorkspaceName(); String dmsSystemWorkspace = getAncestorOfType(UITaxonomyManagerTrees.class).getDmsSystemWorkspaceName(); for(String wsName : wsNames) { if (!systemWorkspace.equals(wsName)) workspace.add(new SelectItemOption<String>(wsName, wsName)); } if (taxonomyTree == null) taxonomyTree = new TaxonomyTreeData(); //sort workspace Comparator<SelectItemOption<String>> comparator = new Comparator<SelectItemOption<String>>(){ @Override public int compare(SelectItemOption<String> option1, SelectItemOption<String> option2) { try { return option1.getValue().compareToIgnoreCase(option2.getValue()); }catch (Exception ex){ return 0; } } }; Collections.sort(workspace, comparator); UIFormSelectBox uiSelectBox = getUIFormSelectBox(FIELD_WORKSPACE).setOptions(workspace); if (taxonomyTree.getTaxoTreeWorkspace() == null) { taxonomyTree.setTaxoTreeWorkspace(dmsSystemWorkspace); } uiSelectBox.setValue(taxonomyTree.getTaxoTreeWorkspace()); UIFormInputBase<String> inputName = findComponentById(FIELD_NAME); UIFormInputBase<String> inputHomePath = findComponentById(FIELD_HOMEPATH); String treeName = taxonomyTree.getTaxoTreeName(); //Check edit TaxonomyTreeData taxonomyTreeData = ((UITaxonomyTreeContainer)getParent()).getTaxonomyTreeData(); if (taxonomyTreeData == null || !taxonomyTreeData.isEdit()) inputName.setValue(treeName); else inputName.setValue(taxonomyTreeData.getTaxoTreeName()); inputHomePath.setValue(taxonomyTree.getTaxoTreeHomePath()); getUIStringInput(FIELD_NAME).setReadOnly(false); if((taxonomyTree != null && taxonomyTree.isEdit()) || (taxonomyTreeData != null && taxonomyTreeData.isEdit())) { getUIStringInput(FIELD_NAME).setReadOnly(true); } } int checkForm() throws Exception { UIFormStringInput input = getChildById(FIELD_WORKSPACE); if (input == null || input.getValue() == null || input.getValue().length() == 0) { return 1; } UIFormSelectBox selectBox = getChildById(FIELD_WORKSPACE); UIFormInputBase<String> inputHomePath = findComponentById(FIELD_HOMEPATH); String homePath = ""; if (inputHomePath != null && inputHomePath.getValue() != null) { homePath = inputHomePath.getValue().toString(); } String dmsSysWorkspace = getAncestorOfType(UITaxonomyManagerTrees.class).getDmsSystemWorkspaceName(); String workspace = selectBox.getValue(); if (homePath.length() == 0) { if (!dmsSysWorkspace.equals(workspace)) { return 2; } } return 0; } public static class AddPathActionListener extends EventListener<UITaxonomyTreeMainForm> { public void execute(Event<UITaxonomyTreeMainForm> event) throws Exception { UITaxonomyTreeMainForm uiTaxonomyTreeForm = event.getSource(); UITaxonomyManagerTrees uiTaxonomyManagerTrees = uiTaxonomyTreeForm.getAncestorOfType(UITaxonomyManagerTrees.class); String workspace = uiTaxonomyTreeForm.getUIFormSelectBox(FIELD_WORKSPACE).getValue(); uiTaxonomyManagerTrees.initPopupJCRBrowser(workspace, true); event.getRequestContext().addUIComponentToUpdateByAjax(uiTaxonomyManagerTrees); } } public static class ChangeActionListener extends EventListener<UITaxonomyTreeMainForm> { public void execute(Event<UITaxonomyTreeMainForm> event) throws Exception { UITaxonomyTreeMainForm uiTaxonomyTreeMainForm = event.getSource(); UITaxonomyTreeContainer uiTaxonomyTreeContainer = uiTaxonomyTreeMainForm.getParent(); UITaxonomyManagerTrees uiTaxonomyManagerTrees = uiTaxonomyTreeMainForm.getAncestorOfType(UITaxonomyManagerTrees.class); uiTaxonomyTreeMainForm.getUIStringInput(FIELD_HOMEPATH).setValue(""); TaxonomyTreeData taxonomyTreeData = uiTaxonomyTreeContainer.getTaxonomyTreeData(); UIFormSelectBox selectBox = uiTaxonomyTreeMainForm.getChildById(FIELD_WORKSPACE); taxonomyTreeData.setTaxoTreeHomePath(""); taxonomyTreeData.setTaxoTreeWorkspace(selectBox.getValue()); String dmsSysWorkspace = uiTaxonomyManagerTrees.getDmsSystemWorkspaceName(); UIFormInputSetWithAction uiActionHomePath = uiTaxonomyTreeMainForm.getChildById("TaxonomyTreeHomePath"); uiActionHomePath.removeChildById(FIELD_HOMEPATH); if (!selectBox.getValue().equals(dmsSysWorkspace)) { uiActionHomePath.addUIFormInput(new UIFormStringInput(FIELD_HOMEPATH, FIELD_HOMEPATH, null). addValidator(MandatoryValidator.class).setReadOnly(true)); } else { uiActionHomePath.addUIFormInput(new UIFormStringInput(FIELD_HOMEPATH, FIELD_HOMEPATH, null).setReadOnly(true)); } event.getRequestContext().addUIComponentToUpdateByAjax(uiTaxonomyManagerTrees); } } public static class NextViewPermissionActionListener extends EventListener<UITaxonomyTreeMainForm> { public void execute(Event<UITaxonomyTreeMainForm> event) throws Exception { UITaxonomyTreeMainForm uiTaxonomyTreeMainForm = event.getSource(); UITaxonomyTreeContainer uiTaxonomyTreeContainer = uiTaxonomyTreeMainForm.getParent(); TaxonomyTreeData taxonomyTreeData = uiTaxonomyTreeContainer.getTaxonomyTreeData(); UITaxonomyManagerTrees uiTaxonomyManagerTrees = uiTaxonomyTreeContainer.getAncestorOfType(UITaxonomyManagerTrees.class); UIApplication uiApp = uiTaxonomyTreeContainer.getAncestorOfType(UIApplication.class); int validateCode = uiTaxonomyTreeMainForm.checkForm(); if (validateCode == 1) { uiApp.addMessage(new ApplicationMessage("UITaxonomyTreeMainForm.msg.name-emty", null, ApplicationMessage.WARNING)); return; } else if (validateCode == 2) { uiApp.addMessage(new ApplicationMessage("UITaxonomyTreeMainForm.msg.homepath-emty", null, ApplicationMessage.WARNING)); return; } UIFormInputBase<String> inputName = uiTaxonomyTreeMainForm.findComponentById(FIELD_NAME); String name = inputName.getValue().toString().trim(); TaxonomyService taxonomyService = uiTaxonomyTreeMainForm.getApplicationComponent(TaxonomyService.class); if (taxonomyService.hasTaxonomyTree(name) && !taxonomyTreeData.isEdit()) { uiApp.addMessage(new ApplicationMessage("UITaxonomyTreeMainForm.msg.taxonomytree-existed", null, ApplicationMessage.WARNING)); return; } UIFormSelectBox selectBox = uiTaxonomyTreeMainForm.getChildById(FIELD_WORKSPACE); UIFormInputBase<String> inputHomePath = uiTaxonomyTreeMainForm.findComponentById(FIELD_HOMEPATH); String homePath = ""; if (inputHomePath != null && inputHomePath.getValue() != null) homePath =inputHomePath.getValue().toString(); NodeHierarchyCreator nodeHierarchyCreator = uiTaxonomyTreeMainForm.getApplicationComponent(NodeHierarchyCreator.class); String treeDefinitionPath = nodeHierarchyCreator.getJcrPath(BasePath.TAXONOMIES_TREE_DEFINITION_PATH); if ((homePath.length() > 0) && (treeDefinitionPath != null) && (treeDefinitionPath.length() > 0) && (homePath.equals(treeDefinitionPath))) { uiApp.addMessage(new ApplicationMessage("UITaxonomyTreeMainForm.msg.no-right-target-path", null, ApplicationMessage.WARNING)); return; } UIPermissionTreeManager uiPermissionManage = uiTaxonomyTreeContainer.getChild(UIPermissionTreeManager.class); taxonomyTreeData.setTaxoTreeName(name); taxonomyTreeData.setTaxoTreeHomePath(homePath.trim()); taxonomyTreeData.setTaxoTreeWorkspace(selectBox.getValue()); uiTaxonomyTreeContainer.viewStep(2); uiPermissionManage.update(); event.getRequestContext().addUIComponentToUpdateByAjax(uiTaxonomyManagerTrees); } } public static class ResetActionListener extends EventListener<UITaxonomyTreeMainForm> { public void execute(Event<UITaxonomyTreeMainForm> event) throws Exception { UITaxonomyTreeMainForm uiTaxonomyTreeForm = event.getSource(); UITaxonomyManagerTrees uiTaxonomyManagerTrees = uiTaxonomyTreeForm.getAncestorOfType(UITaxonomyManagerTrees.class); uiTaxonomyTreeForm.getUIStringInput(FIELD_NAME).setValue(""); uiTaxonomyTreeForm.getUIStringInput(FIELD_HOMEPATH).setValue(""); uiTaxonomyTreeForm.update(null); event.getRequestContext().addUIComponentToUpdateByAjax(uiTaxonomyManagerTrees); } } static public class CancelActionListener extends EventListener<UITaxonomyTreeMainForm> { public void execute(Event<UITaxonomyTreeMainForm> event) throws Exception { UITaxonomyTreeMainForm uiTaxonomyTreeForm = event.getSource(); UITaxonomyTreeContainer uiContainer = uiTaxonomyTreeForm.getAncestorOfType(UITaxonomyTreeContainer.class); UIPopupWindow uiPopupWindow = uiContainer.getParent(); uiPopupWindow.setRendered(false) ; event.getRequestContext().addUIComponentToUpdateByAjax(uiPopupWindow) ; } } }