From: <jbo...@li...> - 2005-12-06 00:26:49
|
Author: wrzep Date: 2005-12-05 19:26:42 -0500 (Mon, 05 Dec 2005) New Revision: 1703 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/plugins/StatusPlugin.java trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/svn/SvnStatusPlugin.java Log: improved plugin instantination (passing plugin-specific properties to plugin, for svn plugin- passing service adress) http://jira.jboss.com/jira/browse/JBLAB-415 Pawel 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-06 00:00:41 UTC (rev 1702) +++ trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/Status.java 2005-12-06 00:26:42 UTC (rev 1703) @@ -50,12 +50,13 @@ */ public class Status extends AbstractDescriptor { - private final static String PLUGIN_ELEMENT = "plugin"; + 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_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 String portalName; private ScoreAlgorithmFactory scoreAlgorithm; @@ -64,12 +65,15 @@ private List<StatusPlugin> plugins; private Logger log; + + private HashSet<String> pluginsElements; Status(String portalName, Node pluginsRoot, ScoreAlgorithmFactory scoreAlgorithm) { this.portalName = portalName; this.scoreAlgorithm = scoreAlgorithm; log = Logger.getLogger(this.getClass()); + initPluginElements(); // Get the projects projects = ProjectsHelper.getProjects(portalName); @@ -81,8 +85,18 @@ plugins = getPlugins(pluginsNodes); } + private void initPluginElements() { + pluginsElements = new HashSet<String>(); + + pluginsElements.add(PLUGIN_ID_ELEMENT); //TODO currently id is NOT used!! + 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. * @@ -146,51 +160,73 @@ } } - List<StatusPlugin> getPlugins(Set<Node> pluginsNodes) { + private List<StatusPlugin> getPlugins(Set<Node> pluginsNodes) { ArrayList<StatusPlugin> plugins = new ArrayList<StatusPlugin>(); - - HashSet<String> pluginsElements = new HashSet<String>(); - pluginsElements.add(PLUGIN_ID_ELEMENT); - pluginsElements.add(PLUGIN_NAME_ELEMENT); - pluginsElements.add(PLUGIN_CLASS_ELEMENT); - pluginsElements.add(PLUGIN_WEIGHT_ELEMENT); - + for (Iterator iter = pluginsNodes.iterator(); iter.hasNext();) { Node pluginNode = (Node) iter.next(); - Map<String,Node> pluginProperties = getChildNodesMap(pluginNode, pluginsElements); + StatusPlugin plugin = getPlugin(pluginNode); - // Get plugin name - String pluginClassString = XmlTools.unmarshallText(pluginProperties.get("class")); - System.out.println("pluginClassString " + pluginClassString); - - // Get plugin class - - Class pluginClass = null; - try { - pluginClass = Class.forName(pluginClassString); - } catch (ClassNotFoundException e) { - log.error("Plugin class not found: " + pluginClassString); - continue; - } - - // Get plugin instance - StatusPlugin plugin = null; - try { - plugin = (StatusPlugin) pluginClass.newInstance(); - } catch (Exception e) { - log.error("Plugin class: " + pluginClassString + ". Instantination failed.", e); - continue; - } - - // Initialize plugin and add it to the plugins set - plugin.init(projects); - plugins.add(plugin); + if (plugin != null) { + plugins.add(plugin); + } } return plugins; } + private StatusPlugin getPlugin(Node pluginNode) { + Map<String,Node> pluginProperties = getChildNodesMap(pluginNode, pluginsElements); + + // Get plugin name + String pluginClassString = XmlTools.unmarshallText(pluginProperties.get("class")); + System.out.println("pluginClassString " + pluginClassString); + + // Get plugin class + Class pluginClass = null; + try { + pluginClass = Class.forName(pluginClassString); + } catch (ClassNotFoundException e) { + log.error("Plugin class not found: " + pluginClassString); + return null; + } + + // Get plugin instance + StatusPlugin plugin = null; + try { + plugin = (StatusPlugin) pluginClass.newInstance(); + } catch (Exception e) { + log.error("Plugin class: " + pluginClassString + ". Instantination failed.", e); + return null; + } + + // Get plugin properies node + Node pluginSpecificPropertiesNode = pluginProperties.get("properties"); + Map<String,String> pluginSpecificPropertiesMap = getChildNodesStringMap(pluginSpecificPropertiesNode); + + // Initialize plugin + plugin.init(projects, pluginSpecificPropertiesMap); + + return plugin; + } + + + + private Map<String,String> getChildNodesStringMap(Node root) { + HashMap<String,String> ret = new HashMap<String,String>(); + NodeList list = root.getChildNodes(); + + for (int i = 0; i < list.getLength(); i++) { + Node n = list.item(i); + if (n.getNodeType() == Node.ELEMENT_NODE) { + ret.put(n.getNodeName(),XmlTools.unmarshallText(n)); + } + } + + return ret; + } + private int calculateScore(String projectId) { return scoreAlgorithm.calculateScore(projectId, plugins); } 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-06 00:00:41 UTC (rev 1702) +++ trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/StatusPlugin.java 2005-12-06 00:26:42 UTC (rev 1703) @@ -22,6 +22,8 @@ package org.jboss.forge.status.plugins; +import java.util.Map; + import org.jboss.forge.common.projects.Projects; /** @@ -31,9 +33,11 @@ public abstract class StatusPlugin { protected Projects projects; + protected Map properties; - public void init(Projects projects) { + public void init(Projects projects, Map<String,String> properties) { this.projects = projects; + this.properties = properties; } public abstract String getId(); Modified: trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/svn/SvnStatusPlugin.java =================================================================== --- trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/svn/SvnStatusPlugin.java 2005-12-06 00:00:41 UTC (rev 1702) +++ trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/svn/SvnStatusPlugin.java 2005-12-06 00:26:42 UTC (rev 1703) @@ -22,6 +22,7 @@ package org.jboss.forge.status.plugins.svn; +import org.jboss.forge.common.projects.Projects; import org.jboss.forge.status.plugins.StatusPlugin; import java.net.MalformedURLException; @@ -47,9 +48,8 @@ private Logger log; - private final static String KOSMOS_SVN_SERVICE_URL = - "http://localhost:8080/kosmos-server/kosmos-services/svn-service"; - //TODO shoud be parameter in xml config file + private String serviceURL; + //"http://localhost:8080/kosmos-server/kosmos-services/svn-service"; public SvnStatusPlugin() { super(); @@ -58,6 +58,12 @@ log = Logger.getLogger(this.getClass()); } + public void init(Projects projects, Map<String,String> properties) { + super.init(projects,properties); + serviceURL = properties.get("svn-service"); + System.out.println("service-url " + serviceURL); + } + protected abstract int getPluginSpecyficValue(Map projectMap); protected abstract int getPluginSpecyficDefaultValue(); @@ -78,15 +84,21 @@ SvnService service; try { - service = (SvnService) factory.create(SvnService.class, - KOSMOS_SVN_SERVICE_URL); + service = (SvnService) factory.create(SvnService.class, serviceURL); } catch (MalformedURLException e) { - log.error("Can not connect to kosmos svn service: " + KOSMOS_SVN_SERVICE_URL); + log.error("Can not connect to kosmos svn service: " + serviceURL); return null; } // Get repository map - List repositories = service.getRepositories(repoURL); + List repositories = null; + try { + repositories = service.getRepositories(repoURL); + } catch (Exception e) { + log.error("Can not analyze repo: " + repoURL, e); + return null; + } + repositoryMap = (Map) repositories.get(0); //printRepo(repositoryMap); |