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 <[email protected]>
Authored: Wed Mar 29 14:35:04 2017 -0400
Committer: JamesBognar <[email protected]>
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 },
                });
        }
 

Reply via email to