Skip to content

Commit 6535fc2

Browse files
author
Jeff Bornemann
committed
Pull setLastModifiedDate() out of JCRNodesWriter and into ProtoNodeDecorator
1 parent 60df08c commit 6535fc2

8 files changed

+46
-6
lines changed

src/main/groovy/com/twcable/grabbit/client/batch/steps/jcrnodes/JcrNodesWriter.groovy

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,8 +88,7 @@ class JcrNodesWriter implements ItemWriter<ProtoNode>, ItemWriteListener {
8888
}
8989

9090
private static void writeToJcr(ProtoNode nodeProto, Session session) {
91-
JCRNodeDecorator jcrNode = ProtoNodeDecorator.createFrom(nodeProto).writeToJcr(session)
92-
jcrNode.setLastModified()
91+
ProtoNodeDecorator.createFrom(nodeProto).writeToJcr(session)
9392
}
9493

9594
private Session theSession() {

src/main/groovy/com/twcable/grabbit/jcr/ACLProtoNodeDecorator.groovy

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ class ACLProtoNodeDecorator extends ProtoNodeDecorator {
5454

5555

5656
@Override
57-
JCRNodeDecorator writeToJcr(@Nonnull Session session) {
57+
protected JCRNodeDecorator writeNode(@Nonnull Session session) {
5858
/**
5959
* We don't write the rep:policy node directly. Rather, we find the rep:policy node's ACE(s) and add them to the
6060
* owner's existing policy; or we add them to a new policy.

src/main/groovy/com/twcable/grabbit/jcr/AuthorizableProtoNodeDecorator.groovy

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ class AuthorizableProtoNodeDecorator extends ProtoNodeDecorator {
5252

5353

5454
@Override
55-
JCRNodeDecorator writeToJcr(@Nonnull Session session) {
55+
protected JCRNodeDecorator writeNode(@Nonnull Session session) {
5656
if(!checkSecurityPermissions()) {
5757
throw new InsufficientGrabbitPrivilegeException("JVM Permissions needed by Grabbit to sync Users/Groups were not found. See log for specific permissions needed, and add these to your security manager; or do not sync users and groups." +
5858
"Unfortunately, the way Jackrabbit goes about certain things requires us to do a bit of hacking in order to sync Authorizables securely, and efficiently.")

src/main/groovy/com/twcable/grabbit/jcr/DefaultProtoNodeDecorator.groovy

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ class DefaultProtoNodeDecorator extends ProtoNodeDecorator {
4242

4343

4444
@Override
45-
JCRNodeDecorator writeToJcr(@Nonnull Session session) {
45+
protected JCRNodeDecorator writeNode(@Nonnull Session session) {
4646
final jcrNode = getOrCreateNode(session)
4747
//Write mixin types first to avoid InvalidConstraintExceptions
4848
final mixinProperty = getMixinProperty()

src/main/groovy/com/twcable/grabbit/jcr/ProtoNodeDecorator.groovy

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ abstract class ProtoNodeDecorator {
3232

3333
protected String nameOverride
3434

35-
abstract JCRNodeDecorator writeToJcr(@Nonnull Session session)
35+
protected abstract JCRNodeDecorator writeNode(@Nonnull Session session)
3636

3737
static ProtoNodeDecorator createFrom(@Nonnull ProtoNode node, String nameOverride = null) {
3838
if(!node) throw new IllegalArgumentException("node must not be null!")
@@ -47,6 +47,14 @@ abstract class ProtoNodeDecorator {
4747
return new DefaultProtoNodeDecorator(node, protoProperties, nameOverride)
4848
}
4949

50+
51+
JCRNodeDecorator writeToJcr(@Nonnull Session session) {
52+
final JCRNodeDecorator writtenNode = writeNode(session)
53+
writtenNode.setLastModified()
54+
return writtenNode
55+
}
56+
57+
5058
boolean hasProperty(String propertyName) {
5159
propertiesList.any{ it.name == propertyName }
5260
}

src/test/groovy/com/twcable/grabbit/jcr/ACLProtoNodeDecoratorSpec.groovy

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import javax.jcr.PathNotFoundException
2929
import javax.jcr.Property
3030
import javax.jcr.PropertyIterator
3131
import javax.jcr.Session
32+
import javax.jcr.nodetype.NodeType
3233
import javax.jcr.security.AccessControlEntry
3334
import javax.jcr.security.AccessControlManager
3435
import javax.jcr.security.AccessControlPolicy
@@ -148,6 +149,9 @@ class ACLProtoNodeDecoratorSpec extends Specification {
148149
it.getString() >> NT_REP_ACL
149150
}
150151
it.getName() >> "${ownerNodePath}/rep:policy"
152+
it.getPrimaryNodeType() >> Mock(NodeType) {
153+
it.canSetProperty(_, _) >> false
154+
}
151155
}
152156
final Session session = Mock(Session) {
153157
1 * it.save()
@@ -221,6 +225,9 @@ class ACLProtoNodeDecoratorSpec extends Specification {
221225
it.getString() >> NT_REP_ACL
222226
}
223227
it.getName() >> "${ownerNodePath}/rep:policy"
228+
it.getPrimaryNodeType() >> Mock(NodeType) {
229+
it.canSetProperty(_, _) >> false
230+
}
224231
}
225232
final Session session = Mock(Session) {
226233
2 * it.save()
@@ -337,6 +344,9 @@ class ACLProtoNodeDecoratorSpec extends Specification {
337344
it.getString() >> 'nt:unstructured'
338345
}
339346
it.getName() >> ownerNodePath
347+
it.getPrimaryNodeType() >> Mock(NodeType) {
348+
it.canSetProperty(_, _) >> false
349+
}
340350
}
341351
final Session session = Mock(Session) {
342352
it.getNode(ownerNodePath) >> ownerNode

src/test/groovy/com/twcable/grabbit/jcr/AuthorizableProtoNodeDecoratorSpec.groovy

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import javax.jcr.Node
2626
import javax.jcr.Property
2727
import javax.jcr.PropertyIterator
2828
import javax.jcr.Session
29+
import javax.jcr.nodetype.NodeType
2930
import org.apache.jackrabbit.api.security.user.Authorizable
3031
import org.apache.jackrabbit.api.security.user.Group
3132
import org.apache.jackrabbit.api.security.user.User
@@ -139,6 +140,9 @@ class AuthorizableProtoNodeDecoratorSpec extends Specification {
139140
getProperties() >> Mock(PropertyIterator) {
140141
it.toList() >> []
141142
}
143+
it.getPrimaryNodeType() >> Mock(NodeType) {
144+
it.canSetProperty(_, _) >> false
145+
}
142146
}
143147
}
144148
final protoNodeDecorator = theProtoNodeDecorator(false, false, false) {
@@ -174,6 +178,9 @@ class AuthorizableProtoNodeDecoratorSpec extends Specification {
174178
getProperties() >> Mock(PropertyIterator) {
175179
it.toList() >> []
176180
}
181+
it.getPrimaryNodeType() >> Mock(NodeType) {
182+
it.canSetProperty(_, _) >> false
183+
}
177184
}
178185
}
179186
final protoNodeDecorator = theProtoNodeDecorator(false, false, false) {
@@ -210,6 +217,9 @@ class AuthorizableProtoNodeDecoratorSpec extends Specification {
210217
getProperties() >> Mock(PropertyIterator) {
211218
it.toList() >> []
212219
}
220+
it.getPrimaryNodeType() >> Mock(NodeType) {
221+
it.canSetProperty(_, _) >> false
222+
}
213223
}
214224
final session = Mock(Session) {
215225
it.getNode('newUserPath') >> node
@@ -248,6 +258,9 @@ class AuthorizableProtoNodeDecoratorSpec extends Specification {
248258
getProperties() >> Mock(PropertyIterator) {
249259
it.toList() >> []
250260
}
261+
it.getPrimaryNodeType() >> Mock(NodeType) {
262+
it.canSetProperty(_, _) >> false
263+
}
251264
}
252265
final session = Mock(Session) {
253266
it.getNode('newGroupPath') >> node
@@ -281,6 +294,9 @@ class AuthorizableProtoNodeDecoratorSpec extends Specification {
281294
getProperties() >> Mock(PropertyIterator) {
282295
it.toList() >> []
283296
}
297+
it.getPrimaryNodeType() >> Mock(NodeType) {
298+
it.canSetProperty(_, _) >> false
299+
}
284300
}
285301
final session = Mock(Session) {
286302
it.getNode('/home/users/u/newuser') >> node
@@ -314,6 +330,9 @@ class AuthorizableProtoNodeDecoratorSpec extends Specification {
314330
getProperties() >> Mock(PropertyIterator) {
315331
it.toList() >> []
316332
}
333+
it.getPrimaryNodeType() >> Mock(NodeType) {
334+
it.canSetProperty(_, _) >> false
335+
}
317336
}
318337
final session = Mock(Session) {
319338
it.getNode('/home/users/u/newuser') >> node

src/test/groovy/com/twcable/grabbit/jcr/DefaultProtoNodeDecoratorSpec.groovy

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import com.twcable.grabbit.proto.NodeProtos
2020
import com.twcable.grabbit.proto.NodeProtos.Node as ProtoNode
2121
import com.twcable.grabbit.proto.NodeProtos.Node.Builder as ProtoNodeBuilder
2222
import com.twcable.grabbit.proto.NodeProtos.Property as ProtoProperty
23+
import javax.jcr.nodetype.NodeType
2324
import spock.lang.Specification
2425

2526
import javax.jcr.Node
@@ -126,6 +127,9 @@ class DefaultProtoNodeDecoratorSpec extends Specification {
126127
getProperties() >> Mock(PropertyIterator) {
127128
toList() >> []
128129
}
130+
it.getPrimaryNodeType() >> Mock(NodeType) {
131+
it.canSetProperty(_, _) >> false
132+
}
129133
}
130134
final protoPropertyDecorators = [
131135
new ProtoPropertyDecorator(mixinProperty),

0 commit comments

Comments
 (0)