Author: wrzep Date: 2005-12-17 11:35:30 -0500 (Sat, 17 Dec 2005) New Revision: 1834 Added: trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/Plugin.java trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/Plugins.java Removed: trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/Plugin.java Modified: trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/XmlTools.java trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/Column.java trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/Columns.java trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/Status.java trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/StatusDescriptor.java trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/ScorePlugin.java trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/StatusPlugin.java trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/WeightedScorePlugin.java Log: moved plugins handling to separate class (Plugins.java) new node parsing in XmlTools http://jira.jboss.com/jira/browse/JBLAB-415 Pawel Modified: trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/XmlTools.java =================================================================== --- trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/XmlTools.java 2005-12-17 15:21:32 UTC (rev 1833) +++ trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/XmlTools.java 2005-12-17 16:35:30 UTC (rev 1834) @@ -221,6 +221,25 @@ return null; } + + /** + * Gets value of a node that is a child node of the given one and has the + * given name + * + * @param root Node which children are to be searched. + * @param childNodeName Name of the searched node. + * @return A value of child node with the given ame or null, if no such + * node exists. + */ + public static String getChildNodeValue(Node root, String childNodeName) { + Node node = getFirstNodeWithName(root, childNodeName); + + if (node != null) { + return unmarshallText(node); + } + + return null; + } /** * Reads text contained in a tag of the form <tag>text</tag>. Modified: trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/Column.java =================================================================== --- trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/Column.java 2005-12-17 15:21:32 UTC (rev 1833) +++ trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/Column.java 2005-12-17 16:35:30 UTC (rev 1834) @@ -22,7 +22,6 @@ package org.jboss.forge.status; -import org.jboss.forge.status.plugins.Plugin; import org.jboss.portal.common.context.DelegateContext; /** Modified: trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/Columns.java =================================================================== --- trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/Columns.java 2005-12-17 15:21:32 UTC (rev 1833) +++ trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/Columns.java 2005-12-17 16:35:30 UTC (rev 1834) @@ -26,16 +26,14 @@ import java.util.Collection; import java.util.Iterator; import java.util.List; -import java.util.Map; import java.util.Set; import org.jboss.forge.common.XmlTools; import org.jboss.forge.common.projects.Projects; -import org.jboss.forge.common.projects.ProjectsHelper; import org.jboss.forge.common.projects.permissions.NullPermissionsChecker; import org.jboss.forge.common.projects.permissions.PermissionsChecker; -import org.jboss.forge.status.plugins.Plugin; import org.jboss.portal.common.context.DelegateContext; + import org.w3c.dom.Node; import org.w3c.dom.NodeList; @@ -47,7 +45,7 @@ List<Column> columns; Projects projects; - public Columns(Node pageRoot, Map<String,Plugin> plugins, Projects projects) { + public Columns(Node pageRoot, Plugins plugins, Projects projects) { this.projects = projects; columns = new ArrayList<Column>(); @@ -57,11 +55,9 @@ Node columnNode = columnsList.item(i); if (columnNode.getNodeType() == Node.ELEMENT_NODE) { - Node nameNode = XmlTools.getFirstNodeWithName(columnNode, "name"); - String name = XmlTools.unmarshallText(nameNode); + String name = XmlTools.getChildNodeValue(columnNode, "name"); - Node pluginNode = XmlTools.getFirstNodeWithName(columnNode, "plugin"); - String pluginId = XmlTools.unmarshallText(pluginNode); + String pluginId = XmlTools.getChildNodeValue(columnNode, "plugin"); Plugin plugin = plugins.get(pluginId); Column column = new Column(name,plugin); Added: trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/Plugin.java =================================================================== --- trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/Plugin.java 2005-12-17 15:21:32 UTC (rev 1833) +++ trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/Plugin.java 2005-12-17 16:35:30 UTC (rev 1834) @@ -0,0 +1,49 @@ +/* + * JBoss, Home of Professional Open Source + * Copyright 2005, JBoss Inc., and individual contributors as indicated + * by the @authors tag. See the copyright.txt 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.forge.status; + +import org.jboss.forge.status.plugins.InvalidPluginPropertiesException; +import org.w3c.dom.Node; + +/** +* @author Pawel Wrzeszcz +*/ + +public abstract class Plugin { + + protected Node propertiesNode; + + protected String name; + protected String id; + + public void init(String name, String id, Node propertiesNode) throws InvalidPluginPropertiesException { + this.propertiesNode = propertiesNode; + this.name = name; + this.id = id; + } + + public abstract int getValue(String projectId); + + public String getId() { return id; }; + public String getName() { return name; }; +} Added: trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/Plugins.java =================================================================== --- trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/Plugins.java 2005-12-17 15:21:32 UTC (rev 1833) +++ trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/Plugins.java 2005-12-17 16:35:30 UTC (rev 1834) @@ -0,0 +1,125 @@ +/* + * JBoss, Home of Professional Open Source + * Copyright 2005, JBoss Inc., and individual contributors as indicated + * by the @authors tag. See the copyright.txt 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.forge.status; + +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; +import java.util.Set; + +import org.jboss.forge.common.XmlTools; +import org.jboss.forge.common.projects.Projects; +import org.jboss.forge.status.plugins.InvalidPluginPropertiesException; +import org.jboss.forge.status.plugins.ScorePlugin; +import org.jboss.forge.status.plugins.StatusPlugin; +import org.jboss.logging.Logger; + +import org.w3c.dom.Node; + +/** +* @author Pawel Wrzeszcz +*/ + +public class Plugins {; + + private final static String PLUGIN_ID_ELEMENT = "id"; + private final static String PLUGIN_NAME_ELEMENT = "name"; + private final static String PLUGIN_CLASS_ELEMENT = "class"; + private final static String PLUGIN_PROPERTIES_ELEMENT = "properties"; + + Map<String, Plugin> plugins; + Projects projects; + + private Logger log; + + public Plugins(Set<Node> pluginsNodes, Projects projects, boolean scorePlugins) { + + this.projects = projects; + + log = Logger.getLogger(this.getClass()); + + plugins = new HashMap<String,Plugin>(); + + add(pluginsNodes, scorePlugins); + } + +private Plugin getPlugin(Node pluginNode, boolean scorePlugin) { + + // Get plugin info from pluginNode + + String pluginClassString = XmlTools.getChildNodeValue(pluginNode, PLUGIN_CLASS_ELEMENT); + String pluginName = XmlTools.getChildNodeValue(pluginNode, PLUGIN_NAME_ELEMENT); + String pluginId = XmlTools.getChildNodeValue(pluginNode, PLUGIN_ID_ELEMENT); + + // Get plugin class + Class pluginClass = null; + try { + pluginClass = Class.forName(pluginClassString); + } catch (ClassNotFoundException e) { + log.error("Plugin class not found: " + pluginClassString); + return null; + } + + Node pluginSpecificPropertiesNode = XmlTools.getFirstNodeWithName(pluginNode, PLUGIN_PROPERTIES_ELEMENT); + + // Get plugin instance; + Plugin plugin = null; + try { + plugin = (Plugin) pluginClass.newInstance(); + + if (scorePlugin) { + ((ScorePlugin) plugin).init(pluginName, pluginId, plugins.values(), pluginSpecificPropertiesNode); + } else { /* score plugin */ + ((StatusPlugin) plugin).init(pluginName, pluginId, projects, pluginSpecificPropertiesNode); + } + + } catch (InvalidPluginPropertiesException e) { + log.warn(e); + return null; + } + catch (Exception e) { + log.error("Plugin class: " + pluginClassString + ". Instantination failed.", e); + return null; + } + + System.out.println("[Status] Added plugin " + pluginClassString + "."); + + return plugin; + } + + public Plugin get(String pluginId) { + return plugins.get(pluginId); + } + + public void add(Set<Node> pluginsNodes, boolean scorePlugins) { + for (Iterator iter = pluginsNodes.iterator(); iter.hasNext();) { + Node pluginNode = (Node) iter.next(); + + Plugin plugin = getPlugin(pluginNode, scorePlugins); + + if (plugin != null) { + plugins.put(plugin.getId(), plugin); + } + } + } +} Modified: trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/Status.java =================================================================== --- trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/Status.java 2005-12-17 15:21:32 UTC (rev 1833) +++ trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/Status.java 2005-12-17 16:35:30 UTC (rev 1834) @@ -22,20 +22,13 @@ package org.jboss.forge.status; -import java.util.Collection; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.HashMap; import java.util.Set; import java.util.HashSet; -import java.util.ArrayList; import org.jboss.forge.common.projects.Projects; import org.jboss.forge.common.projects.ProjectsHelper; -import org.jboss.forge.common.projects.permissions.NullPermissionsChecker; -import org.jboss.forge.common.projects.permissions.PermissionsChecker; + import org.jboss.forge.common.XmlTools; import org.jboss.forge.common.projects.AbstractDescriptor; import org.jboss.portal.common.context.DelegateContext; @@ -43,68 +36,47 @@ import org.w3c.dom.Node; import org.w3c.dom.NodeList; -//import org.jboss.forge.status.plugins.InvalidPluginPropertiesException; -import org.jboss.forge.status.plugins.InvalidPluginPropertiesException; -import org.jboss.forge.status.plugins.Plugin; -import org.jboss.forge.status.plugins.ScorePlugin; -import org.jboss.forge.status.plugins.StatusPlugin; -import org.jboss.logging.Logger; /** * @author Pawel Wrzeszcz */ public class Status extends AbstractDescriptor { - + private final static String PLUGIN_ELEMENT = "plugin"; - private final static String PLUGIN_ID_ELEMENT = "id"; - private final static String PLUGIN_NAME_ELEMENT = "name"; - private final static String PLUGIN_CLASS_ELEMENT = "class"; - private final static String PLUGIN_WEIGHT_ELEMENT = "weight"; - private final static String PLUGIN_PROPERTIES_ELEMENT = "properties"; - private static final String MAIN_PAGE_COLLUMNS_TAG = "main"; - private static final String PROJECT_PAGE_COLLUMNS_TAG = "project"; + //private static final String PROJECT_PAGE_COLLUMNS_TAG = "project"; - private String portalName; - private Projects projects; private Columns mainPageColumns; - private Map<String, Plugin> statusPlugins; - private Map<String, Plugin> scorePlugins; - private Map<String, Plugin> allPlugins; + private Plugins plugins; - private Logger log; - - private HashSet<String> pluginsElements; - Status(String portalName, Node statusRoot, Node statusPluginsRoot, Node scorePluginsRoot) { - this.portalName = portalName; - - log = Logger.getLogger(this.getClass()); - initPluginElements(); + System.out.println("# 1 #"); // Get the projects projects = ProjectsHelper.getProjects(portalName); // Get the status plugins Set<Node> statusPluginsNodes = getPluginsNodes(statusPluginsRoot); - statusPlugins = getPlugins(statusPluginsNodes, false); + plugins = new Plugins(statusPluginsNodes, projects, false); - // Get the score plugins + System.out.println("# 2 #"); + + // Add the score plugins Set<Node> scorePluginsNodes = getPluginsNodes(scorePluginsRoot); - scorePlugins = getPlugins(scorePluginsNodes, true); + //plugins.putAll(scorePluginsNodes, true); - allPlugins = new HashMap<String, Plugin>(); - allPlugins.putAll(statusPlugins); - allPlugins.putAll(scorePlugins); + System.out.println("# 3 #"); // Get columns to display Node pageRoot = XmlTools.getFirstNodeWithName(statusRoot, MAIN_PAGE_COLLUMNS_TAG); - mainPageColumns = new Columns(pageRoot, allPlugins, projects); + mainPageColumns = new Columns(pageRoot, plugins, projects); + + System.out.println("# 4 #"); } private Set<Node> getPluginsNodes(Node pluginsRoot) { @@ -116,17 +88,6 @@ return pluginsNodes; } - private void initPluginElements() { - - pluginsElements = new HashSet<String>(); - - pluginsElements.add(PLUGIN_ID_ELEMENT); - pluginsElements.add(PLUGIN_NAME_ELEMENT); - pluginsElements.add(PLUGIN_CLASS_ELEMENT); - pluginsElements.add(PLUGIN_WEIGHT_ELEMENT); - pluginsElements.add(PLUGIN_PROPERTIES_ELEMENT); - } - /** * Fills the given context with podcast information. * @@ -135,68 +96,7 @@ public void fillContext(DelegateContext context) { mainPageColumns.fillContext(context); } - - private Map<String,Plugin> getPlugins(Set<Node> pluginsNodes, boolean scorePlugins) { - Map<String,Plugin> plugins = new HashMap<String,Plugin>(); - - for (Iterator iter = pluginsNodes.iterator(); iter.hasNext();) { - Node pluginNode = (Node) iter.next(); - - Plugin plugin = getPlugin(pluginNode, scorePlugins); - - if (plugin != null) { - plugins.put(plugin.getId(), plugin); - } - } - - return plugins; - } - private Plugin getPlugin(Node pluginNode, boolean scorePlugin) { - - // Get plugin info from pluginNode - - Map<String,Node> pluginProperties = getChildNodesMap(pluginNode, pluginsElements); - String pluginClassString = XmlTools.unmarshallText(pluginProperties.get(PLUGIN_CLASS_ELEMENT)); - String pluginName = XmlTools.unmarshallText(pluginProperties.get(PLUGIN_NAME_ELEMENT)); - String pluginId = XmlTools.unmarshallText(pluginProperties.get(PLUGIN_ID_ELEMENT)); - - // Get plugin class - Class pluginClass = null; - try { - pluginClass = Class.forName(pluginClassString); - } catch (ClassNotFoundException e) { - log.error("Plugin class not found: " + pluginClassString); - return null; - } - - Node pluginSpecificPropertiesNode = pluginProperties.get(PLUGIN_PROPERTIES_ELEMENT); - - // Get plugin instance; - Plugin plugin = null; - try { - plugin = (Plugin) pluginClass.newInstance(); - - if (scorePlugin) { - ((ScorePlugin) plugin).init(pluginName, pluginId, statusPlugins.values(), pluginSpecificPropertiesNode); - } else { /* score plugin */ - ((StatusPlugin) plugin).init(pluginName, pluginId, projects, pluginSpecificPropertiesNode); - } - - } catch (InvalidPluginPropertiesException e) { - log.warn(e); - return null; - } - catch (Exception e) { - log.error("Plugin class: " + pluginClassString + ". Instantination failed.", e); - return null; - } - - System.out.println("[Status] Added plugin " + pluginClassString + "."); - - return plugin; - } - /** * For the given Node, computes Set of it's child Nodes. * Only child Nodes with names included in <code>nodesNames</code> Set @@ -221,24 +121,4 @@ return ret; } - - /** - * Similar to <code>getChildNodesSet(Node,Set)</code>. - * Map binds child Nodes names with appropriate Nodes. - */ - private Map<String,Node> getChildNodesMap(Node root, Set<String> nodesNames) { - HashMap<String,Node> ret = new HashMap<String,Node>(); - NodeList list = root.getChildNodes(); - - for (int i = 0; i < list.getLength(); i++) { - Node n = list.item(i); - if ((n.getNodeType() == Node.ELEMENT_NODE) - && (nodesNames.contains(n.getNodeName()))) { - ret.put(n.getNodeName(),n); - } - } - - return ret; - } - } Modified: trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/StatusDescriptor.java =================================================================== --- trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/StatusDescriptor.java 2005-12-17 15:21:32 UTC (rev 1833) +++ trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/StatusDescriptor.java 2005-12-17 16:35:30 UTC (rev 1834) @@ -24,7 +24,6 @@ import java.io.IOException; import org.apache.xerces.parsers.DOMParser; -import org.jboss.forge.common.XmlTools; import org.jboss.portal.common.context.DelegateContext; import org.jboss.portlet.JBossRenderRequest; Deleted: trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/Plugin.java =================================================================== --- trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/Plugin.java 2005-12-17 15:21:32 UTC (rev 1833) +++ trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/Plugin.java 2005-12-17 16:35:30 UTC (rev 1834) @@ -1,48 +0,0 @@ -/* - * JBoss, Home of Professional Open Source - * Copyright 2005, JBoss Inc., and individual contributors as indicated - * by the @authors tag. See the copyright.txt 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.forge.status.plugins; - -import org.w3c.dom.Node; - -/** -* @author Pawel Wrzeszcz -*/ - -public abstract class Plugin { - - protected Node propertiesNode; - - protected String name; - protected String id; - - public void init(String name, String id, Node propertiesNode) throws InvalidPluginPropertiesException { - this.propertiesNode = propertiesNode; - this.name = name; - this.id = id; - } - - public abstract int getValue(String projectId); - - public String getId() { return id; }; - public String getName() { return name; }; -} Modified: trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/ScorePlugin.java =================================================================== --- trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/ScorePlugin.java 2005-12-17 15:21:32 UTC (rev 1833) +++ trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/ScorePlugin.java 2005-12-17 16:35:30 UTC (rev 1834) @@ -24,6 +24,7 @@ import java.util.Collection; +import org.jboss.forge.status.Plugin; import org.w3c.dom.Node; /** Modified: trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/StatusPlugin.java =================================================================== --- trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/StatusPlugin.java 2005-12-17 15:21:32 UTC (rev 1833) +++ trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/StatusPlugin.java 2005-12-17 16:35:30 UTC (rev 1834) @@ -23,6 +23,7 @@ package org.jboss.forge.status.plugins; import org.jboss.forge.common.projects.Projects; +import org.jboss.forge.status.Plugin; import org.w3c.dom.Node; Modified: trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/WeightedScorePlugin.java =================================================================== --- trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/WeightedScorePlugin.java 2005-12-17 15:21:32 UTC (rev 1833) +++ trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/WeightedScorePlugin.java 2005-12-17 16:35:30 UTC (rev 1834) @@ -24,6 +24,8 @@ import java.util.Iterator; +import org.jboss.forge.status.Plugin; + /** * @author Pawel Wrzeszcz */ |