You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@juneau.apache.org by ja...@apache.org on 2017/03/29 18:35:06 UTC

incubator-juneau git commit: Add remoteable proxy support for RDF.

Repository: incubator-juneau
Updated Branches:
  refs/heads/master 657fb5e07 -> 7ff5e8981


Add remoteable proxy support for RDF.

Project: http://git-wip-us.apache.org/repos/asf/incubator-juneau/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-juneau/commit/7ff5e898
Tree: http://git-wip-us.apache.org/repos/asf/incubator-juneau/tree/7ff5e898
Diff: http://git-wip-us.apache.org/repos/asf/incubator-juneau/diff/7ff5e898

Branch: refs/heads/master
Commit: 7ff5e8981c288e8703892872fb84b115128d03f0
Parents: 657fb5e
Author: JamesBognar <ja...@apache.org>
Authored: Wed Mar 29 14:35:04 2017 -0400
Committer: JamesBognar <ja...@apache.org>
Committed: Wed Mar 29 14:35:04 2017 -0400

----------------------------------------------------------------------
 .../java/org/apache/juneau/jena/RdfParser.java  | 49 +++++++++++---------
 .../juneau/rest/test/InterfaceProxyTest.java    |  3 +-
 2 files changed, 30 insertions(+), 22 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/7ff5e898/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfParser.java
