Author: dspicar
Date: Wed Aug 29 16:43:03 2012
New Revision: 1378636

URL: http://svn.apache.org/viewvc?rev=1378636&view=rev
Log:
CLEREZZA-716: renamed BufferedImageProvider to ImageReader and created a 
service to provide always the reader with highest ranking.

Added:
    
incubator/clerezza/issues/CLEREZZA-716/utils.imageprocessing/src/main/java/org/apache/clerezza/utils/imageprocessing/AbstractImageReader.java
    
incubator/clerezza/issues/CLEREZZA-716/utils.imageprocessing/src/main/java/org/apache/clerezza/utils/imageprocessing/ImageIOImageReader.java
      - copied, changed from r1377751, 
incubator/clerezza/issues/CLEREZZA-716/utils.imageprocessing/src/main/java/org/apache/clerezza/utils/imageprocessing/ImageIOBufferedImageProvider.java
    
incubator/clerezza/issues/CLEREZZA-716/utils.imageprocessing/src/main/java/org/apache/clerezza/utils/imageprocessing/ImageReader.java
      - copied, changed from r1377751, 
incubator/clerezza/issues/CLEREZZA-716/utils.imageprocessing/src/main/java/org/apache/clerezza/utils/imageprocessing/BufferedImageProvider.java
    
incubator/clerezza/issues/CLEREZZA-716/utils.imageprocessing/src/main/java/org/apache/clerezza/utils/imageprocessing/ImageReaderService.java
    
incubator/clerezza/issues/CLEREZZA-716/utils.imageprocessing/src/main/resources/
Removed:
    
incubator/clerezza/issues/CLEREZZA-716/utils.imageprocessing/src/main/java/org/apache/clerezza/utils/imageprocessing/BufferedImageProvider.java
    
incubator/clerezza/issues/CLEREZZA-716/utils.imageprocessing/src/main/java/org/apache/clerezza/utils/imageprocessing/ImageIOBufferedImageProvider.java
Modified:
    
incubator/clerezza/issues/CLEREZZA-716/platform.content.imagemetadata/src/main/java/org/apache/clerezza/platform/content/imagemetadata/ImageMetaDataGenerator.java
    
incubator/clerezza/issues/CLEREZZA-716/platform.content.representations/platform.content.representations.core/src/main/java/org/apache/clerezza/platform/content/representations/core/AlternativeRepresentationGenerator.java

Modified: 
incubator/clerezza/issues/CLEREZZA-716/platform.content.imagemetadata/src/main/java/org/apache/clerezza/platform/content/imagemetadata/ImageMetaDataGenerator.java
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/issues/CLEREZZA-716/platform.content.imagemetadata/src/main/java/org/apache/clerezza/platform/content/imagemetadata/ImageMetaDataGenerator.java?rev=1378636&r1=1378635&r2=1378636&view=diff
==============================================================================
--- 
incubator/clerezza/issues/CLEREZZA-716/platform.content.imagemetadata/src/main/java/org/apache/clerezza/platform/content/imagemetadata/ImageMetaDataGenerator.java
 (original)
+++ 
incubator/clerezza/issues/CLEREZZA-716/platform.content.imagemetadata/src/main/java/org/apache/clerezza/platform/content/imagemetadata/ImageMetaDataGenerator.java
 Wed Aug 29 16:43:03 2012
@@ -26,10 +26,9 @@ import org.apache.clerezza.rdf.core.Lite
 import org.apache.clerezza.rdf.metadata.MetaDataGenerator;
 import org.apache.clerezza.rdf.ontologies.EXIF;
 import org.apache.clerezza.rdf.utils.GraphNode;
