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 2019/12/19 22:11:33 UTC

[jspwiki] 03/06: further cleanup + formatting on PageRenamer

This is an automated email from the ASF dual-hosted git repository.

juanpablo pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/jspwiki.git

commit 16b47e8d679b77413370a44d292be6a7fb983c26
Author: juanpablo <ju...@apache.org>
AuthorDate: Thu Dec 19 22:38:48 2019 +0100

    further cleanup + formatting on PageRenamer
---
 .../java/org/apache/wiki/content/PageRenamer.java  | 235 +++++++--------------
 1 file changed, 80 insertions(+), 155 deletions(-)

diff --git a/jspwiki-main/src/main/java/org/apache/wiki/content/PageRenamer.java b/jspwiki-main/src/main/java/org/apache/wiki/content/PageRenamer.java
index 5643783..5063c1d 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/content/PageRenamer.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/content/PageRenamer.java
@@ -40,14 +40,12 @@ import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
 /**
- *  Provides page renaming functionality.  Note that there used to be
- *  a similarly named class in 2.6, but due to unclear copyright, the
- *  class was completely rewritten from scratch for 2.8.
+ * Provides page renaming functionality. Note that there used to be a similarly named class in 2.6, but due to unclear copyright, the
+ * class was completely rewritten from scratch for 2.8.
  *
- *  @since 2.8
+ * @since 2.8
  */
