/*************************************************************************** * 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.List; import javax.jcr.Node; import javax.jcr.Session; import org.exoplatform.ecm.webui.utils.Utils; import org.exoplatform.services.jcr.RepositoryService; import org.exoplatform.services.jcr.core.ManageableRepository; import org.exoplatform.services.wcm.core.NodeLocation; import org.exoplatform.services.wcm.utils.WCMCoreUtils; 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.core.UIBreadcumbs; import org.exoplatform.webui.core.UIBreadcumbs.LocalPath; import org.exoplatform.webui.core.UIContainer; import org.exoplatform.webui.core.UIPopupContainer; import org.exoplatform.webui.core.UIPopupWindow; import org.exoplatform.webui.core.lifecycle.UIContainerLifecycle; import org.exoplatform.webui.event.Event; import org.exoplatform.webui.event.EventListener; /** * Created by The eXo Platform SARL * Author : Hoang Van Hung * hunghvit@gmail.com * Apr 5, 2009 */ @ComponentConfigs( { @ComponentConfig(lifecycle = UIContainerLifecycle.class), @ComponentConfig( type = UIBreadcumbs.class, id = "BreadcumbTaxonomyTreeECMAdmin", template = "system:/groovy/webui/core/UIBreadcumbs.gtmpl", events = @EventConfig(listeners = UITaxonomyTreeCreateChild.SelectPathActionListener.class) ) } ) public class UITaxonomyTreeCreateChild extends UIContainer { private String workspace; public static final String PERMISSION_ID_POPUP = "TaxonomyTreeViewPermissionPopup"; private String selectedPath_ = null ; private NodeLocation taxonomyTreeNode = null; public UITaxonomyTreeCreateChild() throws Exception { addChild(UIBreadcumbs.class, "BreadcumbTaxonomyTreeECMAdmin", "BreadcumbTaxonomyTreeECMAdmin"); UITaxonomyTreeBrowser uiTaxonomyTreeBrowser = addChild(UITaxonomyTreeBrowser.class, null, null); uiTaxonomyTreeBrowser.setAcceptedNodeTypes(new String[] {Utils.EXO_TAXONOMY}); UITaxonomyTreeWorkingArea uiTaxonomyTreeWorkingArea = addChild(UITaxonomyTreeWorkingArea.class, null, null); uiTaxonomyTreeWorkingArea.setAcceptedNodeTypes(new String[] {Utils.EXO_TAXONOMY}); } public void update() throws Exception { UITaxonomyTreeBrowser uiTree = getChild(UITaxonomyTreeBrowser.class); uiTree.update(); UITaxonomyTreeWorkingArea uiTaxonomyTreeWorkingArea = getChild(UITaxonomyTreeWorkingArea.class); uiTaxonomyTreeWorkingArea.update(); } public void update(String path) throws Exception { UITaxonomyTreeBrowser uiTree = getChild(UITaxonomyTreeBrowser.class); uiTree.update(); uiTree.setNodeSelect(path); UITaxonomyTreeWorkingArea uiTaxonomyTreeWorkingArea = getChild(UITaxonomyTreeWorkingArea.class); uiTaxonomyTreeWorkingArea.setSelectedPath(path); uiTaxonomyTreeWorkingArea.update(); setSelectedPath(path); } public Node getRootNode() throws Exception { return getTaxonomyTreeNode().getParent(); } public Node getTaxonomyTreeNode() { return NodeLocation.getNodeByLocation(taxonomyTreeNode); } public void setSelectedPath(String selectedPath) { selectedPath_ = selectedPath; } public String getSelectedPath() { return selectedPath_; } public Node getNodeByPath(String path) throws Exception { return (Node) getSession().getItem(path) ; } Session getSession() throws Exception { return WCMCoreUtils.getSystemSessionProvider().getSession(workspace, getRepository()); } public ManageableRepository getRepository() throws Exception { RepositoryService repositoryService = getApplicationComponent(RepositoryService.class); return repositoryService.getCurrentRepository(); } public void initPopup(String path) throws Exception { removeChildById("TaxonomyPopupCreateChild"); UIPopupWindow uiPopup = addChild(UIPopupWindow.class, null, "TaxonomyPopupCreateChild"); uiPopup.setShowMask(true); uiPopup.setWindowSize(600, 250); UITaxonomyTreeCreateChildForm uiTaxoForm = createUIComponent(UITaxonomyTreeCreateChildForm.class, null, null); uiTaxoForm.setParent(path); uiPopup.setUIComponent(uiTaxoForm); uiPopup.setRendered(true); uiPopup.setShow(true); } public UIPopupContainer initPopupPermission(String id) throws Exception { removeChildById(id) ; return addChild(UIPopupContainer.class, null, id) ; } public void onChange(Node currentNode) throws Exception { UIBreadcumbs uiBreadcumbs = getChild(UIBreadcumbs.class); List<LocalPath> listLocalPath = new ArrayList<LocalPath>(); String path = currentNode.getPath().trim(); String taxonomyPath = getTaxonomyTreeNode().getPath(); if (path.startsWith(taxonomyPath)) { String subTaxonomy = path.substring(taxonomyPath.length(), path.length()); String[] arrayPath = subTaxonomy.split("/"); if (arrayPath.length > 0) { for (int i = 0; i < arrayPath.length; i++) { if (!arrayPath[i].trim().equals("")) { UIBreadcumbs.LocalPath localPath1 = new UIBreadcumbs.LocalPath(arrayPath[i].trim(), arrayPath[i].trim()); listLocalPath.add(localPath1); } } } } uiBreadcumbs.setPath(listLocalPath); } public void changeGroup(String groupId, Object context) throws Exception { StringBuffer sbPath = new StringBuffer(); sbPath.append(getTaxonomyTreeNode().getPath()).append("/"); UIBreadcumbs uiBreadcumb = getChild(UIBreadcumbs.class); if (groupId == null) groupId = ""; List<LocalPath> listLocalPath = uiBreadcumb.getPath(); if (listLocalPath == null || listLocalPath.size() == 0) return; List<String> listLocalPathString = new ArrayList<String>(); for (LocalPath localPath : listLocalPath) { listLocalPathString.add(localPath.getId().trim()); } if (listLocalPathString.contains(groupId)) { int index = listLocalPathString.indexOf(groupId); if (index == listLocalPathString.size() - 1) return; for (int i = listLocalPathString.size() - 1; i > index; i--) { listLocalPathString.remove(i); listLocalPath.remove(i); } uiBreadcumb.setPath(listLocalPath); for (int i = 0; i < listLocalPathString.size(); i++) { String pathName = listLocalPathString.get(i); if (pathName != null && pathName.length() > 0) { sbPath.append(pathName.trim()); if (i < listLocalPathString.size() - 1) sbPath.append("/"); } } UITaxonomyTreeBrowser uiTaxonomyTree = getChild(UITaxonomyTreeBrowser.class); uiTaxonomyTree.setNodeSelect(sbPath.toString()); } } public String getWorkspace() { return workspace; } public void setWorkspace(String workspace) { this.workspace = workspace; } public void setTaxonomyTreeNode(Node taxonomyTreeNode) { this.taxonomyTreeNode = NodeLocation.getNodeLocationByNode(taxonomyTreeNode); } public static class SelectPathActionListener extends EventListener<UIBreadcumbs> { public void execute(Event<UIBreadcumbs> event) throws Exception { UIBreadcumbs uiBreadcumbs = event.getSource(); UITaxonomyTreeCreateChild uiTaxonomyTreeCreateChild = uiBreadcumbs.getParent(); String objectId = event.getRequestContext().getRequestParameter(OBJECTID); uiBreadcumbs.setSelectPath(objectId); String selectGroupId = uiBreadcumbs.getSelectLocalPath().getId(); uiTaxonomyTreeCreateChild.changeGroup(selectGroupId, event.getRequestContext()); event.getRequestContext().addUIComponentToUpdateByAjax(uiTaxonomyTreeCreateChild); } } }