[jboss-svn-commits] JBL Code SVN: r19511 - in labs/jbosslabs/trunk/portal-extensions/jbosswiki: wiki-common/src/etc and 2 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Apr 10 05:13:30 EDT 2008


Author: szimano
Date: 2008-04-10 05:13:30 -0400 (Thu, 10 Apr 2008)
New Revision: 19511

Modified:
   labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/ui/WikiEdit.java
   labs/jbosslabs/trunk/portal-extensions/jbosswiki/wiki-common/src/etc/WikiTypes.xml
   labs/jbosslabs/trunk/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiEngine.java
   labs/jbosslabs/trunk/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiType.java
   labs/jbosslabs/trunk/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiTypeLoader.java
   labs/jbosslabs/trunk/portal-extensions/jbosswiki/wiki-test/.classpath
Log:
page caching for wikitypes

Modified: labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/ui/WikiEdit.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/ui/WikiEdit.java	2008-04-10 00:14:16 UTC (rev 19510)
+++ labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/ui/WikiEdit.java	2008-04-10 09:13:30 UTC (rev 19511)
@@ -331,7 +331,9 @@
 
 		previPage.setContent(pageContent);
 
-		return wikiEngine.getWikiType("html").process(previPage,
+		wikiEngine.refreshPage(previPage.getName(), previPage.getLangCode());
+		
+		return wikiEngine.getWikiType("htmlClear").process(previPage,
 				attributesExtractor.getWikiSession()).getContent();
 	}
 }

Modified: labs/jbosslabs/trunk/portal-extensions/jbosswiki/wiki-common/src/etc/WikiTypes.xml
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/jbosswiki/wiki-common/src/etc/WikiTypes.xml	2008-04-10 00:14:16 UTC (rev 19510)
+++ labs/jbosslabs/trunk/portal-extensions/jbosswiki/wiki-common/src/etc/WikiTypes.xml	2008-04-10 09:13:30 UTC (rev 19511)
@@ -123,6 +123,7 @@
 	</wikiType>
 	<wikiType>
 		<name>edit</name>
+		<cached>false</cached>
 		<class>org.jboss.wiki.plugins.DefaultWikiType</class>
 		<plugin>
 			<name>textAreaChange</name>
@@ -168,6 +169,7 @@
 	<wikiType>
 		<name>postedit</name>
 		<class>org.jboss.wiki.plugins.DirectReferenceWikiType</class>
+		<cached>false</cached>
 		<plugin>
 			<name>reTranslateUids</name>
 			<class>org.jboss.wiki.plugins.ReTranslateUids</class>

Modified: labs/jbosslabs/trunk/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiEngine.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiEngine.java	2008-04-10 00:14:16 UTC (rev 19510)
+++ labs/jbosslabs/trunk/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiEngine.java	2008-04-10 09:13:30 UTC (rev 19511)
@@ -464,6 +464,10 @@
 		if (languageDataSources.get(langCode).getPages().containsKey(pageName)) {
 			languageDataSources.get(langCode).getPages().remove(pageName);
 		}
+		
+		for (WikiType wikiType : wikiTypes.values()) {
+			wikiType.invalidatePage(pageName, langCode);
+		}
 	}
 
 	public Map<String, Integer> findPages(String searchQuery, String langCode) {
@@ -853,8 +857,14 @@
 				getUid(pageName, langCode),
 				MediaDataSource.EDITABLE + MediaDataSource.VIEWABLE);
 
-		return languageDataSources.get(langCode).getMediaDataSource()
+		boolean ret = languageDataSources.get(langCode).getMediaDataSource()
 				.deletePage(getUid(pageName, langCode));
