|
From: <jbo...@li...> - 2005-09-29 00:16:27
|
Author: dam...@jb...
Date: 2005-09-28 20:16:23 -0400 (Wed, 28 Sep 2005)
New Revision: 1237
Added:
branches/forge/damon/portal-extensions/primates/src/java/org/jbosslabs/portlets/primates/Primate.java
branches/forge/damon/portal-extensions/primates/src/java/org/jbosslabs/portlets/primates/Primates.java
branches/forge/damon/portal-extensions/primates/src/java/org/jbosslabs/portlets/primates/PrimatesDescriptor.java
branches/forge/damon/portal-extensions/primates/src/java/org/jbosslabs/portlets/primates/PrimatesNodeWatcher.java
branches/forge/damon/portal-extensions/primates/src/java/org/jbosslabs/portlets/primates/PrimatesTools.java
Modified:
branches/forge/damon/portal-extensions/primates/src/java/org/jbosslabs/portlets/primates/PrimatesPortlet.java
Log:
Developing Primates.
Added: branches/forge/damon/portal-extensions/primates/src/java/org/jbosslabs/portlets/primates/Primate.java
===================================================================
--- branches/forge/damon/portal-extensions/primates/src/java/org/jbosslabs/portlets/primates/Primate.java 2005-09-28 21:21:08 UTC (rev 1236)
+++ branches/forge/damon/portal-extensions/primates/src/java/org/jbosslabs/portlets/primates/Primate.java 2005-09-29 00:16:23 UTC (rev 1237)
@@ -0,0 +1,83 @@
+package org.jbosslabs.portlets.primates;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.jboss.forge.common.ForgeHelper;
+import org.jboss.forge.common.XmlTools;
+import org.jboss.forge.common.projects.AbstractDescriptor;
+import org.jboss.forge.common.projects.Projects;
+import org.jboss.forge.common.projects.ProjectsHelper;
+import org.jboss.forge.common.projects.permissions.PermissionsChecker;
+import org.jboss.forge.common.projects.permissions.RenderRequestPermissionsChecker;
+import org.jboss.portal.common.context.DelegateContext;
+import org.jboss.portal.core.model.User;
+import org.jboss.portlet.JBossRenderRequest;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+/**
+ * @author Damon Sicore
+ * @author adamw
+ * A class representing a primate.
+ */
+public class Primate extends AbstractDescriptor {
+ final static String NAME_ELEMENT = "link";
+ final static String TITLE_ELEMENT = "title";
+ final static String PROJECTS_ELEMENT = "projects";
+ final static String PROJECT_ELEMENT = "project";
+ final static String MUGSHOT_ELEMENT = "mugshot";
+ final static String STATUS_ELEMENT = "status";
+ final static String BIO_ELEMENT = "bio";
+
+ /**
+ * <code>name</code> - The name this filthy primate calls itself.
+ */
+ private String name;
+ /**
+ * <code>title</code> - A disgustingly self-important title.
+ */
+ private String title;
+ /**
+ * <code>mugshot</code> - You will blow lunch when you see this.
+ */
+ private String mugshot;
+ /**
+ * <code>status</code> - Whether or not this monkey is slacking.
+ */
+ private String status;
+ /**
+ * <code>bio</code> - More self-promotion and hot air.
+ */
+ private String bio;
+
+ private Set<String> allProjects;
+
+
+
+ public Primate(Node root) {
+
+ NodeList nodes = root.getChildNodes();
+
+ for (int i = 0; i < nodes.getLength(); i++) {
+ Node n = nodes.item(i);
+
+ if (n.getNodeType() == Node.ELEMENT_NODE) {
+ String nodeName = n.getNodeName();
+ if (NAME_ELEMENT.equals(nodeName)) {
+ name = XmlTools.unmarshallText(n);
+ } else if (TITLE_ELEMENT.equals(nodeName)) {
+ title = XmlTools.unmarshallText(n);
+ } else if (PROJECT_ELEMENT.equals(nodeName)) {
+ allProjects.add(XmlTools.unmarshallText(n));
+ } else if (MUGSHOT_ELEMENT.equals(nodeName)) {
+ mugshot = XmlTools.unmarshallText(n);
+ } else if (STATUS_ELEMENT.equals(nodeName)) {
+ status = XmlTools.unmarshallText(n);
+ } else if (BIO_ELEMENT.equals(nodeName)) {
+ bio = XmlTools.unmarshallText(n);
+ }
+ }
+ }
+ }
+}
Added: branches/forge/damon/portal-extensions/primates/src/java/org/jbosslabs/portlets/primates/Primates.java
===================================================================
--- branches/forge/damon/portal-extensions/primates/src/java/org/jbosslabs/portlets/primates/Primates.java 2005-09-28 21:21:08 UTC (rev 1236)
+++ branches/forge/damon/portal-extensions/primates/src/java/org/jbosslabs/portlets/primates/Primates.java 2005-09-29 00:16:23 UTC (rev 1237)
@@ -0,0 +1,41 @@
+package org.jbosslabs.portlets.primates;
+
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Set;
+
+import org.jboss.portal.common.context.DelegateContext;
+import org.jboss.portlet.JBossRenderRequest;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+/**
+ * @author Damon Sicore
+ * @author adamw
+ * A class holding other primates.
+ */
+public class Primates {
+ final static String PRIMATE_ELEMENT = "primate";
+
+ /**
+ * <code>primates</code> - a list of primates.
+ */
+ private List<Primate> primates;
+
+ public Primates(Node root) {
+ primates = new ArrayList<Primate>();
+
+ NodeList nodes = root.getChildNodes();
+
+ for (int i = 0; i < nodes.getLength(); i++) {
+ Node n = nodes.item(i);
+
+ if ((n.getNodeType() == Node.ELEMENT_NODE)
+ && (n.getNodeName().equals(PRIMATE_ELEMENT))) {
+ // Parsing and adding a new primate.
+ primates.add(new Primate(n));
+ }
+ }
+ }
+
+}
Added: branches/forge/damon/portal-extensions/primates/src/java/org/jbosslabs/portlets/primates/PrimatesDescriptor.java
===================================================================
--- branches/forge/damon/portal-extensions/primates/src/java/org/jbosslabs/portlets/primates/PrimatesDescriptor.java 2005-09-28 21:21:08 UTC (rev 1236)
+++ branches/forge/damon/portal-extensions/primates/src/java/org/jbosslabs/portlets/primates/PrimatesDescriptor.java 2005-09-29 00:16:23 UTC (rev 1237)
@@ -0,0 +1,51 @@
+package org.jbosslabs.portlets.primates;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.apache.xerces.parsers.DOMParser;
+import org.jboss.forge.common.ForgeHelper;
+import org.jboss.forge.common.content.ContentManager;
+import org.jboss.forge.common.projects.ProjectsHelper;
+import org.jboss.portal.common.context.DelegateContext;
+import org.jboss.portlet.JBossRenderRequest;
+import org.w3c.dom.Document;
+import org.w3c.dom.Node;
+import org.xml.sax.InputSource;
+
+/**
+ * @author Damon Sicore
+ * @author adamw
+ * A class which handles xml parsing of the primates.xml
+ */
+public class PrimatesDescriptor {
+ private Primates primates;
+
+ public PrimatesDescriptor(String portalName, ContentManager cm) {
+ try {
+ // Parsing the xml navigation descriptor.
+ DOMParser parser = new DOMParser();
+ parser.parse(new InputSource(cm.getInputStream(PrimatesTools.getXmlCmPath(portalName))));
+ Document doc = parser.getDocument();
+ // Looking for the root menu element.
+ Node root = doc.getDocumentElement();
+ if ((root.getNodeType() == Node.ELEMENT_NODE)
+ && (root.getNodeName().equals(PrimatesTools.PRIMATES_ELEMENT))) {
+ // Found a menu element, parsing and ending the loop.
+ primates = new Primates(root);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ public DelegateContext getContext(JBossRenderRequest request) {
+ String requestedLink = null;
+
+ // Creating a context specific to this request.
+ DelegateContext context = new DelegateContext();
+ return context;
+ }
+
+
+}
Added: branches/forge/damon/portal-extensions/primates/src/java/org/jbosslabs/portlets/primates/PrimatesNodeWatcher.java
===================================================================
--- branches/forge/damon/portal-extensions/primates/src/java/org/jbosslabs/portlets/primates/PrimatesNodeWatcher.java 2005-09-28 21:21:08 UTC (rev 1236)
+++ branches/forge/damon/portal-extensions/primates/src/java/org/jbosslabs/portlets/primates/PrimatesNodeWatcher.java 2005-09-29 00:16:23 UTC (rev 1237)
@@ -0,0 +1,34 @@
+package org.jbosslabs.portlets.primates;
+
+import org.jboss.forge.common.content.ContentManager;
+import org.jboss.forge.common.service.NodeWatcher;
+import org.jboss.forge.common.service.ResourceWatcher;
+
+public class PrimatesNodeWatcher implements NodeWatcher {
+ private ResourceWatcher rw;
+ private ContentManager cm;
+
+ public PrimatesNodeWatcher(ContentManager cm) {
+ this.cm = cm;
+ }
+
+ private PrimatesDescriptor getDesc(String portalName) {
+ PrimatesDescriptor desc = new PrimatesDescriptor(portalName, cm);
+
+ rw = new ResourceWatcher(cm);
+ rw.watchResource(PrimatesTools.getXmlCmPath(portalName));
+
+ return desc;
+ }
+
+ public Object init(String portalName) {
+ return getDesc(portalName);
+ }
+
+ public Object nodeUpdate(String portalName, Object currentValue) {
+ if ((currentValue == null) || (rw.checkResources()))
+ return getDesc(portalName);
+ else
+ return null;
+ }
+}
Modified: branches/forge/damon/portal-extensions/primates/src/java/org/jbosslabs/portlets/primates/PrimatesPortlet.java
===================================================================
--- branches/forge/damon/portal-extensions/primates/src/java/org/jbosslabs/portlets/primates/PrimatesPortlet.java 2005-09-28 21:21:08 UTC (rev 1236)
+++ branches/forge/damon/portal-extensions/primates/src/java/org/jbosslabs/portlets/primates/PrimatesPortlet.java 2005-09-29 00:16:23 UTC (rev 1237)
@@ -1,77 +1,39 @@
-/*****************************************
- * *
- * JBoss Portal: The OpenSource Portal *
- * *
- * Distributable under LGPL license. *
- * See terms of license at gnu.org. *
- * *
- *****************************************/
package org.jbosslabs.portlets.primates;
-import org.jboss.portlet.JBossRenderRequest;
-import org.jboss.portlet.JBossRenderResponse;
-import org.jboss.forge.common.ForgeHelper;
-import org.jboss.forge.common.portlet.ContentPortlet;
-import org.jboss.portal.core.servlet.jsp.PortalJsp;
-import org.jboss.portal.common.context.DelegateContext;
import java.io.IOException;
-import javax.portlet.*;
-public class PrimatesPortlet extends ContentPortlet {
- public PrimatesPortlet() {
- super("Primates", "primates");
- }
+import javax.portlet.PortletException;
+import javax.portlet.PortletRequestDispatcher;
- protected String getCacheKey(JBossRenderRequest rReq, String portalName) {
- return portalName + "primates";
- }
+import org.jboss.forge.common.ForgeHelper;
+import org.jboss.forge.common.projects.ProjectsHelper;
+import org.jboss.portal.common.context.DelegateContext;
+import org.jboss.portal.core.servlet.jsp.PortalJsp;
+import org.jboss.portlet.JBossPortlet;
+import org.jboss.portlet.JBossRenderRequest;
+import org.jboss.portlet.JBossRenderResponse;
- protected String[] getWatchedFiles(JBossRenderRequest rReq) {
- String []empty = new String [0];
- return empty;
- }
+/**
+ * @author adamw
+ * Primates portlet.
+ */
+public class PrimatesPortlet extends JBossPortlet {
+ public void doView(JBossRenderRequest request, JBossRenderResponse response)
+ throws IOException, PortletException {
+ response.setContentType("text/html");
- protected Object generateContent(JBossRenderRequest rReq, String portalName)
- throws IOException {
- String content = readFile(portalName+"/primates/primates.txt");
- System.out.println("wuffie.txt content:\n "+ content);
- String[] data = parse(content);
- DelegateContext root = new DelegateContext();
- for (int j = 0; j < data.length/2; j++) {
- DelegateContext menuContext = root.next("menuentry");
- menuContext.put("url", data[j * 2]);//adds link of the image
- //System.out.println("added to navigation the name "+ data[j * 2]);
- menuContext.put("name", data[j * 2 + 1]);//adds name of image
- }
- return root;
- }
-
- public void prepareRequest(JBossRenderRequest rReq) {
- ForgeHelper.prepareRequest(rReq);
- }
+ String portalName = ForgeHelper.getPortalName(request);
- protected void displayContent(JBossRenderRequest rReq,
- JBossRenderResponse rRes, WindowState ws, Object content)
- throws PortletException, IOException {
- String fileName = "/WEB-INF/jsp/normal.jsp";
+ ProjectsHelper.prepareRequest(request);
- rRes.setContentType("text/html");
- rReq.setAttribute(PortalJsp.CTX_REQUEST, content);
- writeJsp(rReq, rRes, fileName);
- }
+ // Getting the primates context.
+ DelegateContext navContext = PrimatesTools.getDesc(portalName).getContext(request);
- protected static String[] parse(String target) {
- String[] cnt;
- String[] separated;
- cnt = target.split(";");
- separated = new String[cnt.length * 2];
- for (int i = 0; i < cnt.length; i++) {
- separated[i * 2] = cnt[i].split(",")[0].trim();//split to image name and
- // trim whitespaces
- separated[i * 2 + 1] = cnt[i].split(",")[1].trim();//split to
- // link and trim whitespaces
- }
+ // Displaying.
+ request.setAttribute(PortalJsp.CTX_REQUEST, navContext);
- return separated;
- }
+ PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher(
+ ForgeHelper.createRepoAccessPath(portalName, PrimatesTools.getJspCmPath()));
+ rd.include(request, response);
+ }
}
Added: branches/forge/damon/portal-extensions/primates/src/java/org/jbosslabs/portlets/primates/PrimatesTools.java
===================================================================
--- branches/forge/damon/portal-extensions/primates/src/java/org/jbosslabs/portlets/primates/PrimatesTools.java 2005-09-28 21:21:08 UTC (rev 1236)
+++ branches/forge/damon/portal-extensions/primates/src/java/org/jbosslabs/portlets/primates/PrimatesTools.java 2005-09-29 00:16:23 UTC (rev 1237)
@@ -0,0 +1,84 @@
+package org.jbosslabs.portlets.primates;
+
+import org.jboss.forge.common.ForgeHelper;
+import java.io.File;
+import org.jboss.forge.common.content.ContentManager;
+
+/**
+ * @author adamw
+ * Common constants and functions.
+ */
+public class PrimatesTools {
+ final static String PRIMATES_ELEMENT = "primates";
+
+ private final static String PRIMATES_XML = "primates.xml";
+ private final static String PRIMATES_JSP = "primates.jsp";
+ private final static String PRIMATES_DIR = "primates";
+ private final static String BIOS_DIR = PRIMATES_DIR + File.separator +"html";
+ private final static String MUGSHOTS_DIR = PRIMATES_DIR + File.separator +"mugshots";
+
+ private static ContentManager cm;
+
+ static {
+ cm = ForgeHelper.getContentManager("");
+ }
+
+ static String getXmlCmPath(String portalName) {
+ return portalName + "/" + PRIMATES_DIR + "/" + PRIMATES_XML;
+ }
+
+ static String getJspCmPath() {
+ return PRIMATES_DIR + "/" + PRIMATES_JSP;
+ }
+
+ static synchronized PrimatesDescriptor getDesc(final String portalName) {
+ PrimatesDescriptor desc = (PrimatesDescriptor) ForgeHelper
+ .getForgeManagement().getFromCache(portalName,
+ PrimatesDescriptor.class.getName());
+
+ if (desc == null)
+ desc = (PrimatesDescriptor) ForgeHelper.getForgeManagement()
+ .addNodeWatcher(portalName,
+ PrimatesDescriptor.class.getName(),
+ new PrimatesNodeWatcher(cm));
+
+ return desc;
+ }
+
+ private static String NO_PROJECT_PARAM = "&noproject=true";
+
+ static String prepareLinkForDisplay(String link) {
+ if (link == null)
+ return link;
+
+ // To each link, adding a noproject param, unless it's a project link.
+ if ((!link.contains(NO_PROJECT_PARAM)) &&
+ (!link.contains("project=")) &&
+ (!ForgeHelper.isOutsideLink(link)))
+ return link + NO_PROJECT_PARAM;
+
+ return link;
+ }
+
+ static String prepareLinkForChecking(String portalName, String link) {
+ if (link == null)
+ return link;
+
+ if (("/portal/".equals(link)) || ("/portal".equals(link))
+ || ("//portal".equals(link)))
+ return ForgeHelper.createPageLink(portalName, "default");
+
+ // Deleting the noproject parameter, as it is not present in the generated links.
+ int i = link.indexOf(NO_PROJECT_PARAM);
+ if (i != -1)
+ link = link.substring(0, i);
+
+ // Deleting the project=default parameter from freezone link, as it is a dummy
+ // project and not present in the generated links.
+ if (link.contains("freezone")) {
+ link = link.replace("&project=default", "");
+ }
+
+ return link;
+ }
+}
|