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());
+ }
+
+ }
+}