----------------------------------------------------------------------
diff --git a/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfParser.java b/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfParser.java
index ae7b12a..30042df 100644
--- a/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfParser.java
+++ b/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfParser.java
@@ -169,14 +169,16 @@ public class RdfParser extends ReaderParser {
 		// Special case where we're parsing a loose collection of resources.
 		if (s.isLooseCollections() && type.isCollectionOrArray()) {
 			Collection c = null;
-			if (type.isArray())
+			if (type.isArray() || type.isArgs())
 				c = new ArrayList();
 			else
 				c = (type.canCreateNewInstance(session.getOuter()) ? (Collection<?>)type.newInstance(session.getOuter()) : new ObjectList(session));
+			
+			int argIndex = 0;
 			for (Resource resource : roots)
-				c.add(parseAnything(s, type.getElementType(), resource, session.getOuter(), null));
+				c.add(parseAnything(s, type.isArgs() ? type.getArg(argIndex++) : type.getElementType(), resource, session.getOuter(), null));
 
-			if (type.isArray())
+			if (type.isArray() || type.isArgs())
 				return (T)session.toArray(type, c);
 			return (T)c;
 		}
@@ -301,13 +303,13 @@ public class RdfParser extends ReaderParser {
 					o = parseAnything(session, object(), n.asResource().getProperty(session.getValueProperty()).getObject(), outer, null);
 				} else if (isSeq(session, r)) {
 					o = new ObjectList(session);
-					parseIntoCollection(session, r.as(Seq.class), (Collection)o, sType.getElementType(), pMeta);
+					parseIntoCollection(session, r.as(Seq.class), (Collection)o, sType, pMeta);
 				} else if (isBag(session, r)) {
 					o = new ObjectList(session);
-					parseIntoCollection(session, r.as(Bag.class), (Collection)o, sType.getElementType(), pMeta);
+					parseIntoCollection(session, r.as(Bag.class), (Collection)o, sType, pMeta);
 				} else if (r.canAs(RDFList.class)) {
 					o = new ObjectList(session);
-					parseIntoCollection(session, r.as(RDFList.class), (Collection)o, sType.getElementType(), pMeta);
+					parseIntoCollection(session, r.as(RDFList.class), (Collection)o, sType, pMeta);
 				} else {
 					// If it has a URI and no child properties, we interpret this as an
 					// external resource, and convert it to just a URL.
@@ -337,8 +339,8 @@ public class RdfParser extends ReaderParser {
 				return null;
 			Map m = (sType.canCreateNewInstance(outer) ? (Map)sType.newInstance(outer) : new ObjectMap(session));
 			o = parseIntoMap(session, r, m, eType.getKeyType(), eType.getValueType(), pMeta);
-		} else if (sType.isCollectionOrArray()) {
-			if (sType.isArray())
+		} else if (sType.isCollectionOrArray() || sType.isArgs()) {
+			if (sType.isArray() || sType.isArgs())
 				o = new ArrayList();
 			else
 				o = (sType.canCreateNewInstance(outer) ? (Collection<?>)sType.newInstance(outer) : new ObjectList(session));
@@ -346,15 +348,15 @@ public class RdfParser extends ReaderParser {
 			if (session.wasAlreadyProcessed(r))
 				return null;
 			if (isSeq(session, r)) {
-				parseIntoCollection(session, r.as(Seq.class), (Collection)o, sType.getElementType(), pMeta);
+				parseIntoCollection(session, r.as(Seq.class), (Collection)o, sType, pMeta);
 			} else if (isBag(session, r)) {
-				parseIntoCollection(session, r.as(Bag.class), (Collection)o, sType.getElementType(), pMeta);
+				parseIntoCollection(session, r.as(Bag.class), (Collection)o, sType, pMeta);
 			} else if (r.canAs(RDFList.class)) {
-				parseIntoCollection(session, r.as(RDFList.class), (Collection)o, sType.getElementType(), pMeta);
+				parseIntoCollection(session, r.as(RDFList.class), (Collection)o, sType, pMeta);
 			} else {
 				throw new ParseException("Unrecognized node type ''{0}'' for collection", n);
 			}
-			if (sType.isArray())
+			if (sType.isArray() || sType.isArgs())
 				o = session.toArray(sType, (Collection)o);
 		} else if (sType.canCreateNewBean(outer)) {
 			Resource r = n.asResource();
@@ -446,27 +448,26 @@ public class RdfParser extends ReaderParser {
 		return m;
 	}
 
-	private <E> Collection<E> parseIntoCollection(RdfParserSession session, Container c, Collection<E> l, ClassMeta<E> et, BeanPropertyMeta pMeta) throws Exception {
+	@SuppressWarnings("unchecked")
+	private <E> Collection<E> parseIntoCollection(RdfParserSession session, Container c, Collection<E> l, ClassMeta<?> type, BeanPropertyMeta pMeta) throws Exception {
+		int argIndex = 0;
 		for (NodeIterator ni = c.iterator(); ni.hasNext();) {
-			E e = parseAnything(session, et, ni.next(), l, pMeta);
+			E e = (E)parseAnything(session, type.isArgs() ? type.getArg(argIndex++) : type.getElementType(), ni.next(), l, pMeta);
 			l.add(e);
 		}
 		return l;
 	}
 
-	private <E> Collection<E> parseIntoCollection(RdfParserSession session, RDFList list, Collection<E> l, ClassMeta<E> et, BeanPropertyMeta pMeta) throws Exception {
+	@SuppressWarnings("unchecked")
+	private <E> Collection<E> parseIntoCollection(RdfParserSession session, RDFList list, Collection<E> l, ClassMeta<?> type, BeanPropertyMeta pMeta) throws Exception {
+		int argIndex = 0;
 		for (ExtendedIterator<RDFNode> ni = list.iterator(); ni.hasNext();) {
-			E e = parseAnything(session, et, ni.next(), l, pMeta);
+			E e = (E)parseAnything(session, type.isArgs() ? type.getArg(argIndex++) : type.getElementType(), ni.next(), l, pMeta);
 			l.add(e);
 		}
 		return l;
 	}
 
-	@Override /* Parser */
-	protected Object[] doParseArgs(ParserSession session, ClassMeta<Object[]> args) throws Exception {
-		throw new UnsupportedOperationException("Parser '"+getClass().getName()+"' does not support this method.");
-	}
-
 	
 	//--------------------------------------------------------------------------------
 	// Entry point methods
@@ -476,4 +477,10 @@ public class RdfParser extends ReaderParser {
 	public RdfParserSession createSession(Object input, ObjectMap op, Method javaMethod, Object outer, Locale locale, TimeZone timeZone, MediaType mediaType) {
 		return new RdfParserSession(ctx, op, input, javaMethod, outer, locale, timeZone, mediaType);
 	}
+
+	@Override /* Parser */
+	protected Object[] doParseArgs(ParserSession session, ClassMeta<Object[]> args) throws Exception {
+		return doParse(session, args);
+	}
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/7ff5e898/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/InterfaceProxyTest.java
----------------------------------------------------------------------
diff --git a/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/InterfaceProxyTest.java b/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/InterfaceProxyTest.java
index b7d9928..4bdc15a 100644
--- a/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/InterfaceProxyTest.java
+++ b/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/InterfaceProxyTest.java
@@ -19,6 +19,7 @@ import static org.junit.Assert.*;
 import java.util.*;
 
 import org.apache.juneau.html.*;
+import org.apache.juneau.jena.*;
 import org.apache.juneau.json.*;
 import org.apache.juneau.msgpack.*;
 import org.apache.juneau.parser.*;
@@ -46,7 +47,7 @@ public class InterfaceProxyTest extends RestTestcase {
 			{ /* 4 */ "MessagePack", MsgPackSerializer.DEFAULT, MsgPackParser.DEFAULT },
 			{ /* 5 */ "UrlEncoding", UrlEncodingSerializer.DEFAULT, UrlEncodingParser.DEFAULT },
 			{ /* 6 */ "Uon", UonSerializer.DEFAULT, UonParser.DEFAULT },
-			//{ /* 7 */ "RdfXml", RdfSerializer.DEFAULT_XMLABBREV, RdfParser.DEFAULT_XML },
+			{ /* 7 */ "RdfXml", RdfSerializer.DEFAULT_XMLABBREV, RdfParser.DEFAULT_XML },
 		});
 	}