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);
          }
      }
  }
  

Reply via email to