/* * RHQ Management Platform * Copyright (C) 2005-2009 Red Hat, Inc. * All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation version 2 of the License. * * 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, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ package org.rhq.enterprise.gui.admin.plugin; import java.io.Serializable; import java.util.List; import java.util.Map; import org.richfaces.component.UITree; import org.richfaces.component.html.HtmlTree; import org.richfaces.event.NodeSelectedEvent; import org.richfaces.model.TreeNode; import org.richfaces.model.TreeNodeImpl; import org.rhq.core.domain.plugin.PluginKey; import org.rhq.core.domain.plugin.ServerPlugin; import org.rhq.enterprise.server.plugin.pc.ServerPluginType; //@Scope(ScopeType.PAGE) //@Name("pluginConfigUIBean") public class PluginConfigurationUIBean extends AbstractPluginConfigurationUIBean implements Serializable { // @RequestParameter private String pluginName; private TreeNode root; public TreeNode getRoot() { return root; } // @Create public void init() { checkPermission(); createTree(); } private void createTree() { this.root = new TreeNodeImpl(); Map<ServerPluginType, List<PluginKey>> types = serverPluginsBean.getInstalledServerPluginsGroupedByType(); for (ServerPluginType type : types.keySet()) { TreeNode typeNode = createTypeNode(type, types.get(type)); if (typeNode != null) { typeNode.setParent(root); root.addChild(type, typeNode); } } } private TreeNode createTypeNode(ServerPluginType type, List<PluginKey> plugins) { TreeNode typeNode = new TreeNodeImpl(); typeNode.setData(type); if (plugins != null && plugins.size() > 0) { for (PluginKey pluginKey : plugins) { TreeNode pluginNode = createPluginNode(pluginKey); pluginNode.setParent(typeNode); typeNode.addChild(pluginKey, pluginNode); } } return typeNode; } private TreeNode createPluginNode(PluginKey pluginKey) { ServerPlugin plugin = serverPluginsBean.getServerPlugin(pluginKey); plugin = serverPluginsBean.getServerPluginRelationships(plugin); TreeNode pluginNode = new TreeNodeImpl(); pluginNode.setData(plugin); return pluginNode; } public boolean adviseOpened(UITree node) { // Expand the whole tree by default return true; } /** * Advise the plugin tree if the provided node should be selected. * * @param node the {@link UITree} in question - will either have data a * {@link ServerPlugin} or {@link ServerPluginType} is the row * data. * * @return <code>true</code> if this node should be selected, * <code>false</code> otherise */ public boolean adviseSelected(UITree node) { if (isServerPluginSelected(node)) { if (getPlugin() != null) { return node.getRowData() == getPlugin(); } else { // there is no plugin currently selected ServerPlugin plugin = (ServerPlugin) node.getRowData(); // if this is the node that matches the request parameter, // go ahead and load the config and select this node if (plugin.getName().equals(this.pluginName)) { setPlugin(plugin); lookupConfigDefinitions(); return true; } } } // the node is a plugin server type - we don't want to select // that if we don't have to. return false; } /** * Responds to node selection events in the plugin tree widget. * * @param event */ public void processSelection(NodeSelectedEvent event) { HtmlTree node = (HtmlTree) event.getSource(); if (isServerPluginSelected(node)) { setPlugin((ServerPlugin) node.getRowData()); lookupConfigDefinitions(); node.setSelected(); } } private boolean isServerPluginSelected(UITree tree) { return tree.getRowData() instanceof ServerPlugin; } }