blob: 0c8c8f273a7563e777652e957f3329831fe445c3 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.jackrabbit.core.query.lucene;
import java.io.IOException;
import java.io.InputStream;
import javax.jcr.Node;
import javax.jcr.nodetype.NodeTypeManager;
import javax.jcr.nodetype.NodeTypeTemplate;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.apache.jackrabbit.core.id.NodeId;
import org.apache.jackrabbit.core.query.AbstractIndexingTest;
import org.apache.jackrabbit.core.state.NodeState;
import org.apache.jackrabbit.spi.Name;
import org.apache.jackrabbit.spi.commons.name.NameConstants;
import org.apache.jackrabbit.spi.commons.name.NameFactoryImpl;
import org.w3c.dom.Element;
import org.xml.sax.SAXException;
/**
* <code>IndexingConfigurationImplTest</code>...
*/
public class IndexingConfigurationImplTest extends AbstractIndexingTest {
private static final Name FOO = NameFactoryImpl.getInstance().create("", "foo");
private static final Name OTHER = NameFactoryImpl.getInstance().create("", "other");
private NodeState nState;
private Node n;
@Override
protected void setUp() throws Exception {
super.setUp();
n = testRootNode.addNode(nodeName1, ntUnstructured);
n.addMixin(mixReferenceable);
n.addMixin(mixTitle);
session.save();
nState = (NodeState) getSearchIndex().getContext().getItemStateManager().getItemState(
new NodeId(n.getIdentifier()));
}
public void testMatchAllNoPrefix() throws Exception {
IndexingConfiguration config = createConfig("config1");
assertFalse(config.isIndexed(nState, NameConstants.JCR_DATA));
assertTrue(config.isIndexed(nState, FOO));
}
public void testRegexpInPrefix() throws Exception {
IndexingConfiguration config = createConfig("config2");
assertTrue(config.isIndexed(nState, NameConstants.JCR_DATA));
assertTrue(config.isIndexed(nState, FOO));
}
public void testMatchAllJCRPrefix() throws Exception {
IndexingConfiguration config = createConfig("config3");
assertTrue(config.isIndexed(nState, NameConstants.JCR_DATA));
assertFalse(config.isIndexed(nState, FOO));
}
public void testAddNodeTypeToRegistry() throws Exception {
IndexingConfiguration config = createConfig("config4");
// add node type
NodeTypeManager ntMgr = session.getWorkspace().getNodeTypeManager();
String baseName = "indexingTextNodeType";
int i = 0;
String nt;
do {
nt = baseName + "_" + i++;
} while (ntMgr.hasNodeType(nt));
// register node type
NodeTypeTemplate ntTemplate = ntMgr.createNodeTypeTemplate();
ntTemplate.setName(nt);
ntTemplate.setDeclaredSuperTypeNames(new String[]{ntUnstructured});
ntMgr.registerNodeType(ntTemplate, false);
// create node
Node n = testRootNode.addNode(nodeName2, nt);
session.save();
// get state
NodeState state = (NodeState) getSearchIndex().getContext().getItemStateManager().getItemState(
new NodeId(n.getIdentifier()));
assertTrue(config.isIndexed(state, FOO));
assertFalse(config.isIncludedInNodeScopeIndex(state, FOO));
}
public void testIndexRuleMixin() throws Exception{
IndexingConfiguration config = createConfig("config5");
assertTrue(config.isIndexed(nState, NameConstants.JCR_TITLE));
assertFalse(config.isIndexed(nState, NameConstants.JCR_DESCRIPTION));
assertTrue(config.isIndexed(nState, NameConstants.JCR_UUID)); // from mixReferenceable ... should be indexed
}
public void testMatchCondition() throws Exception{
IndexingConfiguration config = createConfig("config6");
Node n = testRootNode.addNode(nodeName1, ntUnstructured);
n.addMixin(mixReferenceable);
n.setProperty(FOO.getLocalName(), "high");
session.save();
nState = (NodeState) getSearchIndex().getContext().getItemStateManager().getItemState(
new NodeId(n.getIdentifier()));
assertTrue(config.isIndexed(nState, FOO));
assertFalse(config.isIndexed(nState, OTHER));
n = testRootNode.addNode(nodeName2, ntUnstructured);
n.addMixin(mixReferenceable);
session.save();
nState = (NodeState) getSearchIndex().getContext().getItemStateManager().getItemState(
new NodeId(n.getIdentifier()));
assertTrue(config.isIndexed(nState, OTHER));
assertFalse(config.isIndexed(nState, FOO));
}
//----------------------------< internal >----------------------------------
protected IndexingConfiguration createConfig(String name) throws Exception {
IndexingConfiguration config = new IndexingConfigurationImpl();
config.init(loadConfig(name), getSearchIndex().getContext(),
getSearchIndex().getNamespaceMappings());
return config;
}
protected Element loadConfig(String name)
throws ParserConfigurationException, IOException, SAXException {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
builder.setEntityResolver(new IndexingConfigurationEntityResolver());
InputStream in = getClass().getResourceAsStream("indexing_" + name + ".xml");
return builder.parse(in).getDocumentElement();
}
}