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