From: <jbo...@li...> - 2005-11-18 19:13:58
|
Author: wrzep Date: 2005-11-18 14:13:47 -0500 (Fri, 18 Nov 2005) New Revision: 1594 Added: trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/OneStatusPlugin.java trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/StatusPlugin.java Modified: trunk/forge/portal-extensions/forge-status/project.xml 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/StatusTools.java Log: plugins interface Pawel Modified: trunk/forge/portal-extensions/forge-status/project.xml =================================================================== --- trunk/forge/portal-extensions/forge-status/project.xml 2005-11-18 19:12:56 UTC (rev 1593) +++ trunk/forge/portal-extensions/forge-status/project.xml 2005-11-18 19:13:47 UTC (rev 1594) @@ -51,5 +51,16 @@ <war.bundle>true</war.bundle> </properties> </dependency> + + <dependency> + <groupId>kosmos</groupId> + <artifactId>kosmos</artifactId> + <jar>kosmos-server.jar</jar> + <version>1.0</version> + <properties> + <war.bundle>true</war.bundle> + </properties> + </dependency> + </dependencies> </project> Added: trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/OneStatusPlugin.java =================================================================== --- trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/OneStatusPlugin.java 2005-11-18 19:12:56 UTC (rev 1593) +++ trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/OneStatusPlugin.java 2005-11-18 19:13:47 UTC (rev 1594) @@ -0,0 +1,37 @@ +/* + * 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; + +/** +* @author Pawel Wrzeszcz +*/ + +public class OneStatusPlugin implements StatusPlugin { + + public OneStatusPlugin() {}; + + public String getId() { return "one"; }; + public String getName() { return "One"; }; + public String getValue(String projectId) { return "one :-)";} ; + +} 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-11-18 19:12:56 UTC (rev 1593) +++ trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/Status.java 2005-11-18 19:13:47 UTC (rev 1594) @@ -23,10 +23,13 @@ package org.jboss.forge.status; 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.List; +import java.util.ArrayList; import org.jboss.forge.common.XmlTools; import org.jboss.forge.common.projects.AbstractDescriptor; @@ -45,38 +48,46 @@ import org.w3c.dom.NodeList; import org.w3c.dom.NamedNodeMap; +import hu.midori.kosmos.server.jira.JiraServiceImpl; +import hu.midori.kosmos.model.JiraProject; + /** * @author Pawel Wrzeszcz */ public class Status extends AbstractDescriptor { private final static String PROJECT_ELEMENT = "project"; + private final static String PLUGIN_ELEMENT = "plugin"; private String portalName; - /** - * <code>allItemsArr</code> - Array if ItemIF objects, containing items from all feeds. - */ - private HashSet<String> projects; + private Set<String> projects; + private List<StatusPlugin> plugins; - Status(String portalName, Node root) { + Status(String portalName, Node projectsRoot, Node pluginsRoot) { this.portalName = portalName; - // Get the projects nodes + // Get the projects projects = new HashSet<String>(); + projects = getStringsFromNode(projectsRoot, PROJECT_ELEMENT); - HashSet<String> projectNodes = new HashSet(); - projectNodes.add(PROJECT_ELEMENT); - - Set<Node> prjNodes; - prjNodes = getChildNodesSet(root, projectNodes); - - for (Iterator iter = prjNodes.iterator(); iter.hasNext();) { - Node n = (Node) iter.next(); - projects.add(XmlTools.unmarshallText(n)); - } + // Get the plugins + Set<String> pluginsNames = getStringsFromNode(pluginsRoot, PLUGIN_ELEMENT); + plugins = getPlugins(pluginsNames); } + // Get the projects from kosmo server + + JiraServiceImpl kosmosService = new JiraServiceImpl(); + + List<JiraProject> jiraProjects = kosmosService.getProjects("http://jira.jboss.com"); + /* + for (Iterator iter = jiraProjects.iterator(); iter.hasNext();) { + JiraProject project = (JiraProject) iter.next(); + projects.add(project.getName()); + } + */ + /** * Fills the given context with podcast information. * @@ -89,12 +100,40 @@ String projectName = (String) iter.next(); DelegateContext projectContext = context.next("project"); - + projectContext.put("name", projectName); projectContext.put("position", i); + fillProjectContext(projectContext, projectName); } } + + private void fillProjectContext(DelegateContext projectContext, String projectId) { + for (Iterator iter = plugins.iterator(); iter.hasNext();) { + StatusPlugin plugin = (StatusPlugin) iter.next(); + + projectContext.put(plugin.getId(), plugin.getValue(projectId)); + } + } + List<StatusPlugin> getPlugins(Set<String> pluginsNames) { + ArrayList<StatusPlugin> p = new ArrayList<StatusPlugin>(); + + for (Iterator iter = pluginsNames.iterator(); iter.hasNext();) { + String pluginName = (String) iter.next(); + + try { + Class pluginClass = Class.forName(pluginName); + p.add((StatusPlugin) pluginClass.newInstance()); + } catch (Exception e) { + e.printStackTrace(); + } + } + + + p.add(new OneStatusPlugin()); + return p; + } + /** * For the given Node, computes Set of it's child Nodes. @@ -106,7 +145,7 @@ * @return Set containing <code>root</code>'s child Nodes, * but only those with names included in <code>nodeNames</code> Set */ - private Set getChildNodesSet(Node root, Set<String> nodesNames) { + private Set<Node> getChildNodesSet(Node root, Set<String> nodesNames) { HashSet ret = new HashSet<Node>(); NodeList list = root.getChildNodes(); @@ -125,7 +164,7 @@ * Similar to <code>getChildNodesSet(Node,Set)</code>. * Map binds child Nodes names with appropriate Nodes. */ - private Map getChildNodesMap(Node root, Set<String> nodesNames) { + private Map<String,Node> getChildNodesMap(Node root, Set<String> nodesNames) { HashMap ret = new HashMap<String,Node>(); NodeList list = root.getChildNodes(); @@ -140,4 +179,19 @@ return ret; } + private Set<String> getStringsFromNode(Node root, String element) { + HashSet<String> s = new HashSet<String>(); + + HashSet<String> nodesNames = new HashSet<String>(); + nodesNames.add(element); + + Set<Node> nodes = getChildNodesSet(root, nodesNames); + + for (Iterator iter = nodes.iterator(); iter.hasNext();) { + Node n = (Node) iter.next(); + s.add(XmlTools.unmarshallText(n)); + } + + return s; + } } 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-11-18 19:12:56 UTC (rev 1593) +++ trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/StatusDescriptor.java 2005-11-18 19:13:47 UTC (rev 1594) @@ -31,10 +31,14 @@ import org.jboss.forge.common.projects.ProjectsHelper; import org.jboss.portal.common.context.DelegateContext; import org.jboss.portlet.JBossRenderRequest; + import org.jboss.shotoku.ContentManager; +import org.jboss.shotoku.exceptions.ResourceDoesNotExist; + import org.w3c.dom.Document; import org.w3c.dom.Node; import org.w3c.dom.NodeList; + import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.jboss.logging.Logger; @@ -52,17 +56,16 @@ public StatusDescriptor(String portalName, ContentManager cm) { try { - - DOMParser parser = new DOMParser(); - parser.parse(new InputSource(cm.getNode(StatusTools - .getPrjXmlCmPath(portalName)).getContentInputStream())); - - Node root = parser.getDocument().getDocumentElement(); + String projectsPath = StatusTools.getPrjXmlCmPath(portalName); + Node projectsRoot = getRoot(cm, projectsPath); + String pluginsPath = StatusTools.getXmlCmPath(portalName,"plugins.xml"); + Node pluginsRoot = getRoot(cm, pluginsPath); + + /* if ((root.getNodeType() == Node.ELEMENT_NODE) - && (root.getNodeName().equals("projects"))) { - status = new Status(portalName, root); - } + && (root.getNodeName().equals("projects"))) {}*/ + status = new Status(portalName, projectsRoot, pluginsRoot); fillContext(); @@ -79,4 +82,12 @@ public DelegateContext getContext(JBossRenderRequest request) { return context; } + + private Node getRoot(ContentManager cm, String path) throws IOException, SAXException, ResourceDoesNotExist { + DOMParser parser = new DOMParser(); + parser.parse(new InputSource(cm.getNode(path).getContentInputStream())); + + Node root = parser.getDocument().getDocumentElement(); + return root; + } } Added: trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/StatusPlugin.java =================================================================== --- trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/StatusPlugin.java 2005-11-18 19:12:56 UTC (rev 1593) +++ trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/StatusPlugin.java 2005-11-18 19:13:47 UTC (rev 1594) @@ -0,0 +1,35 @@ +/* + * 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; + +/** +* @author Pawel Wrzeszcz +*/ + +public abstract interface StatusPlugin { + + public String getId(); + public String getName(); + public String getValue(String projectId); + +} Modified: trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/StatusTools.java =================================================================== --- trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/StatusTools.java 2005-11-18 19:12:56 UTC (rev 1593) +++ trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/StatusTools.java 2005-11-18 19:13:47 UTC (rev 1594) @@ -37,6 +37,10 @@ return portalName + "/" + MEMBERS_DIR + "/" + PROJECTS_XML; } + public static String getXmlCmPath(String portalName, String filename) { + return portalName + "/" + STATUS_DIR + "/" + filename; + } + /** * Path to the file displaying the podcast feeds. */ |