You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@clerezza.apache.org by re...@apache.org on 2010/04/19 11:28:42 UTC
svn commit: r935490 -
/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.jaxrs.rdf.providers/src/main/java/org/apache/clerezza/jaxrs/rdf/providers/GraphNodeWriter.java
Author: reto
Date: Mon Apr 19 09:28:42 2010
New Revision: 935490
URL: http://svn.apache.org/viewvc?rev=935490&view=rev
Log:
CLEREZZA-192: preliminary version
Modified:
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.jaxrs.rdf.providers/src/main/java/org/apache/clerezza/jaxrs/rdf/providers/GraphNodeWriter.java
Modified: incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.jaxrs.rdf.providers/src/main/java/org/apache/clerezza/jaxrs/rdf/providers/GraphNodeWriter.java
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.jaxrs.rdf.providers/src/main/java/org/apache/clerezza/jaxrs/rdf/providers/GraphNodeWriter.java?rev=935490&r1=935489&r2=935490&view=diff
==============================================================================
--- incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.jaxrs.rdf.providers/src/main/java/org/apache/clerezza/jaxrs/rdf/providers/GraphNodeWriter.java (original)
+++ incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.jaxrs.rdf.providers/src/main/java/org/apache/clerezza/jaxrs/rdf/providers/GraphNodeWriter.java Mon Apr 19 09:28:42 2010
@@ -18,22 +18,32 @@
*/
package org.apache.clerezza.jaxrs.rdf.providers;
+import org.apache.clerezza.rdf.core.serializedform.Serializer;
+import org.apache.clerezza.rdf.core.serializedform.SupportedFormat;
import java.io.IOException;
import java.io.OutputStream;
import java.lang.annotation.Annotation;
import java.lang.reflect.Type;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
import javax.ws.rs.Produces;
import javax.ws.rs.WebApplicationException;
+import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap;
+import javax.ws.rs.core.UriInfo;
import javax.ws.rs.ext.MessageBodyWriter;
import javax.ws.rs.ext.Provider;
+import org.apache.clerezza.rdf.core.Resource;
+import org.apache.clerezza.rdf.core.Triple;
+import org.apache.clerezza.rdf.core.TripleCollection;
+import org.apache.clerezza.rdf.core.UriRef;
+import org.apache.clerezza.rdf.core.impl.SimpleMGraph;
import org.apache.clerezza.rdf.utils.GraphNode;
-import org.apache.clerezza.rdf.core.serializedform.Serializer;
-import org.apache.clerezza.rdf.core.serializedform.SupportedFormat;
-
/**
* @scr.component
@@ -48,13 +58,16 @@ import org.apache.clerezza.rdf.core.seri
SupportedFormat.X_TURTLE, SupportedFormat.RDF_JSON})
public class GraphNodeWriter implements MessageBodyWriter<GraphNode> {
+ public static final String OBJ_EXP_PARAM = "xPropObj";
+ public static final String SUBJ_EXP_PARAM = "xPropSubj";
/**
* @scr.reference
*/
private Serializer serializer;
-
+ private UriInfo uriInfo;
+
@Override
- public boolean isWriteable(Class<?> type, Type genericType,
+ public boolean isWriteable(Class<?> type, Type genericType,
Annotation[] annotations, MediaType mediaType) {
return GraphNode.class.isAssignableFrom(type);
}
@@ -70,6 +83,74 @@ public class GraphNodeWriter implements
Annotation[] annotations, MediaType mediaType,
MultivaluedMap<String, Object> httpHeaders,
OutputStream entityStream) throws IOException, WebApplicationException {
- serializer.serialize(entityStream, node.getNodeContext(), mediaType.toString());
+ serializer.serialize(entityStream, getExpandedContext(node), mediaType.toString());
+ }
+
+ @Context
+ public void setUriInfo(UriInfo uriInfo) {
+ this.uriInfo = uriInfo;
+ }
+
+ private TripleCollection getExpandedContext(GraphNode node) {
+ final TripleCollection result = new SimpleMGraph(node.getNodeContext());
+ final Set<Resource> expandedResources = new HashSet<Resource>();
+ expandedResources.add(node.getNode());
+ while (true) {
+ Set<Resource> additionalExpansionRes = getAdditionalExpansionResources(result);
+ additionalExpansionRes.removeAll(expandedResources);
+ if (additionalExpansionRes.size() == 0) {
+ return result;
+ }
+ for (Resource resource : additionalExpansionRes) {
+ final GraphNode additionalNode = new GraphNode(resource, node.getGraph());
+ result.addAll(additionalNode.getNodeContext());
+ expandedResources.add(resource);
+ }
+ }
+ }
+
+ private Set<Resource> getAdditionalExpansionResources(TripleCollection tc) {
+ final Set<UriRef> subjectExpansionProperties = getSubjectExpansionProperties();
+ final Set<UriRef> objectExpansionProperties = getObjectExpansionProperties();
+ final Set<Resource> result = new HashSet<Resource>();
+ if ((subjectExpansionProperties.size() > 0)
+ || (objectExpansionProperties.size() > 0)) {
+ for (Triple triple : tc) {
+ final UriRef predicate = triple.getPredicate();
+ if (subjectExpansionProperties.contains(predicate)) {
+ result.add(triple.getSubject());
+ }
+ if (objectExpansionProperties.contains(predicate)) {
+ result.add(triple.getObject());
+ }
+ }
+ }
+ return result;
+ }
+
+ private Set<UriRef> getSubjectExpansionProperties() {
+ final MultivaluedMap<String, String> queryParams = uriInfo.getQueryParameters();
+ final List<String> paramValues = queryParams.get(SUBJ_EXP_PARAM);
+ if (paramValues == null) {
+ return new HashSet<UriRef>(0);
+ }
+ final Set<UriRef> result = new HashSet<UriRef>(paramValues.size());
+ for (String uriString : paramValues) {
+ result.add(new UriRef(uriString));
+ }
+ return result;
+ }
+
+ private Set<UriRef> getObjectExpansionProperties() {
+ final MultivaluedMap<String, String> queryParams = uriInfo.getQueryParameters();
+ final List<String> paramValues = queryParams.get(OBJ_EXP_PARAM);
+ if (paramValues == null) {
+ return new HashSet<UriRef>(0);
+ }
+ final Set<UriRef> result = new HashSet<UriRef>(paramValues.size());
+ for (String uriString : paramValues) {
+ result.add(new UriRef(uriString));
+ }
+ return result;
}
}