From: <jbo...@li...> - 2005-09-12 18:38:04
|
Author: adamw Date: 2005-09-12 14:37:48 -0400 (Mon, 12 Sep 2005) New Revision: 1087 Modified: trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/ProjectDescriptor.java trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/Projects.java trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/ProjectsDescriptor.java trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/ProjectsHelper.java trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/elements/ElementDescriptor.java trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/elements/PropertiesElementValue.java trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/elements/PropertiesMap.java trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/taglib/ProjectURLTag.java trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/taglib/URLTag.java trunk/forge/portal-extensions/forge-freezone/src/java/org/jboss/forge/projects/freezone/Freezone.java trunk/forge/portal-extensions/portal-default/project.xml trunk/forge/portal-extensions/portal-default/src/java/org/jboss/forge/redirect/RedirectFilter.java Log: JBLAB-355: project main page as a freezone page Modified: trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/ProjectDescriptor.java =================================================================== --- trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/ProjectDescriptor.java 2005-09-12 18:07:58 UTC (rev 1086) +++ trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/ProjectDescriptor.java 2005-09-12 18:37:48 UTC (rev 1087) @@ -55,13 +55,17 @@ * project. * @param portalName * Name of the portal to which this project belongs to. + * @param adminProperties + * Properties that are set by the administrator, to be included + * while filling the context. * @throws SAXException * @throws IOException * @throws XmlNotFoundException */ public ProjectDescriptor(String projectId, XmlInputFactory isf, DomToXmlTransformer xht, OutsidePropertiesMap opm, - String portalName) throws SAXException, IOException, + String portalName, PropertiesMap adminProperties) + throws SAXException, IOException, XmlNotFoundException { this.portalName = portalName; @@ -77,6 +81,11 @@ thisProject = new ElementDescriptor(node, xht, getProjectPropertiesHandler(), getProjectExtendedPropertiesMap(), opm); + + // Adding properties set by the administrator. + if (adminProperties != null) { + thisProject.addProperties(adminProperties); + } // Trying to create a downloads descriptor. try { @@ -249,6 +258,23 @@ } /** + * Creates and returns a link to the project's main page. + * + * @return A link to this project's main page. + */ + public String getProjectLink() { + if (thisProject.hasProperty(ProjectsDescriptor.INFO_PAGE_ATTRIBUTE)) { + String infoPage = getProperty(ProjectsDescriptor.INFO_PAGE_ATTRIBUTE); + + return ProjectsHelper.createFreezonePageLink(portalName, + getId(), infoPage); + } else { + return ProjectsHelper.createPageLink(portalName, + getId(), "info"); + } + } + + /** * Checks if permission to read this project is allowed with permissions * set represented by the given permissions checker. * Modified: trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/Projects.java =================================================================== --- trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/Projects.java 2005-09-12 18:07:58 UTC (rev 1086) +++ trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/Projects.java 2005-09-12 18:37:48 UTC (rev 1087) @@ -110,6 +110,13 @@ public String getProjectName(String projectId) { return getProjectsDescriptor().getProjectName(projectId); } + + /** + * Gets the name of the project with the given id. + */ + public String getProjectLink(String projectId) { + return getProjectsDescriptor().getProjectLink(projectId); + } /** * Searches for the given string in project's names and descriptions. Modified: trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/ProjectsDescriptor.java =================================================================== --- trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/ProjectsDescriptor.java 2005-09-12 18:07:58 UTC (rev 1086) +++ trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/ProjectsDescriptor.java 2005-09-12 18:37:48 UTC (rev 1087) @@ -42,6 +42,12 @@ * @author adamw */ public class ProjectsDescriptor extends AbstractDescriptor { + /** + * <code>INFO_PAGE_ATTRIBUTE</code> - name of an xml attribute in which information + * on whether a freezone info page should be displayed instead of the standard one. + */ + static final String INFO_PAGE_ATTRIBUTE = "info-page"; + private static final Logger log = Logger.getLogger(ProjectsDescriptor.class); /** @@ -208,7 +214,7 @@ * and fills the projects list with that information. */ private void unmarshallProjects(Node root, XmlInputFactory isf, - DomToXmlTransformer xht, String portalName) { + DomToXmlTransformer xht, String portalName) { Node n; NodeList nodes = root.getChildNodes(); @@ -217,11 +223,21 @@ if ((n.getNodeType() == Node.ELEMENT_NODE) && (n.getNodeName().equals(PROJECT_EL))) { + PropertiesMap adminProperties = null; + + Node infoPageAttribute = n.getAttributes().getNamedItem(INFO_PAGE_ATTRIBUTE); + if ((infoPageAttribute != null) && + (infoPageAttribute.getNodeType() == Node.ATTRIBUTE_NODE)) { + adminProperties = new PropertiesMap(); + adminProperties.add(INFO_PAGE_ATTRIBUTE, unmarshallText(infoPageAttribute)); + } + String projectId = unmarshallText(n); ProjectDescriptor pd = null; try { pd = new ProjectDescriptor(projectId, - isf, xht, opm, portalName); + isf, xht, opm, portalName, + adminProperties); projects.put(projectId, pd); } catch (Exception e) { @@ -365,6 +381,18 @@ } /** + * Gets a link to the project witht he given id. + * @param projectId Id of the project. + * @return A link to the given project's main page. + */ + public String getProjectLink(String projectId) { + ProjectDescriptor pd = (ProjectDescriptor) projects.get(projectId); + if (pd == null) return ""; + + return pd.getProjectLink(); + } + + /** * Gets a set of names of resources which are descriptors of projects * represented by this ProjectsDescriptor instance. * @return Modified: trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/ProjectsHelper.java =================================================================== --- trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/ProjectsHelper.java 2005-09-12 18:07:58 UTC (rev 1086) +++ trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/ProjectsHelper.java 2005-09-12 18:37:48 UTC (rev 1087) @@ -157,4 +157,16 @@ + ".freezone&project=" + projectId + "&page=" + ForgeHelper.replace(page, "/", ForgeHelper.FREEZONE_SEPARATOR); } + + /** + * Creates a link to a portal page based on the given parameters. + * @param portalName Name of the portal. + * @param projectId Id of the project for which the page should be displayed. + * @param page Page to display. + * @return A link to the given portal page. + */ + public static String createPageLink(String portalName, String projectId, String page) { + return "/portal/index.html?ctrl:id=page." + portalName + + "." + page + "&project=" + projectId; + } } Modified: trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/elements/ElementDescriptor.java =================================================================== --- trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/elements/ElementDescriptor.java 2005-09-12 18:07:58 UTC (rev 1086) +++ trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/elements/ElementDescriptor.java 2005-09-12 18:37:48 UTC (rev 1087) @@ -12,6 +12,7 @@ import org.jboss.forge.common.projects.DomToXmlTransformer; import org.jboss.forge.common.projects.permissions.PermissionsChecker; import org.jboss.portal.common.context.DelegateContext; +import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; @@ -128,11 +129,23 @@ epm.getBindingsHandlersStack().fillContext(bindings, context, pc); opm.getBindingsHandlersStack().fillContext(bindings, context, pc); } - + private void unmarshallElement(Node root, DomToXmlTransformer xht) { Node n; + + // Processing attributes. + NamedNodeMap nnm = root.getAttributes(); + if (nnm != null) { + for (int i=0; i<nnm.getLength(); i++) { + n = nnm.item(i); + if (n.getNodeType() == Node.ATTRIBUTE_NODE) { + properties.add(n.getNodeName(), unmarshallText(n)); + } + } + } + + // Processing nested elements. NodeList nodes = root.getChildNodes(); - for (int i = 0; i < nodes.getLength(); i++) { n = nodes.item(i); @@ -214,6 +227,26 @@ } /** + * Checks if the given property name has any values. + * + * @param propertyName + * Name of the property. + * @return True iff the given property has any values. + */ + public boolean hasProperty(String propertyName) { + return properties.hasValues(propertyName); + } + + /** + * Adds to the currently held properties, properties from the + * given properties map. + * @param pm Properties map from which to add the properties. + */ + public void addProperties(PropertiesMap pm) { + properties.add(pm); + } + + /** * Checks if data from this element descriptor can be read by a user who's * permissions can be checked using the provided permissions checker. * @param pc Permissions checker with which permissions can be checked. Modified: trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/elements/PropertiesElementValue.java =================================================================== --- trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/elements/PropertiesElementValue.java 2005-09-12 18:07:58 UTC (rev 1086) +++ trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/elements/PropertiesElementValue.java 2005-09-12 18:37:48 UTC (rev 1087) @@ -36,25 +36,56 @@ */ public PropertiesElementValue(String initialValue) { this(); - addValue(initialValue); + add(initialValue); } + + /** + * Crates a new instance with values copied from the given + * element values. + * + * @param initialValues + * Initial values to add. + */ + public PropertiesElementValue(PropertiesElementValue initialValues) { + this(); + add(initialValues); + } + private void singleToMulti() { + multi = new ArrayList<String>(); + + if (single != null) { + multi.add(single); + single = null; + } + } + /** + * Adds all values from the given element values. + * + * @param ev + * Values to add. + */ + public void add(PropertiesElementValue ev) { + // Converting our values to a list of values. + singleToMulti(); + multi.addAll(ev.getAllValues()); + } + + /** * Adds a value. * * @param value * Value to add. */ - public void addValue(String value) { + public void add(String value) { if ((single == null) && (multi == null)) single = value; else if (multi != null) multi.add(value); else { - multi = new ArrayList<String>(); - multi.add(single); + singleToMulti(); multi.add(value); - single = null; } } @@ -68,7 +99,7 @@ if (multi == null) return null; - return (String) multi.get(0); + return multi.get(0); } return single; @@ -81,9 +112,7 @@ */ public List<String> getAllValues() { if (single != null) { - multi = new ArrayList<String>(); - multi.add(single); - single = null; + singleToMulti(); } return multi; Modified: trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/elements/PropertiesMap.java =================================================================== --- trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/elements/PropertiesMap.java 2005-09-12 18:07:58 UTC (rev 1086) +++ trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/elements/PropertiesMap.java 2005-09-12 18:37:48 UTC (rev 1087) @@ -40,7 +40,7 @@ if (ev == null) properties.put(key, new PropertiesElementValue(value)); else - ev.addValue(value); + ev.add(value); } /** @@ -80,4 +80,32 @@ public boolean hasValues(String key) { return properties.containsKey(key); } + + /** + * Binds with the given key, the given element values. + * + * @param key + * Key which to bind. + * @param value + * Values which should be added to the currently held values under + * the given key. + */ + public void add(String key, PropertiesElementValue value) { + PropertiesElementValue ev = (PropertiesElementValue) properties.get(key); + if (ev == null) + properties.put(key, new PropertiesElementValue(value)); + else + ev.add(value); + } + + /** + * Adds all properties from the given properties map to this properties + * map. + * @param pm A properties map from which to add all the properties. + */ + public void add(PropertiesMap pm) { + for (String key : pm.properties.keySet()) { + add(key, pm.properties.get(key)); + } + } } Modified: trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/taglib/ProjectURLTag.java =================================================================== --- trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/taglib/ProjectURLTag.java 2005-09-12 18:07:58 UTC (rev 1086) +++ trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/taglib/ProjectURLTag.java 2005-09-12 18:37:48 UTC (rev 1087) @@ -37,12 +37,25 @@ this.page = page; } + private String getSelectedProject() { + return + project.equals(SELECTED_PROJECT) ? + pageContext.getRequest().getAttribute(ProjectsHelper.PROJECT_ID).toString() + : project; + } + public int doStartTag() throws JspException { - return writeURL("/portal/index.html", "ctrl:id", "page."+ + if ((page == null) || ("info".equals(page))) { + write(ProjectsHelper.getProjects( + pageContext.getRequest().getAttribute(ForgeHelper.PORTAL_NAME).toString()). + getProjectLink(getSelectedProject())); + } else { + writeURL("/portal/index.html", "ctrl:id", "page."+ pageContext.getRequest().getAttribute(ForgeHelper.PORTAL_NAME)+"."+page+"&project="+ - (project.equals(SELECTED_PROJECT) ? - pageContext.getRequest().getAttribute(ProjectsHelper.PROJECT_ID).toString() - : project)); + getSelectedProject()); + } + + return EVAL_BODY_BUFFERED; } public void release() { Modified: trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/taglib/URLTag.java =================================================================== --- trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/taglib/URLTag.java 2005-09-12 18:07:58 UTC (rev 1086) +++ trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/taglib/URLTag.java 2005-09-12 18:37:48 UTC (rev 1087) @@ -27,23 +27,27 @@ public void setForm(String form) { this.form = form; } - - public int writeURL(String baseURL, String paramName, String paramValue) throws JspException { - try { - if ((form == null) || ((!form.equals("formAction")) && (!form.equals("formField")))) - pageContext.getOut().write(baseURL+"?"+paramName+"="+paramValue); - else - if (form.equals("formAction")) - pageContext.getOut().write(baseURL); - else - pageContext.getOut().write("<input type=\"hidden\" name=\""+paramName+ - "\" value=\""+paramValue+"\" />"); + + public void write(String toWrite) throws JspException { + try { + pageContext.getOut().write(toWrite); } catch (IOException e) { - throw new JspException(); + throw new JspException(e); } - - return EVAL_BODY_BUFFERED; } + + public int writeURL(String baseURL, String paramName, String paramValue) throws JspException { + if ((form == null) || ((!form.equals("formAction")) && (!form.equals("formField")))) + write(baseURL+"?"+paramName+"="+paramValue); + else + if (form.equals("formAction")) + write(baseURL); + else + write("<input type=\"hidden\" name=\""+paramName+ + "\" value=\""+paramValue+"\" />"); + + return EVAL_BODY_BUFFERED; + } public int doAfterBody() throws JspTagException { BodyContent bc = getBodyContent(); Modified: trunk/forge/portal-extensions/forge-freezone/src/java/org/jboss/forge/projects/freezone/Freezone.java =================================================================== --- trunk/forge/portal-extensions/forge-freezone/src/java/org/jboss/forge/projects/freezone/Freezone.java 2005-09-12 18:07:58 UTC (rev 1086) +++ trunk/forge/portal-extensions/forge-freezone/src/java/org/jboss/forge/projects/freezone/Freezone.java 2005-09-12 18:37:48 UTC (rev 1087) @@ -213,10 +213,16 @@ // Replacing images while ((nextRef = findNextReference(pageContent, "image")) != null) { - nextRef2 = modifyPath(pagePath, nextRef); - pageContent = ForgeHelper.replace(pageContent, "<img src=" + if (!isExternalLink(nextRef)) { + nextRef2 = modifyPath(pagePath, nextRef); + + pageContent = ForgeHelper.replace(pageContent, "<img src=" + '"' + nextRef + '"', "*img src=" + '"' + fileAccessPrepend + nextRef2 + '"'); + } else + pageContent = ForgeHelper.replace(pageContent, "<img src=" + + '"' + nextRef + '"', "*img src=" + '"' + + nextRef + '"'); } // fix back internal links Modified: trunk/forge/portal-extensions/portal-default/project.xml =================================================================== --- trunk/forge/portal-extensions/portal-default/project.xml 2005-09-12 18:07:58 UTC (rev 1086) +++ trunk/forge/portal-extensions/portal-default/project.xml 2005-09-12 18:37:48 UTC (rev 1087) @@ -21,26 +21,17 @@ <artifactId>javasvn</artifactId> <version>1.0</version> <jar>javasvn.jar</jar> - <properties> - <war.bundle>true</war.bundle> - </properties> </dependency> <dependency> <groupId>tmate</groupId> <artifactId>jsch</artifactId> <version>1.0</version> <jar>jsch.jar</jar> - <properties> - <war.bundle>true</war.bundle> - </properties> </dependency> <dependency> <groupId>jboss-forge</groupId> <artifactId>forge-common</artifactId> <version>1.0</version> - <properties> - <war.bundle>true</war.bundle> - </properties> </dependency> <dependency> <groupId>aslibs</groupId> Modified: trunk/forge/portal-extensions/portal-default/src/java/org/jboss/forge/redirect/RedirectFilter.java =================================================================== --- trunk/forge/portal-extensions/portal-default/src/java/org/jboss/forge/redirect/RedirectFilter.java 2005-09-12 18:07:58 UTC (rev 1086) +++ trunk/forge/portal-extensions/portal-default/src/java/org/jboss/forge/redirect/RedirectFilter.java 2005-09-12 18:37:48 UTC (rev 1087) @@ -14,6 +14,8 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import org.jboss.forge.common.projects.ProjectsHelper; + /** * A filter redirecting addresses: /<.war name> to /portal/<forge portal * name> /<.war name>/<project name> to /portal/<forge portal name>/<project @@ -43,16 +45,14 @@ String requestURI = httpRequest.getRequestURI(); String[] tokens = requestURI.split("[/]"); - String page; + String redirectTo; if ((tokens.length > 2) && (!tokens[2].equals(""))) - page = "index.html?ctrl:id=page." - + FORGE_PORTAL + ".info&project=" - + tokens[2]; + redirectTo = ProjectsHelper.getProjects(FORGE_PORTAL).getProjectLink(tokens[2]); else - page = FORGE_PORTAL; + redirectTo = "/portal/" + FORGE_PORTAL; - httpResponse.sendRedirect("/portal/" + page); + httpResponse.sendRedirect(redirectTo); } else { response.setContentType("text/html"); response.getWriter().write(WRONG_REQ_RESP); |