You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ss...@apache.org on 2015/04/07 22:35:44 UTC

svn commit: r1671940 - in /sling/trunk/testing/mocks/jcr-mock/src: main/java/org/apache/sling/testing/mock/jcr/ test/java/org/apache/sling/testing/mock/jcr/

Author: sseifert
Date: Tue Apr  7 20:35:44 2015
New Revision: 1671940

URL: http://svn.apache.org/r1671940
Log:
SLING-4548 workaround for setting jcr:created/jcr:createdBy and new state properly when creating nt:file nodes

Modified:
    sling/trunk/testing/mocks/jcr-mock/src/main/java/org/apache/sling/testing/mock/jcr/AbstractItem.java
    sling/trunk/testing/mocks/jcr-mock/src/main/java/org/apache/sling/testing/mock/jcr/ItemData.java
    sling/trunk/testing/mocks/jcr-mock/src/main/java/org/apache/sling/testing/mock/jcr/MockNode.java
    sling/trunk/testing/mocks/jcr-mock/src/main/java/org/apache/sling/testing/mock/jcr/MockSession.java
    sling/trunk/testing/mocks/jcr-mock/src/test/java/org/apache/sling/testing/mock/jcr/MockNodeTest.java
    sling/trunk/testing/mocks/jcr-mock/src/test/java/org/apache/sling/testing/mock/jcr/MockSessionTest.java

Modified: sling/trunk/testing/mocks/jcr-mock/src/main/java/org/apache/sling/testing/mock/jcr/AbstractItem.java
URL: http://svn.apache.org/viewvc/sling/trunk/testing/mocks/jcr-mock/src/main/java/org/apache/sling/testing/mock/jcr/AbstractItem.java?rev=1671940&r1=1671939&r2=1671940&view=diff
==============================================================================
--- sling/trunk/testing/mocks/jcr-mock/src/main/java/org/apache/sling/testing/mock/jcr/AbstractItem.java (original)
+++ sling/trunk/testing/mocks/jcr-mock/src/main/java/org/apache/sling/testing/mock/jcr/AbstractItem.java Tue Apr  7 20:35:44 2015
@@ -67,9 +67,9 @@ abstract class AbstractItem implements I
 
     @Override
     public boolean isNew() {
-        return false;
+        return itemData.isNew();
     }