+		
+		if (ret) {
+			refreshPage(pageName, langCode);
+		}
+		
+		return ret;
 	}
 
 	public long getAttachmentSize(String pageName, String attachmentName,

Modified: labs/jbosslabs/trunk/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiType.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiType.java	2008-04-10 00:14:16 UTC (rev 19510)
+++ labs/jbosslabs/trunk/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiType.java	2008-04-10 09:13:30 UTC (rev 19511)
@@ -21,6 +21,9 @@
  */
 package org.jboss.wiki;
 
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 import java.util.Vector;
 
 import org.apache.log4j.Logger;
@@ -49,24 +52,30 @@
 	 */
 	protected WikiContext wikiContext;
 
-	protected Vector<WikiPlugin> plugins = new Vector<WikiPlugin>();
-	
+	protected boolean cached;
+
+	protected List<WikiPlugin> plugins = new Vector<WikiPlugin>();
+
 	protected Logger log = Logger.getLogger(this.getClass());
 
+	protected Map<NameLangCodeKey, String> cachedPages = new HashMap<NameLangCodeKey, String>();
+
 	public void addPlugin(String pluginName, String pluginClass) {
 
 		WikiPlugin plugin = null;
 
 		try {
-			plugin = (WikiPlugin) Thread.currentThread().getContextClassLoader().loadClass(pluginClass).newInstance();
+			plugin = (WikiPlugin) Thread.currentThread()
+					.getContextClassLoader().loadClass(pluginClass)
+					.newInstance();
 		} catch (Exception e) {
-			log.error("Error while loading plugin: " + pluginName
-					+ "\nclass: " + pluginClass + "\n" + e);
+			log.error("Error while loading plugin: " + pluginName + "\nclass: "
+					+ pluginClass + "\n" + e);
 		}
 
 		if (plugin != null) {
 			plugin.setWikiType(this);
-			
+
 			plugins.add(plugin);
 
 			plugin.setWikiEngine(wikiEngine);
@@ -76,15 +85,14 @@
 			// run init() function
 			plugin.init();
 
-			log.info("Plugin added: "
-					+ pluginName + " class: " + pluginClass);
+			log.info("Plugin added: " + pluginName + " class: " + pluginClass);
 		}
 
 	}
 
 	/**
 	 * <p>
-	 * Processes given WikiPage with the apropriate plugins, connected to this
+	 * Processes given WikiPage with the appropriate plugins, connected to this
 	 * WikiType
 	 * </p>
 	 * 
@@ -111,11 +119,22 @@
 			}
 		}
 
-		// execute the plugins
-		for (int i = 0; i < plugins.size(); i++) {
-			// log.info("Executing plugin:
-			// "+plugins.get(i).getName());
-			newPage = (plugins.get(i)).process(newPage, wikiSession);
+		NameLangCodeKey key = new NameLangCodeKey(wikiPage.getName(), wikiPage
+				.getLangCode());
+
+		// if page is cached, just change it's content
+		if (cached && cachedPages.get(key) != null) {
+			newPage.setContent(cachedPages.get(key));
+		} else {
+			// if not - execute the plugins
+			for (int i = 0; i < plugins.size(); i++) {
+				// log.info("Executing plugin:
+				// "+plugins.get(i).getName());
+				newPage = (plugins.get(i)).process(newPage, wikiSession);
+			}
+
+			if (cached)
+				cachedPages.put(key, newPage.getContent());
 		}
 
 		// clear session attributes passed in uri
@@ -127,9 +146,9 @@
 				i++;
 			}
 
-		// remove ALL temp variables for this session (as they are RELLLY temp)
+		// remove ALL temp variables for this session (as they are REALLY temp)
 		newPage.clearTempVariables(wikiSession);
-		
+
 		return newPage;
 	}
 
@@ -157,4 +176,39 @@
 	public String getCharacterEncoding() {
 		return "UTF-8";
 	}
+
+	public void invalidatePage(String pageName, String langCode) {
+		if (cached)
+			cachedPages.remove(new NameLangCodeKey(pageName, langCode));
+	}
+
+	public void setCached(boolean wikiTypeCached) {
+		cached = wikiTypeCached;
+	}
 }
+
+class NameLangCodeKey {
+	public String name, langCode;
+
+	public NameLangCodeKey(String name, String langCode) {
+		this.name = name;
+		this.langCode = langCode;
+	}
+
+	public boolean equals(Object o) {
+		if (o == null)
+			return false;
+
+		if (o instanceof NameLangCodeKey) {
+			NameLangCodeKey n = (NameLangCodeKey) o;
+
+			return name.equals(n.name) && langCode.equals(n.langCode);
+		}
+
+		return false;
+	}
+
+	public int hashCode() {
+		return name.hashCode() + langCode.hashCode();
+	}
+}

Modified: labs/jbosslabs/trunk/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiTypeLoader.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiTypeLoader.java	2008-04-10 00:14:16 UTC (rev 19510)
+++ labs/jbosslabs/trunk/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiTypeLoader.java	2008-04-10 09:13:30 UTC (rev 19511)
@@ -39,6 +39,8 @@
 
 			String wikiTypeName = null;
 
+			boolean wikiTypeCached = true;
+			
 			Node wikiTypeNode = wikiTypes.item(i);
 
 			NodeList wikiTypeElements = wikiTypeNode.getChildNodes();
@@ -82,9 +84,13 @@
 						log.error("Cannot read plugin: name: " + pluginName
 								+ " class: " + pluginClass + " in WikiType: "
 								+ wikiType.getName());
+				} else if (elem.getNodeName().equals("cached")) {
+					wikiTypeCached = Boolean.parseBoolean(unmarshallText(elem));
 				}
 			}
 
+			wikiType.setCached(wikiTypeCached);
+			
 			wikiEngine.addWikiType(wikiType.getName(), wikiType);
 			log.info("Added WikiType: " + wikiType.getName());
 		}

Modified: labs/jbosslabs/trunk/portal-extensions/jbosswiki/wiki-test/.classpath
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/jbosswiki/wiki-test/.classpath	2008-04-10 00:14:16 UTC (rev 19510)
+++ labs/jbosslabs/trunk/portal-extensions/jbosswiki/wiki-test/.classpath	2008-04-10 09:13:30 UTC (rev 19511)
@@ -1,58 +1,30 @@
 <?xml version="1.0" encoding="UTF-8"?>
-
 <classpath>
-  <classpathentry excluding="" kind="src" path="src/java">
-  </classpathentry>
-  <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/log4j/jars/log4j-1.2.9.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/wiki-common/jars/wiki-common.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/javax.servlet/jars/jsp-api-2.0.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/javax.servlet/jars/servlet-api-2.4.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/junit/jars/junit-3.8.1.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/jboss/jars/activation.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/commons-fileupload/jars/commons-fileupload-1.0.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/commons-configuration/jars/commons-configuration-1.1.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/commons-lang/jars/commons-lang-2.1.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/commons-collections/jars/commons-collections-3.1.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/dom4j/jars/dom4j-1.6.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/jdom/jars/jdom-1.0.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/jboss/jars/jboss-ejb3x.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/jboss/jars/jboss-ejb3.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/portlet-api/jars/portlet-api-1.0.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/jboss/jars/jboss-jmx.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/jboss/jars/jboss-common.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/jboss/jars/portal-common-lib.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/jboss/jars/portal-core-lib.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/jboss/jars/portal-portlet-lib.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/jboss/jars/jbossall-client-3.2.3.jar">
-  </classpathentry>
-  <classpathentry kind="lib" path="/Users/tomek/java/sandbox/portal-extensions/shotoku/shotoku-base/target/shotoku-base.jar">
-  </classpathentry>
-  <classpathentry kind="lib" path="/Users/tomek/java/sandbox/portal-extensions/shotoku/shotoku-aop/target/shotoku-aop.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/guice/jars/guice-1.0.jar">
-  </classpathentry>
-  <classpathentry kind="output" path="target/classes">
-  </classpathentry>
-</classpath>
\ No newline at end of file
+	<classpathentry kind="src" path="src/java"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="var" path="MAVEN_REPO/log4j/jars/log4j-1.2.9.jar"/>
+	<classpathentry kind="var" path="MAVEN_REPO/javax.servlet/jars/jsp-api-2.0.jar"/>
+	<classpathentry kind="var" path="MAVEN_REPO/javax.servlet/jars/servlet-api-2.4.jar"/>
+	<classpathentry kind="var" path="MAVEN_REPO/junit/jars/junit-3.8.1.jar"/>
+	<classpathentry kind="var" path="MAVEN_REPO/jboss/jars/activation.jar"/>
+	<classpathentry kind="var" path="MAVEN_REPO/commons-fileupload/jars/commons-fileupload-1.0.jar"/>
+	<classpathentry kind="var" path="MAVEN_REPO/commons-configuration/jars/commons-configuration-1.1.jar"/>
+	<classpathentry kind="var" path="MAVEN_REPO/commons-lang/jars/commons-lang-2.1.jar"/>
+	<classpathentry kind="var" path="MAVEN_REPO/commons-collections/jars/commons-collections-3.1.jar"/>
+	<classpathentry kind="var" path="MAVEN_REPO/dom4j/jars/dom4j-1.6.jar"/>
+	<classpathentry kind="var" path="MAVEN_REPO/jdom/jars/jdom-1.0.jar"/>
+	<classpathentry kind="var" path="MAVEN_REPO/jboss/jars/jboss-ejb3x.jar"/>
+	<classpathentry kind="var" path="MAVEN_REPO/jboss/jars/jboss-ejb3.jar"/>
+	<classpathentry kind="var" path="MAVEN_REPO/portlet-api/jars/portlet-api-1.0.jar"/>
+	<classpathentry kind="var" path="MAVEN_REPO/jboss/jars/jboss-jmx.jar"/>
+	<classpathentry kind="var" path="MAVEN_REPO/jboss/jars/jboss-common.jar"/>
+	<classpathentry kind="var" path="MAVEN_REPO/jboss/jars/portal-common-lib.jar"/>
+	<classpathentry kind="var" path="MAVEN_REPO/jboss/jars/portal-core-lib.jar"/>
+	<classpathentry kind="var" path="MAVEN_REPO/jboss/jars/portal-portlet-lib.jar"/>
+	<classpathentry kind="var" path="MAVEN_REPO/jboss/jars/jbossall-client-3.2.3.jar"/>
+	<classpathentry kind="lib" path="/Users/tomek/java/sandbox/portal-extensions/shotoku/shotoku-base/target/shotoku-base.jar"/>
+	<classpathentry kind="lib" path="/Users/tomek/java/sandbox/portal-extensions/shotoku/shotoku-aop/target/shotoku-aop.jar"/>
+	<classpathentry kind="var" path="MAVEN_REPO/guice/jars/guice-1.0.jar"/>
+	<classpathentry combineaccessrules="false" kind="src" path="/wiki-common"/>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>




More information about the jboss-svn-commits mailing list