/*
* Copyright (C) 2003-2008 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.services.wcm.publication.lifecycle.stageversion.ui;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.ResourceBundle;
import org.exoplatform.portal.config.UserPortalConfigService;
import org.exoplatform.portal.config.model.Page;
import org.exoplatform.portal.mop.page.PageContext;
import org.exoplatform.portal.mop.user.UserNavigation;
import org.exoplatform.portal.mop.user.UserNode;
import org.exoplatform.services.wcm.utils.WCMCoreUtils;
import org.exoplatform.webui.config.annotation.ComponentConfig;
import org.exoplatform.webui.core.UIComponent;
import org.exoplatform.webui.core.UITree;
/**
* Created by The eXo Platform SAS
* Author : Phan Le Thanh Chuong
* chuong.phan@exoplatform.com, phan.le.thanh.chuong@gmail.com
* Sep 23, 2008
*/
@ComponentConfig(
template = "system:/groovy/webui/core/UITree.gtmpl"
)
public class UIPublicationTree extends UITree {
/* (non-Javadoc)
* @see org.exoplatform.webui.core.UITree#event(java.lang.String, java.lang.String)
*/
public String event(String name, String beanId) throws Exception {
UIComponent component = getParent();
return component.event(name, beanId);
}
/* (non-Javadoc)
* @see org.exoplatform.webui.core.UITree#getActionLink()
*/
public String getActionLink() throws Exception {
if(getSelected() == null) return "javascript:void(0)";
if(getParentSelected() == null) return "javascript:void(0)";
return event("ChangeNode", (String)getId(getParentSelected()));
}
/* (non-Javadoc)
* @see org.exoplatform.webui.core.UITree#isSelected(java.lang.Object)
*/
public boolean isSelected(Object obj) throws Exception{
TreeNode selected = getSelected();
if(selected == null) return false;
TreeNode compared = TreeNode.class.cast(obj);
return compared.getUri().equals(selected.getUri());
}
/**
* The Class TreeNode.
*/
public static class TreeNode {
/** The portal name. */
private String portalName;
/** The is user node. */
private boolean isUserNode;
/** The user node. */
private UserNode userNode;
/** The navigation. */
private UserNavigation navigation;
/** The children. */
private List<TreeNode> children;
/** The resource bundle. */
private ResourceBundle resourceBundle;
/**
* Instantiates a new tree node.
*
* @param portalName the portal name
* @param navigation the navigation
* @param res the res
* @param isUserNode the is user node
*/
public TreeNode(String portalName, final UserNavigation navigation, final ResourceBundle res, boolean isUserNode) {
this.portalName = portalName;
this.navigation = navigation;
this.resourceBundle = res;
this.isUserNode = isUserNode;
}
/**
* Gets the uri.
*
* @return the uri
*/
public String getUri() {
if(isUserNode) {
return "/" + portalName + "/" +userNode.getURI() ;
}
return "/" +portalName;
}
/**
* Gets the page node uri.
*
* @return the page node uri
*/
public String getPageNodeUri() {
if(isUserNode) return userNode.getURI();
return null;
}
/**
* Gets the icon.
*
* @return the icon
*/
public String getIcon() {
if(!isUserNode) return "";
return userNode.getIcon();
}
/**
* Gets the tree node children.
*
* @return the tree node children
*/
public List<TreeNode> getTreeNodeChildren() { return children; }
/**
* Sets the tree node children.
*
* @param list the new tree node children
*/
public void setTreeNodeChildren(List<TreeNode> list) { this.children = list; }
/**
* Sets the page node.
*
* @param userNode the new user node
*/
public void setUserNode(UserNode userNode) {
this.userNode = userNode;
if(userNode.getChildren() == null) {
children = null;
}
}
/**
* Checks if is page node.
*
* @return true, if is page node
*/
public boolean isPageNode() {return isUserNode;}
/**
* Sets the checks if is page node.
*
* @param isPageNode the new checks if is page node
*/
public void setIsPageNode(boolean isPageNode) {this.isUserNode = isPageNode;}
/**
* Gets the name.
*
* @return the name
*/
public String getName() {
if(isUserNode) return userNode.getName();
return portalName;
}
/**
* Gets the resolved label.
*
* @return the resolved label
*/
public String getResolvedLabel() {
if(isUserNode) return userNode.getEncodedResolvedLabel();
return portalName;
}
/**
* Sets the portal name.
*
* @param s the new portal name
*/
public void setPortalName(String s) { this.portalName = s; }
/**
* Gets the portal name.
*
* @return the portal name
*/
public String getPortalName() {return this.portalName; }
/**
* Sets the children by page nodes.
*
* @param userNodes the new children by user nodes
*
* @throws Exception the exception
*/
public void setChildrenByUserNodes(Collection<UserNode> userNodes) throws Exception {
if(userNodes == null) return;
List<TreeNode> list = new ArrayList<TreeNode>();
UserPortalConfigService userPortalConfigService = WCMCoreUtils.getService(UserPortalConfigService.class);
for(UserNode pNode: userNodes) {
if (pNode.getPageRef() == null) continue;
PageContext page = userPortalConfigService.getPage(pNode.getPageRef());
if (page == null) continue;
TreeNode treeNode = new TreeNode(portalName, navigation, resourceBundle, true);
treeNode.setUserNode(pNode);
treeNode.setChildrenByUserNodes(pNode.getChildren());
list.add(treeNode);
}
setTreeNodeChildren(list);
}
/**
* Search tree node by uri.
*
* @param uri the uri
*
* @return the tree node
*
* @throws Exception the exception
*/
public TreeNode searchTreeNodeByURI(String uri) throws Exception {
/**
* TODO: the API for loading navigations was changed (replaced [PageNavigation, PageNode] by [UserNavigation, UserNode])
* after refactoring, PageNavigationUtils class was removed from inside API so we can't use this class any more
*
* UIPublicationTree class is useless in ECMS project now,
* so we've temporarily commented some lines below and we will refactor them later
*/
// if (uri.equals("/" + portalName)) {
// TreeNode treeNode = new TreeNode(portalName, navigation, resourceBundle, false);
// treeNode.setChildrenByPageNodes(navigation.getNodes());
// return treeNode;
// }
// String pageNodeURI = StringUtils.substringAfter(uri, "/" + portalName + "/");
// PageNode other = PageNavigationUtils.searchPageNodeByUri(this.navigation, pageNodeURI);
// if(other == null) return null;
// TreeNode treeNode = new TreeNode(portalName,navigation,resourceBundle, true);
// treeNode.setPageNode(other);
// treeNode.setChildrenByPageNodes(other.getChildren());
TreeNode treeNode = new TreeNode(portalName,navigation,resourceBundle, true);
return treeNode;
}
/**
* Gets the children.
*
* @return the children
*/
public List<TreeNode> getChildren() {
return children;
}
/**
* Gets the navigation.
*
* @return the navigation
*/
public UserNavigation getNavigation() {
return navigation;
}
/**
* Gets the page node.
*
* @return the page node
*/
public UserNode getUserNode() {
return userNode;
}
}
}