[jboss-svn-commits] JBL Code SVN: r12868 - in labs/jbosslabs/trunk/portal-extensions/jboss-forums-redirect: src/java/org/jboss/forums/redirect and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Tue Jun 26 10:32:08 EDT 2007


Author: adamw
Date: 2007-06-26 10:32:08 -0400 (Tue, 26 Jun 2007)
New Revision: 12868

Added:
   labs/jbosslabs/trunk/portal-extensions/jboss-forums-redirect/README
Modified:
   labs/jbosslabs/trunk/portal-extensions/jboss-forums-redirect/build.xml
   labs/jbosslabs/trunk/portal-extensions/jboss-forums-redirect/src/java/org/jboss/forums/redirect/DataGenerator.java
   labs/jbosslabs/trunk/portal-extensions/jboss-forums-redirect/src/java/org/jboss/forums/redirect/RedirectFilter.java
Log:
The filter

Added: labs/jbosslabs/trunk/portal-extensions/jboss-forums-redirect/README
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/jboss-forums-redirect/README	                        (rev 0)
+++ labs/jbosslabs/trunk/portal-extensions/jboss-forums-redirect/README	2007-06-26 14:32:08 UTC (rev 12868)
@@ -0,0 +1,48 @@
+FORUMS REDIRECT FILTER
+----------------------
+
+1. Building
+
+During the build, data files are generated, which contain mappings of post and topic ids to forum ids. These mappings are read from the database. For this towork, connection details to the nukes DB have to be provided. This configuration is done through the properties in the first section of build.xml.
+
+After these are filled, you should run:
+
+	ant run
+
+If this completes without errors, a dist/forums-redirect.jar should be created containing the filter, with the data files bundeled.
+
+2. Configuring the filter
+
+In web.xml, add:
+
+    <filter>
+	<filter-name>forumsRedirectFilter</filter-name>
+	<filter-class>org.jboss.forums.redirect.RedirectFilter</filter-class>
+	<init-param>
+		<param-name>forumViewRedirect</param-name>
+		<param-value>/portal/portal/default/forums/JBossForumsWindow?action=1&amp;v=f&amp;f=${forumId}</param-value>
+	</init-param>
+	<init-param>
+		<param-name>topicViewRedirect</param-name>
+		<param-value>/portal/portal/default/forums/JBossForumsWindow?action=1&amp;v=t&amp;t=${topicId}</param-value>
+	</init-param>
+	<init-param>
+		<param-name>postViewRedirect</param-name>
+		<param-value>/portal/portal/default/forums/JBossForumsWindow?action=1&amp;v=t&amp;p=${postId}#${postId}</param-value>
+	</init-param>
+	<init-param>
+		<param-name>postingNewTopicRedirect</param-name>
+		<param-value>/portal/portal/default/forums/JBossForumsWindow?action=1&amp;v=p&amp;f=${forumId}</param-value>
+	</init-param>
+	<init-param>
+		<param-name>postingReplyRedirect</param-name>
+		<param-value>/portal/portal/default/forums/JBossForumsWindow?action=1&amp;v=z&amp;t=${topicId}&amp;f=${forumId}</param-value>
+	</init-param>
+   </filter>
+
+   <filter-mapping>
+	<filter-name>forumsRedirectFilter</filter-name>
+	<url-pattern>/*</url-pattern>
+   </filter-mapping>
+
+And change the values of init parameters to address appropraite for forums deployment. The ${forumId}, ${topicId} etc will be replaced with correct values by the filter.

Modified: labs/jbosslabs/trunk/portal-extensions/jboss-forums-redirect/build.xml
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/jboss-forums-redirect/build.xml	2007-06-26 14:02:58 UTC (rev 12867)
+++ labs/jbosslabs/trunk/portal-extensions/jboss-forums-redirect/build.xml	2007-06-26 14:32:08 UTC (rev 12868)
@@ -22,6 +22,7 @@
 	<property name="src" value="src" />
 	<property name="src.java" value="${src}/java" />
 	<property name="build" value="build" />
+	<property name="dist" value="dist" />
 
 	<fileset id="lib.jars" dir="lib">
 		<include name="**/*.jar" />
@@ -44,6 +45,7 @@
 	</target>
 
 	<target name="run" depends="build">
+		<!-- Running data generation -->
 		<mkdir dir="${gen-data}" />
 		<java classname="org.jboss.forums.redirect.DataGenerator">
 			<classpath refid="base.jars" />
@@ -52,5 +54,16 @@
 				<propertyref prefix="gen-" />
 			</syspropertyset>
 		</java>
