Author: dspicar
Date: Mon Jan 23 17:39:22 2012
New Revision: 1234912

URL: http://svn.apache.org/viewvc?rev=1234912&view=rev
Log:
CLEREZZA-670: applied patch by Rupert Westenthaler, fixes Integer MAX/MIN value 
overflow in Comparator of the RDF JSON serializer.

Modified:
    
incubator/clerezza/trunk/parent/rdf.rdfjson/src/main/java/org/apache/clerezza/rdf/rdfjson/parser/RdfJsonParsingProvider.java
    
incubator/clerezza/trunk/parent/rdf.rdfjson/src/main/java/org/apache/clerezza/rdf/rdfjson/serializer/RdfJsonSerializingProvider.java
    
incubator/clerezza/trunk/parent/rdf.rdfjson/src/test/java/org/apache/clerezza/rdf/rdfjson/serializer/RdfJsonSerializerProviderTest.java

Modified: 
incubator/clerezza/trunk/parent/rdf.rdfjson/src/main/java/org/apache/clerezza/rdf/rdfjson/parser/RdfJsonParsingProvider.java
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/trunk/parent/rdf.rdfjson/src/main/java/org/apache/clerezza/rdf/rdfjson/parser/RdfJsonParsingProvider.java?rev=1234912&r1=1234911&r2=1234912&view=diff
==============================================================================
--- 
incubator/clerezza/trunk/parent/rdf.rdfjson/src/main/java/org/apache/clerezza/rdf/rdfjson/parser/RdfJsonParsingProvider.java
 (original)
+++ 
incubator/clerezza/trunk/parent/rdf.rdfjson/src/main/java/org/apache/clerezza/rdf/rdfjson/parser/RdfJsonParsingProvider.java
 Mon Jan 23 17:39:22 2012
@@ -30,12 +30,12 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.apache.clerezza.rdf.core.BNode;
 import org.apache.clerezza.rdf.core.Language;
-import org.apache.clerezza.rdf.core.LiteralFactory;
 import org.apache.clerezza.rdf.core.MGraph;
 import org.apache.clerezza.rdf.core.NonLiteral;
 import org.apache.clerezza.rdf.core.UriRef;
 import org.apache.clerezza.rdf.core.impl.PlainLiteralImpl;
 import org.apache.clerezza.rdf.core.impl.TripleImpl;
+import org.apache.clerezza.rdf.core.impl.TypedLiteralImpl;
 import org.apache.clerezza.rdf.core.serializedform.ParsingProvider;
 import org.apache.clerezza.rdf.core.serializedform.SupportedFormat;
 import org.apache.felix.scr.annotations.Component;
@@ -112,11 +112,12 @@ public class RdfJsonParsingProvider impl
                                JSONObject values = (JSONObject) object;
                                String value = (String) values.get("value");
                                if (values.get("type").equals("literal")) {
-                                       if (values.containsKey("datatype")
-                                                       && 
!values.get("datatype").equals("")
-                                                       && 
values.get("datatype") != null) {
+                                   Object dataType = values.get("datatype");
+                                       if (dataType != null && 
+                                               !dataType.toString().isEmpty()) 
{
                                                mGraph.add(new 
TripleImpl(subject, new UriRef((String) predicate),
-                                                               
LiteralFactory.getInstance().createTypedLiteral(value)));
+                                                               
//LiteralFactory.getInstance().createTypedLiteral(value)));
+                                                       new 
TypedLiteralImpl(value.toString(),new UriRef(dataType.toString()))));
                                        } else if (values.containsKey("lang")
                                                        && 
!values.get("lang").equals("")
                                                        && values.get("lang") 
!= null) {

Modified: 
incubator/clerezza/trunk/parent/rdf.rdfjson/src/main/java/org/apache/clerezza/rdf/rdfjson/serializer/RdfJsonSerializingProvider.java
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/trunk/parent/rdf.rdfjson/src/main/java/org/apache/clerezza/rdf/rdfjson/serializer/RdfJsonSerializingProvider.java?rev=1234912&r1=1234911&r2=1234912&view=diff
==============================================================================
--- 
incubator/clerezza/trunk/parent/rdf.rdfjson/src/main/java/org/apache/clerezza/rdf/rdfjson/serializer/RdfJsonSerializingProvider.java
 (original)
+++ 
incubator/clerezza/trunk/parent/rdf.rdfjson/src/main/java/org/apache/clerezza/rdf/rdfjson/serializer/RdfJsonSerializingProvider.java
 Mon Jan 23 17:39:22 2012
@@ -213,7 +213,7 @@ public class RdfJsonSerializingProvider 
                        int hashA = a.hashCode();
                        int hashB = b.hashCode();
                        if (hashA != hashB) {
-                               return hashB - hashA;
+                               return hashA > hashB ? 1 : -1;
                        }
                        return a.toString().compareTo(b.toString());
                }

Modified: 
incubator/clerezza/trunk/parent/rdf.rdfjson/src/test/java/org/apache/clerezza/rdf/rdfjson/serializer/RdfJsonSerializerProviderTest.java
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/trunk/parent/rdf.rdfjson/src/test/java/org/apache/clerezza/rdf/rdfjson/serializer/RdfJsonSerializerProviderTest.java?rev=1234912&r1=1234911&r2=1234912&view=diff
==============================================================================
--- 
incubator/clerezza/trunk/parent/rdf.rdfjson/src/test/java/org/apache/clerezza/rdf/rdfjson/serializer/RdfJsonSerializerProviderTest.java
 (original)
