You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jspwiki.apache.org by ju...@apache.org on 2012/12/26 23:16:54 UTC

svn commit: r1426051 - /incubator/jspwiki/trunk/src/org/apache/wiki/filters/

Author: juanpablo
Date: Wed Dec 26 22:16:53 2012
New Revision: 1426051

URL: http://svn.apache.org/viewvc?rev=1426051&view=rev
Log:
adapted to use new Filter API.

Added:
    incubator/jspwiki/trunk/src/org/apache/wiki/filters/DefaultFilterManager.java
Modified:
    incubator/jspwiki/trunk/src/org/apache/wiki/filters/BasicPageFilter.java
    incubator/jspwiki/trunk/src/org/apache/wiki/filters/CreoleFilter.java
    incubator/jspwiki/trunk/src/org/apache/wiki/filters/FilterException.java
    incubator/jspwiki/trunk/src/org/apache/wiki/filters/FilterManager.java
    incubator/jspwiki/trunk/src/org/apache/wiki/filters/PageFilter.java
    incubator/jspwiki/trunk/src/org/apache/wiki/filters/PingWeblogsComFilter.java
    incubator/jspwiki/trunk/src/org/apache/wiki/filters/ProfanityFilter.java
    incubator/jspwiki/trunk/src/org/apache/wiki/filters/RedirectException.java
    incubator/jspwiki/trunk/src/org/apache/wiki/filters/SpamFilter.java

Modified: incubator/jspwiki/trunk/src/org/apache/wiki/filters/BasicPageFilter.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/trunk/src/org/apache/wiki/filters/BasicPageFilter.java?rev=1426051&r1=1426050&r2=1426051&view=diff
==============================================================================
--- incubator/jspwiki/trunk/src/org/apache/wiki/filters/BasicPageFilter.java (original)
+++ incubator/jspwiki/trunk/src/org/apache/wiki/filters/BasicPageFilter.java Wed Dec 26 22:16:53 2012
@@ -29,10 +29,8 @@ import org.apache.wiki.WikiEngine;
  *  and implement only methods that you need.
  *
  */
-public class BasicPageFilter
-    implements PageFilter
+public class BasicPageFilter extends org.apache.wiki.api.filters.BasicPageFilter
 {
-    protected WikiEngine m_engine;
   
     /**
      *  If you override this, you should call super.initialize() first.
@@ -80,10 +78,4 @@ public class BasicPageFilter
     {
     }
     
-    /**
-     *  {@inheritDoc}
-     */
-    public void destroy( WikiEngine engine ) 
-    {
-    }
 }

Modified: incubator/jspwiki/trunk/src/org/apache/wiki/filters/CreoleFilter.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/trunk/src/org/apache/wiki/filters/CreoleFilter.java?rev=1426051&r1=1426050&r2=1426051&view=diff
==============================================================================
--- incubator/jspwiki/trunk/src/org/apache/wiki/filters/CreoleFilter.java (original)
+++ incubator/jspwiki/trunk/src/org/apache/wiki/filters/CreoleFilter.java Wed Dec 26 22:16:53 2012
@@ -20,10 +20,11 @@ package org.apache.wiki.filters;
 
 import java.util.Properties;
 
+import org.apache.log4j.Logger;
 import org.apache.wiki.WikiContext;
 import org.apache.wiki.WikiEngine;
-import org.apache.wiki.filters.BasicPageFilter;
-import org.apache.wiki.filters.FilterException;
+import org.apache.wiki.api.filters.BasicPageFilter;
+import org.apache.wiki.api.exceptions.FilterException;
 import org.apache.wiki.parser.CreoleToJSPWikiTranslator;
 
 /**
@@ -49,6 +50,9 @@ import org.apache.wiki.parser.CreoleToJS
 
 public class CreoleFilter extends BasicPageFilter 
 {
+    
+    private static final Logger log = Logger.getLogger(CreoleFilter.class);
+    
     /**
      *  {@inheritDoc}
      */
@@ -70,7 +74,7 @@ public class CreoleFilter extends BasicP
         }
         catch(Exception e )
         {
-            e.printStackTrace();
+            log.error( e.getMessage(), e );
             return e.getMessage();
         }
     }
@@ -78,7 +82,6 @@ public class CreoleFilter extends BasicP
     /**
      *  {@inheritDoc}
      */
