From: <jbo...@li...> - 2006-05-09 20:36:18
|
Author: szimano Date: 2006-05-09 16:36:08 -0400 (Tue, 09 May 2006) New Revision: 4161 Added: labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/forge-portal-attr/src/java/org/jboss/forge/portal/CharResponseWrapper.java labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/forge-portal-attr/src/java/org/jboss/forge/portal/TitleChangeFilter.java labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/shotoku/shotoku-svn/src/app/META-INF/jboss-service.xml Modified: labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/forge-portal-attr/project.xml labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/forge-portal-attr/to-copy/jboss-portal.sar/portal-server.war/WEB-INF/web.xml labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/shotoku/shotoku-svn/project.properties Log: JBLAB-669 modifications to get title and timestamnp work in 2.0 Modified: labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/forge-portal-attr/project.xml =================================================================== --- labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/forge-portal-attr/project.xml 2006-05-09 18:25:59 UTC (rev 4160) +++ labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/forge-portal-attr/project.xml 2006-05-09 20:36:08 UTC (rev 4161) @@ -38,6 +38,13 @@ </dependency> <dependency> + <groupId>shotoku</groupId> + <artifactId>shotoku-base</artifactId> + <version>1.0</version> + <jar>shotoku-base.jar</jar> + </dependency> + + <dependency> <groupId>jboss</groupId> <artifactId>jboss-common</artifactId> <version>1.0</version> Added: labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/forge-portal-attr/src/java/org/jboss/forge/portal/CharResponseWrapper.java =================================================================== --- labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/forge-portal-attr/src/java/org/jboss/forge/portal/CharResponseWrapper.java 2006-05-09 18:25:59 UTC (rev 4160) +++ labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/forge-portal-attr/src/java/org/jboss/forge/portal/CharResponseWrapper.java 2006-05-09 20:36:08 UTC (rev 4161) @@ -0,0 +1,45 @@ +/* + * 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.portal; + +import java.io.CharArrayWriter; +import java.io.PrintWriter; + +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpServletResponseWrapper; + +public class CharResponseWrapper extends HttpServletResponseWrapper { + private CharArrayWriter output; + + public String toString() { + return output.toString(); + } + + public CharResponseWrapper(HttpServletResponse response) { + super(response); + output = new CharArrayWriter(); + } + + public PrintWriter getWriter() { + return new PrintWriter(output); + } +} Added: labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/forge-portal-attr/src/java/org/jboss/forge/portal/TitleChangeFilter.java =================================================================== --- labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/forge-portal-attr/src/java/org/jboss/forge/portal/TitleChangeFilter.java 2006-05-09 18:25:59 UTC (rev 4160) +++ labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/forge-portal-attr/src/java/org/jboss/forge/portal/TitleChangeFilter.java 2006-05-09 20:36:08 UTC (rev 4161) @@ -0,0 +1,137 @@ +/* + * 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.portal; + +import java.io.IOException; +import java.io.PrintWriter; + +import javax.servlet.Filter; +import javax.servlet.FilterChain; +import javax.servlet.FilterConfig; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.jboss.shotoku.ContentManager; +import org.jboss.shotoku.Node; +import org.jboss.shotoku.exceptions.RepositoryException; +import org.jboss.shotoku.exceptions.ResourceDoesNotExist; + +public class TitleChangeFilter implements Filter { + + private static final String TITLE_START_TAG = "<title>"; + + private static final String TITLE_END_TAG = "</title>"; + + private static final String PORTAL_CONTEXT = "/portal/"; + + private static final String SHOT_PREF = "/default/members/"; + + private static final String FREEZONE = "/freezone"; + + public void init(FilterConfig conf) throws ServletException { + + } + + public void doFilter(ServletRequest request, ServletResponse response, + FilterChain chain) throws IOException, ServletException { + + HttpServletResponse hResp = (HttpServletResponse) response; + HttpServletRequest hReq = (HttpServletRequest)request; + + String uri = hReq.getRequestURI(); + + setTimestamp(uri, hResp); + + CharResponseWrapper wrapper = new CharResponseWrapper( + (HttpServletResponse) response); + chain.doFilter(request, wrapper); + + if (wrapper.getContentType().startsWith("text/html")) { + + PrintWriter out = response.getWriter(); + + out.write(changePageTitle(wrapper.toString())); + + out.close(); + } + } + + private void setTimestamp(String uri, HttpServletResponse resp) { + if (uri.startsWith(PORTAL_CONTEXT)) { + uri = uri.substring(PORTAL_CONTEXT.length()); + + if (uri.indexOf('/') != -1) { + StringBuffer uriBuffer = new StringBuffer(uri); + uriBuffer.insert(uri.indexOf('/'), FREEZONE); + + uriBuffer.insert(0, SHOT_PREF); + + uri = uriBuffer.toString(); + + try { + Node node = ContentManager.getContentManager().getNode(uri); + + resp.setDateHeader("Last-Modified", node.getLastModification()); + } catch (RepositoryException e) { + e.printStackTrace(); + } catch (ResourceDoesNotExist e) { + //it's not a shotoku element. ignore. + } + } + } + } + + public void destroy() { + + } + + private String changePageTitle(String content) { + String pageContent = content.toLowerCase(); + + int titleIndx = pageContent.indexOf(TITLE_START_TAG); + int titleEnd = pageContent.indexOf(TITLE_END_TAG, titleIndx); + + if (titleIndx != -1) { + int titleToUse; + int endOfTitleTag; + + if ((titleToUse = pageContent.indexOf(TITLE_START_TAG, + titleIndx + 1)) != -1 + && (endOfTitleTag = pageContent.indexOf(TITLE_END_TAG, + titleToUse + 1)) != -1 && titleEnd != endOfTitleTag) { + return content.substring(0, titleIndx + + TITLE_START_TAG.length()) + + content.substring(titleToUse + + TITLE_START_TAG.length(), endOfTitleTag) + + content.substring(titleEnd, + content.length() - 1); + } else { + return content; + } + } else { + return content; + } + } +} Modified: labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/forge-portal-attr/to-copy/jboss-portal.sar/portal-server.war/WEB-INF/web.xml =================================================================== --- labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/forge-portal-attr/to-copy/jboss-portal.sar/portal-server.war/WEB-INF/web.xml 2006-05-09 18:25:59 UTC (rev 4160) +++ labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/forge-portal-attr/to-copy/jboss-portal.sar/portal-server.war/WEB-INF/web.xml 2006-05-09 20:36:08 UTC (rev 4161) @@ -4,8 +4,18 @@ "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app> <description>JBoss Portal</description> - + <!-- Title and timestamp Change --> + <filter> + <filter-name>titleFilter</filter-name> + <filter-class>org.jboss.forge.portal.TitleChangeFilter</filter-class> + </filter> + + <filter-mapping> + <filter-name>titleFilter</filter-name> + <url-pattern>/*</url-pattern> + </filter-mapping> + <!-- The server manager located by the main servlet. --> <context-param> <param-name>org.jboss.portal.server#SERVER_MANAGER</param-name> Modified: labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/shotoku/shotoku-svn/project.properties =================================================================== --- labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/shotoku/shotoku-svn/project.properties 2006-05-09 18:25:59 UTC (rev 4160) +++ labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/shotoku/shotoku-svn/project.properties 2006-05-09 20:36:08 UTC (rev 4161) @@ -4,4 +4,4 @@ maven.ejb.excludes=**/*Listener*,**/listener maven.war.classes.excludes=**/*Bean* -shotoku.ear.dir=00shotoku.ear \ No newline at end of file +shotoku.ear.dir=00shotoku.sar Added: labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/shotoku/shotoku-svn/src/app/META-INF/jboss-service.xml =================================================================== --- labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/shotoku/shotoku-svn/src/app/META-INF/jboss-service.xml 2006-05-09 18:25:59 UTC (rev 4160) +++ labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/shotoku/shotoku-svn/src/app/META-INF/jboss-service.xml 2006-05-09 20:36:08 UTC (rev 4161) @@ -0,0 +1,3 @@ +<?xml version="1.0" encoding="UTF-8"?> +<server> +</server> |