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)