-import org.apache.clerezza.utils.imageprocessing.BufferedImageProvider;
+import org.apache.clerezza.utils.imageprocessing.ImageReaderService;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Reference;
-import org.apache.felix.scr.annotations.ReferenceCardinality;
 import org.apache.felix.scr.annotations.Service;
 
 /**
@@ -41,15 +40,15 @@ import org.apache.felix.scr.annotations.
 @Service(MetaDataGenerator.class)
 public class ImageMetaDataGenerator implements MetaDataGenerator {
 
-       @Reference(cardinality=ReferenceCardinality.MANDATORY_UNARY)
-       private BufferedImageProvider bufferedImageProvider;
+       @Reference
+       private ImageReaderService imageReaderService;
         
        @Override
        public void generate(GraphNode node, byte[] data, MediaType mediaType) {
 
                if (mediaType.getType().startsWith("image")) {
                        try {
-                               BufferedImage buffImage = 
bufferedImageProvider.getBufferedImage(new ByteArrayInputStream(data));
+                               BufferedImage buffImage = 
imageReaderService.getImageReader().getBufferedImage(new 
ByteArrayInputStream(data));
                                node.deleteProperties(EXIF.width);
                                node.deleteProperties(EXIF.height);
                                node.addProperty(EXIF.width, 
LiteralFactory.getInstance().

Modified: 
incubator/clerezza/issues/CLEREZZA-716/platform.content.representations/platform.content.representations.core/src/main/java/org/apache/clerezza/platform/content/representations/core/AlternativeRepresentationGenerator.java
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/issues/CLEREZZA-716/platform.content.representations/platform.content.representations.core/src/main/java/org/apache/clerezza/platform/content/representations/core/AlternativeRepresentationGenerator.java?rev=1378636&r1=1378635&r2=1378636&view=diff
==============================================================================
--- 
incubator/clerezza/issues/CLEREZZA-716/platform.content.representations/platform.content.representations.core/src/main/java/org/apache/clerezza/platform/content/representations/core/AlternativeRepresentationGenerator.java
 (original)
+++ 
incubator/clerezza/issues/CLEREZZA-716/platform.content.representations/platform.content.representations.core/src/main/java/org/apache/clerezza/platform/content/representations/core/AlternativeRepresentationGenerator.java
 Wed Aug 29 16:43:03 2012
@@ -31,12 +31,11 @@ import org.apache.clerezza.rdf.core.UriR
 import org.apache.clerezza.rdf.metadata.MetaDataGenerator;
 import org.apache.clerezza.rdf.ontologies.DISCOBITS;
 import org.apache.clerezza.rdf.utils.GraphNode;
-import org.apache.clerezza.utils.imageprocessing.BufferedImageProvider;
 import org.apache.clerezza.utils.imageprocessing.ImageProcessor;
+import org.apache.clerezza.utils.imageprocessing.ImageReaderService;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Property;
 import org.apache.felix.scr.annotations.Reference;
-import org.apache.felix.scr.annotations.ReferenceCardinality;
 import org.apache.felix.scr.annotations.Service;
 import org.apache.felix.scr.annotations.Services;
 import org.osgi.service.component.ComponentContext;
@@ -100,8 +99,8 @@ public class AlternativeRepresentationGe
        @Reference
        private ImageProcessor imageProcessor;
         
-        @Reference(cardinality=ReferenceCardinality.MANDATORY_UNARY)
-       private BufferedImageProvider bufferedImageProvider;
+        @Reference
+       private ImageReaderService imageReaderService;
 
        @Property(value="100x100,200x200", description="Specifies the 
resolutions of alternative" +
                        " representations in the format [width]x[height]. 
Multiple resolutions" +
@@ -207,7 +206,8 @@ public class AlternativeRepresentationGe
                try {
                        isAltRepresentation.set(Boolean.TRUE);
                        InfoDiscobit infoBit = 
InfoDiscobit.createInstance(infoBitNode);
-                       BufferedImage buffImage = 
bufferedImageProvider.getBufferedImage(new 
ByteArrayInputStream(infoBit.getData()));
+                       BufferedImage buffImage = 
imageReaderService.getImageReader().
+                                getBufferedImage(new 
ByteArrayInputStream(infoBit.getData()));
                        return generateAlternativeImage(buffImage, new 
Resolution(width, height), 
                                        
MediaType.valueOf(infoBit.getContentType()), infoBitNode, exact);
                } catch (IOException ex) {
@@ -221,7 +221,8 @@ public class AlternativeRepresentationGe
                        GraphNode node) throws RuntimeException {
                try {
                        isAltRepresentation.set(Boolean.TRUE);
-                       BufferedImage buffImage = 
bufferedImageProvider.getBufferedImage(new ByteArrayInputStream(data));
+                       BufferedImage buffImage = 
imageReaderService.getImageReader().
+                                getBufferedImage(new 
ByteArrayInputStream(data));
                        int imgWidth = buffImage.getWidth();
                        int imgHeigth = buffImage.getHeight();
                        for (Resolution resolution : resolutions) {

Added: 
incubator/clerezza/issues/CLEREZZA-716/utils.imageprocessing/src/main/java/org/apache/clerezza/utils/imageprocessing/AbstractImageReader.java
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/issues/CLEREZZA-716/utils.imageprocessing/src/main/java/org/apache/clerezza/utils/imageprocessing/AbstractImageReader.java?rev=1378636&view=auto
==============================================================================
--- 
incubator/clerezza/issues/CLEREZZA-716/utils.imageprocessing/src/main/java/org/apache/clerezza/utils/imageprocessing/AbstractImageReader.java
 (added)
+++ 
incubator/clerezza/issues/CLEREZZA-716/utils.imageprocessing/src/main/java/org/apache/clerezza/utils/imageprocessing/AbstractImageReader.java
 Wed Aug 29 16:43:03 2012
@@ -0,0 +1,67 @@
+/*
+ * Copyright 2012 The Apache Software Foundation.
+ *
+ * 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 org.apache.clerezza.utils.imageprocessing;
+
+import java.util.Map;
+import org.osgi.framework.Constants;
+
+/**
+ * Abstract ImageReader implementation.
+ * 
+ * Handles tracking of service ranking.
+ *
+ * @author daniel
+ */
+public abstract class AbstractImageReader implements ImageReader {
+    private Integer serviceRanking = 0;
+
+    /**
+     * Called when this component is activated.
+     */
+    protected void activate(final Map<String, Object> config) {
+        this.serviceRanking = (Integer) config.get(Constants.SERVICE_RANKING);
+    }
+    
+    /**
+     * Called when this component is activated.
+     */
+    protected void modified(final Map<String, Object> config) {
+        this.serviceRanking = (Integer) config.get(Constants.SERVICE_RANKING);
+    }
+    
+    @Override
+    public Integer getServiceRanking() {
+        return this.serviceRanking;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if(obj == null) {
+            return false;
+        }
+        if(obj instanceof AbstractImageReader) {
+            AbstractImageReader other = (AbstractImageReader) obj;
+            return this.serviceRanking.equals(other.serviceRanking);
+        }
+        
+        return false;
+    }
+
+    @Override
+    public int hashCode() {
+        return this.serviceRanking.hashCode();
+    }
+}