-
+    
     @Override
     public Item getAncestor(final int depth) throws RepositoryException {
         if (depth < 0 || depth > getDepth()) {

Modified: sling/trunk/testing/mocks/jcr-mock/src/main/java/org/apache/sling/testing/mock/jcr/ItemData.java
URL: http://svn.apache.org/viewvc/sling/trunk/testing/mocks/jcr-mock/src/main/java/org/apache/sling/testing/mock/jcr/ItemData.java?rev=1671940&r1=1671939&r2=1671940&view=diff
==============================================================================
--- sling/trunk/testing/mocks/jcr-mock/src/main/java/org/apache/sling/testing/mock/jcr/ItemData.java (original)
+++ sling/trunk/testing/mocks/jcr-mock/src/main/java/org/apache/sling/testing/mock/jcr/ItemData.java Tue Apr  7 20:35:44 2015
@@ -37,14 +37,15 @@ class ItemData {
     private final NodeType nodeType;
     private Value[] values;
     private boolean isMultiple;
+    private boolean isNew;
     
     private ItemData(String path, boolean isNode, String uuid, NodeType nodeType) {
-        super();
         this.path = path;
         this.name = ResourceUtil.getName(path);
         this.uuid = uuid;
         this.isNode = isNode;
         this.nodeType = nodeType;
+        this.isNew = true;
     }
     
     public String getPath() {
@@ -114,6 +115,14 @@ class ItemData {
         }
     }
     
+    public boolean isNew() {
+        return isNew;
+    }
+
+    public void setIsNew(boolean isNew) {
+        this.isNew = isNew;
+    }
+
     @Override
     public int hashCode() {
         return path.hashCode();

Modified: sling/trunk/testing/mocks/jcr-mock/src/main/java/org/apache/sling/testing/mock/jcr/MockNode.java
URL: http://svn.apache.org/viewvc/sling/trunk/testing/mocks/jcr-mock/src/main/java/org/apache/sling/testing/mock/jcr/MockNode.java?rev=1671940&r1=1671939&r2=1671940&view=diff
==============================================================================
--- sling/trunk/testing/mocks/jcr-mock/src/main/java/org/apache/sling/testing/mock/jcr/MockNode.java (original)
+++ sling/trunk/testing/mocks/jcr-mock/src/main/java/org/apache/sling/testing/mock/jcr/MockNode.java Tue Apr  7 20:35:44 2015
@@ -40,6 +40,7 @@ import javax.jcr.nodetype.NodeType;
 import javax.jcr.version.Version;
 import javax.jcr.version.VersionHistory;
 
+import org.apache.commons.lang3.StringUtils;
 import org.apache.jackrabbit.JcrConstants;
 import org.apache.jackrabbit.commons.iterator.NodeIteratorAdapter;
 import org.apache.jackrabbit.commons.iterator.PropertyIteratorAdapter;
@@ -64,6 +65,13 @@ class MockNode extends AbstractItem impl
         ItemData itemData = ItemData.newNode(path, new MockNodeType(primaryNodeTypeName));
         Node node = new MockNode(itemData, getSession());
         getMockedSession().addItem(itemData);
+        
+        // special handling for some node types
+        if (StringUtils.equals(primaryNodeTypeName, JcrConstants.NT_FILE)) {
+            node.setProperty(JcrConstants.JCR_CREATED, Calendar.getInstance());
+            node.setProperty("jcr:createdBy", getMockedSession().getUserID());
+        }
+        
         return node;
     }
 

Modified: sling/trunk/testing/mocks/jcr-mock/src/main/java/org/apache/sling/testing/mock/jcr/MockSession.java
URL: http://svn.apache.org/viewvc/sling/trunk/testing/mocks/jcr-mock/src/main/java/org/apache/sling/testing/mock/jcr/MockSession.java?rev=1671940&r1=1671939&r2=1671940&view=diff
==============================================================================
--- sling/trunk/testing/mocks/jcr-mock/src/main/java/org/apache/sling/testing/mock/jcr/MockSession.java (original)
+++ sling/trunk/testing/mocks/jcr-mock/src/main/java/org/apache/sling/testing/mock/jcr/MockSession.java Tue Apr  7 20:35:44 2015
@@ -239,7 +239,10 @@ class MockSession implements Session {
 
     @Override
     public void save() throws RepositoryException {
-        // do nothing
+        // reset new flags
+        for (ItemData itemData : this.items.values()) {
+            itemData.setIsNew(false);
+        }
     }
 
     @Override

Modified: sling/trunk/testing/mocks/jcr-mock/src/test/java/org/apache/sling/testing/mock/jcr/MockNodeTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/testing/mocks/jcr-mock/src/test/java/org/apache/sling/testing/mock/jcr/MockNodeTest.java?rev=1671940&r1=1671939&r2=1671940&view=diff
==============================================================================
--- sling/trunk/testing/mocks/jcr-mock/src/test/java/org/apache/sling/testing/mock/jcr/MockNodeTest.java (original)
+++ sling/trunk/testing/mocks/jcr-mock/src/test/java/org/apache/sling/testing/mock/jcr/MockNodeTest.java Tue Apr  7 20:35:44 2015
@@ -20,6 +20,7 @@ package org.apache.sling.testing.mock.jc
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 
 import javax.jcr.ItemNotFoundException;
@@ -128,4 +129,11 @@ public class MockNodeTest {
         this.node1.getPrimaryItem();
     }
 
+    @Test
+    public void testNtFileNode() throws RepositoryException {
+        Node ntFile = this.session.getRootNode().addNode("testFile", JcrConstants.NT_FILE);
+        assertNotNull(ntFile.getProperty(JcrConstants.JCR_CREATED).getDate());
+        assertNotNull(ntFile.getProperty("jcr:createdBy").getString());
+    }
+    
 }

Modified: sling/trunk/testing/mocks/jcr-mock/src/test/java/org/apache/sling/testing/mock/jcr/MockSessionTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/testing/mocks/jcr-mock/src/test/java/org/apache/sling/testing/mock/jcr/MockSessionTest.java?rev=1671940&r1=1671939&r2=1671940&view=diff
==============================================================================
--- sling/trunk/testing/mocks/jcr-mock/src/test/java/org/apache/sling/testing/mock/jcr/MockSessionTest.java (original)
+++ sling/trunk/testing/mocks/jcr-mock/src/test/java/org/apache/sling/testing/mock/jcr/MockSessionTest.java Tue Apr  7 20:35:44 2015
@@ -247,4 +247,17 @@ public class MockSessionTest {
         this.session.removeItem("/foo/");
         assertFalse("Removing /foo/ should succeed", this.session.nodeExists("/foo"));
     }
+    
+    @Test
+    public void testNewState() throws RepositoryException {
+        Node node = this.session.getRootNode().addNode("foo");
+        Property property = node.setProperty("testProp", "value123");
+        assertTrue(node.isNew());
+        assertTrue(property.isNew());
+        
+        this.session.save();
+        assertFalse(node.isNew());
+        assertFalse(property.isNew());
+    }
+    
 }