From b1ee6c362ce079295ec412c2f006941516adf774 Mon Sep 17 00:00:00 2001
From: brinn <brinn>
Date: Wed, 17 Aug 2011 21:38:57 +0000
Subject: [PATCH] add: IStreamingImageTransformer and factory improve: javadoc
 of IImageTransformer

SVN: 22553
---
 .../cisd/base/image/IImageTransformer.java    |  8 +--
 .../image/IStreamingImageTransformer.java     | 53 +++++++++++++++++++
 .../IStreamingImageTransformerFactory.java    | 33 ++++++++++++
 3 files changed, 91 insertions(+), 3 deletions(-)
 create mode 100644 base/source/java/ch/systemsx/cisd/base/image/IStreamingImageTransformer.java
 create mode 100644 base/source/java/ch/systemsx/cisd/base/image/IStreamingImageTransformerFactory.java

diff --git a/base/source/java/ch/systemsx/cisd/base/image/IImageTransformer.java b/base/source/java/ch/systemsx/cisd/base/image/IImageTransformer.java
index 099f1653782..bcc9599a2c9 100644
--- a/base/source/java/ch/systemsx/cisd/base/image/IImageTransformer.java
+++ b/base/source/java/ch/systemsx/cisd/base/image/IImageTransformer.java
@@ -19,15 +19,17 @@ package ch.systemsx.cisd.base.image;
 import java.awt.image.BufferedImage;
 
 /**
- * Interface for classes which can transform images. The transformation depends only some parameters
- * and an image as input.
+ * Interface for classes which can transform images. The transformation depends only on some
+ * parameters and an image as input.
  * 
  * @author Franz-Josef Elmer
  */
 public interface IImageTransformer
 {
     /**
-     * Transforms the specified image. The transformation should change the input image.
+     * Transforms the specified image. The transformation must <i>not</i> change the input image.
+     * 
+     * @return The transformed image.
      */
     public BufferedImage transform(BufferedImage image);
 }
diff --git a/base/source/java/ch/systemsx/cisd/base/image/IStreamingImageTransformer.java b/base/source/java/ch/systemsx/cisd/base/image/IStreamingImageTransformer.java
new file mode 100644
index 00000000000..5520617fef3
--- /dev/null
+++ b/base/source/java/ch/systemsx/cisd/base/image/IStreamingImageTransformer.java
@@ -0,0 +1,53 @@
+/*
+ * Copyright 2011 ETH Zuerich, CISD
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package ch.systemsx.cisd.base.image;
+
+import java.awt.image.BufferedImage;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+import ch.systemsx.cisd.base.image.IImageTransformer;
+
+/**
+ * Interface for classes which can transform images in a streaming mode. The transformation depends
+ * only on some parameters and an image as stream of bytes.
+ * 
+ * @author Bernd Rinn
+ */
+public interface IStreamingImageTransformer extends IImageTransformer
+{
+
+    /**
+     * Transforms the image provided as the <var>input</var> stream.
+     * 
+     * @return The transformed image.
+     */
+    public BufferedImage transform(InputStream input);
+
+    /**
+     * Transforms the image provided as the <var>input</var> stream.
+     * 
+     * @return The transformed image as a byte array that constitutes a PNG file.
+     */
+    public byte[] transformToPNG(InputStream input);
+
+    /**
+     * Transforms the image provided as the <var>input</var> stream. Writes the transformed PNG file
+     * to the <var>output</var> stream.
+     */
+    public void transformToPNGStream(InputStream input, OutputStream output);
+}
diff --git a/base/source/java/ch/systemsx/cisd/base/image/IStreamingImageTransformerFactory.java b/base/source/java/ch/systemsx/cisd/base/image/IStreamingImageTransformerFactory.java
new file mode 100644
index 00000000000..b446c505831
--- /dev/null
+++ b/base/source/java/ch/systemsx/cisd/base/image/IStreamingImageTransformerFactory.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2011 ETH Zuerich, CISD
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package ch.systemsx.cisd.base.image;
+
+import ch.systemsx.cisd.base.image.IImageTransformerFactory;
+
+/**
+ * Factory creating an {@link IStreamingImageTransformer}. The parameters of the transformer should
+ * be stored as serializable attributes of concrete implementations of this interface.
+ * 
+ * @author Bernd Rinn
+ */
+public interface IStreamingImageTransformerFactory extends IImageTransformerFactory
+{
+    /**
+     * Creates a transformer object based on the attributes of the factory.
+     */
+    public IStreamingImageTransformer createTransformer();
+}
-- 
GitLab