static EditorProvider createTypeEditorProvider() { return new EditorProvider() { @Override public Editor getRootEditor(NodeState before, NodeState after, NodeBuilder builder, CommitInfo info) throws CommitFailedException { Editor rootEditor = new TypeEditorProvider(false) .getRootEditor(before, after, builder, info); return ProgressNotificationEditor.wrap(rootEditor, logger, "Checking node types:"); } @Override public String toString() { return "TypeEditorProvider"; } }; }
static EditorProvider createTypeEditorProvider() { return new EditorProvider() { @Override public Editor getRootEditor(NodeState before, NodeState after, NodeBuilder builder, CommitInfo info) throws CommitFailedException { Editor rootEditor = new TypeEditorProvider(false) .getRootEditor(before, after, builder, info); return ProgressNotificationEditor.wrap(rootEditor, logger, "Checking node types:"); } @Override public String toString() { return "TypeEditorProvider"; } }; }
@Override public Editor getRootEditor(NodeState before, NodeState after, NodeBuilder builder, CommitInfo info) throws CommitFailedException { Editor rootEditor = new TypeEditorProvider(false) .getRootEditor(before, after, builder, info); return ProgressNotificationEditor.wrap(rootEditor, logger, "Checking node types:"); }
@Override public Editor getRootEditor(NodeState before, NodeState after, NodeBuilder builder, CommitInfo info) throws CommitFailedException { Editor rootEditor = new TypeEditorProvider(false) .getRootEditor(before, after, builder, info); return ProgressNotificationEditor.wrap(rootEditor, logger, "Checking node types:"); }
@Override protected Oak withEditors(Oak oak) { return oak.with(new TypeEditorProvider()); }
private void registerTestNodeTypes() throws IOException, CommitFailedException { optionalEditorProvider.delegate = new TypeEditorProvider(); NodeTypeRegistry.register(root, IOUtils.toInputStream(testNodeTypes, "utf-8"), "test nodeType"); // Flush the changes to nodetypes root.commit(); }
private static NodeState createInitialContent() { NodeStore store = new MemoryNodeStore(); EditorHook hook = new EditorHook( new CompositeEditorProvider(new NamespaceEditorProvider(), new TypeEditorProvider())); OakInitializer.initialize(store, new InitialContent(), hook); return store.getRoot(); }
public static void registerNodeType(NodeBuilder builder, String nodeTypeDefn) { // Taken from // org.apache.jackrabbit.oak.plugins.nodetype.write.InitialContent NodeState base = ModifiedNodeState.squeeze(builder.getNodeState()); NodeStore store = new MemoryNodeStore(base); Root root = RootFactory.createSystemRoot(store, new EditorHook(new CompositeEditorProvider(new NamespaceEditorProvider(), new TypeEditorProvider())), null, null, null); NodeTypeRegistry.register(root, IOUtils.toInputStream(nodeTypeDefn), "test node types"); NodeState target = store.getRoot(); target.compareAgainstBaseState(base, new ApplyDiff(builder)); }
public static void registerNodeType(NodeBuilder builder, String nodeTypeDefn){ //Taken from org.apache.jackrabbit.oak.plugins.nodetype.write.InitialContent NodeState base = ModifiedNodeState.squeeze(builder.getNodeState()); NodeStore store = new MemoryNodeStore(base); Root root = RootFactory.createSystemRoot( store, new EditorHook(new CompositeEditorProvider( new NamespaceEditorProvider(), new TypeEditorProvider())), null, null, null); NodeTypeRegistry.register(root, IOUtils.toInputStream(nodeTypeDefn), "test node types"); NodeState target = store.getRoot(); target.compareAgainstBaseState(base, new ApplyDiff(builder)); }
@Test public void requiredTypeIsUndefined() throws CommitFailedException { EditorHook hook = new EditorHook(new TypeEditorProvider()); NodeState root = INITIAL_CONTENT; NodeBuilder builder = root.builder(); NodeState before = builder.getNodeState(); builder.setProperty("any", "title"); NodeState after = builder.getNodeState(); hook.processCommit(before, after, CommitInfo.EMPTY); builder.setProperty("any", 134.34, Type.DOUBLE); hook.processCommit(after, builder.getNodeState(), CommitInfo.EMPTY); }
@Test public void addNamedPropertyWithBadRequiredType() { EditorHook hook = new EditorHook(new TypeEditorProvider()); NodeState root = INITIAL_CONTENT; NodeBuilder builder = root.builder(); NodeState before = builder.getNodeState(); NodeBuilder testNode = builder.child("testNode"); testNode.setProperty(JCR_PRIMARYTYPE, NT_FOLDER, Type.NAME); testNode.setProperty(JCR_MIXINTYPES, ImmutableList.of("mix:title"), Type.NAMES); testNode.setProperty("jcr:title", true); try { hook.processCommit(before, builder.getNodeState(), CommitInfo.EMPTY); fail(); } catch (CommitFailedException e) { assertTrue(e.isConstraintViolation()); } }
@Test public void changeNamedPropertyToBadRequiredType() { EditorHook hook = new EditorHook(new TypeEditorProvider()); NodeState root = INITIAL_CONTENT; NodeBuilder builder = root.builder(); NodeBuilder testNode = builder.child("testNode"); testNode.setProperty(JCR_PRIMARYTYPE, NT_FOLDER, Type.NAME); testNode.setProperty(JCR_MIXINTYPES, ImmutableList.of("mix:title"), Type.NAMES); testNode.setProperty("jcr:title", "title"); NodeState before = builder.getNodeState(); testNode.setProperty("jcr:title", true); try { hook.processCommit(before, builder.getNodeState(), CommitInfo.EMPTY); fail(); } catch (CommitFailedException e) { assertTrue(e.isConstraintViolation()); } }
@Test public void changeNodeTypeNewBroken() throws CommitFailedException { EditorHook hook = new EditorHook(new TypeEditorProvider()); NodeState root = INITIAL_CONTENT; NodeBuilder builder = root.builder(); NodeState before = builder.getNodeState(); builder.child("testcontent").setProperty(JCR_PRIMARYTYPE, "nt:folder", Type.NAME); builder.child("testcontent").setProperty("extra", "information"); try { hook.processCommit(before, builder.getNodeState(), CommitInfo.EMPTY); fail("should not be able to change node type due to extra properties"); } catch (CommitFailedException e) { assertTrue(e.isConstraintViolation()); } }
@Test public void changeMandatoryPropertyToBadRequiredType() { EditorHook hook = new EditorHook(new TypeEditorProvider()); NodeState root = INITIAL_CONTENT; NodeBuilder builder = root.builder(); NodeBuilder acl = builder.child(AccessControlConstants.REP_POLICY); acl.setProperty(JCR_PRIMARYTYPE, AccessControlConstants.NT_REP_ACL, Type.NAME); NodeBuilder ace = acl.child("first"); ace.setProperty(JCR_PRIMARYTYPE, AccessControlConstants.NT_REP_GRANT_ACE, Type.NAME); ace.setProperty(AccessControlConstants.REP_PRINCIPAL_NAME, EveryonePrincipal.NAME); ace.setProperty(AccessControlConstants.REP_PRIVILEGES, ImmutableList.of(PrivilegeConstants.JCR_READ), Type.NAMES); NodeState before = builder.getNodeState(); // change to invalid type ace.setProperty(AccessControlConstants.REP_PRIVILEGES, ImmutableList.of(PrivilegeConstants.JCR_READ), Type.STRINGS); try { hook.processCommit(before, builder.getNodeState(), CommitInfo.EMPTY); fail(); } catch (CommitFailedException e) { assertTrue(e.isConstraintViolation()); } }
@Test public void newNodeTypesFoundLater() throws Exception{ String idxName = "hybridtest"; Tree idx = createIndex(root.getTree("/"), idxName, ImmutableSet.of("foo", "bar")); TestUtil.enableIndexingMode(idx, FulltextIndexConstants.IndexingMode.SYNC); root.commit(); setTraversalEnabled(false); createPath("/a").setProperty("foo", "bar"); root.commit(); assertQuery("select [jcr:path] from [nt:base] where [foo] = 'bar'", of("/a")); optionalEditorProvider.delegate = new TypeEditorProvider(false); NodeTypeRegistry.register(root, IOUtils.toInputStream(TestUtil.TEST_NODE_TYPE), "test nodeType"); root.refresh(); Tree b = createPath("/b"); b.setProperty(JcrConstants.JCR_PRIMARYTYPE, "oak:TestNode", Type.NAME); b.setProperty("bar", "foo"); root.commit(); assertQuery("select [jcr:path] from [nt:base] where [bar] = 'foo'", of("/b")); }
@Test public void addMandatoryPropertyWithBadRequiredType() { EditorHook hook = new EditorHook(new TypeEditorProvider()); NodeState root = INITIAL_CONTENT; NodeBuilder builder = root.builder(); NodeState before = builder.getNodeState(); NodeBuilder acl = builder.child(AccessControlConstants.REP_POLICY); acl.setProperty(JCR_PRIMARYTYPE, AccessControlConstants.NT_REP_ACL, Type.NAME); NodeBuilder ace = acl.child("first"); ace.setProperty(JCR_PRIMARYTYPE, AccessControlConstants.NT_REP_GRANT_ACE, Type.NAME); ace.setProperty(AccessControlConstants.REP_PRINCIPAL_NAME, EveryonePrincipal.NAME); ace.setProperty(AccessControlConstants.REP_PRIVILEGES, ImmutableList.of(PrivilegeConstants.JCR_READ), Type.STRINGS); try { hook.processCommit(before, builder.getNodeState(), CommitInfo.EMPTY); fail(); } catch (CommitFailedException e) { assertTrue(e.isConstraintViolation()); assertEquals(55, e.getCode()); } }
@Test public void ignoreHidden() throws CommitFailedException { EditorHook hook = new EditorHook(new TypeEditorProvider()); NodeState root = INITIAL_CONTENT; NodeBuilder builder = root.builder(); NodeState before = builder.getNodeState(); builder.child(":hidden"); NodeState after = builder.getNodeState(); hook.processCommit(before, after, CommitInfo.EMPTY); before = after; builder.child(":hidden").setProperty("prop", "value"); after = builder.getNodeState(); hook.processCommit(before, after, CommitInfo.EMPTY); before = after; builder.getChildNode(":hidden").remove(); after = builder.getNodeState(); hook.processCommit(before, after, CommitInfo.EMPTY); }
@Test public void malformedUUID() throws CommitFailedException { EditorHook hook = new EditorHook(new TypeEditorProvider()); NodeState root = INITIAL_CONTENT; NodeBuilder builder = root.builder(); NodeState before = builder.getNodeState(); builder.child("testcontent").setProperty(JCR_PRIMARYTYPE, "nt:unstructured", Type.NAME); builder.child("testcontent").setProperty("jcr:uuid", "not-a-uuid"); NodeState after = builder.getNodeState(); root = hook.processCommit(before, after, CommitInfo.EMPTY); builder = root.builder(); before = builder.getNodeState(); builder.child("testcontent").setProperty(JCR_MIXINTYPES, ImmutableList.of(MIX_REFERENCEABLE), Type.NAMES); try { hook.processCommit(before, builder.getNodeState(), CommitInfo.EMPTY); fail("should not be able to change mixin due to illegal uuid format"); } catch (CommitFailedException e) { assertTrue(e.isConstraintViolation()); } } }
@Before public void setUp() throws LoginException, NoSuchWorkspaceException { repository = new Oak().with(new InitialContent()).with(new OpenSecurityProvider()) .with(new TypeEditorProvider()).createContentRepository(); session = repository.login(null, null); root = session.getLatestRoot(); }
@Test public void changeNodeTypeWExtraProps() throws CommitFailedException { EditorHook hook = new EditorHook(new TypeEditorProvider()); NodeState root = INITIAL_CONTENT; NodeBuilder builder = root.builder(); NodeState before = builder.getNodeState(); builder.child("testcontent").setProperty(JCR_PRIMARYTYPE, "nt:unstructured", Type.NAME); builder.child("testcontent").setProperty("extra", "information"); NodeState after = builder.getNodeState(); root = hook.processCommit(before, after, CommitInfo.EMPTY); builder = root.builder(); before = builder.getNodeState(); builder.child("testcontent").setProperty(JCR_PRIMARYTYPE, "nt:folder", Type.NAME); try { hook.processCommit(before, builder.getNodeState(), CommitInfo.EMPTY); fail("should not be able to change node type due to extra properties"); } catch (CommitFailedException e) { assertTrue(e.isConstraintViolation()); } }