-
     public String preTranslate(WikiContext wikiContext, String content)
         throws FilterException 
     {
@@ -86,11 +89,10 @@ public class CreoleFilter extends BasicP
         {
             Properties prop = wikiContext.getEngine().getWikiProperties();
             return new CreoleToJSPWikiTranslator().translate(prop ,content);
-            
         } 
         catch (Exception e) 
         {
-            e.printStackTrace();
+            log.error( e.getMessage(), e );
             return content
                    + "\n \n %%error \n"
                    + "[CreoleFilterError]: This page was not translated by the CreoleFilter due to "

Added: incubator/jspwiki/trunk/src/org/apache/wiki/filters/DefaultFilterManager.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/trunk/src/org/apache/wiki/filters/DefaultFilterManager.java?rev=1426051&view=auto
==============================================================================
--- incubator/jspwiki/trunk/src/org/apache/wiki/filters/DefaultFilterManager.java (added)
+++ incubator/jspwiki/trunk/src/org/apache/wiki/filters/DefaultFilterManager.java Wed Dec 26 22:16:53 2012
@@ -0,0 +1,532 @@
+/* 
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.  
+ */
+package org.apache.wiki.filters;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.*;
+
+import org.apache.log4j.Logger;
+import org.jdom.Document;
+import org.jdom.Element;
+import org.jdom.JDOMException;
+import org.jdom.input.SAXBuilder;
+import org.jdom.xpath.XPath;
+
+import org.apache.wiki.WikiContext;
+import org.apache.wiki.WikiEngine;
+import org.apache.wiki.WikiException;
+import org.apache.wiki.api.filters.PageFilter;
+import org.apache.wiki.api.exceptions.FilterException;
+import org.apache.wiki.event.WikiEventManager;
+import org.apache.wiki.event.WikiPageEvent;
+import org.apache.wiki.modules.ModuleManager;
+import org.apache.wiki.modules.WikiModuleInfo;
+import org.apache.wiki.util.ClassUtil;
+import org.apache.wiki.util.PriorityList;
+
+
+/**
+ *  Manages the page filters.  Page filters are components that can be executed
+ *  at certain places:
+ *  <ul>
+ *    <li>Before the page is translated into HTML.
+ *    <li>After the page has been translated into HTML.
+ *    <li>Before the page is saved.
+ *    <li>After the page has been saved.
+ *  </ul>
+ * 
+ *  Using page filters allows you to modify the page data on-the-fly, and do things like
+ *  adding your own custom WikiMarkup.
+ * 
+ *  <p>
+ *  The initial page filter configuration is kept in a file called "filters.xml".  The
+ *  format is really very simple:
+ *  <pre>
+ *  <?xml version="1.0"?>
+ * 
+ *  <pagefilters>
+ *
+ *    <filter>
+ *      <class>org.apache.wiki.filters.ProfanityFilter</class>
+ *    </filter>
+ *  
+ *    <filter>
+ *      <class>org.apache.wiki.filters.TestFilter</class>
+ *
+ *      <param>
+ *        <name>foobar</name>
+ *        <value>Zippadippadai</value>
+ *      </param>
+ *
+ *      <param>
+ *        <name>blatblaa</name>
+ *        <value>5</value>
+ *      </param>
+ *
+ *    </filter>
+ *  </pagefilters>
+ *  </pre>
+ *
+ *  The &lt;filter> -sections define the filters.  For more information, please see
+ *  the PageFilterConfiguration page in the JSPWiki distribution.
+ *  
+ * FIXME: this class should be final in 2.10. It isn't right now because of compatibility reasons
+ */
+public class DefaultFilterManager extends ModuleManager implements org.apache.wiki.api.filters.FilterManager
+{
+    private PriorityList<PageFilter> m_pageFilters = new PriorityList<PageFilter>();
+
+    private Map<String, PageFilterInfo> m_filterClassMap = new HashMap<String,PageFilterInfo>();
+
+    private static final Logger log = Logger.getLogger(DefaultFilterManager.class);
+
+    /**
+     *  Constructs a new FilterManager object.
+     *  
+     *  @param engine The WikiEngine which owns the FilterManager
+     *  @param props Properties to initialize the FilterManager with
+     *  @throws WikiException If something goes wrong.
+     */
+    public DefaultFilterManager( WikiEngine engine, Properties props )
+        throws WikiException
+    {
+        super( engine );
+        initialize( props );
+    }
+
+    /**
+     *  Adds a page filter to the queue.  The priority defines in which
+     *  order the page filters are run, the highest priority filters go
+     *  in the queue first.
+     *  <p>
+     *  In case two filters have the same priority, their execution order
+     *  is the insertion order.
+     *
+     *  @since 2.1.44.
+     *  @param f PageFilter to add
+     *  @param priority The priority in which position to add it in.
+     *  @throws IllegalArgumentException If the PageFilter is null or invalid.
+     */
+    public void addPageFilter( PageFilter f, int priority ) throws IllegalArgumentException
+    {
+        if( f == null )
+        {
+            throw new IllegalArgumentException("Attempt to provide a null filter - this should never happen.  Please check your configuration (or if you're a developer, check your own code.)");
+        }
+
+        m_pageFilters.add( f, priority );
+    }
+
+    private void initPageFilter( String className, Properties props )
+    {
+        try
+        {
+            PageFilterInfo info = m_filterClassMap.get( className );
+            
+            if( info != null && !checkCompatibility(info) )
+            {
+                String msg = "Filter '"+info.getName()+"' not compatible with this version of JSPWiki";
+                log.warn(msg);
+                return;
+            }
+            
+            int priority = 0; // FIXME: Currently fixed.
+
+            Class cl = ClassUtil.findClass( "org.apache.wiki.filters",
+                                            className );
+
+            PageFilter filter = (PageFilter)cl.newInstance();
+
+            filter.initialize( m_engine, props );
+
+            addPageFilter( filter, priority );
+            log.info("Added page filter "+cl.getName()+" with priority "+priority);
+        }
+        catch( ClassNotFoundException e )
+        {
+            log.error("Unable to find the filter class: "+className);
+        }
+        catch( InstantiationException e )
+        {
+            log.error("Cannot create filter class: "+className);
+        }
+        catch( IllegalAccessException e )
+        {
+            log.error("You are not allowed to access class: "+className);
+        }
+        catch( ClassCastException e )
+        {
+            log.error("Suggested class is not a PageFilter: "+className);
+        }
+        catch( FilterException e )
+        {
+            log.error("Filter "+className+" failed to initialize itself.", e);
+        }
+    }
+
+
+    /**
+     *  Initializes the filters from an XML file.
+     *  
+     *  @param props The list of properties.  Typically jspwiki.properties
+     *  @throws WikiException If something goes wrong.
+     */
+    protected void initialize( Properties props )
+        throws WikiException
+    {
+        InputStream xmlStream = null;
+        String      xmlFile   = props.getProperty( PROP_FILTERXML );
+
+        try
+        {
+            registerFilters();
+            
+            if( m_engine.getServletContext() != null )
+            {
+                log.debug( "Attempting to locate " + DEFAULT_XMLFILE + " from servlet context." );
+                if( xmlFile == null )
+                {
+                    xmlStream = m_engine.getServletContext().getResourceAsStream( DEFAULT_XMLFILE );
+                }
+                else
+                {
+                    xmlStream = m_engine.getServletContext().getResourceAsStream( xmlFile );
+                }
+            }
+
+            if( xmlStream == null )
+            {
+                // just a fallback element to the old behaviour prior to 2.5.8
+                log.debug( "Attempting to locate filters.xml from class path." );
+
+                if( xmlFile == null )
+                {
+                    xmlStream = getClass().getResourceAsStream( "/filters.xml" );
+                }
+                else
+                {
+                    xmlStream = getClass().getResourceAsStream( xmlFile );
+                }
+            }
+
+            if( (xmlStream == null) && (xmlFile != null) )
+            {
+                log.debug("Attempting to load property file "+xmlFile);
+                xmlStream = new FileInputStream( new File(xmlFile) );
+            }
+
+            if( xmlStream == null )
+            {
+                log.info("Cannot find property file for filters (this is okay, expected to find it as: '"+ (xmlFile == null ? DEFAULT_XMLFILE : xmlFile ) +"')");
+                return;
+            }
+            
+            parseConfigFile( xmlStream );
+        }
+        catch( IOException e )
+        {
+            log.error("Unable to read property file", e);
+        }
+        catch( JDOMException e )
+        {
+            log.error("Problem in the XML file",e);
+        }
+    }
+
+    /**
+     *  Parses the XML filters configuration file.
+     *  
+     * @param xmlStream
+     * @throws JDOMException
+     * @throws IOException
+     */
+    private void parseConfigFile( InputStream xmlStream )
+        throws JDOMException,
+               IOException
+    {
+        Document doc = new SAXBuilder().build( xmlStream );
+        
+        XPath xpath = XPath.newInstance("/pagefilters/filter");
+    
+        List nodes = xpath.selectNodes( doc );
+        
+        for( Iterator i = nodes.iterator(); i.hasNext(); )
+        {
+            Element f = (Element) i.next();
+            
+            String filterClass = f.getChildText("class");
+
+            Properties props = new Properties();
+            
+            List params = f.getChildren("param");
+            
+            for( Iterator par = params.iterator(); par.hasNext(); )
+            {
+                Element p = (Element) par.next();
+                
+                props.setProperty( p.getChildText("name"), p.getChildText("value") );
+            }
+
+            initPageFilter( filterClass, props );
+        }
+        
+    }
+    
+ 
+    /**
+     *  Does the filtering before a translation.
+     *  
+     *  @param context The WikiContext
+     *  @param pageData WikiMarkup data to be passed through the preTranslate chain.
+     *  @throws FilterException If any of the filters throws a FilterException
+     *  @return The modified WikiMarkup
+     *  
+     *  @see PageFilter#preTranslate(WikiContext, String)
+     */
+    public String doPreTranslateFiltering( WikiContext context, String pageData )
+        throws FilterException
+    {
+        fireEvent( WikiPageEvent.PRE_TRANSLATE_BEGIN, context );
+
+        for( PageFilter f : m_pageFilters )
+        {
+            pageData = f.preTranslate( context, pageData );
+        }
+
+        fireEvent( WikiPageEvent.PRE_TRANSLATE_END, context );
+
+        return pageData;
+    }
+
+    /**
+     *  Does the filtering after HTML translation.
+     *  
+     *  @param context The WikiContext
+     *  @param htmlData HTML data to be passed through the postTranslate
+     *  @throws FilterException If any of the filters throws a FilterException
+     *  @return The modified HTML
+     *  @see PageFilter#postTranslate(WikiContext, String)
+     */
+    public String doPostTranslateFiltering( WikiContext context, String htmlData )
+        throws FilterException
+    {
+        fireEvent( WikiPageEvent.POST_TRANSLATE_BEGIN, context );
+
+        for( PageFilter f : m_pageFilters )
+        {
+            htmlData = f.postTranslate( context, htmlData );
+        }
+
+        fireEvent( WikiPageEvent.POST_TRANSLATE_END, context );
+
+        return htmlData;
+    }
+
+    /**
+     *  Does the filtering before a save to the page repository.
+     *  
+     *  @param context The WikiContext
+     *  @param pageData WikiMarkup data to be passed through the preSave chain.
+     *  @throws FilterException If any of the filters throws a FilterException
+     *  @return The modified WikiMarkup
+     *  @see PageFilter#preSave(WikiContext, String)
+     */
+    public String doPreSaveFiltering( WikiContext context, String pageData )
+        throws FilterException
+    {
+        fireEvent( WikiPageEvent.PRE_SAVE_BEGIN, context );
+
+        for( PageFilter f : m_pageFilters )
+        {
+            pageData = f.preSave( context, pageData );
+        }
+
+        fireEvent( WikiPageEvent.PRE_SAVE_END, context );
+
+        return pageData;
+    }
+
+    /**
+     *  Does the page filtering after the page has been saved.
+     * 
+     *  @param context The WikiContext
+     *  @param pageData WikiMarkup data to be passed through the postSave chain.
+     *  @throws FilterException If any of the filters throws a FilterException
+     * 
+     *  @see PageFilter#postSave(WikiContext, String)
+     */
+    public void doPostSaveFiltering( WikiContext context, String pageData )
+        throws FilterException
+    {
+        fireEvent( WikiPageEvent.POST_SAVE_BEGIN, context );
+
+        for( PageFilter f : m_pageFilters )
+        {
+            // log.info("POSTSAVE: "+f.toString() );
+            f.postSave( context, pageData );
+        }
+
+        fireEvent( WikiPageEvent.POST_SAVE_END, context );
+    }
+
+    /**
+     *  Returns the list of filters currently installed.  Note that this is not
+     *  a copy, but the actual list.  So be careful with it.
+     *  
+     *  @return A List of PageFilter objects
+     */
+    public List< PageFilter > getFilterList()
+    {
+        return m_pageFilters;
+    }
+
+    /**
+     * 
+     * Notifies PageFilters to clean up their ressources.
+     *
+     */
+    public void destroy()
+    {
+        for( PageFilter f : m_pageFilters )
+        {
+            f.destroy( m_engine );
+        }        
+    }
+    
+    // events processing .......................................................
+
+    /**
+     *  Fires a WikiPageEvent of the provided type and WikiContext.
+     *  Invalid WikiPageEvent types are ignored.
+     *
+     * @see org.apache.wiki.event.WikiPageEvent 
+     * @param type      the WikiPageEvent type to be fired.
+     * @param context   the WikiContext of the event.
+     */
+    public final void fireEvent( int type, WikiContext context )
+    {
+        if ( WikiEventManager.isListening(this) && WikiPageEvent.isValidType(type) )
+        {
+            WikiEventManager.fireEvent(this,
+                    new WikiPageEvent(m_engine,type,context.getPage().getName()) );
+        }
+    }
+
+    /**
+     *  {@inheritDoc}
+     */
+    @SuppressWarnings("unchecked")
+    public Collection modules()
+    {
+        ArrayList modules = new ArrayList();
+        
+        modules.addAll( m_pageFilters );
+        
+        return modules;
+    }
+
+    private void registerFilters()
+    {
+        log.info( "Registering filters" );
+
+        SAXBuilder builder = new SAXBuilder();
+
+        try
+        {
+            //
+            // Register all filters which have created a resource containing its properties.
+            //
+            // Get all resources of all plugins.
+            //
+
+            Enumeration resources = getClass().getClassLoader().getResources( PLUGIN_RESOURCE_LOCATION );
+
+            while( resources.hasMoreElements() )
+            {
+                URL resource = (URL) resources.nextElement();
+
+                try
+                {
+                    log.debug( "Processing XML: " + resource );
+
+                    Document doc = builder.build( resource );
+
+                    List plugins = XPath.selectNodes( doc, "/modules/filter");
+
+                    for( Iterator i = plugins.iterator(); i.hasNext(); )
+                    {
+                        Element pluginEl = (Element) i.next();
+
+                        String className = pluginEl.getAttributeValue("class");
+
+                        PageFilterInfo pluginInfo = PageFilterInfo.newInstance( className, pluginEl );
+
+                        if( pluginInfo != null )
+                        {
+                            registerPlugin( pluginInfo );
+                        }
+                    }
+                }
+                catch( java.io.IOException e )
+                {
+                    log.error( "Couldn't load " + PLUGIN_RESOURCE_LOCATION + " resources: " + resource, e );
+                }
+                catch( JDOMException e )
+                {
+                    log.error( "Error parsing XML for filter: "+PLUGIN_RESOURCE_LOCATION );
+                }
+            }
+        }
+        catch( java.io.IOException e )
+        {
+            log.error( "Couldn't load all " + PLUGIN_RESOURCE_LOCATION + " resources", e );
+        }
+    }
+
+    private void registerPlugin(PageFilterInfo pluginInfo)
+    {
+        m_filterClassMap.put( pluginInfo.getName(), pluginInfo );
+    }
+
+    /**
+     *  Stores information about the filters.
+     * 
+     *  @since 2.6.1
+     */
+    private static final class PageFilterInfo extends WikiModuleInfo
+    {
+        private PageFilterInfo( String name )
+        {
+            super(name);
+        }
+        
+        protected static PageFilterInfo newInstance(String className, Element pluginEl)
+        {
+            if( className == null || className.length() == 0 ) return null;
+            PageFilterInfo info = new PageFilterInfo( className );
+
+            info.initializeFromXML( pluginEl );
+            return info;        
+        }
+    }
+}

Modified: incubator/jspwiki/trunk/src/org/apache/wiki/filters/FilterException.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/trunk/src/org/apache/wiki/filters/FilterException.java?rev=1426051&r1=1426050&r2=1426051&view=diff
==============================================================================
--- incubator/jspwiki/trunk/src/org/apache/wiki/filters/FilterException.java (original)
+++ incubator/jspwiki/trunk/src/org/apache/wiki/filters/FilterException.java Wed Dec 26 22:16:53 2012
@@ -18,15 +18,17 @@
  */
 package org.apache.wiki.filters;
 
-import org.apache.wiki.WikiException;
 
 /**
  *  A generic PageFilter exception.
  *
  *  @since 2.1.112
+ *  @deprecated will be removed in 2.10 scope. Consider using 
+ *  {@link org.apache.wiki.api.exceptions.FilterException} instead
  */
+@Deprecated
 public class FilterException 
-    extends WikiException
+    extends org.apache.wiki.api.exceptions.FilterException
 {
     private static final long serialVersionUID = 0L;
     

Modified: incubator/jspwiki/trunk/src/org/apache/wiki/filters/FilterManager.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/trunk/src/org/apache/wiki/filters/FilterManager.java?rev=1426051&r1=1426050&r2=1426051&view=diff
==============================================================================
--- incubator/jspwiki/trunk/src/org/apache/wiki/filters/FilterManager.java (original)
+++ incubator/jspwiki/trunk/src/org/apache/wiki/filters/FilterManager.java Wed Dec 26 22:16:53 2012
@@ -18,29 +18,11 @@
  */
 package org.apache.wiki.filters;
 
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-import java.util.*;
+import java.util.List;
+import java.util.Properties;
 
-import org.apache.log4j.Logger;
-import org.jdom.Document;
-import org.jdom.Element;
-import org.jdom.JDOMException;
-import org.jdom.input.SAXBuilder;
-import org.jdom.xpath.XPath;
-
-import org.apache.wiki.WikiContext;
 import org.apache.wiki.WikiEngine;
 import org.apache.wiki.WikiException;
-import org.apache.wiki.event.WikiEventManager;
-import org.apache.wiki.event.WikiPageEvent;
-import org.apache.wiki.modules.ModuleManager;
-import org.apache.wiki.modules.WikiModuleInfo;
-import org.apache.wiki.util.ClassUtil;
-import org.apache.wiki.util.PriorityList;
 
 
 /**
@@ -88,27 +70,11 @@ import org.apache.wiki.util.PriorityList
  *  The &lt;filter> -sections define the filters.  For more information, please see
  *  the PageFilterConfiguration page in the JSPWiki distribution.
  *
+ *  @deprecated will be removed in 2.10 scope. Consider using {@link DefaultFilterManager} instead
  */
-public final class FilterManager extends ModuleManager
+@Deprecated
+public final class FilterManager extends DefaultFilterManager
 {
-    private PriorityList    m_pageFilters = new PriorityList();
-
-    private HashMap<String, PageFilterInfo>          m_filterClassMap = new HashMap<String,PageFilterInfo>();
-
-    private static final Logger log = Logger.getLogger(WikiEngine.class);
-
-    /** Property name for setting the filter XML property file.  Value is <tt>{@value}</tt>. */
-    public static final String PROP_FILTERXML = "jspwiki.filterConfig";
-    
-    /** Default location for the filter XML property file.  Value is <tt>{@value}</tt>. */
-    public static final String DEFAULT_XMLFILE = "/WEB-INF/filters.xml";
-
-    /** JSPWiki system filters are all below this value. */
-    public static final int SYSTEM_FILTER_PRIORITY = -1000;
-    
-    /** The standard user level filtering. */
-    public static final int USER_FILTER_PRIORITY   = 0;
-    
     /**
      *  Constructs a new FilterManager object.
      *  
@@ -119,433 +85,12 @@ public final class FilterManager extends
     public FilterManager( WikiEngine engine, Properties props )
         throws WikiException
     {
-        super( engine );
-        initialize( props );
-    }
-
-    /**
-     *  Adds a page filter to the queue.  The priority defines in which
-     *  order the page filters are run, the highest priority filters go
-     *  in the queue first.
-     *  <p>
-     *  In case two filters have the same priority, their execution order
-     *  is the insertion order.
-     *
-     *  @since 2.1.44.
-     *  @param f PageFilter to add
-     *  @param priority The priority in which position to add it in.
-     *  @throws IllegalArgumentException If the PageFilter is null or invalid.
-     */
-    public void addPageFilter( PageFilter f, int priority ) throws IllegalArgumentException
-    {
-        if( f == null )
-        {
-            throw new IllegalArgumentException("Attempt to provide a null filter - this should never happen.  Please check your configuration (or if you're a developer, check your own code.)");
-        }
-
-        m_pageFilters.add( f, priority );
-    }
-
-    private void initPageFilter( String className, Properties props )
-    {
-        try
-        {
-            PageFilterInfo info = m_filterClassMap.get( className );
-            
-            if( info != null && !checkCompatibility(info) )
-            {
-                String msg = "Filter '"+info.getName()+"' not compatible with this version of JSPWiki";
-                log.warn(msg);
-                return;
-            }
-            
-            int priority = 0; // FIXME: Currently fixed.
-
-            Class cl = ClassUtil.findClass( "org.apache.wiki.filters",
-                                            className );
-
-            PageFilter filter = (PageFilter)cl.newInstance();
-
-            filter.initialize( m_engine, props );
-
-            addPageFilter( filter, priority );
-            log.info("Added page filter "+cl.getName()+" with priority "+priority);
-        }
-        catch( ClassNotFoundException e )
-        {
-            log.error("Unable to find the filter class: "+className);
-        }
-        catch( InstantiationException e )
-        {
-            log.error("Cannot create filter class: "+className);
-        }
-        catch( IllegalAccessException e )
-        {
-            log.error("You are not allowed to access class: "+className);
-        }
-        catch( ClassCastException e )
-        {
-            log.error("Suggested class is not a PageFilter: "+className);
-        }
-        catch( FilterException e )
-        {
-            log.error("Filter "+className+" failed to initialize itself.", e);
-        }
+        super( engine, props );
     }
-
-
-    /**
-     *  Initializes the filters from an XML file.
-     *  
-     *  @param props The list of properties.  Typically jspwiki.properties
-     *  @throws WikiException If something goes wrong.
-     */
-    protected void initialize( Properties props )
-        throws WikiException
-    {
-        InputStream xmlStream = null;
-        String      xmlFile   = props.getProperty( PROP_FILTERXML );
-
-        try
-        {
-            registerFilters();
-            
-            if( m_engine.getServletContext() != null )
-            {
-                log.debug( "Attempting to locate " + DEFAULT_XMLFILE + " from servlet context." );
-                if( xmlFile == null )
-                {
-                    xmlStream = m_engine.getServletContext().getResourceAsStream( DEFAULT_XMLFILE );
-                }
-                else
-                {
-                    xmlStream = m_engine.getServletContext().getResourceAsStream( xmlFile );
-                }
-            }
-
-            if( xmlStream == null )
-            {
-                // just a fallback element to the old behaviour prior to 2.5.8
-                log.debug( "Attempting to locate filters.xml from class path." );
-
-                if( xmlFile == null )
-                {
-                    xmlStream = getClass().getResourceAsStream( "/filters.xml" );
-                }
-                else
-                {
-                    xmlStream = getClass().getResourceAsStream( xmlFile );
-                }
-            }
-
-            if( (xmlStream == null) && (xmlFile != null) )
-            {
-                log.debug("Attempting to load property file "+xmlFile);
-                xmlStream = new FileInputStream( new File(xmlFile) );
-            }
-
-            if( xmlStream == null )
-            {
-                log.info("Cannot find property file for filters (this is okay, expected to find it as: '"+ (xmlFile == null ? DEFAULT_XMLFILE : xmlFile ) +"')");
-                return;
-            }
-            
-            parseConfigFile( xmlStream );
-        }
-        catch( IOException e )
-        {
-            log.error("Unable to read property file", e);
-        }
-        catch( JDOMException e )
-        {
-            log.error("Problem in the XML file",e);
-        }
-    }
-
-    /**
-     *  Parses the XML filters configuration file.
-     *  
-     * @param xmlStream
-     * @throws JDOMException
-     * @throws IOException
-     */
-    private void parseConfigFile( InputStream xmlStream )
-        throws JDOMException,
-               IOException
-    {
-        Document doc = new SAXBuilder().build( xmlStream );
-        
-        XPath xpath = XPath.newInstance("/pagefilters/filter");
     
-        List nodes = xpath.selectNodes( doc );
-        
-        for( Iterator i = nodes.iterator(); i.hasNext(); )
-        {
-            Element f = (Element) i.next();
-            
-            String filterClass = f.getChildText("class");
-
-            Properties props = new Properties();
-            
-            List params = f.getChildren("param");
-            
-            for( Iterator par = params.iterator(); par.hasNext(); )
-            {
-                Element p = (Element) par.next();
-                
-                props.setProperty( p.getChildText("name"), p.getChildText("value") );
-            }
-
-            initPageFilter( filterClass, props );
-        }
-        
-    }
-    
- 
-    /**
-     *  Does the filtering before a translation.
-     *  
-     *  @param context The WikiContext
-     *  @param pageData WikiMarkup data to be passed through the preTranslate chain.
-     *  @throws FilterException If any of the filters throws a FilterException
-     *  @return The modified WikiMarkup
-     *  
-     *  @see PageFilter#preTranslate(WikiContext, String)
-     */
-    public String doPreTranslateFiltering( WikiContext context, String pageData )
-        throws FilterException
-    {
-        fireEvent( WikiPageEvent.PRE_TRANSLATE_BEGIN, context );
-
-        for( Iterator i = m_pageFilters.iterator(); i.hasNext(); )
-        {
-            PageFilter f = (PageFilter) i.next();
-
-            pageData = f.preTranslate( context, pageData );
-        }
-
-        fireEvent( WikiPageEvent.PRE_TRANSLATE_END, context );
-
-        return pageData;
-    }
-
-    /**
-     *  Does the filtering after HTML translation.
-     *  
-     *  @param context The WikiContext
-     *  @param htmlData HTML data to be passed through the postTranslate
-     *  @throws FilterException If any of the filters throws a FilterException
-     *  @return The modified HTML
-     *  @see PageFilter#postTranslate(WikiContext, String)
-     */
-    public String doPostTranslateFiltering( WikiContext context, String htmlData )
-        throws FilterException
-    {
-        fireEvent( WikiPageEvent.POST_TRANSLATE_BEGIN, context );
-
-        for( Iterator i = m_pageFilters.iterator(); i.hasNext(); )
-        {
-            PageFilter f = (PageFilter) i.next();
-
-            htmlData = f.postTranslate( context, htmlData );
-        }
-
-        fireEvent( WikiPageEvent.POST_TRANSLATE_END, context );
-
-        return htmlData;
-    }
-
-    /**
-     *  Does the filtering before a save to the page repository.
-     *  
-     *  @param context The WikiContext
-     *  @param pageData WikiMarkup data to be passed through the preSave chain.
-     *  @throws FilterException If any of the filters throws a FilterException
-     *  @return The modified WikiMarkup
-     *  @see PageFilter#preSave(WikiContext, String)
-     */
-    public String doPreSaveFiltering( WikiContext context, String pageData )
-        throws FilterException
-    {
-        fireEvent( WikiPageEvent.PRE_SAVE_BEGIN, context );
-
-        for( Iterator i = m_pageFilters.iterator(); i.hasNext(); )
-        {
-            PageFilter f = (PageFilter) i.next();
-
-            pageData = f.preSave( context, pageData );
-        }
-
-        fireEvent( WikiPageEvent.PRE_SAVE_END, context );
-
-        return pageData;
-    }
-
-    /**
-     *  Does the page filtering after the page has been saved.
-     * 
-     *  @param context The WikiContext
-     *  @param pageData WikiMarkup data to be passed through the postSave chain.
-     *  @throws FilterException If any of the filters throws a FilterException
-     * 
-     *  @see PageFilter#postSave(WikiContext, String)
-     */
-    public void doPostSaveFiltering( WikiContext context, String pageData )
-        throws FilterException
-    {
-        fireEvent( WikiPageEvent.POST_SAVE_BEGIN, context );
-
-        for( Iterator i = m_pageFilters.iterator(); i.hasNext(); )
-        {
-            PageFilter f = (PageFilter) i.next();
-
-            // log.info("POSTSAVE: "+f.toString() );
-            f.postSave( context, pageData );
-        }
-
-        fireEvent( WikiPageEvent.POST_SAVE_END, context );
-    }
-
-    /**
-     *  Returns the list of filters currently installed.  Note that this is not
-     *  a copy, but the actual list.  So be careful with it.
-     *  
-     *  @return A List of PageFilter objects
-     */
     public List getFilterList()
     {
-        return m_pageFilters;
-    }
-
-    /**
-     * 
-     * Notifies PageFilters to clean up their ressources.
-     *
-     */
-    public void destroy()
-    {
-        for( Iterator i = m_pageFilters.iterator(); i.hasNext(); )
-        {
-            PageFilter f = (PageFilter) i.next();
-
-            f.destroy( m_engine );
-        }        
-    }
-    
-    // events processing .......................................................
-
-    /**
-     *  Fires a WikiPageEvent of the provided type and WikiContext.
-     *  Invalid WikiPageEvent types are ignored.
-     *
-     * @see org.apache.wiki.event.WikiPageEvent 
-     * @param type      the WikiPageEvent type to be fired.
-     * @param context   the WikiContext of the event.
-     */
-    public final void fireEvent( int type, WikiContext context )
-    {
-        if ( WikiEventManager.isListening(this) && WikiPageEvent.isValidType(type) )
-        {
-            WikiEventManager.fireEvent(this,
-                    new WikiPageEvent(m_engine,type,context.getPage().getName()) );
-        }
-    }
-
-    /**
-     *  {@inheritDoc}
-     */
-    @SuppressWarnings("unchecked")
-    public Collection modules()
-    {
-        ArrayList modules = new ArrayList();
-        
-        modules.addAll( m_pageFilters );
-        
-        return modules;
-    }
-
-    private void registerFilters()
-    {
-        log.info( "Registering filters" );
-
-        SAXBuilder builder = new SAXBuilder();
-
-        try
-        {
-            //
-            // Register all filters which have created a resource containing its properties.
-            //
-            // Get all resources of all plugins.
-            //
-
-            Enumeration resources = getClass().getClassLoader().getResources( PLUGIN_RESOURCE_LOCATION );
-
-            while( resources.hasMoreElements() )
-            {
-                URL resource = (URL) resources.nextElement();
-
-                try
-                {
-                    log.debug( "Processing XML: " + resource );
-
-                    Document doc = builder.build( resource );
-
-                    List plugins = XPath.selectNodes( doc, "/modules/filter");
-
-                    for( Iterator i = plugins.iterator(); i.hasNext(); )
-                    {
-                        Element pluginEl = (Element) i.next();
-
-                        String className = pluginEl.getAttributeValue("class");
-
-                        PageFilterInfo pluginInfo = PageFilterInfo.newInstance( className, pluginEl );
-
-                        if( pluginInfo != null )
-                        {
-                            registerPlugin( pluginInfo );
-                        }
-                    }
-                }
-                catch( java.io.IOException e )
-                {
-                    log.error( "Couldn't load " + PLUGIN_RESOURCE_LOCATION + " resources: " + resource, e );
-                }
-                catch( JDOMException e )
-                {
-                    log.error( "Error parsing XML for filter: "+PLUGIN_RESOURCE_LOCATION );
-                }
-            }
-        }
-        catch( java.io.IOException e )
-        {
-            log.error( "Couldn't load all " + PLUGIN_RESOURCE_LOCATION + " resources", e );
-        }
-    }
-
-    private void registerPlugin(PageFilterInfo pluginInfo)
-    {
-        m_filterClassMap.put( pluginInfo.getName(), pluginInfo );
-    }
-
-    /**
-     *  Stores information about the filters.
-     * 
-     *  @since 2.6.1
-     */
-    private static final class PageFilterInfo extends WikiModuleInfo
-    {
-        private PageFilterInfo( String name )
-        {
-            super(name);
-        }
-        
-        protected static PageFilterInfo newInstance(String className, Element pluginEl)
-        {
-            if( className == null || className.length() == 0 ) return null;
-            PageFilterInfo info = new PageFilterInfo( className );
-
-            info.initializeFromXML( pluginEl );
-            return info;        
-        }
+        return super.getFilterList();
     }
+   
 }

Modified: incubator/jspwiki/trunk/src/org/apache/wiki/filters/PageFilter.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/trunk/src/org/apache/wiki/filters/PageFilter.java?rev=1426051&r1=1426050&r2=1426051&view=diff
==============================================================================
--- incubator/jspwiki/trunk/src/org/apache/wiki/filters/PageFilter.java (original)
+++ incubator/jspwiki/trunk/src/org/apache/wiki/filters/PageFilter.java Wed Dec 26 22:16:53 2012
@@ -40,8 +40,11 @@ import org.apache.wiki.WikiEngine;
  *  <p>
  *  As of 2.5.30, initialize() gains access to the WikiEngine.
  *
+ *  @deprecated will be removed in 2.10 scope. Consider using 
+ *  {@link org.apache.wiki.api.filters.PageFilter} instead
  */
-public interface PageFilter
+@Deprecated
+public interface PageFilter extends org.apache.wiki.api.filters.PageFilter
 {
     /**
      *  Is called whenever the a new PageFilter is instantiated and

Modified: incubator/jspwiki/trunk/src/org/apache/wiki/filters/PingWeblogsComFilter.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/trunk/src/org/apache/wiki/filters/PingWeblogsComFilter.java?rev=1426051&r1=1426050&r2=1426051&view=diff
==============================================================================
--- incubator/jspwiki/trunk/src/org/apache/wiki/filters/PingWeblogsComFilter.java (original)
+++ incubator/jspwiki/trunk/src/org/apache/wiki/filters/PingWeblogsComFilter.java Wed Dec 26 22:16:53 2012
@@ -18,13 +18,18 @@
  */
 package org.apache.wiki.filters;
 
-import org.apache.wiki.WikiContext;
-import org.apache.wiki.WikiEngine;
-import org.apache.xmlrpc.*;
-import java.net.URL;
 import java.net.MalformedURLException;
-import java.util.*;
+import java.net.URL;
+import java.util.Hashtable;
+import java.util.Properties;
+import java.util.Vector;
+
 import org.apache.log4j.Logger;
+import org.apache.wiki.WikiContext;
+import org.apache.wiki.WikiEngine;
+import org.apache.wiki.api.filters.BasicPageFilter;
+import org.apache.xmlrpc.AsyncCallback;
+import org.apache.xmlrpc.XmlRpcClient;
 
 /**
  *  A very dumb class that pings weblogs.com on each save.  INTERNAL USE ONLY SO FAR!

Modified: incubator/jspwiki/trunk/src/org/apache/wiki/filters/ProfanityFilter.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/trunk/src/org/apache/wiki/filters/ProfanityFilter.java?rev=1426051&r1=1426050&r2=1426051&view=diff
==============================================================================
--- incubator/jspwiki/trunk/src/org/apache/wiki/filters/ProfanityFilter.java (original)
+++ incubator/jspwiki/trunk/src/org/apache/wiki/filters/ProfanityFilter.java Wed Dec 26 22:16:53 2012
@@ -29,6 +29,7 @@ import org.apache.log4j.Logger;
 
 import org.apache.wiki.TextUtil;
 import org.apache.wiki.WikiContext;
+import org.apache.wiki.api.filters.BasicPageFilter;
 
 /**
  *  This class is an example of how to have a simple filter.  It removes

Modified: incubator/jspwiki/trunk/src/org/apache/wiki/filters/RedirectException.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/trunk/src/org/apache/wiki/filters/RedirectException.java?rev=1426051&r1=1426050&r2=1426051&view=diff
==============================================================================
--- incubator/jspwiki/trunk/src/org/apache/wiki/filters/RedirectException.java (original)
+++ incubator/jspwiki/trunk/src/org/apache/wiki/filters/RedirectException.java Wed Dec 26 22:16:53 2012
@@ -23,14 +23,15 @@ package org.apache.wiki.filters;
  *  redirect the user elsewhere.
  *
  *  @since 2.1.112
+ *  @deprecated will be removed in 2.10 scope. Consider using 
+ *  {@link org.apache.wiki.api.exceptions.RedirectException} instead
  */
+@Deprecated
 public class RedirectException
-    extends FilterException
+    extends org.apache.wiki.api.exceptions.RedirectException
 {
     private static final long serialVersionUID = 0L;
 
-    private final String m_where;
-
     /**
      *  Constructs a new RedirectException.
      *  
@@ -39,18 +40,7 @@ public class RedirectException
      */
     public RedirectException( String msg, String redirect )
     {
-        super( msg );
-
-        m_where = redirect;
+        super( msg, redirect );
     }
 
-    /**
-     *  Get the URI for redirection.
-     *  
-     *  @return The URI given in the constructor.
-     */
-    public String getRedirect()
-    {
-        return m_where;
-    }
 }

Modified: incubator/jspwiki/trunk/src/org/apache/wiki/filters/SpamFilter.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/trunk/src/org/apache/wiki/filters/SpamFilter.java?rev=1426051&r1=1426050&r2=1426051&view=diff
==============================================================================
--- incubator/jspwiki/trunk/src/org/apache/wiki/filters/SpamFilter.java (original)
+++ incubator/jspwiki/trunk/src/org/apache/wiki/filters/SpamFilter.java Wed Dec 26 22:16:53 2012
@@ -31,6 +31,8 @@ import org.apache.commons.lang.time.Stop
 import org.apache.log4j.Logger;
 import org.apache.oro.text.regex.*;
 import org.apache.wiki.*;
+import org.apache.wiki.api.exceptions.RedirectException;
+import org.apache.wiki.api.filters.BasicPageFilter;
 import org.apache.wiki.attachment.Attachment;
 import org.apache.wiki.auth.user.UserProfile;
 import org.apache.wiki.providers.ProviderException;