JSPWIKI-120: remove use of WikiEngine throughout the code as much as possible and use Engine instead (3)
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/rpc/atom/AtomAPIServlet.java b/jspwiki-main/src/main/java/org/apache/wiki/rpc/atom/AtomAPIServlet.java
index 084ecd2..66add1a 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/rpc/atom/AtomAPIServlet.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/rpc/atom/AtomAPIServlet.java
@@ -22,6 +22,7 @@
 import org.apache.wiki.WikiContext;
 import org.apache.wiki.WikiEngine;
 import org.apache.wiki.WikiPage;
+import org.apache.wiki.api.core.Engine;
 import org.apache.wiki.api.exceptions.ProviderException;
 import org.apache.wiki.api.exceptions.WikiException;
 import org.apache.wiki.pages.PageManager;
@@ -35,6 +36,7 @@
 import org.intabulas.sandler.elements.Feed;
 import org.intabulas.sandler.elements.Link;
 import org.intabulas.sandler.elements.Person;
+import org.intabulas.sandler.elements.impl.LinkImpl;
 import org.intabulas.sandler.exceptions.FeedMarshallException;
 
 import javax.servlet.ServletConfig;
@@ -45,30 +47,27 @@
 import java.io.IOException;
 import java.util.Collection;
 import java.util.Date;
-import java.util.Iterator;
 
 
 /**
- *  Handles incoming requests for the Atom API.  This class uses the
- *  "sandler" Atom API implementation.
+ *  Handles incoming requests for the Atom API.  This class uses the "sandler" Atom API implementation.
  *
  *  @since 2.1.97
  */
 // FIXME: Rewrite using some other library