+
+		<!-- Creating a jar with the filter -->
+		<mkdir dir="${dist}" />
+		<jar destfile="${dist}/forums-redirect.jar" basedir="${build}">
+			<fileset dir="${gen-data}" includes="**/*.dat" />
+		</jar>
+
+		<!-- Test deployment -->
+		<copy todir="/home/adamw/jboss/forums-test/jboss/server/default/deploy/jboss-portal.sar/lib">
+			<fileset dir="${dist}"><include name="**/*.jar" /></fileset>
+    	</copy>
 	</target>
 </project>
\ No newline at end of file

Modified: labs/jbosslabs/trunk/portal-extensions/jboss-forums-redirect/src/java/org/jboss/forums/redirect/DataGenerator.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/jboss-forums-redirect/src/java/org/jboss/forums/redirect/DataGenerator.java	2007-06-26 14:02:58 UTC (rev 12867)
+++ labs/jbosslabs/trunk/portal-extensions/jboss-forums-redirect/src/java/org/jboss/forums/redirect/DataGenerator.java	2007-06-26 14:32:08 UTC (rev 12868)
@@ -40,13 +40,13 @@
 		
 		// Creating the post id -> forum id map
 		rs = stmt.executeQuery(
-				"SELECT post_id, forum_id FROM phpbb_posts WHERE " +
+				"SELECT post_id, topic_id, forum_id FROM phpbb_posts WHERE " +
 				"forum_id IN (" + forumIds + ")");
 		
 		PrintWriter postsWriter = new PrintWriter(dataDir + "/posts.dat");
 		
 		while (rs.next()) {
-			postsWriter.println(rs.getString(1) + " " + rs.getString(2));
+			postsWriter.println(rs.getString(1) + " " + rs.getString(2) + " " + rs.getString(3));
 		}
 		
 		postsWriter.close();

Modified: labs/jbosslabs/trunk/portal-extensions/jboss-forums-redirect/src/java/org/jboss/forums/redirect/RedirectFilter.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/jboss-forums-redirect/src/java/org/jboss/forums/redirect/RedirectFilter.java	2007-06-26 14:02:58 UTC (rev 12867)
+++ labs/jbosslabs/trunk/portal-extensions/jboss-forums-redirect/src/java/org/jboss/forums/redirect/RedirectFilter.java	2007-06-26 14:32:08 UTC (rev 12868)
@@ -1,10 +1,10 @@
 package org.jboss.forums.redirect;
 
 import java.io.IOException;
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Map;
+import java.util.Scanner;
 import java.util.Set;
 
 import javax.servlet.Filter;
@@ -14,6 +14,7 @@
 import javax.servlet.ServletRequest;
 import javax.servlet.ServletResponse;
 import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 
 /**
  * A filter which redirects old nukes forums requests to new portal forums.
@@ -23,46 +24,170 @@
 	/**
 	 * A set of forum ids that are redirected.
 	 */
-	private Set<String> supportedForums;
-	
+	private Set<Integer> supportedForums;
+
 	/**
-	 * Translation table: op -> v
+	 * A map post id -> forum id.
 	 */
