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


Reply via email to