From: <jbo...@li...> - 2005-11-22 23:40:10
|
Author: szimano Date: 2005-11-22 18:39:58 -0500 (Tue, 22 Nov 2005) New Revision: 1624 Added: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/com/ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/com/ecyrd/ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/com/ecyrd/jspwiki/ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/com/ecyrd/jspwiki/plugin/ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/com/ecyrd/jspwiki/plugin/RecentChangesPlugin.java 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/plugins/HTMLTranslatorNoPlugins.java Modified: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/etc/WikiTypes.xml 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/WikiInsidePlugin.java trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/HTMLTranslatorParts.java trunk/forge/portal-extensions/jbosswiki/wiki-common/src/test/java/org/jboss/wiki/test/CheckContentTest.java Log: New inside plugins + modified way they are executed http://jira.jboss.com/jira/browse/JBWIKI-72 http://jira.jboss.com/jira/browse/JBWIKI-71 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-22 19:50:23 UTC (rev 1623) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/etc/WikiTypes.xml 2005-11-22 23:39:58 UTC (rev 1624) @@ -29,6 +29,10 @@ <class>org.jboss.wiki.plugins.HTMLTranslatorParts</class> </plugin> <plugin> + <name>wikiToHtmlTranslatorNoPlugins</name> + <class>org.jboss.wiki.plugins.HTMLTranslatorNoPlugins</class> + </plugin> + <plugin> <name>friendlyLinks</name> <class>org.jboss.wiki.plugins.FriendlyLinkPlugin</class> </plugin> Added: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/com/ecyrd/jspwiki/plugin/RecentChangesPlugin.java =================================================================== --- trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/com/ecyrd/jspwiki/plugin/RecentChangesPlugin.java 2005-11-22 19:50:23 UTC (rev 1623) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/com/ecyrd/jspwiki/plugin/RecentChangesPlugin.java 2005-11-22 23:39:58 UTC (rev 1624) @@ -0,0 +1,117 @@ +package com.ecyrd.jspwiki.plugin; + +// this package is only made for compatibility with JSPWiki + +import java.util.Calendar; +import java.util.Date; +import java.util.HashMap; +import java.util.Set; +import java.util.TreeMap; +import java.util.TreeSet; + +import org.jboss.wiki.WikiInsidePlugin; +import org.jboss.wiki.WikiPage; +import org.jboss.wiki.WikiSession; +import org.jboss.wiki.plugins.HTMLTranslatorParts; + +public class RecentChangesPlugin extends WikiInsidePlugin { + + @Override + public String process(WikiPage wikiPage, WikiSession wikiSession, + HashMap<String, String> attributes) { + StringBuilder recentChanges = new StringBuilder(); + + Integer numOfDays = Integer.MAX_VALUE; + + if (attributes.get("since") != null) { + + try { + numOfDays = Integer.valueOf(attributes.get("since")); + } catch (NumberFormatException e) { + numOfDays = Integer.MAX_VALUE; + } + + } + + if (numOfDays == Integer.MAX_VALUE) { + recentChanges.append("!!Full recent changes\n"); + } else + recentChanges.append("!!Recent changes from last ").append( + numOfDays).append(" days\n"); + + recentChanges.append("----\n"); + + int offset = recentChanges.length(); + + Set<String> pages = wikiEngine.getAllPageNames(); + + TreeMap<String, TreeSet<String>> sortedByDate = new TreeMap<String, TreeSet<String>>(); + + // get now date + Calendar now = Calendar.getInstance(); + Calendar then = Calendar.getInstance(); + now.setTime(new Date()); + + for (String name : pages) { + WikiPage temp = wikiEngine.getByName(name, null); + + // log.debug("name: "+name+" "+temp.getName()); + then.setTime(temp.getEditDate()); + + then.add(Calendar.DAY_OF_MONTH, numOfDays); + + if (then.after(now)) { + // this page has been edited in last numOfDays days + Calendar cal = Calendar.getInstance(); + String key; + + cal.setTime(temp.getEditDate()); + + String month = String.valueOf(cal.get(Calendar.MONTH) + 1); + String day = String.valueOf(cal.get(Calendar.DAY_OF_MONTH)); + + if (month.length() == 1) + month = "0" + month; + + if (day.length() == 1) + day = "0" + day; + + // create key + key = cal.get(Calendar.YEAR) + "/" + (month) + "/" + day; + + if (sortedByDate.get(key) == null) { + TreeSet<String> set = new TreeSet<String>(); + set.add(temp.getName()); + sortedByDate.put(key, set); + } else { + sortedByDate.get(key).add(temp.getName()); + } + } + + } + + // add pages to recentChanges page + + Set<String> keySet = sortedByDate.keySet(); + + for (String date : keySet) { + StringBuilder day = new StringBuilder(); + + day.append("!''").append(date).append("''\n"); + for (String pageName : sortedByDate.get(date)) { + day.append("[").append(pageName).append("]\\\\\n"); + } + + recentChanges.insert(offset, day.toString()); + } + + return recentChanges.toString(); + } + + @Override + public void init() { + // TODO Auto-generated method stub + + } + +} Added: 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-22 19:50:23 UTC (rev 1623) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/com/ecyrd/jspwiki/plugin/ReferringPagesPlugin.java 2005-11-22 23:39:58 UTC (rev 1624) @@ -0,0 +1,106 @@ +package com.ecyrd.jspwiki.plugin; + +import java.util.HashMap; +import java.util.Set; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import org.jboss.wiki.WikiInsidePlugin; +import org.jboss.wiki.WikiPage; +import org.jboss.wiki.WikiSession; +import org.jboss.wiki.plugins.HTMLTranslatorParts; + +public class ReferringPagesPlugin extends WikiInsidePlugin { + + @Override + public String process(WikiPage wikiPage, WikiSession wikiSession, + HashMap<String, String> attributes) { + Integer max = getNumericValue(attributes, "max"); + Integer maxwidth = getNumericValue(attributes, "maxwidth"); + + if (max == null) + max = 10; + + if ((maxwidth != null) && (maxwidth < 4)) { + maxwidth = 4; + } + + StringBuffer stringBuffer = new StringBuffer(); + + Set<String> pageNames = wikiEngine.getAllPageNames(); + + String uid = wikiEngine.getUid(wikiPage.getName()); + + String pattern1 = "\\[.+\\]"; + String pattern2 = "\\[[\\w\\d]+\\|.+\\]"; + 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('|'), pageUid + .indexOf(']')); + + pageUid = HTMLTranslatorParts.cleanLink(pageUid); + + if (pageUid != null && pageUid.equals(uid)) { + fits = true; + } + } + } + + if (fits) { + stringBuffer.append(getLink(page.getName(), maxwidth)); + max--; + } + + } + + return stringBuffer.toString(); + } + + private String getLink(String pageName, Integer maxwidth) { + if ((maxwidth != null) && (pageName.length() > maxwidth)) { + return "[" + pageName.substring(0, maxwidth - 3) + "...|" + + pageName + "]\\\\"; + } else { + return "[" + pageName + "]\\\\"; + } + } + + @Override + public void init() { + // TODO Auto-generated method stub + + } + +} Added: 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-22 19:50:23 UTC (rev 1623) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/com/ecyrd/jspwiki/plugin/UndefinedPagesPlugin.java 2005-11-22 23:39:58 UTC (rev 1624) @@ -0,0 +1,101 @@ +package com.ecyrd.jspwiki.plugin; + +import java.util.HashMap; +import java.util.Set; +import java.util.TreeSet; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import org.jboss.wiki.WikiInsidePlugin; +import org.jboss.wiki.WikiPage; +import org.jboss.wiki.WikiSession; +import org.jboss.wiki.plugins.HTMLTranslatorParts; + +public class UndefinedPagesPlugin extends WikiInsidePlugin { + + @Override + public String process(WikiPage wikiPage, WikiSession wikiSession, + HashMap<String, String> attributes) { + Integer maxwidth = getNumericValue(attributes, "maxwidth"); + + if ((maxwidth != null) && (maxwidth < 4)) { + maxwidth = 4; + } + + StringBuffer stringBuffer = new StringBuffer(); + + Set<String> pageNames = wikiEngine.getAllPageNames(); + + String pattern1 = "\\[.+\\]"; + String pattern2 = "\\[[\\w\\d]+\\|.+\\]"; + + Set<String> allRefs = new TreeSet<String>(); + + for (String pageName : pageNames) { + + WikiPage page = wikiEngine.getByName(pageName, null); + + 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)); + } + } + } + + } + + for (String pageName : allRefs) { + + if (!wikiEngine.pageExists(pageName)) { + stringBuffer.append(getLink(pageName, maxwidth)); + } + } + + return stringBuffer.toString(); + } + + private String getLink(String pageName, Integer maxwidth) { + if ((maxwidth != null) && (pageName.length() > maxwidth)) { + return "[" + pageName.substring(0, maxwidth - 3) + "...|" + + pageName + "]\\\\"; + } else { + return "[" + pageName + "]\\\\"; + } + } + + @Override + public void init() { + // TODO Auto-generated method stub + + } + +} Added: 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-22 19:50:23 UTC (rev 1623) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/com/ecyrd/jspwiki/plugin/UnusedPagesPlugin.java 2005-11-22 23:39:58 UTC (rev 1624) @@ -0,0 +1,101 @@ +package com.ecyrd.jspwiki.plugin; + +import java.util.HashMap; +import java.util.Set; +import java.util.TreeSet; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import org.jboss.wiki.WikiInsidePlugin; +import org.jboss.wiki.WikiPage; +import org.jboss.wiki.WikiSession; +import org.jboss.wiki.plugins.HTMLTranslatorParts; + +public class UnusedPagesPlugin extends WikiInsidePlugin { + + @Override + public String process(WikiPage wikiPage, WikiSession wikiSession, + HashMap<String, String> attributes) { + Integer maxwidth = getNumericValue(attributes, "maxwidth"); + + if ((maxwidth != null) && (maxwidth < 4)) { + maxwidth = 4; + } + + StringBuffer stringBuffer = new StringBuffer(); + + Set<String> pageNames = wikiEngine.getAllPageNames(); + + String pattern1 = "\\[.+\\]"; + String pattern2 = "\\[[\\w\\d]+\\|.+\\]"; + + Set<String> allRefs = new TreeSet<String>(); + + for (String pageName : pageNames) { + + WikiPage page = wikiEngine.getByName(pageName, null); + + 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)); + } + } + } + + } + + for (String pageName : pageNames) { + + if (!allRefs.contains(pageName)) { + stringBuffer.append(getLink(pageName, maxwidth)); + } + } + + return stringBuffer.toString(); + } + + private String getLink(String pageName, Integer maxwidth) { + if ((maxwidth != null) && (pageName.length() > maxwidth)) { + return "[" + pageName.substring(0, maxwidth - 3) + "...|" + + pageName + "]\\\\"; + } else { + return "[" + pageName + "]\\\\"; + } + } + + @Override + public void init() { + // TODO Auto-generated method stub + + } + +} Added: 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-22 19:50:23 UTC (rev 1623) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/InsidePluginExcecutor.java 2005-11-22 23:39:58 UTC (rev 1624) @@ -0,0 +1,207 @@ +package org.jboss.wiki; + +import java.io.IOException; +import java.util.HashMap; +import java.util.InvalidPropertiesFormatException; +import java.util.Iterator; +import java.util.Properties; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import org.jboss.logging.Logger; + +public class InsidePluginExcecutor { + + private static final String attribType1 = "[\\s]+[\\w]+=([\\d]+|true|false),?"; + + private static final String attribType2 = "[\\s]+[\\w]+='(\\\\'|[^'])+',?"; + + private static final String insidePluginRegex = "\\{(INSERT[\\s]){0,1}[\\s]*[.\\w]+([\\s]+WHERE[\\s]*)?(" + + attribType1 + "|" + attribType2 + ")*[\\s]*\\}"; + + private HashMap<String, WikiInsidePlugin> insidePlugins; + + private Logger log; + + private WikiEngine wikiEngine; + + public InsidePluginExcecutor(WikiEngine wikiEngine) { + + this.wikiEngine = wikiEngine; + + log = Logger.getLogger(this.getClass()); + + insidePlugins = new HashMap<String, WikiInsidePlugin>(); + + loadInsidePlugins(); + } + + private void loadInsidePlugins() { + Properties props = new Properties(); + + try { + props.loadFromXML(WikiTypeHandler.class + .getResourceAsStream("/WikiInsidePlugins.xml")); + } catch (InvalidPropertiesFormatException e) { + log.error("WikiInsidePlugins.xml has bad format !", e); + } catch (IOException e) { + log.error("There is no WikiInsidePlugins.xml file !", e); + } + + Iterator it = props.keySet().iterator(); + + while (it.hasNext()) { + String pluginName = (String) it.next(); + log.info("Loading inside plugin: " + pluginName + " class: " + + props.getProperty(pluginName)); + + WikiInsidePlugin wikiInsidePlugin = null; + + try { + wikiInsidePlugin = loadObject(props.getProperty(pluginName)); + + insidePlugins.put(pluginName, wikiInsidePlugin); + + } catch (InstantiationException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (IllegalAccessException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (ClassNotFoundException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + } + + private WikiInsidePlugin loadObject(String className) + throws InstantiationException, IllegalAccessException, + ClassNotFoundException { + WikiInsidePlugin wikiInsidePlugin = (WikiInsidePlugin) Class.forName(className).newInstance(); + + wikiInsidePlugin.setWikiEngine(wikiEngine); + + return wikiInsidePlugin; + } + + public String executeInsidePlugin(String pluginLink, WikiPage wikiPage, + WikiSession wikiSession) { + + // old inside plugin regex + // "\\{[\\w]+([\\s]+[\\w]+='[\\d\\w\\s]+')*\\s*\\}" + + String localPluginLink = pluginLink; + + WikiInsidePlugin plugin = null; + + log.info("executing plugin: "+pluginLink); + + if (!localPluginLink.matches(insidePluginRegex)) { + // this is not a proper inside plugin link + + return "''INSIDE PLUGIN ERROR: " + pluginLink + + " is not a proper plugin link''"; + } + + plugin = getPluginObject(localPluginLink); + + if (plugin != null) { + HashMap<String, String> attributes = extractAttribs(localPluginLink); + + return plugin.process(wikiPage, wikiSession, + attributes); + } + else + return "''INSIDE PLUGIN ERROR: There is no plugin: " + pluginLink + + "''"; + + } + + private WikiInsidePlugin getPluginObject(String pluginDef) { + WikiInsidePlugin wikiInsidePlugin = null; + + if (pluginDef.startsWith("{")) + pluginDef = pluginDef.substring(1); + + pluginDef = pluginDef.trim(); + + if (pluginDef.startsWith("INSERT")) { + pluginDef = pluginDef.substring("INSERT".length()); + } + + pluginDef = pluginDef.trim(); + + int spacePos = pluginDef.indexOf(" "); + + String className = pluginDef.substring(0, (spacePos != -1) ? spacePos : pluginDef.indexOf("}")); + + pluginDef = pluginDef.substring(className.length()).trim(); + + log.info("Plugin name: "+className); + + if (className.indexOf('.') != -1) { + // full class name + try { + wikiInsidePlugin = loadObject(className); + } catch (InstantiationException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (IllegalAccessException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (ClassNotFoundException e) { + // just return null + } + } else { + wikiInsidePlugin = insidePlugins.get(className); + } + + return wikiInsidePlugin; + } + + private HashMap<String, String> extractAttribs(String pluginDef) { + + HashMap<String, String> attributes = new HashMap<String, String>(); + + Matcher matcher = Pattern.compile(attribType1).matcher(pluginDef); + + while (matcher.find()) { + String attrib = pluginDef.substring(matcher.start(), matcher.end()); + + getAttrib1(attrib.trim(), attributes); + } + + matcher = Pattern.compile(attribType2).matcher(pluginDef); + + while (matcher.find()) { + String attrib = pluginDef.substring(matcher.start(), matcher.end()); + + getAttrib2(attrib.trim(), attributes); + } + + return attributes; + } + + private void getAttrib1(String attrib, HashMap<String,String> attributes) { + // digits or true/false + String attribName = attrib.substring(0, attrib.indexOf("=")); + String attribValue = attrib.substring(attrib.indexOf("=")+1, attrib.length()); + + attributes.put(attribName, attribValue); + + log.info("new attribute: "+attribName+" "+attribValue); + } + + private void getAttrib2(String attrib, HashMap<String,String> attributes) { + // string, digits ... also special characters (\' = ') + + String attribName = attrib.substring(0, attrib.indexOf("=")); + String attribValue = attrib.substring(attrib.indexOf('\'')+1, attrib.length()-1).replaceAll("\\\\'", "'"); + + attributes.put(attribName, attribValue); + + log.info("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-22 19:50:23 UTC (rev 1623) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiEngine.java 2005-11-22 23:39:58 UTC (rev 1624) @@ -78,8 +78,6 @@ private HashMap<String, WikiPage> pages; - private HashMap<String, WikiInsidePlugin> insidePlugins; - private HashMap<String, WikiType> wikiTypes; private MediaDataSource mediaDataSource; @@ -103,7 +101,9 @@ private Class credentialsClass; private Logger log; - + + private InsidePluginExcecutor insidePluginExcecutor; + /** * <p> * Does ... @@ -299,7 +299,8 @@ null, this, true, true); loadWikiTypes(); - loadInsidePlugins(); + + insidePluginExcecutor = new InsidePluginExcecutor(this); Properties jbosswikiprops = new Properties(); @@ -439,50 +440,8 @@ } } - private void loadInsidePlugins() { - insidePlugins = new HashMap<String, WikiInsidePlugin>(); + - Properties props = new Properties(); - - try { - props.loadFromXML(WikiTypeHandler.class - .getResourceAsStream("/WikiInsidePlugins.xml")); - } catch (InvalidPropertiesFormatException e) { - log.error("WikiInsidePlugins.xml has bad format !",e); - } catch (IOException e) { - log.error("There is no WikiInsidePlugins.xml file !",e); - } - - Iterator it = props.keySet().iterator(); - - while (it.hasNext()) { - String pluginName = (String) it.next(); - log.info("Loading inside plugin: " - + pluginName + " class: " + props.getProperty(pluginName)); - - WikiInsidePlugin wikiInsidePlugin = null; - - try { - wikiInsidePlugin = (WikiInsidePlugin) Class.forName( - props.getProperty(pluginName)).newInstance(); - - wikiInsidePlugin.setWikiEngine(this); - - insidePlugins.put(pluginName, wikiInsidePlugin); - } catch (InstantiationException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (IllegalAccessException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (ClassNotFoundException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - - } - /** * <p> * Does ... @@ -645,43 +604,9 @@ public String executeInsidePlugin(String pluginLink, WikiPage wikiPage, WikiSession wikiSession) { - String pluginName = null; - - if (!pluginLink - .matches("\\{[\\w]+([\\s]+[\\w]+='[\\d\\w\\s]+')*\\s*\\}")) { - // this is not a proper inside plugin link - - return "<i>INSIDE PLUGIN ERROR: " + pluginLink - + " is not a proper plugin link</i>"; - } - - pluginName = pluginLink.substring(1, - (pluginLink.indexOf(" ") != -1) ? pluginLink.indexOf(" ") - : pluginLink.indexOf("}")); - - // get attributes - HashMap<String, String> attributes = new HashMap<String, String>(); - - Matcher matcher = Pattern.compile("[\\w]+='[\\d\\w\\s]+'").matcher( - pluginLink); - - while (matcher.find()) { - String attrib = pluginLink - .substring(matcher.start(), matcher.end()); - - String attribName = attrib.substring(0, attrib.indexOf("'") - 1); - String attribValue = attrib.substring(attrib.indexOf("'") + 1, - attrib.lastIndexOf("'")); - - attributes.put(attribName, attribValue); - } - - if (insidePlugins.containsKey(pluginName)) - return insidePlugins.get(pluginName).process(wikiPage, wikiSession, - attributes); - else - return "<i>INSIDE PLUGIN ERROR: There is no plugin: " + pluginName - + "</i>"; + + return insidePluginExcecutor.executeInsidePlugin(pluginLink, wikiPage, wikiSession); + } public boolean deletePage(String pageName, boolean deleteSubpages) { Modified: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiInsidePlugin.java =================================================================== --- trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiInsidePlugin.java 2005-11-22 19:50:23 UTC (rev 1623) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiInsidePlugin.java 2005-11-22 23:39:58 UTC (rev 1624) @@ -122,5 +122,19 @@ this.name = name; } + protected Integer getNumericValue(HashMap<String, String> attributes, String valName) { + String val = attributes.get(valName); + + if (val != null) { + try { + return Integer.valueOf(val); + } catch (NumberFormatException e) { + return null; + } + } + else { + return null; + } + } } Added: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/HTMLTranslatorNoPlugins.java =================================================================== --- trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/HTMLTranslatorNoPlugins.java 2005-11-22 19:50:23 UTC (rev 1623) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/HTMLTranslatorNoPlugins.java 2005-11-22 23:39:58 UTC (rev 1624) @@ -0,0 +1,5 @@ +package org.jboss.wiki.plugins; + +public class HTMLTranslatorNoPlugins extends HTMLTranslatorParts { + private boolean executePlugins = true; +} 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-22 19:50:23 UTC (rev 1623) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/HTMLTranslatorParts.java 2005-11-22 23:39:58 UTC (rev 1624) @@ -125,6 +125,8 @@ // stores the name of the wiki page we are currently processing private String pageName = ""; + private boolean executePlugins = true; + public HTMLTranslatorParts() { } @@ -808,7 +810,12 @@ if (isPluginLink(link)) { //return null; // we do not include plugin links for now - return wikiEngine.executeInsidePlugin(link, wPage, wikiSession); + if (executePlugins ) { + return HTMLTranslatorParts.pagePartRegexStart+wikiEngine.executeInsidePlugin(link, wPage, wikiSession)+HTMLTranslatorParts.pagePartRegexEnd; + } + else { + return link; + } } int border = link.indexOf('|'); if (border != -1) // [text|link] case Modified: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/test/java/org/jboss/wiki/test/CheckContentTest.java =================================================================== --- trunk/forge/portal-extensions/jbosswiki/wiki-common/src/test/java/org/jboss/wiki/test/CheckContentTest.java 2005-11-22 19:50:23 UTC (rev 1623) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/test/java/org/jboss/wiki/test/CheckContentTest.java 2005-11-22 23:39:58 UTC (rev 1624) @@ -10,7 +10,7 @@ public class CheckContentTest extends WikiTest { - private static final String PATTERN = "<i>INSIDE PLUGIN ERROR:.*</i>"; + private static final String PATTERN = "INSIDE PLUGIN ERROR:.*\\}"; public void testNotExisitngInsidePlugins() { // this test doesn't fail but only generates list of pages that use improper INSIDE PLUGINS |