Copied: 
incubator/clerezza/issues/CLEREZZA-716/utils.imageprocessing/src/main/java/org/apache/clerezza/utils/imageprocessing/ImageIOImageReader.java
 (from r1377751, 
incubator/clerezza/issues/CLEREZZA-716/utils.imageprocessing/src/main/java/org/apache/clerezza/utils/imageprocessing/ImageIOBufferedImageProvider.java)
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/issues/CLEREZZA-716/utils.imageprocessing/src/main/java/org/apache/clerezza/utils/imageprocessing/ImageIOImageReader.java?p2=incubator/clerezza/issues/CLEREZZA-716/utils.imageprocessing/src/main/java/org/apache/clerezza/utils/imageprocessing/ImageIOImageReader.java&p1=incubator/clerezza/issues/CLEREZZA-716/utils.imageprocessing/src/main/java/org/apache/clerezza/utils/imageprocessing/ImageIOBufferedImageProvider.java&r1=1377751&r2=1378636&rev=1378636&view=diff
==============================================================================
--- 
incubator/clerezza/issues/CLEREZZA-716/utils.imageprocessing/src/main/java/org/apache/clerezza/utils/imageprocessing/ImageIOBufferedImageProvider.java
 (original)
+++ 
incubator/clerezza/issues/CLEREZZA-716/utils.imageprocessing/src/main/java/org/apache/clerezza/utils/imageprocessing/ImageIOImageReader.java
 Wed Aug 29 16:43:03 2012
@@ -20,20 +20,28 @@ import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.URL;
+import java.util.Map;
 import javax.imageio.ImageIO;
 import javax.imageio.stream.ImageInputStream;
+import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Modified;
+import org.apache.felix.scr.annotations.Property;
 import org.apache.felix.scr.annotations.Service;
+import org.osgi.framework.Constants;
 
 /**
  * A service using Java Image IO to read images.
  *
  * @author daniel
  */
