Author: mir
Date: Mon Dec 21 14:13:49 2009
New Revision: 892829

URL: http://svn.apache.org/viewvc?rev=892829&view=rev
Log:
CLEREZZA-25: applied review comments

Added:
    
incubator/clerezza/issues/CLEREZZA-25/org.apache.clerezza.platform.content.representations/
   (props changed)
      - copied from r892819, 
incubator/clerezza/issues/CLEREZZA-25/org.apache.clerezza.platform.content.thumbnails/
    
incubator/clerezza/issues/CLEREZZA-25/org.apache.clerezza.platform.content.representations/src/main/java/org/apache/clerezza/platform/content/representations/
    
incubator/clerezza/issues/CLEREZZA-25/org.apache.clerezza.platform.content.representations/src/main/java/org/apache/clerezza/platform/content/representations/AlternativeRepresentationGenerator.java
      - copied, changed from r892736, 
incubator/clerezza/issues/CLEREZZA-25/org.apache.clerezza.platform.content.thumbnails/src/main/java/org/apache/clerezza/platform/content/thumbnails/ThumbnailGenerator.java
Removed:
    
incubator/clerezza/issues/CLEREZZA-25/org.apache.clerezza.platform.content.representations/src/main/java/org/apache/clerezza/platform/content/thumbnails/
    
incubator/clerezza/issues/CLEREZZA-25/org.apache.clerezza.platform.content.thumbnails/
Modified:
    
incubator/clerezza/issues/CLEREZZA-25/org.apache.clerezza.platform.content.representations/pom.xml

Propchange: 
incubator/clerezza/issues/CLEREZZA-25/org.apache.clerezza.platform.content.representations/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Mon Dec 21 14:13:49 2009
@@ -0,0 +1 @@
+target

Modified: 
incubator/clerezza/issues/CLEREZZA-25/org.apache.clerezza.platform.content.representations/pom.xml
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/issues/CLEREZZA-25/org.apache.clerezza.platform.content.representations/pom.xml?rev=892829&r1=892819&r2=892829&view=diff
==============================================================================
--- 
incubator/clerezza/issues/CLEREZZA-25/org.apache.clerezza.platform.content.representations/pom.xml
 (original)
+++ 
incubator/clerezza/issues/CLEREZZA-25/org.apache.clerezza.platform.content.representations/pom.xml
 Mon Dec 21 14:13:49 2009
@@ -3,15 +3,15 @@
        <parent>
                <artifactId>org.apache.clerezza.parent</artifactId>
                <groupId>org.apache.clerezza</groupId>
-               <version>0.2-SNAPSHOT</version>
+               <version>0.2-incubating-SNAPSHOT</version>
        </parent>
        <groupId>org.apache.clerezza</groupId>
-       <artifactId>org.apache.clerezza.platform.content.thumbnails</artifactId>
-       <version>0.1-SNAPSHOT</version>
+       
<artifactId>org.apache.clerezza.platform.content.representations</artifactId>
+       <version>0.1-incubating-SNAPSHOT</version>
        <packaging>bundle</packaging>
-       <name>Clerezza - Platform Content Thumbnails</name>
-       <description>Provides a Meta Data Generator that generates thumbnails 
for data of
-               various meta types</description>
+       <name>Clerezza - Platform Content Representations</name>
+       <description>Provides a Meta Data Generator that generates alternative
+               representations for data of     various meta types</description>
        <dependencies>
                <dependency>
                        <groupId>org.osgi</groupId>

