You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@clerezza.apache.org by mi...@apache.org on 2009/12/21 15:13:49 UTC

svn commit: r892829 - in /incubator/clerezza/issues/CLEREZZA-25: org.apache.clerezza.platform.content.representations/ org.apache.clerezza.platform.content.representations/src/main/java/org/apache/clerezza/platform/content/representations/ org.apache.c...

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