You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by hu...@apache.org on 2003/12/12 10:41:33 UTC

cvs commit: cocoon-2.1/src/java/org/apache/cocoon/reading ImageReader.java

huber       2003/12/12 01:41:33

  Modified:    src/java/org/apache/cocoon/reading ImageReader.java
  Log:
  use faster transformation iff java 1.4 is present
  fix Bugzilla Bug 25069, close inputStream in finally block
  
  Revision  Changes    Path
  1.4       +55 -9     cocoon-2.1/src/java/org/apache/cocoon/reading/ImageReader.java
  
  Index: ImageReader.java
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/src/java/org/apache/cocoon/reading/ImageReader.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- ImageReader.java	24 Sep 2003 21:41:11 -0000	1.3
  +++ ImageReader.java	12 Dec 2003 09:41:33 -0000	1.4
  @@ -202,19 +202,31 @@
                   WritableRaster scaled = filter.createCompatibleDestRaster(original);
                   filter.filter(original, scaled);
   
  -                // JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
  -
  -                ByteArrayOutputStream bstream = new ByteArrayOutputStream();
  -                JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(bstream);
  -                encoder.encode(scaled);
  -                out.write(bstream.toByteArray());
  +                if (!handleJVMBug()) {
  +                    if (getLogger().isDebugEnabled()) {
  +                        getLogger().debug( "No need to handle JVM bug" );
  +                    }
  +                    JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
  +                    encoder.encode(scaled);
  +                } else {
  +                    if (getLogger().isDebugEnabled()) {
  +                        getLogger().debug( "Need to handle JVM bug" );
  +                    }
  +                    ByteArrayOutputStream bstream = new ByteArrayOutputStream();
  +                    JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(bstream);
  +                    encoder.encode(scaled);
  +                    out.write(bstream.toByteArray());
  +                }
   
                   out.flush();
               } catch (ImageFormatException e) {
                   throw new ProcessingException("Error reading the image. Note that only JPEG images are currently supported.");
  +            } finally {
  +              // Bugzilla Bug 25069, close inputStream in finally block
  +              // this will close inputStream even if processStream throws
  +              // an exception
  +              inputStream.close();
               }
  -
  -            inputStream.close();
           } else {
               // only read the resource - no modifications requested
               if (getLogger().isDebugEnabled()) {
  @@ -237,5 +249,39 @@
           } else {
               return super.getKey();
           }
  +    }
  +
  +    /**
  +     * Determine if workaround for Bug Id 4502892 is neccessary.
  +     * This method assumes that Bug is present if 
  +     * java.version is undeterminable, and for java.version
  +     * 1.1, 1.2, 1.3, all other java.version do not need the Bug handling
  +     *
  +     * @return true if we should handle the JVM bug, else false
  +     */
  +    protected boolean handleJVMBug() {
  +        // java.version=1.4.0
  +        String java_version = System.getProperty( "java.version", "0.0.0" );
  +        boolean handleJVMBug = true;
  +        
  +        char major = java_version.charAt(0);
  +        char minor = java_version.charAt(2);
  +        
  +        // make 0.0, 1.1, 1.2, 1.3 handleJVMBug = true
  +        if (major == '0' || major == '1') {
  +            if (minor == '0' || minor == '1' || minor == '2' || minor == '3') {
  +                handleJVMBug = true;
  +            } else {
  +                handleJVMBug = false;
  +            }
  +        } else {
  +            handleJVMBug = true;
  +        }
  +        if (getLogger().isDebugEnabled()) {
  +            getLogger().debug( "Running java.version " + String.valueOf(java_version) + 
  +              " need to handle JVM bug " + String.valueOf(handleJVMBug) );
  +        }
  +        
  +        return handleJVMBug;
       }
   }