/* * JBoss, Home of Professional Open Source. * Copyright 2008, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.console.plugins.helpers; import org.jboss.console.manager.interfaces.ManageableResource; import org.jboss.console.manager.interfaces.ResourceTreeNode; import org.jboss.console.manager.interfaces.TreeAction; import org.jboss.console.manager.interfaces.TreeNode; import org.jboss.console.manager.interfaces.TreeNodeMenuEntry; import org.jboss.console.manager.interfaces.impl.HttpLinkTreeAction; import org.jboss.console.manager.interfaces.impl.MBeanResource; import org.jboss.console.manager.interfaces.impl.SeparatorTreeNodeMenuEntry; import org.jboss.console.manager.interfaces.impl.SimpleResourceTreeNode; import org.jboss.console.manager.interfaces.impl.SimpleTreeNode; import org.jboss.console.manager.interfaces.impl.SimpleTreeNodeMenuEntryImpl; import javax.management.ObjectName; /** * <description> * * @see <related> * * @author <a href="mailto:sacha.labourey@cogito-info.ch">Sacha Labourey</a>. * @version $Revision: 81010 $ * * <p><b>Revisions:</b> * * <p><b>31 dec 2002 Sacha Labourey:</b> * <ul> * <li> First implementation </li> * </ul> */ public class TreeNodeFactory { public final static int NAME = 0; public final static int DESCRIPTION = 1; public final static int ICON_URL = 2; public final static int DEFAULT_URL = 3; public final static int MENU_ENTRIES = 4; public final static int SUB_NODES = 5; public final static int SUB_RESOURCES = 6; public final static int MANAGEABLE_RESOURCES = 7; public static TreeNode createTreeNode (Object[] content) throws Exception { if (content.length != 7 && content.length != 8) throw new Exception ("Bad number of parameters"); String name = (String)content[NAME]; String description = (String)content[DESCRIPTION]; String iconUrl = (String)content[ICON_URL]; String defaultUrl = (String)content[DEFAULT_URL]; TreeAction action = new HttpLinkTreeAction (defaultUrl); // menu entries // TreeNodeMenuEntry[] menuEntries = createTreeMenus ((Object[])content[MENU_ENTRIES]); // sub nodes // TreeNode[] subNodes = null; Object[] genericSubNodes = (Object[])content[SUB_NODES]; if (genericSubNodes != null && genericSubNodes.length > 0) { subNodes = new TreeNode[genericSubNodes.length]; for (int i=0; i< genericSubNodes.length; i++) { subNodes[i] = createTreeNode ( (Object[])genericSubNodes[i] ); } } else { subNodes = new TreeNode[0]; } // sub resources nodes // ResourceTreeNode[] subResNodes = null; Object[] genericSubResNodes = (Object[])content[SUB_RESOURCES]; if (genericSubResNodes != null && genericSubResNodes.length > 0) { subResNodes = new ResourceTreeNode[genericSubResNodes.length]; for (int i=0; i< genericSubResNodes.length; i++) { subResNodes[i] = (ResourceTreeNode)createTreeNode ( (Object[])genericSubResNodes[i] ); } } else { subResNodes = new ResourceTreeNode[0]; } if ((content.length-1) == MANAGEABLE_RESOURCES) { // we are a resource tree node // ManageableResource res = createManageableResource (content[MANAGEABLE_RESOURCES]); return new SimpleResourceTreeNode (name, description, iconUrl, action, menuEntries, subNodes, subResNodes, res); } else { // we are not a resource tree node, but simply a tree node! // return new SimpleTreeNode (name, description, iconUrl, action, menuEntries, subNodes, subResNodes); } } public static ManageableResource createManageableResource (Object content) throws Exception { Object[] realContent = (Object[])content; return new MBeanResource (new ObjectName((String)realContent[0]), (String)realContent[1]); } protected static TreeNodeMenuEntry[] createTreeMenus (Object[] content) throws Exception { TreeNodeMenuEntry[] menuEntries = null; if (content != null && content.length > 0) { menuEntries = new TreeNodeMenuEntry[content.length]; int i=0; while (i< content.length) { if (content[i] == null) { menuEntries[i] = new SeparatorTreeNodeMenuEntry(); i++; } else { String text = (String)content[i]; TreeAction action = new HttpLinkTreeAction((String)content[i+1]); menuEntries[i] = new SimpleTreeNodeMenuEntryImpl ( text, action ); i+=2; } } } else { menuEntries = new TreeNodeMenuEntry[0]; } return menuEntries; } }