Author: reto
Date: Thu Sep 23 09:48:37 2010
New Revision: 1000383

URL: http://svn.apache.org/viewvc?rev=1000383&view=rev
Log:
CLEREZZA-306: fixed error causing duplication of entries

Modified:
    
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.rdf.scala.utils/src/main/scala/org/apache/clerezza/rdf/scala/utils/CollectedIter.scala
    
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.rdf.scala.utils/src/test/scala/org/apache/clerezza/rdf/scala/utils/RichGraphNodeTest.scala

Modified: 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.rdf.scala.utils/src/main/scala/org/apache/clerezza/rdf/scala/utils/CollectedIter.scala
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.rdf.scala.utils/src/main/scala/org/apache/clerezza/rdf/scala/utils/CollectedIter.scala?rev=1000383&r1=1000382&r2=1000383&view=diff
==============================================================================
--- 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.rdf.scala.utils/src/main/scala/org/apache/clerezza/rdf/scala/utils/CollectedIter.scala
 (original)
+++ 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.rdf.scala.utils/src/main/scala/org/apache/clerezza/rdf/scala/utils/CollectedIter.scala
 Thu Sep 23 09:48:37 2010
@@ -29,7 +29,9 @@ import java.util.concurrent.locks.Lock
 class CollectedIter[T](iterCreator: () => Iterator[T], readLock: Lock) extends 
immutable.Seq[T] {
 
        def this(jList : java.util.List[T], readLock: Lock) = this(() => 
jList.iterator(), readLock)
-       
+
+       var iter = iterCreator()
+       var firstIter = true
 
        private val collectedElems = new ArrayBuffer[T]()
 
@@ -59,15 +61,19 @@ class CollectedIter[T](iterCreator: () =
 
     private def ensureReadTill(pos: Int) {
                try {
-                       val iter = iterCreator()
+                       
                        while (iter.hasNext && (collectedElems.length-1 <= 
pos)) {
-                               collectedElems += iter.next()
+                               val next = iter.next()
+                               if (firstIter || 
!collectedElems.contains(next)) {
+                                       collectedElems += next
+                               }
                        }
                } catch {
                        case e: ConcurrentModificationException => {
                                        readLock.lock()
                                        try {
-                                               val iter = iterCreator()
+                                               iter = iterCreator()
+                                               firstIter = false
                                                //going beyond pos, do reduce 
chance we have to aquire another lock
                                                val biggerPos = if (pos < 
(Integer.MAX_VALUE - 100)) {
                                                        pos + 100

Modified: 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.rdf.scala.utils/src/test/scala/org/apache/clerezza/rdf/scala/utils/RichGraphNodeTest.scala
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.rdf.scala.utils/src/test/scala/org/apache/clerezza/rdf/scala/utils/RichGraphNodeTest.scala?rev=1000383&r1=1000382&r2=1000383&view=diff
==============================================================================
--- 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.rdf.scala.utils/src/test/scala/org/apache/clerezza/rdf/scala/utils/RichGraphNodeTest.scala
 (original)
+++ 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.rdf.scala.utils/src/test/scala/org/apache/clerezza/rdf/scala/utils/RichGraphNodeTest.scala
 Thu Sep 23 09:48:37 2010
@@ -73,6 +73,22 @@ class RichGraphNodeTest {
        }
 
        @Test
+       def testIterate = {
+               val simple: MGraph = new SimpleMGraph();
+               val node = new GraphNode(new BNode(), simple);
+               node.addProperty(DCTERMS.provenance, new 
UriRef("http://example.org/foo";));
+               node.addProperty(DCTERMS.language, new 
UriRef("http://www.bluewin.ch/";));
+               simple.add(new TripleImpl(new 
UriRef("http://www.bluewin.ch/";),RDF.`type`, RDFS.Container));
+               node.addProperty(RDF.`type`, PLATFORM.HeadedPage);
+               node.addProperty(RDF.`type`, RDFS.Class);
+               val test: CollectedIter[RichGraphNode] = 
node/DCTERMS.language/RDF.`type`;
+               Assert.assertEquals(1, test.length)
+               var counter = 0;
+               for(k <- test) { counter = counter + 1 }
+               Assert.assertEquals(1, counter)
+       }
+
+       @Test
        def testInverse = {
                val rNode = new RichGraphNode(node)
                Assert.assertEquals(1, (rNode/-FOAF.knows).length)


Reply via email to