-	private final static Map<String, String> OP_TO_V = new HashMap<String, String>();
-	static {
-		OP_TO_V.put("viewforum", "f");
-		OP_TO_V.put("viewtopic", "t");
-		OP_TO_V.put("posting", "p");
-	}
-	
+	private Map<Integer, Integer> postIdToForumId;
+
+	/**
+	 * A map post id -> topic id.
+	 */
+	private Map<Integer, Integer> postIdToTopicId;
+
+	/**
+	 * A map topic id -> forum id.
+	 */
+	private Map<Integer, Integer> topicIdToForumId;
+
+	/**
+	 * Address to which forum view requests should be redirected.
+	 */
+	private String forumViewRedirect;
+
+	/**
+	 * Address to which topic view requests should be redirected.
+	 */
+	private String topicViewRedirect;
+
+	/**
+	 * Address to which post view requests should be redirected.
+	 */
+	private String postViewRedirect;
+
+	/**
+	 * Address to which new topic posting requests should be redirected.
+	 */
+	private String postingNewTopicRedirect;
+
+	/**
+	 * Address to which reply posting requests should be redirected.
+	 */
+	private String postingReplyRedirect;
+
 	public void init(FilterConfig config) throws ServletException {
-		String supportedForumsStr = config.getInitParameter("supportedForums");
-		supportedForums = new HashSet<String>();
-		if (supportedForumsStr != null) {
-			for (String forumId : supportedForumsStr.split(",")) {
-				supportedForums.add(forumId);
-			}
+		supportedForums = new HashSet<Integer>();
+		postIdToForumId = new HashMap<Integer, Integer>();
+		postIdToTopicId = new HashMap<Integer, Integer>();
+		topicIdToForumId = new HashMap<Integer, Integer>();
+
+		// Reading in supported forums.
+		Scanner s = new Scanner(this.getClass().getResourceAsStream("/forums.dat"));
+
+		while (s.hasNext()) {
+			supportedForums.add(s.nextInt());
 		}
-		
-		// No possibility to modify the set after it has been initialized.
-		supportedForums = Collections.unmodifiableSet(supportedForums);
+
+		s.close();
+
+		// Reading the post id -> forum id and post id -> topic id mapping.
+		s = new Scanner(this.getClass().getResourceAsStream("/posts.dat"));
+
+		while (s.hasNext()) {
+			int postId = s.nextInt();
+			postIdToTopicId.put(postId, s.nextInt());
+			postIdToForumId.put(postId, s.nextInt());
+		}
+
+		// Reading the topic id -> forum id mapping.
+		s = new Scanner(this.getClass().getResourceAsStream("/topics.dat"));
+
+		while (s.hasNext()) {
+			topicIdToForumId.put(s.nextInt(), s.nextInt());
+		}
+
+		// Reading the redirects.
+		forumViewRedirect = config.getInitParameter("forumViewRedirect");
+		if (forumViewRedirect == null) { forumViewRedirect = ""; }
+
+		topicViewRedirect = config.getInitParameter("topicViewRedirect");
+		if (topicViewRedirect == null) { topicViewRedirect = ""; }
+
+		postViewRedirect = config.getInitParameter("postViewRedirect");
+		if (postViewRedirect == null) { postViewRedirect = ""; }
+
+		postingNewTopicRedirect = config.getInitParameter("postingNewTopicRedirect");
+		if (postingNewTopicRedirect == null) { postingNewTopicRedirect = ""; }
+
+		postingReplyRedirect = config.getInitParameter("postingReplyRedirect");
+		if (postingReplyRedirect == null) { postingReplyRedirect = ""; }
 	}
 
-	public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,
-			FilterChain chain) throws IOException, ServletException {
+	public void doFilter(ServletRequest servletRequest,
+			ServletResponse servletResponse, FilterChain chain)
+	throws IOException, ServletException {
 		if (servletRequest instanceof HttpServletRequest) {
 			HttpServletRequest request = (HttpServletRequest) servletRequest;
-			System.out.println(request.getPathInfo() + "; " + request.getParameter("module"));
-			
-			if (("/index.html".equals(request.getPathInfo())) && ("bb".equals(request.getParameter("module")))) {
-				// We now know it's a forums request.
-				
-				
+			HttpServletResponse response = (HttpServletResponse) servletResponse;
+
+			if (("/index.html".equals(request.getPathInfo())) 
+					&& ("bb".equals(request.getParameter("module")))) {
+				// We now know it's a nukes-forums request.
+
+				// First checking if this forum is supported.
+				boolean supported = false;
+
+				String f = request.getParameter("f");
+				String t = request.getParameter("t");
+				String p = request.getParameter("p");
+
+				if (f != null) {
+					try {
+						supported = supportedForums.contains(Integer.parseInt(f));
+					} catch (NumberFormatException e) {
+						// Wrong forum number - user's fault.
+					}
+				} else if (t != null) {
+					try {
+						supported = supportedForums.contains(topicIdToForumId.get(Integer.parseInt(t)));
+					} catch (NumberFormatException e) {
+						// Wrong topic number - user's fault.
+					}
+				} else if (p != null) {
+					try {
+						supported = supportedForums.contains(postIdToForumId.get(Integer.parseInt(p)));
+					} catch (NumberFormatException e) {
+						// Wrong post number - user's fault.
+					}
+				}
+
+				if (supported) {
+					String op = request.getParameter("op");
+					if ("viewforum".equals(op)) {
+						response.sendRedirect(forumViewRedirect.replace("${forumId}", f));
+						return;
+					} else if ("viewtopic".equals(op)) {
+						response.sendRedirect(topicViewRedirect.replace("${topicId}", t));
+						return;
+					} else if ("viewpost".equals(op)) {
+						response.sendRedirect(postViewRedirect.replace("${postId}", p));
+						return;
+					} else if ("posting".equals(op)) {
+						String mode = request.getParameter("mode");
+						if ("newtopic".equals(mode)) {
+							response.sendRedirect(postingNewTopicRedirect.replace("${forumId}", f));
+							return;
+						} else if ("reply".equals(mode)) {
+							try {
+								int postId = Integer.parseInt(p);
+								response.sendRedirect(postingReplyRedirect
+										.replace("${forumId}", postIdToForumId.get(postId).toString())
+										.replace("${topicId}", postIdToTopicId.get(postId).toString()));
+								return;
+							} catch (NumberFormatException e) {
+								// Just not doing the fitler.
+							}
+						}
+					}
+				}
 			}
 		}
+
+		chain.doFilter(servletRequest, servletResponse);
 	}
 
 	public void destroy() {
-		
+
 	}
 }




More information about the jboss-svn-commits mailing list