-public class PageRenamer
-{
+public class PageRenamer {
 
     private static final Logger log = Logger.getLogger( PageRenamer.class );
     
@@ -64,9 +62,7 @@ public class PageRenamer
      *  @throws WikiException If the page cannot be renamed.
      */
     public String renamePage( final WikiContext context, final String renameFrom, final String renameTo, final boolean changeReferrers ) throws WikiException {
-        //
         //  Sanity checks first
-        //
         if( renameFrom == null || renameFrom.length() == 0 ) {
             throw new WikiException( "From name may not be null or empty" );
         }
@@ -74,101 +70,71 @@ public class PageRenamer
             throw new WikiException( "To name may not be null or empty" );
         }
        
-        //
         //  Clean up the "to" -name so that it does not contain anything illegal
-        //
-        String renameToClean = MarkupParser.cleanLink( renameTo.trim() );
-        
-        if( renameToClean.equals(renameFrom) ) {
+        final String renameToClean = MarkupParser.cleanLink( renameTo.trim() );
+        if( renameToClean.equals( renameFrom ) ) {
             throw new WikiException( "You cannot rename the page to itself" );
         }
         
-        //
         //  Preconditions: "from" page must exist, and "to" page must not yet exist.
-        //
-        WikiEngine engine = context.getEngine();
-        WikiPage fromPage = engine.getPage( renameFrom );
-        
+        final WikiEngine engine = context.getEngine();
+        final WikiPage fromPage = engine.getPage( renameFrom );
         if( fromPage == null ) {
             throw new WikiException("No such page "+renameFrom);
         }
-        
         WikiPage toPage = engine.getPage( renameToClean );
-        
         if( toPage != null ) {
             throw new WikiException( "Page already exists " + renameToClean );
         }
         
-        //
-        //  Options
-        //
-        m_camelCase = TextUtil.getBooleanProperty( engine.getWikiProperties(), JSPWikiMarkupParser.PROP_CAMELCASELINKS, m_camelCase );
+        final Set< String > referrers = getReferencesToChange( fromPage, engine );
 
-        Set< String > referrers = getReferencesToChange( fromPage, engine );
-
-        //
         //  Do the actual rename by changing from the frompage to the topage, including all of the attachments
-        //
-        
         //  Remove references to attachments under old name
-        List< Attachment > attachmentsOldName = engine.getAttachmentManager().listAttachments( fromPage );
-        for( Attachment att:attachmentsOldName ) {
-            WikiPage fromAttPage = engine.getPage( att.getName() );
+        final List< Attachment > attachmentsOldName = engine.getAttachmentManager().listAttachments( fromPage );
+        for( final Attachment att: attachmentsOldName ) {
+            final WikiPage fromAttPage = engine.getPage( att.getName() );
             engine.getReferenceManager().pageRemoved( fromAttPage );
         }
 
         engine.getPageManager().getProvider().movePage( renameFrom, renameToClean );
-
         if( engine.getAttachmentManager().attachmentsEnabled() ) {
             engine.getAttachmentManager().getCurrentProvider().moveAttachmentsForPage( renameFrom, renameToClean );
         }
         
-        //
         //  Add a comment to the page notifying what changed.  This adds a new revision to the repo with no actual change.
-        //
         toPage = engine.getPage( renameToClean );
-        
         if( toPage == null ) {
-            throw new InternalWikiException("Rename seems to have failed for some strange reason - please check logs!");
+            throw new InternalWikiException( "Rename seems to have failed for some strange reason - please check logs!" );
         }
-
         toPage.setAttribute( WikiPage.CHANGENOTE, fromPage.getName() + " ==> " + toPage.getName() );
         toPage.setAuthor( context.getCurrentUser().getName() );
-        
         engine.getPageManager().putPageText( toPage, engine.getPureText( toPage ) );
 
-        //
         //  Update the references
-        //
         engine.getReferenceManager().pageRemoved( fromPage );
         engine.updateReferences( toPage );
 
-        //
         //  Update referrers
-        //
         if( changeReferrers ) {
             updateReferrers( context, fromPage, toPage, referrers );
         }
 
-        //
         //  re-index the page including its attachments
-        //
         engine.getSearchManager().reindexPage( toPage );
         
-        Collection< Attachment > attachmentsNewName = engine.getAttachmentManager().listAttachments( toPage );
+        final Collection< Attachment > attachmentsNewName = engine.getAttachmentManager().listAttachments( toPage );
         for( final Attachment att:attachmentsNewName ) {
             final WikiPage toAttPage = engine.getPage( att.getName() );
             // add reference to attachment under new page name
             engine.updateReferences( toAttPage );
-            engine.getSearchManager().reindexPage(att);
+            engine.getSearchManager().reindexPage( att );
         }
 
         // Currently not used internally by JSPWiki itself, but you can use it for something else.
         WikiEventManager.fireEvent( this, new WikiPageRenameEvent( this, renameFrom, renameToClean ) );
 
-        //
         //  Done, return the new name.
-        //
         return renameToClean;
     }
 
@@ -180,72 +146,59 @@ public class PageRenamer
      *  @param fromPage The old page
      *  @param toPage The new page
      */
-    private void updateReferrers( WikiContext context, WikiPage fromPage, WikiPage toPage, Set<String>referrers )
-    {
-        WikiEngine engine = context.getEngine();
-        
-        if( referrers.isEmpty() ) return; // No referrers
-        
-        for( String pageName : referrers )
-        {
-            //  In case the page was just changed from under us, let's do this
-            //  small kludge.
-            if( pageName.equals( fromPage.getName() ) )
-            {
+    private void updateReferrers( final WikiContext context, final WikiPage fromPage, final WikiPage toPage, final Set< String > referrers ) {
+        if( referrers.isEmpty() ) { // No referrers
+            return;
+        }
+
+        final WikiEngine engine = context.getEngine();
+        for( String pageName : referrers ) {
+            //  In case the page was just changed from under us, let's do this small kludge.
+            if( pageName.equals( fromPage.getName() ) ) {
                 pageName = toPage.getName();
             }
             
-            WikiPage p = engine.getPage( pageName );
-            
-            String sourceText = engine.getPureText( p );
-            
+            final WikiPage p = engine.getPage( pageName );
+
+            final String sourceText = engine.getPureText( p );
             String newText = replaceReferrerString( context, sourceText, fromPage.getName(), toPage.getName() );
-            
-            if( m_camelCase )
+
+            m_camelCase = TextUtil.getBooleanProperty( engine.getWikiProperties(), JSPWikiMarkupParser.PROP_CAMELCASELINKS, m_camelCase );
+            if( m_camelCase ) {
                 newText = replaceCCReferrerString( context, newText, fromPage.getName(), toPage.getName() );
+            }
             
-            if( !sourceText.equals( newText ) )
-            {
+            if( !sourceText.equals( newText ) ) {
                 p.setAttribute( WikiPage.CHANGENOTE, fromPage.getName()+" ==> "+toPage.getName() );
                 p.setAuthor( context.getCurrentUser().getName() );
          
-                try
-                {
+                try {
                     engine.getPageManager().putPageText( p, newText );
                     engine.updateReferences( p );
-                }
-                catch( ProviderException e )
-                {
-                    //
-                    //  We fail with an error, but we will try to continue to rename
-                    //  other referrers as well.
-                    //
+                } catch( final ProviderException e ) {
+                    //  We fail with an error, but we will try to continue to rename other referrers as well.
                     log.error("Unable to perform rename.",e);
                 }
             }
         }
     }
 
-    private Set<String> getReferencesToChange( WikiPage fromPage, WikiEngine engine )
-    {
-        Set<String> referrers = new TreeSet<String>();
-        
-        Collection<String> r = engine.getReferenceManager().findReferrers( fromPage.getName() );
-        if( r != null ) referrers.addAll( r );
+    private Set<String> getReferencesToChange( final WikiPage fromPage, final WikiEngine engine ) {
+        final Set< String > referrers = new TreeSet<>();
+        final Collection< String > r = engine.getReferenceManager().findReferrers( fromPage.getName() );
+        if( r != null ) {
+            referrers.addAll( r );
+        }
         
-        try
-        {
-            List<Attachment> attachments = engine.getAttachmentManager().listAttachments( fromPage );
-
-            for( Attachment att : attachments  )
-            {
-                Collection<String> c = engine.getReferenceManager().findReferrers(att.getName());
-
-                if( c != null ) referrers.addAll(c);
+        try {
+            final List< Attachment > attachments = engine.getAttachmentManager().listAttachments( fromPage );
+            for( final Attachment att : attachments  ) {
+                final Collection< String > c = engine.getReferenceManager().findReferrers( att.getName() );
+                if( c != null ) {
+                    referrers.addAll( c );
+                }
             }
-        }
-        catch( ProviderException e )
-        {
+        } catch( final ProviderException e ) {
             // We will continue despite this error
             log.error( "Provider error while fetching attachments for rename", e );
         }
@@ -255,31 +208,21 @@ public class PageRenamer
     /**
      *  Replaces camelcase links.
      */
-    private String replaceCCReferrerString( WikiContext context, String sourceText, String from, String to )
-    {
-        StringBuilder sb = new StringBuilder( sourceText.length()+32 );
-        
-        Pattern linkPattern = Pattern.compile( "\\p{Lu}+\\p{Ll}+\\p{Lu}+[\\p{L}\\p{Digit}]*" );
-        
-        Matcher matcher = linkPattern.matcher( sourceText );
-        
+    private String replaceCCReferrerString( final WikiContext context, final String sourceText, final String from, final String to ) {
+        final StringBuilder sb = new StringBuilder( sourceText.length()+32 );
+        final Pattern linkPattern = Pattern.compile( "\\p{Lu}+\\p{Ll}+\\p{Lu}+[\\p{L}\\p{Digit}]*" );
+        final Matcher matcher = linkPattern.matcher( sourceText );
         int start = 0;
         
-        while( matcher.find(start) )
-        {
-            String match = matcher.group();
-
+        while( matcher.find( start ) ) {
+            final String match = matcher.group();
             sb.append( sourceText.substring( start, matcher.start() ) );
-
-            int lastOpenBrace = sourceText.lastIndexOf( '[', matcher.start() );
-            int lastCloseBrace = sourceText.lastIndexOf( ']', matcher.start() );
+            final int lastOpenBrace = sourceText.lastIndexOf( '[', matcher.start() );
+            final int lastCloseBrace = sourceText.lastIndexOf( ']', matcher.start() );
             
-            if( match.equals( from ) && lastCloseBrace >= lastOpenBrace )
-            {
+            if( match.equals( from ) && lastCloseBrace >= lastOpenBrace ) {
                 sb.append( to );
-            }
-            else
-            {
+            } else {
                 sb.append( match );
             }
             
@@ -291,35 +234,24 @@ public class PageRenamer
         return sb.toString();
     }
 
-    private String replaceReferrerString( WikiContext context, String sourceText, String from, String to )
-    {
-        StringBuilder sb = new StringBuilder( sourceText.length()+32 );
-        
-        //
-        //  This monstrosity just looks for a JSPWiki link pattern.  But it is pretty
-        //  cool for a regexp, isn't it?  If you can understand this in a single reading,
-        //  you have way too much time in your hands.
-        //
-        Pattern linkPattern = Pattern.compile( "([\\[\\~]?)\\[([^\\|\\]]*)(\\|)?([^\\|\\]]*)(\\|)?([^\\|\\]]*)\\]" );
-        
-        Matcher matcher = linkPattern.matcher( sourceText );
+    private String replaceReferrerString( final WikiContext context, final String sourceText, final String from, final String to ) {
+        final StringBuilder sb = new StringBuilder( sourceText.length()+32 );
         
+        // This monstrosity just looks for a JSPWiki link pattern.  But it is pretty cool for a regexp, isn't it?  If you can
+        // understand this in a single reading, you have way too much time in your hands.
+        final Pattern linkPattern = Pattern.compile( "([\\[\\~]?)\\[([^\\|\\]]*)(\\|)?([^\\|\\]]*)(\\|)?([^\\|\\]]*)\\]" );
+        final Matcher matcher = linkPattern.matcher( sourceText );
         int start = 0;
         
-        // System.out.println("====");
-        // System.out.println("SRC="+sourceText.trim());
-        while( matcher.find(start) )
-        {
+        while( matcher.find( start ) ) {
             char charBefore = (char)-1;
             
-            if( matcher.start() > 0 ) 
-                charBefore = sourceText.charAt( matcher.start()-1 );
+            if( matcher.start() > 0 ) {
+                charBefore = sourceText.charAt( matcher.start() - 1 );
+            }
             
-            if( matcher.group(1).length() > 0 || charBefore == '~' || charBefore == '[' ) 
-            {
-                //
+            if( matcher.group(1).length() > 0 || charBefore == '~' || charBefore == '[' ) {
                 //  Found an escape character, so I am escaping.
-                //
                 sb.append( sourceText.substring( start, matcher.end() ) );
                 start = matcher.end();
                 continue;
@@ -327,25 +259,14 @@ public class PageRenamer
 
             String text = matcher.group(2);
             String link = matcher.group(4);
-            String attr = matcher.group(6);
+            final String attr = matcher.group(6);
              
-            /*
-            System.out.println("MATCH="+matcher.group(0));
-            System.out.println("   text="+text);
-            System.out.println("   link="+link);
-            System.out.println("   attr="+attr);
-            */
-            if( link.length() == 0 )
-            {
+            if( link.length() == 0 ) {
                 text = replaceSingleLink( context, text, from, to );
-            }
-            else
-            {
+            } else {
                 link = replaceSingleLink( context, link, from, to );
                 
-                //
                 //  A very simple substitution, but should work for quite a few cases.
-                //
                 text = TextUtil.replaceString( text, from, to );
             }
         
@@ -353,9 +274,13 @@ public class PageRenamer
             //  Construct the new string
             //
             sb.append( sourceText.substring( start, matcher.start() ) );
-            sb.append( "["+text );
-            if( link.length() > 0 ) sb.append( "|" + link );
-            if( attr.length() > 0 ) sb.append( "|" + attr );
+            sb.append( "[" ).append( text );
+            if( link.length() > 0 ) {
+                sb.append( "|" ).append( link );
+            }
+            if( attr.length() > 0 ) {
+                sb.append( "|" ).append( attr );
+            }
             sb.append( "]" );
             
             start = matcher.end();