Author: rhauch
Date: 2009-03-03 19:54:32 -0500 (Tue, 03 Mar 2009)
New Revision: 751
Modified:
trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/AbstractJcrItem.java
trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/AbstractJcrNode.java
trunk/dna-jcr/src/test/java/org/jboss/dna/jcr/AbstractJcrNodeTest.java
trunk/dna-jcr/src/test/java/org/jboss/dna/jcr/AbstractJcrPropertyTest.java
trunk/dna-jcr/src/test/java/org/jboss/dna/jcr/JackrabbitJcrTckTest.java
Log:
DNA-289 AbstractJcrItem.isSame Does Not Match JCR 1.0 Specification
Applied the patch. One test had to be updated (minor issue), since it was updated for
DNA-290 after the patch was uploaded. Also added another JCR TCK unit test to the mix,
since all of its test methods were passing.
Modified: trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/AbstractJcrItem.java
===================================================================
--- trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/AbstractJcrItem.java 2009-03-04 00:36:43
UTC (rev 750)
+++ trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/AbstractJcrItem.java 2009-03-04 00:54:32
UTC (rev 751)
@@ -69,7 +69,26 @@
* @see javax.jcr.Item#isSame(javax.jcr.Item)
*/
public boolean isSame( Item otherItem ) throws RepositoryException {
- return (getSession().getWorkspace() == otherItem.getSession().getWorkspace());
+ assert getSession() != null;
+ assert otherItem.getSession() != null;
+ assert getSession().getRepository() != null;
+ assert otherItem.getSession().getRepository() != null;
+
+ if (getSession().getRepository() != otherItem.getSession().getRepository()) {
+ return false;
+ }
+
+ assert getSession().getWorkspace() != null;
+ assert otherItem.getSession().getWorkspace() != null;
+
+ String workspaceName = getSession().getWorkspace().getName();
+ String otherWorkspaceName = otherItem.getSession().getWorkspace().getName();
+
+ if (workspaceName == null) {
+ return otherWorkspaceName == null;
+ }
+
+ return workspaceName.equals(otherWorkspaceName);
}
/**
Modified: trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/AbstractJcrNode.java
===================================================================
--- trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/AbstractJcrNode.java 2009-03-04 00:36:43
UTC (rev 750)
+++ trunk/dna-jcr/src/main/java/org/jboss/dna/jcr/AbstractJcrNode.java 2009-03-04 00:54:32
UTC (rev 751)
@@ -40,6 +40,7 @@
import javax.jcr.PathNotFoundException;
import javax.jcr.Property;
import javax.jcr.PropertyIterator;
+import javax.jcr.PropertyType;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import javax.jcr.UnsupportedRepositoryOperationException;
@@ -461,9 +462,14 @@
* @throws UnsupportedOperationException always
* @see javax.jcr.Node#getReferences()
*/
- public final PropertyIterator getReferences() {
- // TODO: Need to provide this at the DNA layer first (probably via a connector
query)
- throw new UnsupportedOperationException();
+ public final PropertyIterator getReferences() throws RepositoryException {
+ // Iterate through the properties to see which ones have a REFERENCE type ...
+ Set<Property> references = new HashSet<Property>();
+ for (Property property : properties) {
+ if (property.getType() == PropertyType.REFERENCE) references.add(property);
+ }
+ if (references.isEmpty()) return new JcrEmptyPropertyIterator();
+ return new JcrPropertyIterator(references);
}
/**
Modified: trunk/dna-jcr/src/test/java/org/jboss/dna/jcr/AbstractJcrNodeTest.java
===================================================================
--- trunk/dna-jcr/src/test/java/org/jboss/dna/jcr/AbstractJcrNodeTest.java 2009-03-04
00:36:43 UTC (rev 750)
+++ trunk/dna-jcr/src/test/java/org/jboss/dna/jcr/AbstractJcrNodeTest.java 2009-03-04
00:54:32 UTC (rev 751)
@@ -40,6 +40,8 @@
import javax.jcr.Node;
import javax.jcr.PathNotFoundException;
import javax.jcr.Property;
+import javax.jcr.PropertyIterator;
+import javax.jcr.Repository;
import javax.jcr.RepositoryException;
import javax.jcr.UnsupportedRepositoryOperationException;
import javax.jcr.Value;
@@ -110,6 +112,10 @@
private AbstractJcrNode node;
@Mock
private JcrSession session;
+ @Mock
+ private Workspace workspace;
+ @Mock
+ private Repository repository;
private List<Segment> children;
private Set<Property> properties;
@@ -317,9 +323,11 @@
node.getProperty("child/prop");
}
- @Test( expected = UnsupportedOperationException.class )
+ @Test
public void shouldNotAllowGetReferences() throws Exception {
- node.getReferences();
+ PropertyIterator iter = node.getReferences();
+ assertThat(iter, is(notNullValue()));
+ assertThat(iter.getSize(), is(0L));
}
@Test
@@ -465,9 +473,15 @@
@Test
public void shouldProvideIsSame() throws Exception {
stub(session.getWorkspace()).toReturn(Mockito.mock(Workspace.class));
+ stub(session.getRepository()).toReturn(repository);
JcrSession session2 = Mockito.mock(JcrSession.class);
+ JcrRepository repository2 = Mockito.mock(JcrRepository.class);
+
+ stub(session2.getRepository()).toReturn(repository2);
+ stub(session2.getWorkspace()).toReturn(workspace);
Node node2 = new MockAbstractJcrNode(session2, node.getName(),
node.getParent());
assertThat(node.isSame(node2), is(false));
+
Property prop = Mockito.mock(Property.class);
stub(prop.getSession()).toReturn(session);
assertThat(node.isSame(prop), is(false));
Modified: trunk/dna-jcr/src/test/java/org/jboss/dna/jcr/AbstractJcrPropertyTest.java
===================================================================
--- trunk/dna-jcr/src/test/java/org/jboss/dna/jcr/AbstractJcrPropertyTest.java 2009-03-04
00:36:43 UTC (rev 750)
+++ trunk/dna-jcr/src/test/java/org/jboss/dna/jcr/AbstractJcrPropertyTest.java 2009-03-04
00:54:32 UTC (rev 751)
@@ -33,8 +33,10 @@
import javax.jcr.ItemVisitor;
import javax.jcr.Node;
import javax.jcr.Property;
+import javax.jcr.Repository;
import javax.jcr.Session;
import javax.jcr.Value;
+import javax.jcr.Workspace;
import javax.jcr.nodetype.PropertyDefinition;
import org.jboss.dna.common.util.StringUtil;
import org.jboss.dna.graph.ExecutionContext;
@@ -53,6 +55,10 @@
private AbstractJcrProperty prop;
@Mock
+ private Workspace workspace;
+ @Mock
+ private Repository repository;
+ @Mock
private Session session;
@Mock
private Node node;
@@ -66,6 +72,8 @@
@Before
public void before() throws Exception {
MockitoAnnotations.initMocks(this);
+ stub(session.getWorkspace()).toReturn(workspace);
+ stub(session.getRepository()).toReturn(repository);
stub(node.getSession()).toReturn(session);
stub(executionContext.getNamespaceRegistry()).toReturn(namespaceRegistry);
prop = new MockAbstractJcrProperty(node, executionContext, name);
Modified: trunk/dna-jcr/src/test/java/org/jboss/dna/jcr/JackrabbitJcrTckTest.java
===================================================================
--- trunk/dna-jcr/src/test/java/org/jboss/dna/jcr/JackrabbitJcrTckTest.java 2009-03-04
00:36:43 UTC (rev 750)
+++ trunk/dna-jcr/src/test/java/org/jboss/dna/jcr/JackrabbitJcrTckTest.java 2009-03-04
00:54:32 UTC (rev 751)
@@ -73,7 +73,7 @@
// See
https://jira.jboss.org/jira/browse/DNA-285
addTestSuite(org.apache.jackrabbit.test.api.RootNodeTest.class);
- // addTestSuite(org.apache.jackrabbit.test.api.NodeReadMethodsTest.class);
+ addTestSuite(org.apache.jackrabbit.test.api.NodeReadMethodsTest.class);
// addTestSuite(org.apache.jackrabbit.test.api.PropertyTypeTest.class);
addTestSuite(org.apache.jackrabbit.test.api.NodeDiscoveringNodeTypesTest.class);
addTestSuite(org.apache.jackrabbit.test.api.BinaryPropertyTest.class);