Author: mir
Date: Mon Feb 15 16:15:00 2010
New Revision: 910250
URL: http://svn.apache.org/viewvc?rev=910250&view=rev
Log:
CLEREZZA-126: resolved
Added:
incubator/clerezza/issues/CLEREZZA-126/org.apache.clerezza.platform.content.representations/
- copied from r910211,
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.webapp.parent/org.apache.clerezza.platform.content.representations/
Modified:
incubator/clerezza/issues/CLEREZZA-126/org.apache.clerezza.platform.content.representations/org.apache.clerezza.platform.content.representations.core/src/main/java/org/apache/clerezza/platform/content/representations/core/ThumbnailService.java
Modified:
incubator/clerezza/issues/CLEREZZA-126/org.apache.clerezza.platform.content.representations/org.apache.clerezza.platform.content.representations.core/src/main/java/org/apache/clerezza/platform/content/representations/core/ThumbnailService.java
URL:
http://svn.apache.org/viewvc/incubator/clerezza/issues/CLEREZZA-126/org.apache.clerezza.platform.content.representations/org.apache.clerezza.platform.content.representations.core/src/main/java/org/apache/clerezza/platform/content/representations/core/ThumbnailService.java?rev=910250&r1=910211&r2=910250&view=diff
==============================================================================
---
incubator/clerezza/issues/CLEREZZA-126/org.apache.clerezza.platform.content.representations/org.apache.clerezza.platform.content.representations.core/src/main/java/org/apache/clerezza/platform/content/representations/core/ThumbnailService.java
(original)
+++
incubator/clerezza/issues/CLEREZZA-126/org.apache.clerezza.platform.content.representations/org.apache.clerezza.platform.content.representations.core/src/main/java/org/apache/clerezza/platform/content/representations/core/ThumbnailService.java
Mon Feb 15 16:15:00 2010
@@ -19,23 +19,24 @@
package org.apache.clerezza.platform.content.representations.core;
import java.net.URI;
+import java.net.URL;
+import java.util.Enumeration;
import java.util.Iterator;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.QueryParam;
import javax.ws.rs.WebApplicationException;
+import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
+import javax.ws.rs.core.UriInfo;
import org.apache.clerezza.platform.config.PlatformConfig;
-import
org.apache.clerezza.platform.content.representations.ontologies.REPRESENTATIONS;
import org.apache.clerezza.platform.graphprovider.content.ContentGraphProvider;
import org.apache.clerezza.rdf.core.Literal;
import org.apache.clerezza.rdf.core.LiteralFactory;
-import org.apache.clerezza.rdf.core.NonLiteral;
import org.apache.clerezza.rdf.core.Resource;
import org.apache.clerezza.rdf.core.TypedLiteral;
import org.apache.clerezza.rdf.core.UriRef;
-import org.apache.clerezza.rdf.core.impl.TripleImpl;
import org.apache.clerezza.rdf.ontologies.DISCOBITS;
import org.apache.clerezza.rdf.ontologies.EXIF;
import org.apache.clerezza.rdf.utils.GraphNode;
@@ -43,7 +44,8 @@
import org.apache.felix.scr.annotations.Property;
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.Service;
-import org.osgi.service.component.ComponentContext;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -63,35 +65,10 @@
ContentGraphProvider cgProvider;
@Reference
PlatformConfig config;
- private UriRef defaultIconUri;
private static final Logger log =
LoggerFactory.getLogger(ThumbnailService.class);
-
- protected void activate(ComponentContext context) {
- String baseUri = config.getDefaultBaseUri().getUnicodeString();
- addMediaTypeIcon(createUriRef(baseUri,
"style/images/icons/mediatype/text/plain.png"), MediaType.TEXT_PLAIN);
- addMediaTypeIcon(createUriRef(baseUri,
"style/images/icons/mediatype/application/msword.png"), "application/msword");
- addMediaTypeIcon(createUriRef(baseUri,
"style/images/icons/mediatype/application/x-amf.png"),
"application/x-shockwave-flash");
- addMediaTypeIcon(createUriRef(baseUri,
"style/images/icons/mediatype/application/pdf.png"), "application/pdf");
- addMediaTypeIcon(createUriRef(baseUri,
"style/images/icons/mediatype/application/vnd.ms-powerpoint.png"),
"application/vnd.ms-powerpoint");
- addMediaTypeIcon(createUriRef(baseUri,
"style/images/icons/mediatype/application/x-tar.png"), "application/x-tar");
- addMediaTypeIcon(createUriRef(baseUri,
"style/images/icons/mediatype/application/x-amf.png"), "application/x-amf");
- addMediaTypeIcon(createUriRef(baseUri,
"style/images/icons/mediatype/application/vnd.ms-excel.png"),
"application/vnd.ms-excel");
- addMediaTypeIcon(createUriRef(baseUri,
"style/images/icons/mediatype/application/octet-stream.png"),
"application/octet-stream");
- addMediaTypeIcon(createUriRef(baseUri,
"style/images/icons/mediatype/audio/any.png"), "audio/x-wav");
- addMediaTypeIcon(createUriRef(baseUri,
"style/images/icons/mediatype/audio/any.png"), "audio/mpeg");
- addMediaTypeIcon(createUriRef(baseUri,
"style/images/icons/mediatype/audio/any.png"), "audio/mid");
- defaultIconUri = createUriRef(baseUri,
"style/images/icons/mediatype/any.png");
- }
-
- private UriRef createUriRef(String baseUri, String relativeUri) {
- return new UriRef(baseUri + relativeUri);
- }
-
- private void addMediaTypeIcon(UriRef icon, String type) {
- cgProvider.getContentGraph().add(
- new TripleImpl(icon, REPRESENTATIONS.isIconFor,
-
LiteralFactory.getInstance().createTypedLiteral(type)));
- }
+ private BundleContext bundleContext;
+ private String STATICWEB_PATH =
"/org/apache/clerezza/web/resources/style/staticweb/";
+ private String BASE_PATH = STATICWEB_PATH + "images/icons/mediatype/";
/**
* Returns the thumbnail uri for a InfoDiscoBit which is located at the
uri
@@ -110,7 +87,8 @@
@GET
public Response getThumbnailUri(@QueryParam("uri") UriRef infoBitUri,
@QueryParam("width") Integer width,
- @QueryParam("height") Integer height) {
+ @QueryParam("height") Integer height,
+ @Context UriInfo uriInfo) {
if ((width == null) && (height == null)) {
throw new WebApplicationException(new
IllegalArgumentException("height and/or width must be specified"),
Response.Status.BAD_REQUEST);
@@ -129,16 +107,53 @@
}
Iterator<Resource> mediaTypes =
infoBitNode.getObjects(DISCOBITS.mediaType);
if (mediaTypes.hasNext()) {
- GraphNode mediaType = new GraphNode(mediaTypes.next(),
- cgProvider.getContentGraph());
+ MediaType mediaType =
MediaType.valueOf(LiteralFactory.getInstance().createObject(
+ String.class, (TypedLiteral)
mediaTypes.next()));
+ URI iconUri = getMediaTypeIconUri(mediaType,
uriInfo.getBaseUri());
+ return Response.seeOther(iconUri).build();
+ }
+ return Response.seeOther(getDefaultIconUri(getStyleBundle(),
+ uriInfo.getBaseUri())).build();
+ }
+
+ private URI getMediaTypeIconUri(MediaType mediaType, URI baseUri) {
+ Bundle styleBundle = getStyleBundle();
+ if (styleBundle == null) {
+ throw new RuntimeException("no style bundle found");
+ }
+ String path = BASE_PATH + mediaType.getType() + "/";
+ Enumeration entries = styleBundle.findEntries(path,
+ mediaType.getSubtype() + ".*", false);
+ URI iconUri = createIconUri(entries, baseUri);
+ if (iconUri != null) {
+ return iconUri;
+ }
+ entries = styleBundle.findEntries(path, "any.*", false);
+ iconUri = createIconUri(entries, baseUri);
+ if (iconUri != null) {
+ return iconUri;
+ }
+ return getDefaultIconUri(styleBundle, baseUri);
+ }
+
+ private URI getDefaultIconUri(Bundle bundle, URI baseUri) {
+ Enumeration entries = bundle.findEntries(BASE_PATH, "any.*",
false);
+ URI iconUri = createIconUri(entries, baseUri);
+ if (iconUri != null) {
+ return iconUri;
+ } else {
+ throw new RuntimeException("No default icon found");
+ }
+ }
- Iterator<NonLiteral> icons =
mediaType.getSubjects(REPRESENTATIONS.isIconFor);
- if (icons.hasNext()) {
- return Response.seeOther(
- URI.create(((UriRef)
icons.next()).getUnicodeString())).build();
- }
+ private URI createIconUri(Enumeration entries, URI baseUri) {
+ if (entries != null && entries.hasMoreElements()) {
+ URL iconUrl = (URL) entries.nextElement();
+ String relativeUri = iconUrl.getPath().
+ replace(STATICWEB_PATH, "style/");
+ return URI.create(baseUri.toString() + relativeUri);
}
- return
Response.seeOther(URI.create(defaultIconUri.getUnicodeString())).build();
+ return null;
}
private UriRef getThumbnailUri(GraphNode infoBitNode,
@@ -197,4 +212,14 @@
return false;
}
}
+
+ private Bundle getStyleBundle() {
+ Bundle[] bundles = bundleContext.getBundles();
+ for (Bundle bundle : bundles) {
+ if
(bundle.getSymbolicName().equals("org.apache.clerezza.web.resources.style")) {
+ return bundle;
+ }
+ }
+ return null;
+ }
}