You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by ju...@apache.org on 2012/10/01 16:10:01 UTC
svn commit: r1392344 - /jackrabbit/oak/trunk/doc/nodestate.md
Author: jukka
Date: Mon Oct 1 14:10:01 2012
New Revision: 1392344
URL: http://svn.apache.org/viewvc?rev=1392344&view=rev
Log:
OAK-301: Document Oak internals
Simple commit hook example
Modified:
jackrabbit/oak/trunk/doc/nodestate.md
Modified: jackrabbit/oak/trunk/doc/nodestate.md
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/doc/nodestate.md?rev=1392344&r1=1392343&r2=1392344&view=diff
==============================================================================
--- jackrabbit/oak/trunk/doc/nodestate.md (original)
+++ jackrabbit/oak/trunk/doc/nodestate.md Mon Oct 1 14:10:01 2012
@@ -212,9 +212,9 @@ TODO: Example of how the validator works
Repository repository = new RepositoryImpl(contentRepository);
Session session = repository.login();
Node root = session.getRootNode();
- root.setProperty("foo", "test");
+ root.setProperty("foo", "abc");
session.save();
- root.setProperty("bar", "test");
+ root.setProperty("bar", "def");
session.save(); // will throw an exception
TODO: Extended example that also works below root and covers also node names
@@ -260,3 +260,51 @@ TODO: Extended example that also works b
TODO
+TODO: Basic commit hook example
+
+ class RenameContentHook implements CommitHook {
+
+ private final String name;
+
+ private final String rename;
+
+ public RenameContentHook(String name, String rename) {
+ this.name = name;
+ this.rename = rename;
+ }
+
+ @Override @Nonnull
+ public NodeState processCommit(NodeState before, NodeState after)
+ throws CommitFailedException {
+ PropertyState property = after.getProperty(name);
+ if (property != null) {
+ NodeBuilder builder = after.getBuilder();
+ builder.removeProperty(name);
+ if (property.isArray()) {
+ builder.setProperty(rename, property.getValues());
+ } else {
+ builder.setProperty(rename, property.getValue());
+ }
+ return builder.getNodeState();
+ }
+ return after;
+ }
+
+ }
+
+TODO: Using the commit hook to avoid the exception from a validator
+
+ ContentRepository contentRepository = new Oak()
+ .with(new RenameContentHook("bar", "foo"))
+ .with(new DenyContentWithName("bar"))
+ .createContentRepository();
+
+ Repository repository = new RepositoryImpl(contentRepository);
+ Session session = repository.login();
+ Node root = session.getRootNode();
+ root.setProperty("foo", "abc");
+ session.save();
+ root.setProperty("bar", "def");
+ session.save(); // will not throw an exception!
+ System.out.println(root.getProperty("foo").getString()); // Prints "def"!
+