+++ 
incubator/clerezza/trunk/parent/rdf.rdfjson/src/test/java/org/apache/clerezza/rdf/rdfjson/serializer/RdfJsonSerializerProviderTest.java
 Mon Jan 23 17:39:22 2012
@@ -19,10 +19,13 @@ package org.apache.clerezza.rdf.rdfjson.
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collections;
+import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
 
+import java.util.Set;
 import org.junit.Assert;
 import org.junit.Test;
 import org.apache.clerezza.rdf.core.BNode;
@@ -31,6 +34,7 @@ import org.apache.clerezza.rdf.core.Lite
 import org.apache.clerezza.rdf.core.MGraph;
 import org.apache.clerezza.rdf.core.NonLiteral;
 import org.apache.clerezza.rdf.core.PlainLiteral;
+import org.apache.clerezza.rdf.core.Triple;
 import org.apache.clerezza.rdf.core.TypedLiteral;
 import org.apache.clerezza.rdf.core.UriRef;
 import org.apache.clerezza.rdf.core.impl.PlainLiteralImpl;
@@ -148,9 +152,12 @@ public class RdfJsonSerializerProviderTe
        /**
         * For local performance testing
         */
-       //@Test
-       public void testBigGraph() {
-               int NUM_TRIPLES = 100000;
+       @Test
+       public void testBigGraph() throws Exception {
+               //reduced Graph size to 5000 to allow equals test between the
+               //serialised and parsed RDF graphs. Equals tests on bigger 
graphs
+               //would take to much time
+               int NUM_TRIPLES = 5000;
                //randoms are in the range [0..3]
                double l = 1.0; //literal
                double i = l / 3; //int
@@ -179,7 +186,7 @@ public class RdfJsonSerializerProviderTe
                Iterator<UriRef> predicates = predicateList.iterator();
                List<BNode> bNodes = new ArrayList<BNode>();
                bNodes.add(new BNode());
-               for (int count = 0; count < NUM_TRIPLES; count++) {
+               for (int count = 0; mGraph.size() < NUM_TRIPLES; count++) {
                        random = Math.random() * 3;
                        if (random >= 2.5 || count == 0) {
                                if (random <= 2.75) {
@@ -208,7 +215,7 @@ public class RdfJsonSerializerProviderTe
                                        } else if (random <= d) {
                                                text = new PlainLiteralImpl("An 
English literal for " + count, EN);
                                        } else {
-                                               text = new 
PlainLiteralImpl("Ein Dutsches Literal für" + count, DE);
+                                               text = new 
PlainLiteralImpl("Ein Dutsches Literal für " + count, DE);
                                        }
                                        mGraph.add(new TripleImpl(subject, 
predicate, text));
                                }
@@ -227,13 +234,36 @@ public class RdfJsonSerializerProviderTe
                                                new UriRef(URI_PREFIX + (int) 
count * random)));
                        }
                }
+               //Asserts the correct sorting of the triples in the graph by the
+               //Comparator used by the JSON serializer
+        Set<NonLiteral> subjects = new HashSet<NonLiteral>();
+               Triple[] sortedTriples = mGraph.toArray(new 
Triple[mGraph.size()]);
+        Arrays.sort(sortedTriples, 
RdfJsonSerializingProvider.SUBJECT_COMPARATOR);
+        NonLiteral current = sortedTriples[0].getSubject();
+        for(Triple triple : sortedTriples){
+            if(!triple.getSubject().equals(current)){
+                subjects.add(current);
+                current = triple.getSubject();
+                Assert.assertFalse(subjects.contains(current));
+            }
+        }
+        sortedTriples = null;
+        subjects = null;
+        
+               int originalSize = mGraph.size();
+               
                SerializingProvider provider = new RdfJsonSerializingProvider();
-               for (int count = 0; i < 10; i++) {
-                       long start = System.currentTimeMillis();
-                       ByteArrayOutputStream serializedGraph = new 
ByteArrayOutputStream();
-
-                       provider.serialize(serializedGraph, mGraph, 
"application/rdf+json");
-                       System.out.println("Serialized " + mGraph.size() + 
"Triples in " + (System.currentTimeMillis() - start) + "ms");
-               }
+               ByteArrayOutputStream serializedGraph = new 
ByteArrayOutputStream();
+               long start = System.currentTimeMillis();
+               provider.serialize(serializedGraph, mGraph, 
"application/rdf+json");
+               System.out.println("Serialized " + mGraph.size() + " Triples in 
" + (System.currentTimeMillis() - start) + " ms");
+        ParsingProvider parsingProvider = new RdfJsonParsingProvider();
+        ByteArrayInputStream jsonIn = new 
ByteArrayInputStream(serializedGraph.toByteArray());
+        MGraph parsedMGraph = new SimpleMGraph();
+        parsingProvider.parse(parsedMGraph, jsonIn, "application/rdf+json", 
null);
+        Assert.assertEquals(originalSize, parsedMGraph.size());
+        sortedTriples = parsedMGraph.toArray(new Triple[parsedMGraph.size()]);
+        Arrays.sort(sortedTriples, 
RdfJsonSerializingProvider.SUBJECT_COMPARATOR);
+        Assert.assertEquals(mGraph.getGraph(), parsedMGraph.getGraph());
        }
 }


Reply via email to