From: <jbo...@li...> - 2005-11-29 19:03:20
|
Author: szimano Date: 2005-11-29 14:02:55 -0500 (Tue, 29 Nov 2005) New Revision: 1667 Added: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/com/ecyrd/jspwiki/plugin/CounterPlugin.java trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiTypeLoader.java trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/GetRefsFromPagePlugin.java trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/UpdateRefs.java Removed: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiTypeHandler.java Modified: trunk/forge/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/PortletWikiSession.java trunk/forge/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/ServletWikiSession.java trunk/forge/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/WikiPortlet.java trunk/forge/portal-extensions/jbosswiki/wiki-common/src/etc/WikiInsidePlugins.xml trunk/forge/portal-extensions/jbosswiki/wiki-common/src/etc/WikiTypes.xml trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/com/ecyrd/jspwiki/plugin/ReferringPagesPlugin.java trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/com/ecyrd/jspwiki/plugin/UndefinedPagesPlugin.java trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/com/ecyrd/jspwiki/plugin/UnusedPagesPlugin.java trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/InsidePluginExcecutor.java trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiEngine.java trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiPage.java trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiSession.java trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiType.java trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/HTMLTranslatorParts.java trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/RefsManipulatingInsidePlugin.java trunk/forge/portal-extensions/jbosswiki/wiki-common/src/test/java/org/jboss/wiki/test/WikiTest.java Log: temp, perm variables, new plugins, new wikitype parser http://jira.jboss.com/jira/browse/JBWIKI-73 http://jira.jboss.com/jira/browse/JBWIKI-72 Modified: trunk/forge/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/PortletWikiSession.java =================================================================== --- trunk/forge/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/PortletWikiSession.java 2005-11-29 18:41:40 UTC (rev 1666) +++ trunk/forge/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/PortletWikiSession.java 2005-11-29 19:02:55 UTC (rev 1667) @@ -44,4 +44,8 @@ this.portletSession = portletSession; } + public String getId() { + return portletSession.getId(); + } + } Modified: trunk/forge/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/ServletWikiSession.java =================================================================== --- trunk/forge/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/ServletWikiSession.java 2005-11-29 18:41:40 UTC (rev 1666) +++ trunk/forge/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/ServletWikiSession.java 2005-11-29 19:02:55 UTC (rev 1667) @@ -43,5 +43,9 @@ public ServletWikiSession(HttpSession httpSession) { this.httpSession = httpSession; } + + public String getId() { + return httpSession.getId(); + } } Modified: trunk/forge/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/WikiPortlet.java =================================================================== --- trunk/forge/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/WikiPortlet.java 2005-11-29 18:41:40 UTC (rev 1666) +++ trunk/forge/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/WikiPortlet.java 2005-11-29 19:02:55 UTC (rev 1667) @@ -202,7 +202,7 @@ } if (rReq.getParameter("editAction") != null) { - log.info("EDITING PAGE"); + log.debug("EDITING PAGE"); // unlock page WikiPage edPage = wikiEngine.getByName((String) rReq Modified: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/etc/WikiInsidePlugins.xml =================================================================== --- trunk/forge/portal-extensions/jbosswiki/wiki-common/src/etc/WikiInsidePlugins.xml 2005-11-29 18:41:40 UTC (rev 1666) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/etc/WikiInsidePlugins.xml 2005-11-29 19:02:55 UTC (rev 1667) @@ -6,4 +6,5 @@ <entry key="InsertPage">org.jboss.wiki.plugins.InsertPageInsidePlugin</entry> <entry key="IndexPlugin">org.jboss.wiki.plugins.IndexInsidePlugin</entry> <entry key="CurrentTimePlugin">com.ecyrd.jspwiki.plugin.CurrentTimePlugin</entry> +<entry key="Counter">com.ecyrd.jspwiki.plugin.CounterPlugin</entry> </properties> \ No newline at end of file Modified: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/etc/WikiTypes.xml =================================================================== --- trunk/forge/portal-extensions/jbosswiki/wiki-common/src/etc/WikiTypes.xml 2005-11-29 18:41:40 UTC (rev 1666) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/etc/WikiTypes.xml 2005-11-29 19:02:55 UTC (rev 1667) @@ -94,6 +94,14 @@ </plugin> </wikiType> <wikiType> + <name>refs</name> + <class>org.jboss.wiki.plugins.DirectReferenceWikiType</class> + <plugin> + <name>getRefsForPage</name> + <class>org.jboss.wiki.plugins.GetRefsFromPagePlugin</class> + </plugin> + </wikiType> + <wikiType> <name>recentChanges</name> <class>org.jboss.wiki.plugins.DefaultWikiType</class> <plugin> @@ -124,6 +132,10 @@ <name>reTranslateUids</name> <class>org.jboss.wiki.plugins.ReTranslateUids</class> </plugin> + <plugin> + <name>updateRefs</name> + <class>org.jboss.wiki.plugins.UpdateRefs</class> + </plugin> </wikiType> <wikiType> <name>admin</name> Added: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/com/ecyrd/jspwiki/plugin/CounterPlugin.java =================================================================== --- trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/com/ecyrd/jspwiki/plugin/CounterPlugin.java 2005-11-29 18:41:40 UTC (rev 1666) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/com/ecyrd/jspwiki/plugin/CounterPlugin.java 2005-11-29 19:02:55 UTC (rev 1667) @@ -0,0 +1,39 @@ +package com.ecyrd.jspwiki.plugin; + +import java.util.HashMap; + +import org.jboss.wiki.WikiInsidePlugin; +import org.jboss.wiki.WikiPage; +import org.jboss.wiki.WikiSession; + +public class CounterPlugin extends WikiInsidePlugin { + + @Override + public String process(WikiPage wikiPage, WikiSession wikiSession, + HashMap<String, String> attributes) { + + String name = attributes.get("name"); + + String counterName = "counter"+((name == null) ? "" : "-"+name); + + Integer counter = (Integer)wikiPage.getTempVariable(counterName, wikiSession); + + if (counter != null) { + counter++; + } + else { + counter = new Integer(1); + } + + wikiPage.addTempVariable(counterName, counter, wikiSession); + + return counter.toString(); + } + + @Override + public void init() { + // TODO Auto-generated method stub + + } + +} Modified: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/com/ecyrd/jspwiki/plugin/ReferringPagesPlugin.java =================================================================== --- trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/com/ecyrd/jspwiki/plugin/ReferringPagesPlugin.java 2005-11-29 18:41:40 UTC (rev 1666) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/com/ecyrd/jspwiki/plugin/ReferringPagesPlugin.java 2005-11-29 19:02:55 UTC (rev 1667) @@ -4,22 +4,21 @@ import java.util.Set; +import org.jboss.wiki.Credentials; import org.jboss.wiki.WikiPage; import org.jboss.wiki.WikiSession; import org.jboss.wiki.plugins.RefsManipulatingInsidePlugin; public class ReferringPagesPlugin extends RefsManipulatingInsidePlugin { - - //FIXME : FAQJBossIIOP - - @Override public String process(WikiPage wikiPage, WikiSession wikiSession, HashMap<String, String> attributes) { Integer max = getNumericValue(attributes, "max"); Integer maxwidth = getNumericValue(attributes, "maxwidth"); + Credentials credentials = (Credentials)wikiSession.getAttribute("credentials"); + if (max == null) max = 10; @@ -31,7 +30,7 @@ String uid = wikiEngine.getUid(wikiPage.getName()); - Set<String> refsFor = getRefsFor(uid, max); + Set<String> refsFor = getRefsFor(uid, max, credentials, wikiSession); for (String ref : refsFor) { stringBuffer.append(getLink(ref, maxwidth)); Modified: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/com/ecyrd/jspwiki/plugin/UndefinedPagesPlugin.java =================================================================== --- trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/com/ecyrd/jspwiki/plugin/UndefinedPagesPlugin.java 2005-11-29 18:41:40 UTC (rev 1666) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/com/ecyrd/jspwiki/plugin/UndefinedPagesPlugin.java 2005-11-29 19:02:55 UTC (rev 1667) @@ -3,6 +3,7 @@ import java.util.HashMap; import java.util.Set; +import org.jboss.wiki.Credentials; import org.jboss.wiki.WikiPage; import org.jboss.wiki.WikiSession; import org.jboss.wiki.plugins.RefsManipulatingInsidePlugin; @@ -14,18 +15,20 @@ HashMap<String, String> attributes) { Integer maxwidth = getNumericValue(attributes, "maxwidth"); + Credentials credentials = (Credentials)wikiSession.getAttribute("credentials"); + if ((maxwidth != null) && (maxwidth < 4)) { maxwidth = 4; } StringBuffer stringBuffer = new StringBuffer(); - Set<String> allRefs = getAllRefs(); + Set<String> allRefs = getAllRefs(credentials, wikiSession); for (String pageName : allRefs) { if (!wikiEngine.pageExists(pageName)) { - stringBuffer.append(getLink(pageName, maxwidth)); + stringBuffer.append(getLink(wikiEngine.getUid(pageName), maxwidth)); } } Modified: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/com/ecyrd/jspwiki/plugin/UnusedPagesPlugin.java =================================================================== --- trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/com/ecyrd/jspwiki/plugin/UnusedPagesPlugin.java 2005-11-29 18:41:40 UTC (rev 1666) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/com/ecyrd/jspwiki/plugin/UnusedPagesPlugin.java 2005-11-29 19:02:55 UTC (rev 1667) @@ -3,6 +3,7 @@ import java.util.HashMap; import java.util.Set; +import org.jboss.wiki.Credentials; import org.jboss.wiki.WikiPage; import org.jboss.wiki.WikiSession; import org.jboss.wiki.plugins.RefsManipulatingInsidePlugin; @@ -14,6 +15,8 @@ HashMap<String, String> attributes) { Integer maxwidth = getNumericValue(attributes, "maxwidth"); + Credentials credentials = (Credentials)wikiSession.getAttribute("credentials"); + if ((maxwidth != null) && (maxwidth < 4)) { maxwidth = 4; } @@ -22,12 +25,12 @@ Set<String> pageNames = wikiEngine.getAllPageNames(); - Set<String> allRefs = getAllRefs(); + Set<String> allRefs = getAllRefs(credentials, wikiSession); for (String pageName : pageNames) { - if (!allRefs.contains(pageName)) { - stringBuffer.append(getLink(pageName, maxwidth)); + if (!allRefs.contains(wikiEngine.getUid(pageName))) { + stringBuffer.append(getLink(wikiEngine.getUid(pageName), maxwidth)); } } Modified: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/InsidePluginExcecutor.java =================================================================== --- trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/InsidePluginExcecutor.java 2005-11-29 18:41:40 UTC (rev 1666) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/InsidePluginExcecutor.java 2005-11-29 19:02:55 UTC (rev 1667) @@ -40,7 +40,7 @@ Properties props = new Properties(); try { - props.loadFromXML(WikiTypeHandler.class + props.loadFromXML(WikiTypeLoader.class .getResourceAsStream("/WikiInsidePlugins.xml")); } catch (InvalidPropertiesFormatException e) { log.error("WikiInsidePlugins.xml has bad format !", e); @@ -96,7 +96,7 @@ WikiInsidePlugin plugin = null; - log.info("executing plugin: "+pluginLink); + log.debug("executing plugin: "+pluginLink); if (!localPluginLink.matches(insidePluginRegex)) { // this is not a proper inside plugin link @@ -139,7 +139,7 @@ pluginDef = pluginDef.substring(className.length()).trim(); - log.info("Plugin name: "+className); + log.debug("Plugin name: "+className); if (className.indexOf('.') != -1) { // full class name @@ -191,7 +191,7 @@ attributes.put(attribName, attribValue); - log.info("new attribute: "+attribName+" "+attribValue); + log.debug("new attribute: "+attribName+" "+attribValue); } private void getAttrib2(String attrib, HashMap<String,String> attributes) { @@ -202,6 +202,6 @@ attributes.put(attribName, attribValue); - log.info("new attribute: "+attribName+" "+attribValue); + log.debug("new attribute: "+attribName+" "+attribValue); } } Modified: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiEngine.java =================================================================== --- trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiEngine.java 2005-11-29 18:41:40 UTC (rev 1666) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiEngine.java 2005-11-29 19:02:55 UTC (rev 1667) @@ -28,8 +28,6 @@ import java.util.Date; import java.util.HashMap; import java.util.HashSet; -import java.util.InvalidPropertiesFormatException; -import java.util.Iterator; import java.util.LinkedHashMap; import java.util.Map; import java.util.Properties; @@ -37,22 +35,15 @@ import java.util.TreeSet; import java.util.Map.Entry; import java.util.concurrent.Semaphore; -import java.util.regex.Matcher; -import java.util.regex.Pattern; import javax.portlet.ActionRequest; import javax.portlet.RenderRequest; -import javax.xml.parsers.SAXParser; -import javax.xml.parsers.SAXParserFactory; - import org.jboss.wiki.exceptions.PageNotEditedException; import org.jboss.wiki.exceptions.PageRenamingException; import org.jboss.wiki.exceptions.WikiException; import org.jboss.logging.Logger; -import java.io.File; - /** * * @author <a href="mailto:ds...@jb...">Damon Sicore</a> @@ -430,10 +421,11 @@ try { wikiTypes.clear(); - SAXParser sp = (SAXParserFactory.newInstance()).newSAXParser(); - sp.parse(WikiTypeHandler.class - .getResourceAsStream("/WikiTypes.xml"), - new WikiTypeHandler(this)); + WikiTypeLoader wikiTypeLoader = new WikiTypeLoader(this); + + wikiTypeLoader.parse(WikiTypeLoader.class + .getResourceAsStream("/WikiTypes.xml")); + } catch (Exception se) { log.error("Error while parsing WikiType configuration: " , se); Modified: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiPage.java =================================================================== --- trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiPage.java 2005-11-29 18:41:40 UTC (rev 1666) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiPage.java 2005-11-29 19:02:55 UTC (rev 1667) @@ -21,7 +21,6 @@ */ package org.jboss.wiki; -import java.io.File; import java.io.InputStream; import java.io.Serializable; import java.util.Calendar; @@ -64,6 +63,17 @@ private Set<Integer> expiredSessionIds; private HashMap<Integer, EditSessionWatcher> editSessionWatchers; + + + /** + * Temp variables (cleaned after every process ends) + */ + private HashMap<String, Object> tempVariables; + + /** + * Permanent variables - lives untiles JBoss Wiki is up + */ + private HashMap<String, Object> permVariables; /** * <p> @@ -141,6 +151,10 @@ String pageContent, int pageLastVersion, int thisVersion, Date editDate, WikiEngine wikiEngine, boolean viewable, boolean editable) { + + tempVariables = new HashMap<String, Object>(); + permVariables = new HashMap<String, Object>(); + name = pageName; lastAuthor = pageAuthor; this.pageContent = pageContent; @@ -354,7 +368,7 @@ } public void unlock(Credentials user, Integer editSessionId) { - log.info("UNLOCK: " + user.getName() + " save user: " + log.debug("UNLOCK: " + user.getName() + " save user: " + lockUser); if (editSessionWatchers.get(editSessionId) != null) { @@ -370,7 +384,7 @@ } if ((user.getName()).equals(lockUser)) { - log.info("Unlocking page"); + log.debug("Unlocking page"); lockTime = null; lockUser = null; } @@ -397,12 +411,12 @@ } if (this.lockTime == null) { - log.info("LOCK: " + user.getName()); + log.debug("LOCK: " + user.getName()); // page isn't locked or lock expired. Lets lock it. this.lockTime = now; this.lockUser = user.getName(); - log.info("LOCK: " + lockUser); + log.debug("LOCK: " + lockUser); retDate = null; } @@ -472,4 +486,36 @@ expiredSessionIds.add(id); wikiEngine.endEditing(id); } + + public void addTempVariable(String key, Object value, WikiSession wikiSession) { + tempVariables.put(wikiSession.getId()+key, value); + } + + public Object getTempVariable(String key, WikiSession wikiSession) { + return tempVariables.get(wikiSession.getId()+key); + } + + public void removeTempVariable(String key, WikiSession wikiSession) { + tempVariables.remove(wikiSession.getId()+key); + } + + public void clearTempVariables(WikiSession wikiSession) { + for (String key : tempVariables.keySet()) { + if (key.startsWith(wikiSession.getId())) { + tempVariables.remove(key); + } + } + } + + public void addPermVariable(String key, Object value) { + permVariables.put(key, value); + } + + public Object getPermVariable(String key) { + return permVariables.get(key); + } + + public void removePermVariable(String key) { + permVariables.remove(key); + } } Modified: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiSession.java =================================================================== --- trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiSession.java 2005-11-29 18:41:40 UTC (rev 1666) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiSession.java 2005-11-29 19:02:55 UTC (rev 1667) @@ -27,4 +27,6 @@ public void setAttribute(String attributeName, Object attribute); public void removeAttribute(String attributeName); + + public String getId(); } Modified: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiType.java =================================================================== --- trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiType.java 2005-11-29 18:41:40 UTC (rev 1666) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiType.java 2005-11-29 19:02:55 UTC (rev 1667) @@ -125,6 +125,9 @@ i++; } + // remove ALL temp variables for this session (as they are RELLLY temp) + newPage.clearTempVariables(wikiSession); + return newPage; } Deleted: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiTypeHandler.java =================================================================== --- trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiTypeHandler.java 2005-11-29 18:41:40 UTC (rev 1666) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiTypeHandler.java 2005-11-29 19:02:55 UTC (rev 1667) @@ -1,195 +0,0 @@ -/* - * 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.wiki; - -import java.util.Stack; - -import org.jboss.logging.Logger; -import org.xml.sax.Attributes; -import org.xml.sax.SAXException; -import org.xml.sax.SAXParseException; -import org.xml.sax.helpers.DefaultHandler; - -/** - * The WikiTypeHandler for parsing WikiType xml file. - * <p> - * - * @author <a href="mailto:ds...@jb...">Damon Sicore</a> - * @author <a href="mailto:tom...@jb...">Tomasz Szimanski</a> - * @version $Id$ - */ - -public class WikiTypeHandler extends DefaultHandler { - - private Stack<String> elements = new Stack<String>(); - - private boolean isInsidePlugin = false; - - private WikiEngine wikiEngine; - - private WikiType wikiType; - - private String wikiTypeName; - - private String pluginName = "", pluginClass = ""; - - private Logger log = Logger.getLogger(WikiTypeHandler.class); - - @Override - public void endDocument() throws SAXException { - super.endDocument(); - - log.info("WikiType configuration file parsed."); - } - - @Override - public void endElement(String uri, String localName, String qName) - throws SAXException { - super.endElement(uri, localName, qName); - - if (qName.equals("plugin")) { - isInsidePlugin = false; - } else if ((qName.equals("wikiType")) && (wikiType != null)) { - // add WikiType - - wikiEngine.addWikiType(wikiType.getName(), wikiType); - wikiType = null; - wikiTypeName = null; - } - - // log.info("End element: "+uri+" "+localName+" "+qName); - } - - @Override - public void error(SAXParseException e) throws SAXException { - super.error(e); - log.error("ERROR", e); - } - - @Override - public void fatalError(SAXParseException e) throws SAXException { - super.fatalError(e); - log.error("FATAL ERROR" , e); - } - - @Override - public void startDocument() throws SAXException { - super.startDocument(); - log.info("Parsing the WikiType configuration file..."); - } - - @Override - public void startElement(String uri, String localName, String qName, - Attributes attributes) throws SAXException { - super.startElement(uri, localName, qName, attributes); - /* - * log.info("Element: uri: "+uri+" lname: "+localName+" qname: - * "+qName); for (int i = 0; i < attributes.getLength(); i++) { - * log.info("Attr "+i+": "+attributes.getQName(i)+" = - * "+attributes.getIndex(attributes.getQName(i))); } - */ - if (qName.equals("plugin")) { - isInsidePlugin = true; - } else if (qName.equals("wikiType")) { - // start building new WikiType - - //wikiType = new WikiType(); - } - - elements.push(qName); - } - - @Override - public void warning(SAXParseException e) throws SAXException { - super.warning(e); - log.warn(e); - } - - public WikiTypeHandler(WikiEngine wikiEngine) { - this.wikiEngine = wikiEngine; - } - - @Override - public void characters(char[] ch, int start, int length) - throws SAXException { - super.characters(ch, start, length); - String element; - - String s = (new String(ch)).substring(start, start + length); - - if (((int) s.charAt(0) != 9) - && ((int) s.charAt(0) != 10) - && (!elements.isEmpty())) { - - element = elements.pop(); - - if ((element.equals("class")) && (!isInsidePlugin)) { - // class for wikiType - - try { - wikiType = (WikiType)Class.forName(s).newInstance(); - wikiType.setWikiEngine(wikiEngine); - } - catch(Exception e) { - log.error("Cannot load WikiType class: ",e); - } - - if (wikiTypeName != null) { - wikiType.setName(wikiTypeName); - - wikiTypeName = null; - } - - } else if ((element.equals("name")) || (element.equals("class"))) { - if (isInsidePlugin) { - // set name and class - if we have them both - add plugin to - // wikitype - - if (element.equals("class")) { - pluginClass = s; - } else { - pluginName = s; - } - - - if ((pluginName.length() > 0) && (pluginClass.length() > 0)) { - // we have em both - add a plugin - - wikiType.addPlugin(pluginName, pluginClass); - - pluginClass = pluginName = ""; - } - - - } else { - // here only if found name of WikiType (see prev. if clause) - if (wikiType != null) { - wikiType.setName(s); - } - else { - wikiTypeName = s; - } - } - } - } - } -} Added: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiTypeLoader.java =================================================================== --- trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiTypeLoader.java 2005-11-29 18:41:40 UTC (rev 1666) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiTypeLoader.java 2005-11-29 19:02:55 UTC (rev 1667) @@ -0,0 +1,106 @@ +package org.jboss.wiki; + +import java.io.IOException; +import java.io.InputStream; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; + +import org.jboss.logging.Logger; +import org.jboss.wiki.exceptions.WikiException; +import org.w3c.dom.DOMException; +import org.w3c.dom.Document; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; +import org.xml.sax.SAXException; + +public class WikiTypeLoader { + + private WikiEngine wikiEngine; + + private Logger log = Logger.getLogger(this.getClass()); + + public WikiTypeLoader(WikiEngine wikiEngine) { + this.wikiEngine = wikiEngine; + } + + public void parse(InputStream xmlFile) throws ParserConfigurationException, SAXException, IOException, DOMException, InstantiationException, IllegalAccessException, ClassNotFoundException { + DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder(); + + Document doc = db.parse(xmlFile); + + NodeList wikiTypes = doc.getElementsByTagName("wikiType"); + + for (int i = 0; i < wikiTypes.getLength(); i++) { + WikiType wikiType = null; + + String wikiTypeName = null; + + Node wikiTypeNode = wikiTypes.item(i); + + NodeList wikiTypeElements = wikiTypeNode.getChildNodes(); + + for (int j = 0; j < wikiTypeElements.getLength(); j++) { + + Node elem = wikiTypeElements.item(j); + + if (elem.getNodeName().equals("name")) { + if (wikiType != null) + wikiType.setName(unmarshallText(elem)); + else + wikiTypeName = unmarshallText(elem); + } + else if (elem.getNodeName().equals("class")) { + wikiType = (WikiType)Class.forName(unmarshallText(elem)).newInstance(); + wikiType.setWikiEngine(wikiEngine); + + if (wikiTypeName != null) + wikiType.setName(wikiTypeName); + } + else if (elem.getNodeName().equals("plugin")) { + NodeList pluginElems = elem.getChildNodes(); + + String pluginName = null; + String pluginClass = null; + + for (int k = 0; k < pluginElems.getLength(); k++) { + Node pluginElem = pluginElems.item(k); + + if (pluginElem.getNodeName().equals("name")) { + pluginName = unmarshallText(pluginElem); + } + else if (pluginElem.getNodeName().equals("class")) { + pluginClass = unmarshallText(pluginElem); + } + } + + if (pluginName != null && pluginClass != null) + wikiType.addPlugin(pluginName, pluginClass); + else + log.error("Cannot read plugin: name: "+pluginName+" class: "+pluginClass+" in WikiType: "+wikiType.getName()); + } + } + + wikiEngine.addWikiType(wikiType.getName(), wikiType); + log.info("Added WikiType: "+wikiType.getName()); + } + } + + private String unmarshallText(Node textNode) { + StringBuffer buf = new StringBuffer(); + + Node n; + NodeList nodes = textNode.getChildNodes(); + + for (int i = 0; i < nodes.getLength(); i++) { + n = nodes.item(i); + + if (n.getNodeType() == Node.TEXT_NODE) { + buf.append(n.getNodeValue()); + } + } + + return buf.toString(); + } +} Added: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/GetRefsFromPagePlugin.java =================================================================== --- trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/GetRefsFromPagePlugin.java 2005-11-29 18:41:40 UTC (rev 1666) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/GetRefsFromPagePlugin.java 2005-11-29 19:02:55 UTC (rev 1667) @@ -0,0 +1,82 @@ +package org.jboss.wiki.plugins; + +import java.util.Set; +import java.util.TreeSet; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import org.jboss.wiki.WikiPage; +import org.jboss.wiki.WikiPlugin; +import org.jboss.wiki.WikiSession; + +public class GetRefsFromPagePlugin extends WikiPlugin { + + private static final String pattern1 = "\\[.+\\]"; + + private static final String pattern2 = "\\[[\\w\\d\\s]+\\|.+\\]"; + + @Override + public WikiPage process(WikiPage wikiPage, WikiSession wikiSession) { + + Set<String> refs = (Set<String>) wikiPage.getPermVariable("refs"); + + if (refs == null || updateRefs()) { + refs = getRefsFrom(wikiPage.getContent()); + wikiPage.addPermVariable("refs", refs); + } + + return wikiPage; + } + + @Override + public void init() { + + } + + protected boolean updateRefs() { + return false; + } + + private Set<String> getRefsFrom(String pageContent) { + + Set<String> refs = new TreeSet<String>(); + + Matcher matcher = Pattern.compile(pattern1).matcher(pageContent); + + while (matcher.find()) { + String pageUid = pageContent.substring(matcher.start(), matcher + .end()); + + pageUid = pageUid.substring(1, pageUid.indexOf(']')); + + if (!HTMLTranslatorParts.isExternalLink(pageUid) && !HTMLTranslatorParts.isNumber(pageUid)) { + pageUid = HTMLTranslatorParts.cleanLink(pageUid); + + if (pageUid != null) { + refs.add(pageUid); + } + } + } + + matcher = Pattern.compile(pattern2).matcher(pageContent); + + while (matcher.find()) { + String pageUid = pageContent.substring(matcher.start(), matcher + .end()); + + pageUid = pageUid.substring(pageUid.indexOf('|') + 1, pageUid + .indexOf(']')); + + if (!HTMLTranslatorParts.isExternalLink(pageUid) && !HTMLTranslatorParts.isNumber(pageUid)) { + pageUid = HTMLTranslatorParts.cleanLink(pageUid); + + if (pageUid != null) { + refs.add(pageUid); + } + } + } + + return refs; + } + +} Modified: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/HTMLTranslatorParts.java =================================================================== --- trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/HTMLTranslatorParts.java 2005-11-29 18:41:40 UTC (rev 1666) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/HTMLTranslatorParts.java 2005-11-29 19:02:55 UTC (rev 1667) @@ -978,7 +978,7 @@ * NOT a number. */ - private boolean isNumber(String s) { + public static boolean isNumber(String s) { if (s == null) return false; Modified: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/RefsManipulatingInsidePlugin.java =================================================================== --- trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/RefsManipulatingInsidePlugin.java 2005-11-29 18:41:40 UTC (rev 1666) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/RefsManipulatingInsidePlugin.java 2005-11-29 19:02:55 UTC (rev 1667) @@ -5,8 +5,12 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; +import org.jboss.wiki.Credentials; +import org.jboss.wiki.SimpleCredentials; +import org.jboss.wiki.WikiContext; import org.jboss.wiki.WikiInsidePlugin; import org.jboss.wiki.WikiPage; +import org.jboss.wiki.WikiSession; public abstract class RefsManipulatingInsidePlugin extends WikiInsidePlugin { @@ -14,6 +18,8 @@ private static final String pattern1 = "\\[.+\\]"; private static final String pattern2 = "\\[[\\w\\d]+\\|.+\\]"; + private static final String refsWikiType = "refs"; + protected String getLink(String pageName, Integer maxwidth) { if ((maxwidth != null) && (pageName.length() > maxwidth)) { return "[" + pageName.substring(0, maxwidth - 3) + "...|" @@ -23,113 +29,43 @@ } } - protected Set<String> getAllRefs() { + protected Set<String> getAllRefs(Credentials credentials, WikiSession wikiSession) { Set<String> pageNames = wikiEngine.getAllPageNames(); Set<String> allRefs = new TreeSet<String>(); + WikiContext wikiContext = new WikiContext(credentials, wikiEngine.getWikiType("refs"), wikiSession); + for (String pageName : pageNames) { - WikiPage page = wikiEngine.getByName(pageName, null); + WikiPage page = wikiEngine.getByName(pageName, wikiContext); - Matcher matcher = Pattern.compile(pattern1).matcher( - page.getContent()); - - while (matcher.find()) { - String pageUid = page.getContent().substring(matcher.start(), - matcher.end()); - - pageUid = pageUid.substring(1, pageUid.indexOf(']')); - - if (!HTMLTranslatorParts.isExternalLink(pageUid)) { - pageUid = HTMLTranslatorParts.cleanLink(pageUid); - - if (pageUid != null) { - allRefs.add(wikiEngine.getRealName(pageUid)); - } - } - } - - matcher = Pattern.compile(pattern2).matcher(page.getContent()); - - while (matcher.find()) { - String pageUid = page.getContent().substring(matcher.start(), - matcher.end()); - - pageUid = pageUid.substring(pageUid.indexOf('|'), pageUid - .indexOf(']')); - - if (!HTMLTranslatorParts.isExternalLink(pageUid)) { - pageUid = HTMLTranslatorParts.cleanLink(pageUid); - - if (pageUid != null) { - allRefs.add(wikiEngine.getRealName(pageUid)); - } - } - } - + Set<String> refs = (Set<String>)page.getPermVariable("refs"); + + allRefs.addAll(refs); } return allRefs; } - protected Set<String> getRefsFor(String uid, Integer max) { + protected Set<String> getRefsFor(String uid, Integer max, Credentials credentials, WikiSession wikiSession) { Set<String> refsFor = new TreeSet<String>(); Set<String> pageNames = wikiEngine.getAllPageNames(); + WikiContext wikiContext = new WikiContext(credentials, wikiEngine.getWikiType("refs"), wikiSession); + for (String pageName : pageNames) { - if (max == 0) { - // escape for - break; - } - - WikiPage page = wikiEngine.getByName(pageName, null); - - boolean fits = false; - - Matcher matcher = Pattern.compile(pattern1).matcher( - page.getContent()); - - while (matcher.find() && (!fits)) { - String pageUid = page.getContent().substring(matcher.start(), - matcher.end()); - - pageUid = pageUid.substring(1, pageUid - .indexOf(']')); - - pageUid = HTMLTranslatorParts.cleanLink(pageUid); - - if (pageUid != null && pageUid.equals(uid)) { - fits = true; - } - } - - if (!fits) { - matcher = Pattern.compile(pattern2).matcher(page.getContent()); - - while (matcher.find() && (!fits)) { - String pageUid = page.getContent().substring( - matcher.start(), matcher.end()); - - pageUid = pageUid.substring(pageUid.indexOf('|')+1, pageUid - .indexOf(']')); - - pageUid = HTMLTranslatorParts.cleanLink(pageUid); - - if (pageUid != null && pageUid.equals(uid)) { - fits = true; - } - } - } - - if (fits) { + + WikiPage page = wikiEngine.getByName(pageName, wikiContext); + + Set<String> refs = (Set<String>)page.getPermVariable("refs"); + + if (refs.contains(uid)) { refsFor.add(page.getName()); - max--; } - } return refsFor; Added: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/UpdateRefs.java =================================================================== --- trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/UpdateRefs.java 2005-11-29 18:41:40 UTC (rev 1666) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/UpdateRefs.java 2005-11-29 19:02:55 UTC (rev 1667) @@ -0,0 +1,10 @@ +package org.jboss.wiki.plugins; + +public class UpdateRefs extends GetRefsFromPagePlugin { + + @Override + protected boolean updateRefs() { + return true; + } + +} Modified: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/test/java/org/jboss/wiki/test/WikiTest.java =================================================================== --- trunk/forge/portal-extensions/jbosswiki/wiki-common/src/test/java/org/jboss/wiki/test/WikiTest.java 2005-11-29 18:41:40 UTC (rev 1666) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/test/java/org/jboss/wiki/test/WikiTest.java 2005-11-29 19:02:55 UTC (rev 1667) @@ -178,5 +178,9 @@ public void removeAttribute(String attributeName) { attributes.remove(attributeName); } + + public String getId() { + return toString(); + } } \ No newline at end of file |