Copied: 
incubator/clerezza/issues/CLEREZZA-25/org.apache.clerezza.platform.content.representations/src/main/java/org/apache/clerezza/platform/content/representations/AlternativeRepresentationGenerator.java
 (from r892736, 
incubator/clerezza/issues/CLEREZZA-25/org.apache.clerezza.platform.content.thumbnails/src/main/java/org/apache/clerezza/platform/content/thumbnails/ThumbnailGenerator.java)
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/issues/CLEREZZA-25/org.apache.clerezza.platform.content.representations/src/main/java/org/apache/clerezza/platform/content/representations/AlternativeRepresentationGenerator.java?p2=incubator/clerezza/issues/CLEREZZA-25/org.apache.clerezza.platform.content.representations/src/main/java/org/apache/clerezza/platform/content/representations/AlternativeRepresentationGenerator.java&p1=incubator/clerezza/issues/CLEREZZA-25/org.apache.clerezza.platform.content.thumbnails/src/main/java/org/apache/clerezza/platform/content/thumbnails/ThumbnailGenerator.java&r1=892736&r2=892829&rev=892829&view=diff
==============================================================================
--- 
incubator/clerezza/issues/CLEREZZA-25/org.apache.clerezza.platform.content.thumbnails/src/main/java/org/apache/clerezza/platform/content/thumbnails/ThumbnailGenerator.java
 (original)
+++ 
incubator/clerezza/issues/CLEREZZA-25/org.apache.clerezza.platform.content.representations/src/main/java/org/apache/clerezza/platform/content/representations/AlternativeRepresentationGenerator.java
 Mon Dec 21 14:13:49 2009
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.clerezza.platform.content.thumbnails;
+package org.apache.clerezza.platform.content.representations;
 
 import java.awt.image.BufferedImage;
 import java.io.ByteArrayInputStream;
@@ -46,20 +46,52 @@
  *
  * @author mir
  */
-...@component
+...@component(metatype=true)
 @Service(MetaDataGenerator.class)
