You are viewing a plain text version of this content. The canonical link for it is here.
Posted to doxia-commits@maven.apache.org by lt...@apache.org on 2009/06/08 16:34:11 UTC

svn commit: r782648 - in /maven/doxia/doxia/trunk: doxia-core/src/main/java/org/apache/maven/doxia/util/DoxiaUtils.java doxia-modules/doxia-module-fo/src/main/java/org/apache/maven/doxia/module/fo/FoAggregateSink.java

Author: ltheussl
Date: Mon Jun  8 14:34:10 2009
New Revision: 782648

URL: http://svn.apache.org/viewvc?rev=782648&view=rev
Log:
Extract the image reading into a re-usable utility method.

Modified:
    maven/doxia/doxia/trunk/doxia-core/src/main/java/org/apache/maven/doxia/util/DoxiaUtils.java
    maven/doxia/doxia/trunk/doxia-modules/doxia-module-fo/src/main/java/org/apache/maven/doxia/module/fo/FoAggregateSink.java

Modified: maven/doxia/doxia/trunk/doxia-core/src/main/java/org/apache/maven/doxia/util/DoxiaUtils.java
URL: http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-core/src/main/java/org/apache/maven/doxia/util/DoxiaUtils.java?rev=782648&r1=782647&r2=782648&view=diff
==============================================================================
--- maven/doxia/doxia/trunk/doxia-core/src/main/java/org/apache/maven/doxia/util/DoxiaUtils.java (original)
+++ maven/doxia/doxia/trunk/doxia-core/src/main/java/org/apache/maven/doxia/util/DoxiaUtils.java Mon Jun  8 14:34:10 2009
@@ -19,8 +19,14 @@
  * under the License.
  */
 
+import java.awt.image.BufferedImage;
+
+import java.io.File;
+import java.io.IOException;
 import java.io.UnsupportedEncodingException;
 
+import java.net.URL;
+
 import java.text.ParseException;
 import java.text.ParsePosition;
 import java.text.SimpleDateFormat;
@@ -28,6 +34,12 @@
 import java.util.Date;
 import java.util.Locale;
 
+import javax.imageio.ImageIO;
+
+import javax.swing.text.MutableAttributeSet;
+
+import org.apache.maven.doxia.sink.SinkEventAttributeSet;
+
 /**
  * General Doxia utility methods. The methods in this class should not assume
  * any specific Doxia module or document format.
@@ -356,9 +368,44 @@
         return ( c >= '0' && c <= '9' );
     }
 
+    /**
+     * Determine width and height of an image. If successful, the returned SinkEventAttributes
+     * contain width and height attribute keys whose values are the width and height of the image (as a String).
+     *
+     * @param logo a String containing either a URL or a path to an image file.
+     * @return a set of SinkEventAttributes, or null if no ImageReader was found to read the image.
+     * @throws java.io.IOException if an error occurs during reading.
+     * @since 1.1.1
+     */
+    public static MutableAttributeSet getImageAttributes( String logo )
+            throws IOException
+    {
+        BufferedImage img = null;
+
+        if ( isExternalLink( logo ) )
+        {
+            img = ImageIO.read( new URL( logo ) );
+        }
+        else
+        {
+            img = ImageIO.read( new File( logo ) );
+        }
+
+        if ( img == null )
+        {
+            return null;
+        }
+
+        MutableAttributeSet atts = new SinkEventAttributeSet();
+        atts.addAttribute( SinkEventAttributeSet.WIDTH, Integer.toString( img.getWidth() ) );
+        atts.addAttribute( SinkEventAttributeSet.HEIGHT, Integer.toString( img.getHeight() ) );
+        // add other attributes?
+
+        return atts;
+    }
+
     private DoxiaUtils()
     {
         // utility class
     }
-
 }

Modified: maven/doxia/doxia/trunk/doxia-modules/doxia-module-fo/src/main/java/org/apache/maven/doxia/module/fo/FoAggregateSink.java
URL: http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-modules/doxia-module-fo/src/main/java/org/apache/maven/doxia/module/fo/FoAggregateSink.java?rev=782648&r1=782647&r2=782648&view=diff
==============================================================================
--- maven/doxia/doxia/trunk/doxia-modules/doxia-module-fo/src/main/java/org/apache/maven/doxia/module/fo/FoAggregateSink.java (original)
+++ maven/doxia/doxia/trunk/doxia-modules/doxia-module-fo/src/main/java/org/apache/maven/doxia/module/fo/FoAggregateSink.java Mon Jun  8 14:34:10 2009
@@ -19,10 +19,8 @@
  * under the License.
  */
 
-import java.awt.image.BufferedImage;
-import java.io.File;
+import java.io.IOException;
 import java.io.Writer;
-import java.net.URL;
 
 import java.util.Calendar;
 import java.util.Date;
@@ -32,7 +30,6 @@
 import java.util.ResourceBundle;
 import java.util.Stack;
 
-import javax.imageio.ImageIO;
 import javax.swing.text.MutableAttributeSet;
 import javax.swing.text.html.HTML.Tag;
 
@@ -89,6 +86,9 @@
     /** Used to get the current position in the TOC. */
     private final Stack tocStack = new Stack();
 
+    // TODO: make configurable
+    private static final String COVER_HEADER_HEIGHT = "1.5in";
+
     /**
      * Constructor.
      *
@@ -958,7 +958,7 @@
         String compLogo = cover.getCompanyLogo();
         String projLogo = cover.getProjectLogo();
 
-        writeStartTag( TABLE_ROW_TAG, "height", "1.5in" );
+        writeStartTag( TABLE_ROW_TAG, "height", COVER_HEADER_HEIGHT );
         writeStartTag( TABLE_CELL_TAG );
 
         if ( StringUtils.isNotEmpty( compLogo ) )
@@ -1151,47 +1151,31 @@
 
     private SinkEventAttributeSet getGraphicsAttributes( String logo )
     {
-        SinkEventAttributeSet atts = new SinkEventAttributeSet();
+        MutableAttributeSet atts = null;
 
-        BufferedImage img = null;
-        if ( ( logo.toLowerCase( Locale.ENGLISH ).startsWith( "http://" ) )
-            || ( logo.toLowerCase( Locale.ENGLISH ).startsWith( "https://" ) ) )
+        try
         {
-            try
-            {
-                img = ImageIO.read( new URL( logo ) );
-            }
-            catch ( Exception e )
-            {
-                getLog().debug( e );
-            }
+            atts = DoxiaUtils.getImageAttributes( logo );
         }
-        else
+        catch ( IOException e )
         {
-            try
-            {
-                img = ImageIO.read( new File( logo ) );
-            }
-            catch ( Exception e )
-            {
-                getLog().debug( e );
-            }
+            getLog().debug( e );
         }
 
-        if ( img == null )
+        if ( atts == null )
         {
-            atts.addAttribute( SinkEventAttributes.HEIGHT, "1.5in" );
-            return atts;
+            return new SinkEventAttributeSet( new String[] {SinkEventAttributes.HEIGHT, COVER_HEADER_HEIGHT} );
         }
 
         // FOP dpi: 72
         // Max width : 3.125 inch, table cell size, see #coverPage()
-        double maxWidth = 3.125 * 72;
-        if ( img.getWidth() > maxWidth )
+        final int maxWidth = 225; // 3.125 * 72
+
+        if ( Integer.parseInt( atts.getAttribute( SinkEventAttributes.WIDTH ).toString() ) > maxWidth )
         {
             atts.addAttribute( "content-width", "3.125in" );
         }
 
-        return atts;
+        return new SinkEventAttributeSet( atts );
     }
 }