@Override public Editor getRootEditor(NodeState before, NodeState after, NodeBuilder builder, CommitInfo info) { IndexEditorProvider editorProviders = new CompositeIndexEditorProvider( new ReferenceEditorProvider(), new PropertyIndexEditorProvider()); return new IndexUpdate(editorProviders, null, after, builder, new IndexUpdateCallback() { String progress = "Updating indexes "; long t0; @Override public void indexUpdate() { long t = System.currentTimeMillis(); if (t - t0 > 2000) { logger.info("{} {}", progress, ticker.tick()); t0 = t ; } } }); }
@Before public void initializeHook() { MountInfoProvider mip = Mounts.newBuilder() .mount("foo", "/a") .build(); hook = new EditorHook(new CompositeEditorProvider( new IndexUpdateProvider(new CompositeIndexEditorProvider( new PropertyIndexEditorProvider().with(mip), new ReferenceEditorProvider().with(mip))), new CrossMountReferenceValidatorProvider().with(mip).withFailOnDetection(true))); }
@Override public Editor getRootEditor(NodeState before, NodeState after, NodeBuilder builder, CommitInfo info) { IndexEditorProvider editorProviders = new CompositeIndexEditorProvider( new ReferenceEditorProvider(), new PropertyIndexEditorProvider()); return new IndexUpdate(editorProviders, null, after, builder, new IndexUpdateCallback() { String progress = "Updating indexes "; long t0; @Override public void indexUpdate() { long t = System.currentTimeMillis(); if (t - t0 > 2000) { logger.info("{} {}", progress, ticker.tick()); t0 = t ; } } }); }
@Test public void referenceHandlingWithMounts() throws Exception{ NodeState root = INITIAL_CONTENT; NodeBuilder builder = root.builder(); NodeState before = builder.getNodeState(); builder.child("a").child("x").setProperty(createProperty("foo", "u1", Type.REFERENCE)); builder.child("b").setProperty(createProperty("foo", "u1", Type.REFERENCE)); builder.child("c").setProperty(createProperty("foo", "u1", Type.WEAKREFERENCE)); builder.child("d").setProperty(createProperty("foo", "u2", Type.WEAKREFERENCE)); builder.child("a").child("y").setProperty(createProperty("foo", "u1", Type.WEAKREFERENCE)); NodeState after = builder.getNodeState(); MountInfoProvider mip = Mounts.newBuilder() .mount("foo", "/a") .build(); EditorHook hook = new EditorHook( new IndexUpdateProvider(new ReferenceEditorProvider().with(mip))); ReferenceIndex referenceIndex = new ReferenceIndex(mip); NodeState indexed = hook.processCommit(before, after, CommitInfo.EMPTY); FilterImpl f = createFilter(indexed, NT_BASE); f.restrictProperty("*", Operator.EQUAL, newReference("u1"), PropertyType.REFERENCE); // System.out.println(NodeStateUtils.toString(NodeStateUtils.getNode(indexed, "/oak:index/reference"))); assertFilter(f, referenceIndex, indexed, of("/a/x", "/b")); FilterImpl f2 = createFilter(indexed, NT_BASE); f2.restrictProperty("*", Operator.EQUAL, newReference("u1"), PropertyType.WEAKREFERENCE); assertFilter(f2, referenceIndex, indexed, of("/c", "/a/y")); }
private void registerRequiredServices() { context.registerService(SecurityProvider.class, new OpenSecurityProvider()); context.registerService(NodeStore.class, new MemoryNodeStore()); context.registerService(IndexEditorProvider.class, new PropertyIndexEditorProvider(), ImmutableMap.<String, Object>of("type", "property")); context.registerService(IndexEditorProvider.class, new ReferenceEditorProvider(), ImmutableMap.<String, Object>of("type", "reference")); }
.with(new NodeTypeIndexProvider()) .with(new PropertyIndexEditorProvider()) .with(new ReferenceEditorProvider()) .with(new OrderedPropertyIndexEditorProvider()) .withAtomicCounter()
@Test public void removeWeaklyReferencedNode() throws Exception{ NodeState root = INITIAL_CONTENT; NodeBuilder builder = root.builder(); NodeState before = builder.getNodeState(); builder.child("a").setProperty(createProperty(JCR_UUID, "u1", Type.STRING)); builder.child("b").setProperty(createProperty("foo", "u1", Type.WEAKREFERENCE)); NodeState after = builder.getNodeState(); EditorHook hook = new EditorHook( new IndexUpdateProvider(new ReferenceEditorProvider())); NodeState indexed = hook.processCommit(before, after, CommitInfo.EMPTY); builder = indexed.builder(); builder.getChildNode("a").remove(); hook.processCommit(indexed, builder.getNodeState(), CommitInfo.EMPTY); }
@Test public void removeReferencedNode() throws Exception{ NodeState root = INITIAL_CONTENT; NodeBuilder builder = root.builder(); NodeState before = builder.getNodeState(); builder.child("a").setProperty(createProperty(JCR_UUID, "u1", Type.STRING)); builder.child("b").setProperty(createProperty("foo", "u1", Type.REFERENCE)); NodeState after = builder.getNodeState(); EditorHook hook = new EditorHook( new IndexUpdateProvider(new ReferenceEditorProvider())); NodeState indexed = hook.processCommit(before, after, CommitInfo.EMPTY); builder = indexed.builder(); builder.getChildNode("a").remove(); thrown.expect(CommitFailedException.class); thrown.expectMessage("OakIntegrity0001: Unable to delete referenced node"); hook.processCommit(indexed, builder.getNodeState(), CommitInfo.EMPTY); }
@Test public void basicReferenceHandling() throws Exception{ NodeState root = INITIAL_CONTENT; NodeBuilder builder = root.builder(); NodeState before = builder.getNodeState(); builder.child("a").setProperty(createProperty("foo", "u1", Type.REFERENCE)); builder.child("b").setProperty(createProperty("foo", "u1", Type.REFERENCE)); builder.child("c").setProperty(createProperty("foo", "u2", Type.WEAKREFERENCE)); NodeState after = builder.getNodeState(); EditorHook hook = new EditorHook( new IndexUpdateProvider(new ReferenceEditorProvider())); NodeState indexed = hook.processCommit(before, after, CommitInfo.EMPTY); FilterImpl f = createFilter(indexed, NT_BASE); f.restrictProperty("*", Operator.EQUAL, newReference("u1"), PropertyType.REFERENCE); assertFilter(f, new ReferenceIndex(), indexed, of("/a", "/b")); FilterImpl f2 = createFilter(indexed, NT_BASE); f2.restrictProperty("*", Operator.EQUAL, newReference("u2"), PropertyType.WEAKREFERENCE); assertFilter(f2, new ReferenceIndex(), indexed, of("/c")); }
@Test public void reindexForDisabledIndexes() throws Exception{ EditorHook hook = new EditorHook( new IndexUpdateProvider(new CompositeIndexEditorProvider( new PropertyIndexEditorProvider(), new ReferenceEditorProvider() ))); NodeState before = builder.getNodeState(); createIndexDefinition(builder.child(INDEX_DEFINITIONS_NAME), "fooIndex", true, false, ImmutableSet.of("foo"), null); builder.child("testRoot").setProperty("foo", "abc"); NodeState after = builder.getNodeState(); NodeState indexed = hook.processCommit(before, after, CommitInfo.EMPTY); before = indexed; builder = before.builder(); builder.getChildNode("oak:index").getChildNode("fooIndex").setProperty(TYPE_PROPERTY_NAME, TYPE_DISABLED); builder.getChildNode("oak:index").getChildNode("fooIndex").setProperty(REINDEX_PROPERTY_NAME, true); after = builder.getNodeState(); LogCustomizer customLogs = LogCustomizer.forLogger(IndexUpdate.class.getName()).filter(Level.INFO).create(); customLogs.starting(); before = after; builder = before.builder(); builder.child("testRoot2").setProperty("foo", "abc"); after = builder.getNodeState(); indexed = hook.processCommit(before, after, CommitInfo.EMPTY); assertTrue(customLogs.getLogs().isEmpty()); customLogs.finished(); }
@Test(expected = CommitFailedException.class) public void checkMissingStrategySetting() throws Exception{ Whiteboard wb = new DefaultWhiteboard(); WhiteboardIndexEditorProvider wbProvider = new WhiteboardIndexEditorProvider(); wbProvider.start(wb); Registration r1 = wb.register(IndexEditorProvider.class, new PropertyIndexEditorProvider(), null); Registration r2 = wb.register(IndexEditorProvider.class, new ReferenceEditorProvider(), null); Oak oak = new Oak() .with(new OpenSecurityProvider()) .with(new InitialContent()) .with(wb) .with(wbProvider) .withFailOnMissingIndexProvider(); ContentRepository repo = oak.createContentRepository(); ContentSession cs = repo.login(null, null); Root root = cs.getLatestRoot(); Tree t = root.getTree("/"); t.setProperty("foo", "u1", Type.REFERENCE); r1.unregister(); root.commit(); cs.close(); ((Closeable)repo).close(); }
@Before public void before() throws Exception { Oak oak = new Oak() .with(new InitialContent()) .with(new VersionHook()) .with(JcrConflictHandler.createJcrConflictHandler()) .with(new NamespaceEditorProvider()) .with(new ReferenceEditorProvider()) .with(new ReferenceIndexProvider()) .with(new PropertyIndexEditorProvider()) .with(new PropertyIndexProvider()) .with(new TypeEditorProvider()) .with(new ConflictValidatorProvider()) .with(getQueryEngineSettings()) .with(getSecurityProvider()); withEditors(oak); contentRepository = oak.createContentRepository(); adminSession = createAdminSession(contentRepository); root = adminSession.getLatestRoot(); Configuration.setConfiguration(getConfiguration()); }
.with(new ReferenceEditorProvider()) .with(new ReferenceIndexProvider()) .with(new PropertyIndexEditorProvider()) .with(new ReferenceEditorProvider()) .with(new ReferenceIndexProvider()) .with(new PropertyIndexEditorProvider())