knguyen 2005/02/23 18:16:24 CET
Added files:
core/src/java/org/jahia/services/content
ContentDefinitionTest.java
Log:
- partial adv search refactoring
Revision Changes Path
1.1 +300 -0
jahia/core/src/java/org/jahia/services/content/ContentDefinitionTest.java (new)
http://jahia.mine.nu:8080/cgi-bin/cvsweb.cgi/jahia/core/src/java/org/jahia/services/content/ContentDefinitionTest.java?rev=1.1&content-type=text/plain
Index: ContentDefinitionTest.java
====================================================================
/*
* Created on 12 janv. 2005
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
package org.jahia.services.content;
import java.util.ArrayList;
import javax.jcr.*;
import javax.jcr.query.Query;
import javax.jcr.query.QueryManager;
import javax.jcr.nodetype.NodeDef;
import javax.jcr.nodetype.NodeType;
import javax.jcr.nodetype.NodeTypeIterator;
import javax.jcr.nodetype.NodeTypeManager;
import javax.jcr.nodetype.PropertyDef;
import junit.framework.TestCase;
import org.apache.jackrabbit.core.RepositoryImpl;
import org.apache.jackrabbit.core.nodetype.ChildNodeDef;
import org.apache.jackrabbit.core.nodetype.NodeDefImpl;
import org.apache.jackrabbit.core.nodetype.NodeTypeDef;
import org.apache.jackrabbit.core.nodetype.NodeTypeImpl;
import org.apache.jackrabbit.core.nodetype.NodeTypeManagerImpl;
import org.apache.jackrabbit.core.nodetype.NodeTypeRegistry;
import org.apache.jackrabbit.core.nodetype.PropDef;
import org.jahia.registries.ServicesRegistry;
/**
* @author hollis
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class ContentDefinitionTest {
private static org.apache.log4j.Logger logger =
org.apache.log4j.Logger.getLogger(ContentDefinitionTest.class);
public ContentDefinitionTest(){
}
public void testNodeTypeIterator(Session session){
try {
NodeTypeManager nodeTypeManager =
session.getWorkspace().getNodeTypeManager();
NodeTypeIterator iterator = nodeTypeManager.getAllNodeTypes();
NodeType nodeType = null;
while (iterator.hasNext()){
nodeType = (NodeType)iterator.next();
logger.debug("Node Type : " + nodeType.getName());
}
} catch ( Throwable t) {
logger.debug("Exception testing NodeTypeManager",t);
}
}
public void testCustomNodeType(Session session){
try {
Node rn = session.getRootNode();
if (!rn.hasNode("testcustomnodetype")) {
System.out.println("creating testcustomnodetype");
Node n=rn.addNode("testcustomnodetype", "jahiant:content");
n.setProperty("testprop", new StringValue("Hello, World."));
session.save();
}
} catch ( Throwable t ){
logger.debug("Exception testing CustomNodeType",t);
}
}
public void testCoreMetadatas(Session session){
try {
NodeTypeManager nodeTypeManager =
session.getWorkspace().getNodeTypeManager();
NodeTypeRegistry nodeTypeRegistry =
((NodeTypeManagerImpl)nodeTypeManager).getNodeTypeRegistry();
NodeType nodeType =
nodeTypeManager.getNodeType("jahiamix:coremetadatas");
NodeDef[] nodeDefs = nodeType.getChildNodeDefs();
NodeDef nodeDef = null;
for ( int i=0; i<nodeDefs.length; i++ ){
nodeDef = (NodeDef)nodeDefs[i];
logger.debug("Declared child node def:" + nodeDef.getName() +
"\n");
if ( !"*".equalsIgnoreCase(nodeDef.getName()) ){
NodeType childNodeType = nodeDef.getDefaultPrimaryType();
PropertyDef[] propDefs = childNodeType.getPropertyDefs();
PropertyDef propDef = null;
for ( int j=0; j<propDefs.length ; j++ ){
propDef = (PropertyDef)propDefs[j];
Value[] values = propDef.getDefaultValues();
String value = "";
if (values.length>0){
value = values[0].getString();
}
logger.debug("prop " + propDef.getName() + ",
declaringNodeType:" + propDef.getDeclaringNodeType().getName() + ",
defaultValue:" + value);
}
}
}
} catch ( Throwable t){
logger.debug("Exception testing coremetadatas", t);
}
}
public void testUpdateNodeTypeDefinition(Session session){
try {
NodeTypeManager nodeTypeManager =
session.getWorkspace().getNodeTypeManager();
NodeTypeRegistry nodeTypeRegistry =
((NodeTypeManagerImpl)nodeTypeManager).getNodeTypeRegistry();
NodeTypeImpl nodeType =
(NodeTypeImpl)nodeTypeManager.getNodeType("jahiamix:coremetadatas");
logger.debug("Try to update NodeType: " + nodeType.getName() + "(
invert autocreate status of all it's child node def ) ");
// get a clone of the NodeTypeDef
// unfortunatly, clone is shallow ( childNodeDefs are not cloned!
NodeTypeDef nodeTypeDef = nodeType.getDefinition();
ChildNodeDef[] nodeDefs = nodeTypeDef.getChildNodeDefs();
ChildNodeDef childNodeDef = null;
ChildNodeDef[] newNodeDefs = new ChildNodeDef[nodeDefs.length];
for ( int i=0; i<nodeDefs.length; i++ ){
childNodeDef = (ChildNodeDef)nodeDefs[i];
ChildNodeDef newChildNodeDef = new ChildNodeDef();
newChildNodeDef.setAllowSameNameSibs(childNodeDef.allowSameNameSibs());
//newChildNodeDef.setAutoCreate(!childNodeDef.isAutoCreate());
newChildNodeDef.setDeclaringNodeType(childNodeDef.getDeclaringNodeType());
newChildNodeDef.setDefaultPrimaryType(childNodeDef.getDefaultPrimaryType());
newChildNodeDef.setMandatory(childNodeDef.isMandatory());
newChildNodeDef.setName(childNodeDef.getName());
newChildNodeDef.setOnParentVersion(childNodeDef.getOnParentVersion());
//newChildNodeDef.setPrimaryItem(childNodeDef.isPrimaryItem());
newChildNodeDef.setProtected(childNodeDef.isProtected());
newChildNodeDef.setRequiredPrimaryTypes(childNodeDef.getRequiredPrimaryTypes());
newNodeDefs[i] = newChildNodeDef;
}
nodeTypeDef.setChildNodeDefs(newNodeDefs);
nodeTypeRegistry.reregisterNodeType(nodeTypeDef);
} catch ( Throwable t){
logger.debug("Exception testing node type update", t);
}
}
public void testCreateNewsContainer(Session session){
try {
NodeTypeManager nodeTypeManager =
session.getWorkspace().getNodeTypeManager();
NodeTypeRegistry nodeTypeRegistry =
((NodeTypeManagerImpl)nodeTypeManager).getNodeTypeRegistry();
NodeType nodeType =
(NodeTypeImpl)nodeTypeManager.getNodeType("jahiajcr:newsContainer");
if ( nodeType != null ){
Node rn = session.getRootNode();
Node n = null;
if ( rn.hasNode(nodeType.getName() + "1") ){
n = rn.getNode(nodeType.getName() + "1");
n.remove();
rn.save();
}
logger.debug("Try to create a node of NodeType: " +
nodeType.getName() + " naming it " + nodeType.getName() + "1" ) ;
n=rn.addNode(nodeType.getName() + "1",
"jahiajcr:newsContainer");
NodeDef[] childNodeDefs = nodeType.getChildNodeDefs();
NodeDef childNodeDef = null;
NodeType childNodeType = null;
PropertyDef[] propDefs = null;
PropertyDef propDef = null;
Node childNode = null;
for ( int i=0; i<childNodeDefs.length; i++ ){
childNodeDef = (NodeDef)childNodeDefs[i];
childNodeType = childNodeDef.getDefaultPrimaryType();
logger.debug("Adding childNode with
childNodeDef.getName():" + childNodeDef.getName());
logger.debug(" and
childNodeType.getName():" + childNodeType.getName());
if ( childNodeDef.isMandatory() &&
!childNodeDef.isProtected() ){
childNode =
n.addNode(childNodeDef.getName(),childNodeType.getName());
propDefs = childNodeType.getPropertyDefs();
for ( int j=0; j<propDefs.length; j++ ){
propDef = (PropertyDef)propDefs[j];
logger.debug("PropertyDef :" + propDef.getName()
+ ", value = " + propDef.getDefaultValues());
if ( (propDef.isMandatory() ||
propDef.isAutoCreate()) && !propDef.isProtected() ){
try {
Value[] values =
propDef.getDefaultValues();
String defValue = "1";
if ( values.length>0 ){
defValue =
((Value)values[0]).getString();
}
childNode.setProperty(propDef.getName(),defValue);
} catch ( Throwable t ) {
logger.debug("Exception trying to set
property value to 1",t);
}
}
}
}
propDefs = nodeType.getPropertyDefs();
for ( int j=0; j<propDefs.length; j++ ){
propDef = (PropertyDef)propDefs[j];
logger.debug("PropertyDef :" + propDef.getName() + ",
value = " + propDef.getDefaultValues());
if ( (propDef.isMandatory() ||
propDef.isAutoCreate()) && !propDef.isProtected() ){
try {
Value[] values = propDef.getDefaultValues();
String defValue = "1";
if ( values.length>0 ){
defValue = ((Value)values[0]).getString();
}
n.setProperty(propDef.getName(),defValue);
} catch ( Throwable t ) {
logger.debug("Exception trying to set
property value to 1",t);
}
}
}
/*
childNodeType = childNodeDef.getDefaultPrimaryType();
logger.debug("Adding childNode :" +
childNodeDef.getName());
childNode =
n.addNode(childNodeDef.getName(),childNodeType.getName());
propDefs = childNodeType.getDeclaredPropertyDefs();
for ( int j=0; j<propDefs.length; j++ ){
propDef = (PropertyDef)propDefs[j];
logger.debug("PropertyDef :" + propDef.getName() + ",
value = " + propDef.getDefaultValues());
}*/
}
try {
session.save();
} catch ( Throwable t ) {
logger.debug("Exception saving session", t);
}
n = rn.getNode(nodeType.getName() + "1");
}
} catch ( Throwable t){
logger.debug("Exception testing node type update", t);
}
}
public void testSearch(Session session){
//String queryStr = "SELECT * FROM * WHERE value LIKE '*Jahia*' ";
//String queryStr = "SELECT * FROM jahiant:newsContentField WHERE
value='Jahia'";
String queryStr = "SELECT * FROM jahiajcr:newsContent WHERE
contains('Jahia')";
try {
// make sure root node is indexed
session.getRootNode().setProperty("dummy", new String[]{"dummy"});
session.getRootNode().save();
Node rn = session.getRootNode();
Node n = rn.getNode("jahiajcr:newsContainer" + 1);
if ( n == null ){
return;
}
Node newsContentNode = null;
if ( !n.hasNode("jahiajcr:newsContent") ){
newsContentNode =
n.addNode("jahiajcr:newsContent","jahiajcr:newsContent");
//newsContentNode.setProperty("value","Jahia");
//session.save();
} else {
newsContentNode = n.getNode("jahiajcr:newsContent");
}
newsContentNode.setProperty("value","Jahia");
n.setProperty("dummyDescr","This is a new Container");
//n.save();
//newsContentNode.save();
session.save();
try {
logger.debug("jahiajcr:newsContent name=" +
newsContentNode.getName());
logger.debug("jahiajcr:newsContent primaryTypeName=" +
newsContentNode.getPrimaryNodeType().getName());
logger.debug("jahiajcr:newsContent definitionName=" +
newsContentNode.getDefinition().getName());
logger.debug("jahiajcr:newsContent path=" +
newsContentNode.getPath());
logger.debug("jahiajcr:newsContent parent=" +
newsContentNode.getParent().getParent());
logger.debug("jahiajcr:newsContent value=" +
newsContentNode.getProperty("value").getValue().getString());
} catch ( Throwable t){
logger.debug(t);
}
QueryManager queryManager =
session.getWorkspace().getQueryManager();
String[] langs = queryManager.getSupportedQueryLanguages();
for ( int i=0; i<langs.length ; i++ ){
logger.debug("query supported language :" + langs[i]);
}
Query query = queryManager.createQuery(queryStr,Query.SQL);
javax.jcr.query.QueryResult result = query.execute();
logger.debug("Search queries : " + queryStr);
logger.debug("Query language : " + query.getLanguage());
logger.debug("Query statement : " + query.getStatement());
NodeIterator iterator = result.getNodes();
Node node = null;
while ( iterator.hasNext() ){
node = iterator.nextNode();
logger.debug("Search returned node : uuid=" + node.getUUID()
+ ", nodeDef.name=" + node.getDefinition().getName());
}
} catch ( Throwable t){
logger.debug("Exception testing node search " + queryStr, t);
}
}
}