-public class ThumbnailGenerator implements MetaDataGenerator {
+public class AlternativeRepresentationGenerator implements MetaDataGenerator {
+
+       private static class Resolution {
+
+               private int width;
+
+               private int height;
+               /**
+                * Takes a String, which contains a resoultion in the format
+                * [width]x[height].
+                *
+                * @param resoulutionString
+                */
+               public Resolution(String resoulutionString) {
+                       String[] widthAndHeight = resoulutionString.split("x");
+                       width = new Integer(widthAndHeight[0]);
+                       height = new Integer(widthAndHeight[1]);
+               }
+
+               public int getHeight() {
+                       return height;
+               }
+
+               public int getWidth() {
+                       return width;
+               }
+       }
 
-       @Property(intValue = 90, description = "Specifies the width in pixel of 
the thumbnail.")
-       private static final String THUMBNAIL_WIDTH = "thumbnailWidth";
-       @Property(intValue = 90, description = "Specifies the height in pixel 
of the thumbnail.")
-       private static final String THUMBNAIL_HEIGHT = "thumbnailHeight";
        @Reference
        private ImageProcessor imageProcessor;
-       private int thumbnailWidth;
-       private int thumbnailHeight;
-
-       private ThreadLocal<Boolean> isThumbnail = new ThreadLocal<Boolean>() {
+       @Property(value="100x100", description="Specifies the resolutions of 
alternative" +
+                       " representations in the format [width]x[height]. 
Multiple resolutions" +
+                       " are separated by comma (e.g. 100x100,30x30)")
+       public static final String RESOLUTIONS = "resolutions";
+       
+       private volatile ServiceTracker discobitTracker;
+       private Resolution[] resolutions;
+
+       /**
+        * Indicates if data given to the AlternativeRepresentationGenerator is 
a
+        * alternative representation itself and therefore does not have to 
have a
+        * alternative representation generated for it.
+        */
+       private ThreadLocal<Boolean> isAltRepresentation = new 
ThreadLocal<Boolean>() {
 
                @Override
                protected Boolean initialValue() {
@@ -67,13 +99,8 @@
                }
        };
 
-       private ServiceTracker discobitTracker;
-
        protected void activate(ComponentContext context) {
-
-               thumbnailWidth = (Integer) 
context.getProperties().get(THUMBNAIL_WIDTH);
-               thumbnailHeight = (Integer) 
context.getProperties().get(THUMBNAIL_HEIGHT);
-
+               setupResolutionArray((String) 
context.getProperties().get(RESOLUTIONS));
                discobitTracker = new ServiceTracker(context.getBundleContext(),
                                DiscobitsHandler.class.getName(), null);
                new Thread() {
@@ -84,6 +111,14 @@
                }.start();
        }
 
+       private void setupResolutionArray(String resolutionsString) {
+               String[] resoultionStrings = resolutionsString.split(",");
+               resolutions = new Resolution[resoultionStrings.length];
+               for (int i = 0; i < resoultionStrings.length; i++) {
+                       resolutions[i] = new 
Resolution(resoultionStrings[i].trim());
+               }
+       }
+
        protected void deactivate(ComponentContext context) {
                discobitTracker.close();
                discobitTracker = null;
@@ -91,23 +126,31 @@
 
        @Override
        public void generate(GraphNode node, byte[] data, MediaType mediaType) {
-               if (isThumbnail.get()) {                        
+               if (isAltRepresentation.get()) {
                        return;
                }
                if (mediaType.getType().startsWith("image")) {
                        try {
+                               isAltRepresentation.set(Boolean.TRUE);
                                BufferedImage buffImage = ImageIO.read(new 
ByteArrayInputStream(data));
-                               BufferedImage thumbnail = 
imageProcessor.makeAThumbnail(buffImage, thumbnailWidth, thumbnailHeight);
-                               byte[] thumbnailBytes = 
bufferedImage2ByteArray(thumbnail, mediaType);
-                               DiscobitsHandler contentHandler = 
(DiscobitsHandler)discobitTracker.getService();
-                               UriRef thumbnailUri = 
createThumbnailUri((UriRef) node.getNode());
-                               isThumbnail.set(Boolean.TRUE);
-                               contentHandler.put(thumbnailUri, mediaType, 
thumbnailBytes);
-                               node.addProperty(DISCOBITS.thumbnail, 
thumbnailUri);
+                               int imgWidth = buffImage.getWidth();
+                               int imgHeigth = buffImage.getHeight();
+                               for (Resolution resolution : resolutions) {
+                                       if (imgWidth > resolution.getWidth() ||
+                                                       imgHeigth > 
resolution.getHeight()){
+                                               BufferedImage alternativeImage 
= imageProcessor.makeAThumbnail(
+                                                               buffImage, 
resolution.getWidth(), resolution.getHeight());
+                                               byte[] alternativeImageBytes = 
bufferedImage2ByteArray(alternativeImage, mediaType);
+                                               DiscobitsHandler contentHandler 
= (DiscobitsHandler)discobitTracker.getService();
+                                               UriRef thumbnailUri = 
createThumbnailUri((UriRef) node.getNode(), alternativeImage);
+                                               
contentHandler.put(thumbnailUri, mediaType, alternativeImageBytes);
+                                               
node.addProperty(DISCOBITS.thumbnail, thumbnailUri);
+                                       }
+                               }
                        } catch (IOException ex) {
                                throw new RuntimeException(ex);
                        } finally {
-                               isThumbnail.set(Boolean.FALSE);
+                               isAltRepresentation.set(Boolean.FALSE);
                        }
                }
        }
@@ -121,8 +164,8 @@
                return bytes;
        }
 
-       private UriRef createThumbnailUri(UriRef uriRef) {
-               String thumbnail = "_thumbnail";
+       private UriRef createThumbnailUri(UriRef uriRef, BufferedImage img) {
+               String resolution = "-" + img.getWidth() + "x" + 
img.getHeight();
                String oldUri = uriRef.getUnicodeString();
                String newUri;
                int lastIndexOfDot = oldUri.lastIndexOf(".");
@@ -131,9 +174,9 @@
                                lastIndexOfDot >= (oldUri.length() - 6)) {
                        String firstPart = oldUri.substring(0, lastIndexOfDot);
                        String lastPart = oldUri.substring(lastIndexOfDot, 
oldUri.length());
-                       newUri = firstPart + thumbnail + lastPart;
+                       newUri = firstPart + resolution + lastPart;
                } else {
-                       newUri = oldUri + thumbnail;
+                       newUri = oldUri + resolution;
                }
                return new UriRef(newUri);
        }


Reply via email to