-public class AtomAPIServlet extends HttpServlet
-{
-    static final Logger log = Logger.getLogger( AtomAPIServlet.class );
+public class AtomAPIServlet extends HttpServlet {
+
+    private static final Logger log = Logger.getLogger( AtomAPIServlet.class );
 
     private static final long serialVersionUID = 0L;
 
-    private WikiEngine       m_engine;
+    private Engine m_engine;
 
     /**
      *  {@inheritDoc}
      */
-    @Override public void init( final ServletConfig config )
-        throws ServletException
-    {
+    @Override
+    public void init( final ServletConfig config ) throws ServletException {
         m_engine = WikiEngine.getInstance( config );
     }
 
@@ -77,22 +76,15 @@
      *  The initial slash is also removed.  If there is no page,
      *  returns null.
      */
-    private String getPageName( final HttpServletRequest request )
-    {
+    private String getPageName( final HttpServletRequest request ) {
         String name = request.getPathInfo();
-
-        if( name == null || name.length() <= 1 )
-        {
+        if( name == null || name.length() <= 1 ) {
             return null;
-        }
-        else if( name.charAt(0) == '/' )
-        {
-            name = name.substring(1);
+        } else if( name.charAt( 0 ) == '/' ) {
+            name = name.substring( 1 );
         }
 
-        name = TextUtil.urlDecodeUTF8( name );
-
-        return name;
+        return TextUtil.urlDecodeUTF8( name );
     }
 
     /**
@@ -104,61 +96,43 @@
      *   <li>Assumes that incoming code is plain text or WikiMarkup, not html.
      *  </ul>
      *  
-     *  @param request {@inheritDoc}
-     *  @param response {@inheritDoc}
-     *  @throws ServletException {@inheritDoc}
+     *  {@inheritDoc}
      */
-    @Override public void doPost( final HttpServletRequest request, final HttpServletResponse response )
-        throws ServletException
-    {
-        log.debug("Received POST to AtomAPIServlet");
+    @Override
+    public void doPost( final HttpServletRequest request, final HttpServletResponse response ) throws ServletException {
+        log.debug( "Received POST to AtomAPIServlet" );
 
-        try
-        {
+        try {
             final String blogid = getPageName( request );
-
-            final WikiPage page    = m_engine.getManager( PageManager.class ).getPage( blogid );
-
-            if( page == null )
-            {
-                throw new ServletException("Page "+blogid+" does not exist, cannot add blog post.");
+            final WikiPage page = m_engine.getManager( PageManager.class ).getPage( blogid );
+            if( page == null ) {
+                throw new ServletException( "Page " + blogid + " does not exist, cannot add blog post." );
             }
 
-            //FIXME: Do authentication here
+            // FIXME: Do authentication here
             final Entry entry = Sandler.unmarshallEntry( request.getInputStream() );
 
-            //
             //  Fetch the obligatory parts of the content.
-            //
-            final Content title   = entry.getTitle();
-            final Content content = entry.getContent(0);
+            final Content title = entry.getTitle();
+            final Content content = entry.getContent( 0 );
+            final Person author = entry.getAuthor();
 
-            final Person  author  = entry.getAuthor();
-
-            //FIXME: Sandler 0.5 does not support generator
-
-            //
-            //  Generate new blog entry.
-            //
+            // FIXME: Sandler 0.5 does not support generator
+            // Generate new blog entry.
             final WeblogEntryPlugin plugin = new WeblogEntryPlugin();
-
             final String pageName = plugin.getNewEntryPage( m_engine, blogid );
             final String username = author.getName();
-
             final WikiPage entryPage = new WikiPage( m_engine, pageName );
             entryPage.setAuthor( username );
 
             final WikiContext context = new WikiContext( m_engine, request, entryPage );
-
             final StringBuilder text = new StringBuilder();
-            text.append( "!" + title.getBody() );
-            text.append( "\n\n" );
-            text.append( content.getBody() );
-
-            log.debug("Writing entry: "+text);
-
+            text.append( "!" )
+                .append( title.getBody() )
+                .append( "\n\n" )
+                .append( content.getBody() );
+            log.debug( "Writing entry: " + text );
             m_engine.getManager( PageManager.class ).saveText( context, text.toString() );
-
         } catch( final FeedMarshallException e ) {
             log.error("Received faulty Atom entry",e);
             throw new ServletException("Faulty Atom entry",e);
@@ -177,71 +151,53 @@
      *  
      *  {@inheritDoc}
      */
-    @Override public void doGet( final HttpServletRequest request, final HttpServletResponse response )
-        throws ServletException
-    {
-        log.debug("Received HTTP GET to AtomAPIServlet");
-
+    @Override
+    public void doGet( final HttpServletRequest request, final HttpServletResponse response ) throws ServletException {
+        log.debug( "Received HTTP GET to AtomAPIServlet" );
         final String blogid = getPageName( request );
-
-        log.debug("Requested page "+blogid);
-
-        try
-        {
-            if( blogid == null )
-            {
+        log.debug( "Requested page " + blogid );
+        try {
+            if( blogid == null ) {
                 final Feed feed = listBlogs();
-
-                response.setContentType("application/x.atom+xml; charset=UTF-8");
-                response.getWriter().println( Sandler.marshallFeed(feed) );
-
-                response.getWriter().flush();
-            }
-            else
-            {
+                response.setContentType( "application/x.atom+xml; charset=UTF-8" );
+                response.getWriter().println( Sandler.marshallFeed( feed ) );
+            } else {
                 final Entry entry = getBlogEntry( blogid );
-
-                response.setContentType("application/x.atom+xml; charset=UTF-8");
-                response.getWriter().println( Sandler.marshallEntry(entry) );
-
-                response.getWriter().flush();
+                response.setContentType( "application/x.atom+xml; charset=UTF-8" );
+                response.getWriter().println( Sandler.marshallEntry( entry ) );
             }
+            response.getWriter().flush();
+        } catch( final Exception e ) {
+            log.error( "Unable to generate response", e );
+            throw new ServletException( "Internal problem - whack Janne on the head to get a better error report", e );
         }
-        catch( final Exception e )
-        {
-            log.error("Unable to generate response",e);
-            throw new ServletException("Internal problem - whack Janne on the head to get a better error report",e);
-        }
-
     }
 
     private Entry getBlogEntry( final String entryid ) {
         final WikiPage page = m_engine.getManager( PageManager.class ).getPage( entryid );
         final WikiPage firstVersion = m_engine.getManager( PageManager.class ).getPage( entryid, 1 );
-
         final Entry entry = SyndicationFactory.newSyndicationEntry();
-
         final String pageText = m_engine.getManager( PageManager.class ).getText(page.getName());
-        String title = "";
         final int firstLine = pageText.indexOf('\n');
 
-        if( firstLine > 0 )
-        {
+        String title = "";
+        if( firstLine > 0 ) {
             title = pageText.substring( 0, firstLine );
         }
 
-        if( title.trim().length() == 0 ) title = page.getName();
+        if( title.trim().length() == 0 ) {
+            title = page.getName();
+        }
 
         // Remove wiki formatting
-        while( title.startsWith("!") ) title = title.substring(1);
+        while( title.startsWith("!") ) {
+            title = title.substring(1);
+        }
 
         entry.setTitle( title );
         entry.setCreated( firstVersion.getLastModified() );
         entry.setModified( page.getLastModified() );
-        entry.setAuthor( SyndicationFactory.createPerson( page.getAuthor(),
-                                                          null,
-                                                          null ) );
-
+        entry.setAuthor( SyndicationFactory.createPerson( page.getAuthor(), null, null ) );
         entry.addContent( SyndicationFactory.createEscapedContent(pageText) );
 
         return entry;
@@ -252,46 +208,25 @@
      */
     private Feed listBlogs() throws ProviderException {
         final Collection< WikiPage > pages = m_engine.getManager( PageManager.class ).getAllPages();
-
         final Feed feed = SyndicationFactory.newSyndicationFeed();
         feed.setTitle("List of blogs at this site");
         feed.setModified( new Date() );
 
-        for( final Iterator< WikiPage > i = pages.iterator(); i.hasNext(); )
-        {
-            final WikiPage p = i.next();
-
-            //
+        for( final WikiPage p : pages ) {
             //  List only weblogs
-            //  FIXME: Unfortunately, a weblog is not known until it has
-            //         been executed once, because plugins are off during
-            //         the initial startup phase.
-            //
+            //  FIXME: Unfortunately, a weblog is not known until it has een executed once, because plugins are off during the initial startup phase.
+            log.debug( p.getName() + " = " + p.getAttribute( WeblogPlugin.ATTR_ISWEBLOG ) );
 
-            log.debug( p.getName()+" = "+p.getAttribute(WeblogPlugin.ATTR_ISWEBLOG)) ;
-
-            if( !("true".equals(p.getAttribute(WeblogPlugin.ATTR_ISWEBLOG)) ) ) {
+            if( !( "true".equals( p.getAttribute( WeblogPlugin.ATTR_ISWEBLOG ) ) ) ) {
                 continue;
             }
 
             final String encodedName = TextUtil.urlEncodeUTF8( p.getName() );
-
             final WikiContext context = new WikiContext( m_engine, p );
-
-            final String title = TextUtil.replaceEntities(org.apache.wiki.rss.Feed.getSiteName(context));
-
-            final Link postlink = createLink( "service.post",
-                                        m_engine.getBaseURL()+"atom/"+encodedName,
-                                        title );
-
-            final Link editlink = createLink( "service.edit",
-                                        m_engine.getBaseURL()+"atom/"+encodedName,
-                                        title );
-
-            final Link feedlink = createLink( "service.feed",
-                                        m_engine.getBaseURL()+"atom.jsp?page="+encodedName,
-                                        title );
-
+            final String title = TextUtil.replaceEntities( org.apache.wiki.rss.Feed.getSiteName( context ) );
+            final Link postlink = createLink( "service.post", m_engine.getBaseURL() + "atom/" + encodedName, title );
+            final Link editlink = createLink( "service.edit", m_engine.getBaseURL() + "atom/" + encodedName, title );
+            final Link feedlink = createLink( "service.feed", m_engine.getBaseURL() + "atom.jsp?page=" + encodedName, title );
 
             feed.addLink( postlink );
             feed.addLink( feedlink );
@@ -301,12 +236,8 @@
         return feed;
     }
 
-    private Link createLink( final String rel,
-                             final String href,
-                             final String title )
-    {
-        final org.intabulas.sandler.elements.impl.LinkImpl link = new org.intabulas.sandler.elements.impl.LinkImpl();
-
+    private Link createLink( final String rel, final String href, final String title ) {
+        final LinkImpl link = new LinkImpl();
         link.setRelationship( rel );
         link.setTitle( title );
         link.setType( "application/x.atom+xml" );
@@ -318,14 +249,17 @@
     /**
      *  {@inheritDoc}
      */
-    @Override public void doDelete( final HttpServletRequest request, final HttpServletResponse response ) {
-        log.debug("Received HTTP DELETE");
+    @Override
+    public void doDelete( final HttpServletRequest request, final HttpServletResponse response ) {
+        log.debug( "Received HTTP DELETE" );
     }
 
     /**
      *  {@inheritDoc}
      */
-    @Override public void doPut( final HttpServletRequest request, final HttpServletResponse response ) {
-        log.debug("Received HTTP PUT");
+    @Override
+    public void doPut( final HttpServletRequest request, final HttpServletResponse response ) {
+        log.debug( "Received HTTP PUT" );
     }
+
 }
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/rss/RSSGenerator.java b/jspwiki-main/src/main/java/org/apache/wiki/rss/RSSGenerator.java
index cb48eb9..44730a8 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/rss/RSSGenerator.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/rss/RSSGenerator.java
@@ -20,16 +20,19 @@
 
 import org.apache.log4j.Logger;
 import org.apache.wiki.WikiContext;
-import org.apache.wiki.WikiEngine;
 import org.apache.wiki.WikiPage;
 import org.apache.wiki.WikiProvider;
 import org.apache.wiki.WikiSession;
+import org.apache.wiki.api.core.Engine;
 import org.apache.wiki.attachment.Attachment;
+import org.apache.wiki.auth.AuthorizationManager;
 import org.apache.wiki.auth.permissions.PagePermission;
 import org.apache.wiki.diff.DifferenceManager;
 import org.apache.wiki.pages.PageManager;
 import org.apache.wiki.pages.PageTimeComparator;
+import org.apache.wiki.render.RenderingManager;
 import org.apache.wiki.util.TextUtil;
+import org.apache.wiki.variables.VariableManager;
 
 import java.util.Iterator;
 import java.util.List;
@@ -55,7 +58,7 @@
 public class RSSGenerator {
 
     private static final Logger log = Logger.getLogger( RSSGenerator.class );
-    private WikiEngine m_engine;
+    private Engine m_engine;
 
     private String m_channelDescription = "";
     private String m_channelLanguage = "en-us";
@@ -121,12 +124,12 @@
     private static final int MAX_CHARACTERS = Integer.MAX_VALUE-1;
 
     /**
-     *  Initialize the RSS generator for a given WikiEngine.
+     *  Initialize the RSS generator for a given Engine.
      *
-     *  @param engine The WikiEngine.
+     *  @param engine The Engine.
      *  @param properties The properties.
      */
-    public RSSGenerator( final WikiEngine engine, final Properties properties ) {
+    public RSSGenerator( final Engine engine, final Properties properties ) {
         m_engine = engine;
         m_channelDescription = properties.getProperty( PROP_CHANNEL_DESCRIPTION, m_channelDescription );
         m_channelLanguage = properties.getProperty( PROP_CHANNEL_LANGUAGE, m_channelLanguage );
@@ -190,7 +193,7 @@
             buf.append( diff );
         } else {
             buf.append( author ).append( " created this page on " ).append( page.getLastModified() ).append( ":<br /><hr /><br />" );
-            buf.append( m_engine.getRenderingManager().getHTML( page.getName() ) );
+            buf.append( m_engine.getManager( RenderingManager.class ).getHTML( page.getName() ) );
         }
 
         return buf.toString();
@@ -321,7 +324,7 @@
             final WikiPage page = i.next();
 
             //  Check if the anonymous user has view access to this page.
-            if( !m_engine.getAuthorizationManager().checkPermission(session, new PagePermission(page,PagePermission.VIEW_ACTION) ) ) {
+            if( !m_engine.getManager( AuthorizationManager.class ).checkPermission(session, new PagePermission(page,PagePermission.VIEW_ACTION) ) ) {
                 // No permission, skip to the next one.
                 continue;
             }
@@ -357,14 +360,14 @@
     protected String generateWikiPageRSS( final WikiContext wikiContext, final List< WikiPage > changed, final Feed feed ) {
         feed.setChannelTitle( m_engine.getApplicationName()+": "+wikiContext.getPage().getName() );
         feed.setFeedURL( wikiContext.getViewURL( wikiContext.getPage().getName() ) );
-        final String language = m_engine.getVariableManager().getVariable( wikiContext, PROP_CHANNEL_LANGUAGE );
+        final String language = m_engine.getManager( VariableManager.class ).getVariable( wikiContext, PROP_CHANNEL_LANGUAGE );
 
         if( language != null ) {
             feed.setChannelLanguage( language );
         } else {
             feed.setChannelLanguage( m_channelLanguage );
         }
-        final String channelDescription = m_engine.getVariableManager().getVariable( wikiContext, PROP_CHANNEL_DESCRIPTION );
+        final String channelDescription = m_engine.getManager( VariableManager.class ).getVariable( wikiContext, PROP_CHANNEL_DESCRIPTION );
 
         if( channelDescription != null ) {
             feed.setChannelDescription( channelDescription );
@@ -412,7 +415,7 @@
             log.debug( "Generating RSS for blog, size=" + changed.size() );
         }
 
-        final String ctitle = m_engine.getVariableManager().getVariable( wikiContext, PROP_CHANNEL_TITLE );
+        final String ctitle = m_engine.getManager( VariableManager.class ).getVariable( wikiContext, PROP_CHANNEL_TITLE );
         if( ctitle != null ) {
             feed.setChannelTitle( ctitle );
         } else {
@@ -421,14 +424,14 @@
 
         feed.setFeedURL( wikiContext.getViewURL( wikiContext.getPage().getName() ) );
 
-        final String language = m_engine.getVariableManager().getVariable( wikiContext, PROP_CHANNEL_LANGUAGE );
+        final String language = m_engine.getManager( VariableManager.class ).getVariable( wikiContext, PROP_CHANNEL_LANGUAGE );
         if( language != null ) {
             feed.setChannelLanguage( language );
         } else {
             feed.setChannelLanguage( m_channelLanguage );
         }
 
-        final String channelDescription = m_engine.getVariableManager().getVariable( wikiContext, PROP_CHANNEL_DESCRIPTION );
+        final String channelDescription = m_engine.getManager( VariableManager.class ).getVariable( wikiContext, PROP_CHANNEL_DESCRIPTION );
         if( channelDescription != null ) {
             feed.setChannelDescription( channelDescription );
         }
@@ -477,7 +480,7 @@
                 if( maxlen > MAX_CHARACTERS ) {
                     maxlen = MAX_CHARACTERS;
                 }
-                pageText = m_engine.getRenderingManager().textToHTML( wikiContext, pageText.substring( firstLine + 1, maxlen ).trim() );
+                pageText = m_engine.getManager( RenderingManager.class ).textToHTML( wikiContext, pageText.substring( firstLine + 1, maxlen ).trim() );
                 if( maxlen == MAX_CHARACTERS ) {
                     pageText += "...";
                 }
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/rss/RSSThread.java b/jspwiki-main/src/main/java/org/apache/wiki/rss/RSSThread.java
index 9707314..1168f84 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/rss/RSSThread.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/rss/RSSThread.java
@@ -18,11 +18,10 @@
  */
 package org.apache.wiki.rss;
 
-
 import org.apache.log4j.Logger;
 import org.apache.wiki.WatchDog;
 import org.apache.wiki.WikiBackgroundThread;
-import org.apache.wiki.WikiEngine;
+import org.apache.wiki.api.core.Engine;
 import org.apache.wiki.util.FileUtil;
 
 import java.io.BufferedWriter;
@@ -33,31 +32,30 @@
 import java.io.Reader;
 import java.io.StringReader;
 import java.io.Writer;
+import java.nio.charset.StandardCharsets;
+
 
 /**
  *  Runs the RSS generation thread.
  *  FIXME: MUST be somewhere else, this is not a good place.
  */
-public class RSSThread extends WikiBackgroundThread
-{
-    static Logger              log = Logger.getLogger( RSSThread.class );
-        
+public class RSSThread extends WikiBackgroundThread {
+
+    private static final Logger log = Logger.getLogger( RSSThread.class );
     private final File m_rssFile;
     private final RSSGenerator m_generator;
-        
     private WatchDog m_watchdog;
     
     /**
      *  Create a new RSS thread.
      *  
-     *  @param engine A WikiEngine to own this thread.
+     *  @param engine A Engine to own this thread.
      *  @param rssFile A File to write the RSS data to.
      *  @param rssInterval How often the RSS should be generated.
      */
-    public RSSThread( final WikiEngine engine, final File rssFile, final int rssInterval )
-    {
+    public RSSThread( final Engine engine, final File rssFile, final int rssInterval ) {
         super( engine, rssInterval );
-        m_generator = engine.getRSSGenerator();
+        m_generator = engine.getManager( RSSGenerator.class );
         m_rssFile = rssFile;
         setName("JSPWiki RSS Generator");
         log.debug( "RSS file will be at "+m_rssFile.getAbsolutePath() );
@@ -81,47 +79,20 @@
      * @throws Exception All exceptions are thrown upwards.
      */
     @Override
-    public void backgroundTask() throws Exception
-    {
-        if ( m_generator.isEnabled() )
-        {
-            Writer out = null;
-            Reader in  = null;
-
+    public void backgroundTask() throws Exception {
+        if( m_generator.isEnabled() ) {
             m_watchdog.enterState( "Generating RSS feed", 60 );
-            
-            try
-            {
-                //
-                //  Generate RSS file, output it to
-                //  default "rss.rdf".
-                //
-                log.debug("Regenerating RSS feed to "+m_rssFile);
+            final String feed = m_generator.generate();
+            log.debug( "Regenerating RSS feed to " + m_rssFile );
 
-                final String feed = m_generator.generate();
-
-                in  = new StringReader(feed);
-                out = new BufferedWriter( new OutputStreamWriter( new FileOutputStream( m_rssFile ), "UTF-8") );
-
+            // Generate RSS file, output it to default "rss.rdf".
+            try( final Reader in  = new StringReader( feed );
+                 final Writer out = new BufferedWriter( new OutputStreamWriter( new FileOutputStream( m_rssFile ), StandardCharsets.UTF_8 ) ) ) {
                 FileUtil.copyContents( in, out );
-            }
-            catch( final IOException e )
-            {
-                log.error("Cannot generate RSS feed to "+m_rssFile.getAbsolutePath(), e );
+            } catch( final IOException e ) {
+                log.error( "Cannot generate RSS feed to " + m_rssFile.getAbsolutePath(), e );
                 m_generator.setEnabled( false );
-            }
-            finally
-            {
-                try
-                {
-                    if( in != null )  in.close();
-                    if( out != null ) out.close();
-                }
-                catch( final IOException e )
-                {
-                    log.fatal("Could not close I/O for RSS", e );
-                    m_generator.setEnabled( false );
-                }
+            } finally {
                 m_watchdog.exitState();
             }