final AtomicBoolean dirtyFlag = new AtomicBoolean(); final AtomicBoolean facetFlag = new AtomicBoolean(); indexingRule.getAggregate().collectAggregates(state, new Aggregate.ResultCollector() { @Override public void onResult(Aggregate.NodeIncludeResult result) {
@Test public void regexAllProps() { IndexDefinitionBuilder builder = new IndexDefinitionBuilder(); builder.indexRule("nt:base").property("p"); builder.indexRule("nt:base").property("all", FulltextIndexConstants.REGEX_ALL_PROPS, true); IndexDefinition def = IndexDefinition.newBuilder(root, builder.build(), "/foo").build(); IndexingRule rule = def.getApplicableIndexingRule(root); assertNotNull(rule); PropertyDefinition pd = rule.getConfig("p"); assertNotNull(pd); assertFalse(pd.isRegexp); assertFalse(pd.relative); assertEquals(0, pd.ancestors.length); pd = rule.getConfig("all"); assertNotNull(pd); assertTrue(pd.isRegexp); assertFalse(pd.relative); assertEquals(0, pd.ancestors.length); assertThat(rule.getAggregate().getIncludes(), is(empty())); assertFalse(rule.getAggregate().hasNodeAggregates()); List<Aggregate.Matcher> matchers = rule.getAggregate() .createMatchers(new TestRoot("/")); assertThat(matchers, is(empty())); assertThat(def.getRelativeNodeNames(), is(empty())); }
@Test public void regexAllProps() { IndexDefinitionBuilder builder = new IndexDefinitionBuilder(); builder.indexRule("nt:base").property("p"); builder.indexRule("nt:base").property("all", FulltextIndexConstants.REGEX_ALL_PROPS, true); IndexDefinition def = IndexDefinition.newBuilder(root, builder.build(), "/foo").build(); IndexingRule rule = def.getApplicableIndexingRule(root); assertNotNull(rule); PropertyDefinition pd = rule.getConfig("p"); assertNotNull(pd); assertFalse(pd.isRegexp); assertFalse(pd.relative); assertEquals(0, pd.ancestors.length); pd = rule.getConfig("all"); assertNotNull(pd); assertTrue(pd.isRegexp); assertFalse(pd.relative); assertEquals(0, pd.ancestors.length); assertThat(rule.getAggregate().getIncludes(), is(empty())); assertFalse(rule.getAggregate().hasNodeAggregates()); List<Aggregate.Matcher> matchers = rule.getAggregate() .createMatchers(new TestRoot("/")); assertThat(matchers, is(empty())); assertThat(def.getRelativeNodeNames(), is(empty())); }
@Override public void enter(NodeState before, NodeState after) throws CommitFailedException { if (EmptyNodeState.MISSING_NODE == before && parent == null){ context.enableReindexMode(); } //Only check for indexing if the result is include. //In case like TRAVERSE nothing needs to be indexed for those //path if (pathFilterResult == PathFilter.Result.INCLUDE) { //For traversal in deleted sub tree before state has to be used NodeState current = after.exists() ? after : before; indexingRule = getDefinition().getApplicableIndexingRule(current); if (indexingRule != null) { currentMatchers = indexingRule.getAggregate().createMatchers(this); } } }
@Test public void propOneLevelRegex() throws Exception{ NodeBuilder rules = builder.child(INDEX_RULES); rules.child("nt:folder"); child(rules, "nt:folder/properties/p1") .setProperty(FulltextIndexConstants.PROP_NAME, "a/foo.*") .setProperty(FulltextIndexConstants.PROP_IS_REGEX, true); IndexDefinition defn = new IndexDefinition(root, builder.getNodeState(), "/foo"); Aggregate ag = defn.getApplicableIndexingRule("nt:folder").getAggregate(); NodeBuilder nb = newNode("nt:folder"); nb.child("a").setProperty("foo1", "foo"); nb.child("a").setProperty("foo2", "foo"); nb.child("a").setProperty("bar1", "foo"); nb.child("b").setProperty("p2", "foo"); ag.collectAggregates(nb.getNodeState(), col); assertEquals(2, col.getPropPaths().size()); assertThat(col.getPropPaths(), hasItems("a/foo1", "a/foo2")); }
@Override public void enter(NodeState before, NodeState after) throws CommitFailedException { if (EmptyNodeState.MISSING_NODE == before && parent == null){ context.enableReindexMode(); } //Only check for indexing if the result is include. //In case like TRAVERSE nothing needs to be indexed for those //path if (pathFilterResult == PathFilter.Result.INCLUDE) { //For traversal in deleted sub tree before state has to be used NodeState current = after.exists() ? after : before; indexingRule = getDefinition().getApplicableIndexingRule(current); if (indexingRule != null) { currentMatchers = indexingRule.getAggregate().createMatchers(this); } } }
@Override public void enter(NodeState before, NodeState after) { if (EmptyNodeState.MISSING_NODE == before && parent == null){ context.enableReindexMode(); } //Only check for indexing if the result is include. //In case like TRAVERSE nothing needs to be indexed for those //path if (pathFilterResult == PathFilter.Result.INCLUDE) { //For traversal in deleted sub tree before state has to be used NodeState current = after.exists() ? after : before; indexingRule = getDefinition().getApplicableIndexingRule(current); if (indexingRule != null) { currentMatchers = indexingRule.getAggregate().createMatchers(this); } } }
@Test public void propOneLevelNamed() throws Exception{ NodeBuilder rules = builder.child(INDEX_RULES); rules.child("nt:folder"); child(rules, "nt:folder/properties/p1") .setProperty(FulltextIndexConstants.PROP_NAME, "a/p1"); IndexDefinition defn = new IndexDefinition(root, builder.getNodeState(), "/foo"); Aggregate ag = defn.getApplicableIndexingRule("nt:folder").getAggregate(); NodeBuilder nb = newNode("nt:folder"); nb.child("a").setProperty("p1", "foo"); nb.child("a").setProperty("p2", "foo"); nb.child("b").setProperty("p2", "foo"); ag.collectAggregates(nb.getNodeState(), col); assertEquals(1, col.getPropPaths().size()); assertThat(col.getPropPaths(), hasItems("a/p1")); }
@Test public void nodeTypeIndexed_IgnoreAggregates() throws Exception{ TestUtil.registerNodeType(builder, testNodeTypeDefn); root = builder.getNodeState(); IndexDefinitionBuilder defnb = new IndexDefinitionBuilder(); defnb.nodeTypeIndex(); defnb.indexRule("oak:TestSuperType").sync(); defnb.aggregateRule("oak:TestSuperType").include("*"); IndexDefinition defn = IndexDefinition.newBuilder(root, defnb.build(), "/foo").build(); IndexingRule ruleSuper = getRule(defn, "oak:TestSuperType"); assertNotNull(ruleSuper); assertNull(ruleSuper.getConfig("foo")); assertTrue(ruleSuper.getAggregate().getIncludes().isEmpty()); assertNotNull(ruleSuper.getConfig(JcrConstants.JCR_PRIMARYTYPE)); assertNotNull(ruleSuper.getConfig(JcrConstants.JCR_MIXINTYPES)); }
@Test public void nodeTypeIndexed_IgnoreAggregates() throws Exception{ TestUtil.registerNodeType(builder, testNodeTypeDefn); root = builder.getNodeState(); IndexDefinitionBuilder defnb = new IndexDefinitionBuilder(); defnb.nodeTypeIndex(); defnb.indexRule("oak:TestSuperType").sync(); defnb.aggregateRule("oak:TestSuperType").include("*"); IndexDefinition defn = IndexDefinition.newBuilder(root, defnb.build(), "/foo").build(); IndexingRule ruleSuper = getRule(defn, "oak:TestSuperType"); assertNotNull(ruleSuper); assertNull(ruleSuper.getConfig("foo")); assertTrue(ruleSuper.getAggregate().getIncludes().isEmpty()); assertNotNull(ruleSuper.getConfig(JcrConstants.JCR_PRIMARYTYPE)); assertNotNull(ruleSuper.getConfig(JcrConstants.JCR_MIXINTYPES)); }