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 da34fc459fe51a755f7c59dbe3873ece682317ef
Author: juanpablo <juanpa...@apache.org>
AuthorDate: Sun Nov 4 01:26:49 2018 +0100

    avoid UnsupportedEncodingException and small refactor to be able to use 
try-with-resources
---
 .../java/org/apache/wiki/ReferenceManager.java     | 216 +++++++++------------
 1 file changed, 96 insertions(+), 120 deletions(-)

diff --git a/jspwiki-main/src/main/java/org/apache/wiki/ReferenceManager.java 
b/jspwiki-main/src/main/java/org/apache/wiki/ReferenceManager.java
index f12b698..eebfa08 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/ReferenceManager.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/ReferenceManager.java
@@ -27,7 +27,7 @@ import java.io.IOException;
 import java.io.ObjectInputStream;
 import java.io.ObjectOutputStream;
 import java.io.Serializable;
-import java.io.UnsupportedEncodingException;
+import java.nio.charset.StandardCharsets;
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
 import java.util.ArrayList;
@@ -379,22 +379,16 @@ public class ReferenceManager
         }
     }
 
-    private String getHashFileName( String pageName )
-        throws NoSuchAlgorithmException
-    {
-        MessageDigest digest = MessageDigest.getInstance("MD5");
-
-        byte[] dig;
-        try
-        {
-            dig = digest.digest( pageName.getBytes("UTF-8") );
-        }
-        catch (UnsupportedEncodingException e)
-        {
-            throw new InternalWikiException("AAAAGH!  UTF-8 is gone!  My eyes! 
 It burns...!", e);
-        }
+    private String getHashFileName( String pageName ) {
+               try {
+                       MessageDigest digest = MessageDigest.getInstance("MD5");
+                       byte[] dig = digest.digest( 
pageName.getBytes(StandardCharsets.UTF_8) );
 
-        return TextUtil.toHexString(dig)+".cache";
+               return TextUtil.toHexString(dig)+".cache";
+               } catch( NoSuchAlgorithmException e ) {
+                       log.fatal( "What do you mean - no such algorithm?", e );
+                       return null;
+               }
     }
 
     /**
@@ -405,74 +399,66 @@ public class ReferenceManager
         throws IOException,
                ClassNotFoundException
     {
-        ObjectInputStream in = null;
         long saved = 0L;
 
-        try
-        {
-            StopWatch sw = new StopWatch();
-            sw.start();
-
-            //
-            //  Find attribute cache, and check if it exists
-            //
-            File f = new File( m_engine.getWorkDir(), SERIALIZATION_DIR );
+        //
+        //  Find attribute cache, and check if it exists
+        //
+        String hashName = getHashFileName( p.getName() );
+        if( hashName != null ) {
+               File f = new File( m_engine.getWorkDir(), SERIALIZATION_DIR );
 
-            f = new File( f, getHashFileName(p.getName()) );
+            f = new File( f, hashName );
 
             if( !f.exists() )
             {
                 return 0L;
             }
+            try( ObjectInputStream in = new ObjectInputStream( new 
BufferedInputStream(new FileInputStream(f)) ))
+            {
+                StopWatch sw = new StopWatch();
+                sw.start();
 
-            log.debug("Deserializing attributes for "+p.getName());
-
-            in = new ObjectInputStream( new BufferedInputStream(new 
FileInputStream(f)) );
+                log.debug("Deserializing attributes for "+p.getName());
 
-            long ver     = in.readLong();
+                long ver = in.readLong();
 
-            if( ver != serialVersionUID )
-            {
-                log.debug("File format has changed; cannot deserialize.");
-                return 0L;
-            }
+                if( ver != serialVersionUID )
+                {
+                    log.debug("File format has changed; cannot deserialize.");
+                    return 0L;
+                }
 
-            saved        = in.readLong();
+                saved        = in.readLong();
 
-            String name  = in.readUTF();
+                String name  = in.readUTF();
 
-            if( !name.equals(p.getName()) )
-            {
-                log.debug("File name does not match ("+name+"), skipping...");
-                return 0L; // Not here
-            }
+                if( !name.equals(p.getName()) )
+                {
+                    log.debug("File name does not match ("+name+"), 
skipping...");
+                    return 0L; // Not here
+                }
 
-            long entries = in.readLong();
+                long entries = in.readLong();
 
-            for( int i = 0; i < entries; i++ )
-            {
-                String key   = in.readUTF();
-                Object value = in.readObject();
+                for( int i = 0; i < entries; i++ )
+                {
+                    String key   = in.readUTF();
+                    Object value = in.readObject();
 
-                p.setAttribute( key, value );
+                    p.setAttribute( key, value );
 
-                log.debug("   attr: "+key+"="+value);
-            }
+                    log.debug("   attr: "+key+"="+value);
+                }
 
-            in.close();
+                in.close();
 
-            sw.stop();
-            log.debug("Read serialized data for "+name+" successfully in "+sw);
-            p.setHasMetadata();
-        }
-        catch( NoSuchAlgorithmException e )
-        {
-            log.fatal("No MD5!?!");
-        }
-        finally
-        {
-            if( in != null ) in.close();
+                sw.stop();
+                log.debug("Read serialized data for "+name+" successfully in 
"+sw);
+                p.setHasMetadata();
+            }
         }
+        
 
         return saved;
     }
@@ -482,75 +468,67 @@ public class ReferenceManager
      */
     private synchronized void serializeAttrsToDisk( WikiPage p )
     {
-        ObjectOutputStream out = null;
         StopWatch sw = new StopWatch();
         sw.start();
 
-        try
-        {
-            File f = new File( m_engine.getWorkDir(), SERIALIZATION_DIR );
+        String hashName = getHashFileName( p.getName() );
+        if( hashName != null ) {
+               File f = new File( m_engine.getWorkDir(), SERIALIZATION_DIR );
 
             if( !f.exists() ) f.mkdirs();
 
             //
             //  Create a digest for the name
             //
-            f = new File( f, getHashFileName(p.getName()) );
-
-            // FIXME: There is a concurrency issue here...
-            Set< Map.Entry < String, Object > > entries = 
p.getAttributes().entrySet();
-
-            if( entries.size() == 0 ) 
+            f = new File( f, hashName );
+            
+            try( ObjectOutputStream out =  new ObjectOutputStream( new 
BufferedOutputStream(new FileOutputStream(f)) ) )
             {
-                //  Nothing to serialize, therefore we will just simply remove 
the
-                //  serialization file so that the next time we boot, we don't
-                //  deserialize old data.
-                f.delete();
-                return;
-            }
+                // FIXME: There is a concurrency issue here...
+                Set< Map.Entry < String, Object > > entries = 
p.getAttributes().entrySet();
 
-            out = new ObjectOutputStream( new BufferedOutputStream(new 
FileOutputStream(f)) );
+                if( entries.size() == 0 ) 
+                {
+                    //  Nothing to serialize, therefore we will just simply 
remove the
+                    //  serialization file so that the next time we boot, we 
don't
+                    //  deserialize old data.
+                    f.delete();
+                    return;
+                }
 
-            out.writeLong( serialVersionUID );
-            out.writeLong( System.currentTimeMillis() ); // Timestamp
+                out.writeLong( serialVersionUID );
+                out.writeLong( System.currentTimeMillis() ); // Timestamp
 
-            out.writeUTF( p.getName() );
-            out.writeLong( entries.size() );
+                out.writeUTF( p.getName() );
+                out.writeLong( entries.size() );
 
-            for( Iterator< Map.Entry < String, Object > > i = 
entries.iterator(); i.hasNext(); )
-            {
-                Map.Entry< String, Object > e = i.next();
-
-                if( e.getValue() instanceof Serializable )
+                for( Iterator< Map.Entry < String, Object > > i = 
entries.iterator(); i.hasNext(); )
                 {
-                    out.writeUTF( (String)e.getKey() );
-                    out.writeObject( e.getValue() );
-                }
-            }
+                    Map.Entry< String, Object > e = i.next();
 
-            out.close();
+                    if( e.getValue() instanceof Serializable )
+                    {
+                        out.writeUTF( e.getKey() );
+                        out.writeObject( e.getValue() );
+                    }
+                }
 
-        }
-        catch( IOException e )
-        {
-            log.error("Unable to serialize!");
+                out.close();
 
-            try
+            }
+            catch( IOException e )
             {
-                if( out != null ) out.close();
+                log.error( "Unable to serialize!", e );
+
             }
-            catch( IOException ex ) {}
-        }
-        catch( NoSuchAlgorithmException e )
-        {
-            log.fatal("No MD5 algorithm!?!");
-        }
-        finally
-        {
-            sw.stop();
+            finally
+            {
+                sw.stop();
 
-            log.debug("serialization for "+p.getName()+" done - took "+sw);
+                log.debug("serialization for "+p.getName()+" done - took "+sw);
+            }
         }
+        
     }
 
     /**
@@ -559,7 +537,8 @@ public class ReferenceManager
      *  @param context {@inheritDoc}
      *  @param content {@inheritDoc}
      */
-    public void postSave( WikiContext context, String content )
+    @Override
+       public void postSave( WikiContext context, String content )
     {
         WikiPage page = context.getPage();
 
@@ -630,18 +609,14 @@ public class ReferenceManager
         //
         serializeToDisk();
 
-        try
-        {
-            File f = new File( m_engine.getWorkDir(), SERIALIZATION_DIR );
+        String hashName = getHashFileName( pageName );
+        if( hashName != null ) {
+               File f = new File( m_engine.getWorkDir(), SERIALIZATION_DIR );
 
             f = new File( f, getHashFileName(pageName) );
 
             if( f.exists() ) f.delete();
         }
-        catch( NoSuchAlgorithmException e )
-        {
-            log.error("What do you mean - no such algorithm?", e);
-        }
     }
 
     /**
@@ -684,7 +659,7 @@ public class ReferenceManager
         Collection< String > oldRefTo = m_refersTo.get( page );
         m_refersTo.remove( page );
 
-        TreeSet<String> cleanedRefs = new TreeSet<String>();
+        TreeSet<String> cleanedRefs = new TreeSet<>();
         for( Iterator< String > i = references.iterator(); i.hasNext(); )
         {
             String ref = i.next();
@@ -1143,7 +1118,8 @@ public class ReferenceManager
     /**
      *  {@inheritDoc}
      */
-    public void actionPerformed(WikiEvent event)
+    @Override
+       public void actionPerformed(WikiEvent event)
     {
         if( (event instanceof WikiPageEvent) && (event.getType() == 
WikiPageEvent.PAGE_DELETED) )
         {

Reply via email to