-@Component
-@Service(BufferedImageProvider.class)
-public class ImageIOBufferedImageProvider implements BufferedImageProvider {
-
+@Component(label="Java Image IO Image Reader", 
+        description="Reads images using default Java Image IO.",
+        metatype=true)
+@Service(ImageReader.class)
+@Property(name=Constants.SERVICE_RANKING, intValue=0, propertyPrivate=false)
+public class ImageIOImageReader extends AbstractImageReader {
+    
     @Override
     public BufferedImage getBufferedImage(File file) throws IOException {
         return ImageIO.read(file);
@@ -51,5 +59,16 @@ public class ImageIOBufferedImageProvide
     public BufferedImage getBufferedImage(URL url) throws IOException {
         return ImageIO.read(url);
     }
-    
+
+    @Override
+    @Activate
+    protected void activate(Map<String, Object> config) {
+        super.activate(config);
+    }
+
+    @Override
+    @Modified
+    protected void modified(Map<String, Object> config) {
+        super.modified(config);
+    }
 }

Copied: 
incubator/clerezza/issues/CLEREZZA-716/utils.imageprocessing/src/main/java/org/apache/clerezza/utils/imageprocessing/ImageReader.java
 (from r1377751, 
incubator/clerezza/issues/CLEREZZA-716/utils.imageprocessing/src/main/java/org/apache/clerezza/utils/imageprocessing/BufferedImageProvider.java)
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/issues/CLEREZZA-716/utils.imageprocessing/src/main/java/org/apache/clerezza/utils/imageprocessing/ImageReader.java?p2=incubator/clerezza/issues/CLEREZZA-716/utils.imageprocessing/src/main/java/org/apache/clerezza/utils/imageprocessing/ImageReader.java&p1=incubator/clerezza/issues/CLEREZZA-716/utils.imageprocessing/src/main/java/org/apache/clerezza/utils/imageprocessing/BufferedImageProvider.java&r1=1377751&r2=1378636&rev=1378636&view=diff
==============================================================================
--- 
incubator/clerezza/issues/CLEREZZA-716/utils.imageprocessing/src/main/java/org/apache/clerezza/utils/imageprocessing/BufferedImageProvider.java
 (original)
+++ 
incubator/clerezza/issues/CLEREZZA-716/utils.imageprocessing/src/main/java/org/apache/clerezza/utils/imageprocessing/ImageReader.java
 Wed Aug 29 16:43:03 2012
@@ -30,7 +30,7 @@ import java.net.URL;
  *
  * @author daniel
  */
-public interface BufferedImageProvider {
+public interface ImageReader {
     
     /**
      * Creates a {@link BufferedImage} from an {@link File}.
@@ -58,4 +58,11 @@ public interface BufferedImageProvider {
      * image.
      */
     public BufferedImage getBufferedImage(URL url) throws IOException;
+    
+    /**
+     * Get the current service ranking.
+     * 
+     * @return the service ranking.
+     */
+    Integer getServiceRanking();
 }

Added: 
incubator/clerezza/issues/CLEREZZA-716/utils.imageprocessing/src/main/java/org/apache/clerezza/utils/imageprocessing/ImageReaderService.java
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/issues/CLEREZZA-716/utils.imageprocessing/src/main/java/org/apache/clerezza/utils/imageprocessing/ImageReaderService.java?rev=1378636&view=auto
==============================================================================
--- 
incubator/clerezza/issues/CLEREZZA-716/utils.imageprocessing/src/main/java/org/apache/clerezza/utils/imageprocessing/ImageReaderService.java
 (added)
+++ 
incubator/clerezza/issues/CLEREZZA-716/utils.imageprocessing/src/main/java/org/apache/clerezza/utils/imageprocessing/ImageReaderService.java
 Wed Aug 29 16:43:03 2012
@@ -0,0 +1,87 @@
+/*
+ * Copyright 2012 The Apache Software Foundation.
+ *
+ * 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 org.apache.clerezza.utils.imageprocessing;
+
+import java.util.Comparator;
+import java.util.SortedSet;
+import java.util.TreeSet;
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Reference;
+import org.apache.felix.scr.annotations.ReferenceCardinality;
+import org.apache.felix.scr.annotations.ReferencePolicy;
+import org.apache.felix.scr.annotations.ReferenceStrategy;
+import org.apache.felix.scr.annotations.Service;
+
+/**
+ * This service dynamically provides the registered {@link ImageReader} with 
the 
+ * highest service ranking.
+ *
+ * @author daniel
+ */
+@Component(label="Image Reader Service.", 
+        description="Provides the registered ImageReader with the highest 
service ranking.")
+@Service(ImageReaderService.class)
+@Reference(name = "imageReaders", 
+        referenceInterface = ImageReader.class, 
+        cardinality = ReferenceCardinality.MANDATORY_MULTIPLE, 
+        policy = ReferencePolicy.DYNAMIC, 
+        strategy = ReferenceStrategy.EVENT,
+        bind="bindImageReader",
+        unbind="unbindImageReader")
+public class ImageReaderService {
+    
+    private SortedSet<ImageReader> registeredImageReaders = 
+            new TreeSet<ImageReader>(new RankingComparator());
+    
+    /**
+     * Returns the {@link ImageReader} with the highest service ranking. 
+     * 
+     * In case of a tie, the service service that got registered first is 
returned.
+     * 
+     * @return an {@link ImageReader}
+     */
+    public ImageReader getImageReader() {
+        return registeredImageReaders.last();
+    }
+    
+    /**
+     * Called when new {@link ImageReader} services are registered in
+     * the OSGi environment.
+     *
+     * @param imageReader   the ImageReader
+     */
+    protected void bindImageReader(ImageReader imageReader) {
+        this.registeredImageReaders.add(imageReader);
+    }
+    
+    /**
+     * Called when {@link ImageReader} services are unregistered in
+     * the OSGi environment.
+     *
+     * @param imageReader   the ImageReader
+     */
+    protected void unbindImageReader(ImageReader imageReader) {
+        this.registeredImageReaders.remove(imageReader);
+    }
+    
+    private class RankingComparator implements Comparator<ImageReader> {
+        @Override
+        public int compare(ImageReader o1, ImageReader o2) {
+            return o1.getServiceRanking().compareTo(o2.getServiceRanking());
+        }
+        
+    }
+}


Reply via email to