@Override public boolean getBoolean(String name) { return getWrappedNodeBuilder().getBoolean(name); }
private static boolean hasAnyHiddenNodes(NodeBuilder builder){ for (String name : builder.getChildNodeNames()) { if (NodeStateUtils.isHidden(name)){ NodeBuilder childNode = builder.getChildNode(name); if (childNode.getBoolean(IndexConstants.REINDEX_RETAIN)) { continue; } return true; } } return false; }
private static boolean hasAnyHiddenNodes(NodeBuilder builder){ for (String name : builder.getChildNodeNames()) { if (NodeStateUtils.isHidden(name)){ NodeBuilder childNode = builder.getChildNode(name); if (childNode.getBoolean(IndexConstants.REINDEX_RETAIN)) { continue; } return true; } } return false; }
private static boolean hasAnyHiddenNodes(NodeBuilder builder){ for (String name : builder.getChildNodeNames()) { if (NodeStateUtils.isHidden(name)){ NodeBuilder childNode = builder.getChildNode(name); if (childNode.getBoolean(IndexConstants.REINDEX_RETAIN)) { continue; } return true; } } return false; }
/** * Physically prune a list of nodes from the index * * @param index * the current index * @param builders * list of nodes to prune * @param key the key of the index we're processing */ void prune(final NodeBuilder index, final Deque<NodeBuilder> builders, final String key) { for (NodeBuilder node : builders) { if (node.getBoolean("match") || node.getChildNodeCount(1) > 0) { return; } else if (node.exists()) { node.remove(); } } }
/** * Physically prune a list of nodes from the index * * @param index * the current index * @param builders * list of nodes to prune * @param key the key of the index we're processing */ void prune(final NodeBuilder index, final Deque<NodeBuilder> builders, final String key) { for (NodeBuilder node : builders) { if (node.getBoolean("match") || node.getChildNodeCount(1) > 0) { return; } else if (node.exists()) { node.remove(); } } }
private void removeIndexState(NodeBuilder definition) { // as we don't know the index content node name // beforehand, we'll remove all child nodes for (String rm : definition.getChildNodeNames()) { if (NodeStateUtils.isHidden(rm)) { NodeBuilder childNode = definition.getChildNode(rm); if (!childNode.getBoolean(IndexConstants.REINDEX_RETAIN)) { NodeBuilder child = definition.getChildNode(rm); if (child instanceof ReadOnlyBuilder) { log.debug("Preserve read-only child node on reindex: " + rm); } else { child.remove(); } } } } }
private void removeIndexState(NodeBuilder definition) { // as we don't know the index content node name // beforehand, we'll remove all child nodes for (String rm : definition.getChildNodeNames()) { if (NodeStateUtils.isHidden(rm)) { NodeBuilder childNode = definition.getChildNode(rm); if (!childNode.getBoolean(IndexConstants.REINDEX_RETAIN)) { NodeBuilder child = definition.getChildNode(rm); if (child instanceof ReadOnlyBuilder) { log.debug("Preserve read-only child node on reindex: " + rm); } else { child.remove(); } } } } }
private void removeIndexState(NodeBuilder definition) { // as we don't know the index content node name // beforehand, we'll remove all child nodes for (String rm : definition.getChildNodeNames()) { if (NodeStateUtils.isHidden(rm)) { NodeBuilder childNode = definition.getChildNode(rm); if (!childNode.getBoolean(IndexConstants.REINDEX_RETAIN)) { definition.getChildNode(rm).remove(); } } } }
@Test public void indexToBeDisabled_PathNotExists() throws Exception{ builder.setProperty(IndexConstants.SUPERSEDED_INDEX_PATHS, asList("/oak:index/fooIndex", "/oak:index/barIndex"), Type.STRINGS); assertFalse(disabler.markDisableFlagIfRequired("/oak:index/foo", builder)); assertFalse(builder.getBoolean(DISABLE_INDEXES_ON_NEXT_CYCLE)); }
@Test public void nodeTypeIndexToBeDisabled_TypeNotExists() throws Exception{ createIndexDefinition(rootBuilder.child(INDEX_DEFINITIONS_NAME), "fooIndex", true, false, ImmutableSet.of("foo"), asList("oak:TestNode")); recreateDisabler(); builder.setProperty(IndexConstants.SUPERSEDED_INDEX_PATHS, asList("/oak:index/fooIndex/@bar", "/oak:index/barIndex"), Type.STRINGS); assertFalse(disabler.markDisableFlagIfRequired("/oak:index/foo", builder)); assertFalse(builder.getBoolean(DISABLE_INDEXES_ON_NEXT_CYCLE)); }
@Test public void nodeTypeIndexToBeDisabled_TypeExists() throws Exception{ createIndexDefinition(rootBuilder.child(INDEX_DEFINITIONS_NAME), "fooIndex", true, false, ImmutableSet.of("foo"), asList("oak:TestNode")); recreateDisabler(); builder.setProperty(IndexConstants.SUPERSEDED_INDEX_PATHS, asList("/oak:index/fooIndex/@oak:TestNode", "/oak:index/barIndex"), Type.STRINGS); assertTrue(disabler.markDisableFlagIfRequired("/oak:index/foo", builder)); assertTrue(builder.getBoolean(DISABLE_INDEXES_ON_NEXT_CYCLE)); }
@Test public void nodeTypeIndexToBeDisabled_PathNotExists() throws Exception{ builder.setProperty(IndexConstants.SUPERSEDED_INDEX_PATHS, asList("/oak:index/fooIndex/@bar", "/oak:index/barIndex"), Type.STRINGS); assertFalse(disabler.markDisableFlagIfRequired("/oak:index/foo", builder)); assertFalse(builder.getBoolean(DISABLE_INDEXES_ON_NEXT_CYCLE)); }
@Test public void indexToBeDisabled_Noop() throws Exception{ assertFalse(disabler.markDisableFlagIfRequired("/oak:index/foo", builder)); assertFalse(builder.getBoolean(DISABLE_INDEXES_ON_NEXT_CYCLE)); }
@Test public void nodeTypeIndexToBeDisabled_DeclaringTypeNotExists() throws Exception{ rootBuilder.child("oak:index").child("fooIndex"); recreateDisabler(); builder.setProperty(IndexConstants.SUPERSEDED_INDEX_PATHS, asList("/oak:index/fooIndex/@bar", "/oak:index/barIndex"), Type.STRINGS); assertFalse(disabler.markDisableFlagIfRequired("/oak:index/foo", builder)); assertFalse(builder.getBoolean(DISABLE_INDEXES_ON_NEXT_CYCLE)); }
@Test public void nodeTypeIndexDisabling_typeExist() throws Exception{ createIndexDefinition(rootBuilder.child(INDEX_DEFINITIONS_NAME), "fooIndex", true, false, ImmutableSet.of("foo"), asList("oak:TestNode", "oak:BarType")); builder.setProperty(IndexConstants.DISABLE_INDEXES_ON_NEXT_CYCLE, true); builder.setProperty(IndexConstants.SUPERSEDED_INDEX_PATHS, asList("/oak:index/fooIndex/@oak:BarType"), Type.STRINGS); refreshBuilder(); List<String> disabledIndexes = disabler.disableOldIndexes("/oak:index/foo", builder); assertThat(disabledIndexes, containsInAnyOrder("/oak:index/fooIndex/@oak:BarType")); assertFalse(builder.getBoolean(IndexConstants.DISABLE_INDEXES_ON_NEXT_CYCLE)); PropertyState declaringNodeType = rootBuilder.getChildNode(INDEX_DEFINITIONS_NAME).getChildNode("fooIndex").getProperty(DECLARING_NODE_TYPES); assertEquals(Type.NAMES, declaringNodeType.getType()); Set<String> names = Sets.newHashSet(declaringNodeType.getValue(Type.NAMES)); assertThat(names, containsInAnyOrder("oak:TestNode")); }
@Test public void indexToBeDisabled_PathExistsButDisabled() throws Exception{ rootBuilder.child("oak:index").child("fooIndex").setProperty(TYPE_PROPERTY_NAME, TYPE_DISABLED); builder.setProperty(IndexConstants.SUPERSEDED_INDEX_PATHS, asList("/oak:index/fooIndex", "/oak:index/barIndex"), Type.STRINGS); assertFalse(disabler.markDisableFlagIfRequired("/oak:index/foo", builder)); assertFalse(builder.getBoolean(DISABLE_INDEXES_ON_NEXT_CYCLE)); }
@Test public void indexToBeDisabled_PathExists() throws Exception{ rootBuilder.child("oak:index").child("fooIndex").setProperty(TYPE_PROPERTY_NAME, "property"); recreateDisabler(); builder.setProperty(IndexConstants.SUPERSEDED_INDEX_PATHS, asList("/oak:index/fooIndex", "/oak:index/barIndex"), Type.STRINGS); assertTrue(disabler.markDisableFlagIfRequired("/oak:index/foo", builder)); assertTrue(builder.getBoolean(DISABLE_INDEXES_ON_NEXT_CYCLE)); }
@Test public void disableIndexes() throws Exception{ rootBuilder.child("oak:index").child("fooIndex"); builder.setProperty(IndexConstants.DISABLE_INDEXES_ON_NEXT_CYCLE, true); builder.setProperty(IndexConstants.SUPERSEDED_INDEX_PATHS, asList("/oak:index/fooIndex", "/oak:index/barIndex"), Type.STRINGS); refreshBuilder(); List<String> disabledIndexes = disabler.disableOldIndexes("/oak:index/foo", builder); assertThat(disabledIndexes, containsInAnyOrder("/oak:index/fooIndex")); assertFalse(builder.getBoolean(IndexConstants.DISABLE_INDEXES_ON_NEXT_CYCLE)); assertEquals(TYPE_DISABLED, rootBuilder.getChildNode("oak:index").getChildNode("fooIndex").getString(TYPE_PROPERTY_NAME)); //Check no node created for non existing node assertFalse(rootBuilder.getChildNode("oak:index").getChildNode("barIndex").exists()); refreshBuilder(); List<String> disabledIndexes2 = disabler.disableOldIndexes("/oak:index/foo", builder); assertTrue(disabledIndexes2.isEmpty()); }
@Test public void nestedBuilderWithNewPropertyFromState() throws Exception { NodeState rootState = store.getRoot(); NodeBuilder rootBuilder = rootState.builder(); rootBuilder.setProperty("newProperty", true, Type.BOOLEAN); NodeState baseState = rootBuilder.getNodeState(); assertTrue(baseState.getBoolean("newProperty")); NodeBuilder builderFromState = baseState.builder(); assertTrue(builderFromState.getBoolean("newProperty")); assertTrue(builderFromState.getNodeState().getBoolean("newProperty")); //assertTrue(builderFromState.getBaseState().getBoolean("newProperty")); // FIXME }