[exo-jcr-commits] exo-jcr SVN: r804 - in jcr/branches/1.12.0-JBC/component/core/src: main/java/org/exoplatform/services/jcr/impl/storage/jdbc and 3 other directories.

do-not-reply at jboss.org do-not-reply at jboss.org
Mon Nov 23 06:22:30 EST 2009


Author: sergiykarpenko
Date: 2009-11-23 06:22:30 -0500 (Mon, 23 Nov 2009)
New Revision: 804

Modified:
   jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JDBCCacheLoader.java
   jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/DBConstants.java
   jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCStorageConnection.java
   jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/MultiDbJDBCConnection.java
   jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/SingleDbJDBCConnection.java
   jcr/branches/1.12.0-JBC/component/core/src/test/java/org/exoplatform/services/jcr/impl/storage/JDBCWorkspaceDataContainerTestBase.java
   jcr/branches/1.12.0-JBC/component/core/src/test/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JDBCCacheLoaderTest.java
Log:
EXOJCR-246: JDBCCahceLoader getChildNames implemented for /$REFS

Modified: jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JDBCCacheLoader.java
===================================================================
--- jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JDBCCacheLoader.java	2009-11-23 11:10:55 UTC (rev 803)
+++ jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JDBCCacheLoader.java	2009-11-23 11:22:30 UTC (rev 804)
@@ -412,6 +412,7 @@
                else
                {
                   attrs = null;
+                  LOG.warn("Unexpected Fqn asked " + name);
                }
 
             }
@@ -618,8 +619,7 @@
          }
          else if (name.get(0).equals(JBossCacheStorage.REFS))
          {
-            // TODO return all referenced nodes in workspace
-            return new LinkedHashSet<String>();
+            return conn.getAllRefencedNodeIdentifiers();
          }
          else if (name.get(0).equals(Fqn.ROOT))
          {

Modified: jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/DBConstants.java
===================================================================
--- jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/DBConstants.java	2009-11-23 11:10:55 UTC (rev 803)
+++ jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/DBConstants.java	2009-11-23 11:22:30 UTC (rev 804)
@@ -222,6 +222,11 @@
     */
    protected String FIND_REFERENCE;
 
+   /**
+    * FIND_REFERENCED_NODES
+    */
+   protected String FIND_REFERENCED_NODES;
+
    // ======================== ITEMS table ======================== 
    /**
     * COLUMN_ID.

Modified: jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCStorageConnection.java
===================================================================
--- jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCStorageConnection.java	2009-11-23 11:10:55 UTC (rev 803)
+++ jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCStorageConnection.java	2009-11-23 11:22:30 UTC (rev 804)
@@ -2293,6 +2293,28 @@
       }
    }
 
+   public Set<String> getAllRefencedNodeIdentifiers() throws RepositoryException, IllegalStateException
+   {
+      checkIfOpened();
+
+      try
+      {
+         ResultSet node = findAllReferencedNodeIdentifiers();
+         Set<String> childrens = new LinkedHashSet<String>();
+         while (node.next())
+         {
+            String nodeId = node.getString(COLUMN_ID); //"NODE_ID");//
+            childrens.add(nodeId);
+         }
+
+         return childrens;
+      }
+      catch (SQLException e)
+      {
+         throw new RepositoryException(e);
+      }
+   }
+
    /**
     * Return all Nodes in workspace.
     * TODO check if it used, should not!
@@ -2390,4 +2412,6 @@
 
    protected abstract ResultSet findAllNodeIdentifiers() throws SQLException;
 
+   protected abstract ResultSet findAllReferencedNodeIdentifiers() throws SQLException;
+
 }

Modified: jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/MultiDbJDBCConnection.java
===================================================================
--- jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/MultiDbJDBCConnection.java	2009-11-23 11:10:55 UTC (rev 803)
+++ jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/MultiDbJDBCConnection.java	2009-11-23 11:22:30 UTC (rev 804)
@@ -126,6 +126,8 @@
 
    protected PreparedStatement findReference;
 
+   protected PreparedStatement findAllReferencedNodes;
+
    /**
     * Multidatabase JDBC Connection constructor.
     * 
@@ -195,6 +197,8 @@
 
       FIND_REFERENCE = "select P.ID from JCR_MREF R, JCR_MITEM P where R.NODE_ID=? and R.PROPERTY_ID=?";
 
+      FIND_REFERENCED_NODES = "select N.ID  from JCR_MREF R, JCR_MITEM N where N.ID=R.NODE_ID";
+
       FIND_VALUES_BY_PROPERTYID =
          "select PROPERTY_ID, ORDER_NUM, DATA, STORAGE_DESC from JCR_MVALUE where PROPERTY_ID=? order by ORDER_NUM";
 
@@ -241,6 +245,7 @@
       DELETE_ITEM = "delete from JCR_MITEM where ID=?";
       DELETE_VALUE = "delete from JCR_MVALUE where PROPERTY_ID=?";
       DELETE_REF = "delete from JCR_MREF where PROPERTY_ID=?";
+
    }
 
    /**
@@ -726,4 +731,18 @@
 
       return result.next();
    }
+
+   @Override
+   protected ResultSet findAllReferencedNodeIdentifiers() throws SQLException
+   {
+      // TODO make query
+      if (findAllReferencedNodes == null)
+         findAllReferencedNodes = dbConnection.prepareStatement(this.FIND_REFERENCED_NODES);
+      else
+         findAllReferencedNodes.clearParameters();
+
+      ResultSet result = findAllReferencedNodes.executeQuery();
+
+      return result;
+   }
 }

Modified: jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/SingleDbJDBCConnection.java
===================================================================
--- jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/SingleDbJDBCConnection.java	2009-11-23 11:10:55 UTC (rev 803)
+++ jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/SingleDbJDBCConnection.java	2009-11-23 11:22:30 UTC (rev 804)
@@ -729,4 +729,11 @@
       // TODO Auto-generated method stub
       return false;
    }
+
+   @Override
+   protected ResultSet findAllReferencedNodeIdentifiers() throws SQLException
+   {
+      // TODO Auto-generated method stub
+      return null;
+   }
 }

Modified: jcr/branches/1.12.0-JBC/component/core/src/test/java/org/exoplatform/services/jcr/impl/storage/JDBCWorkspaceDataContainerTestBase.java
===================================================================
--- jcr/branches/1.12.0-JBC/component/core/src/test/java/org/exoplatform/services/jcr/impl/storage/JDBCWorkspaceDataContainerTestBase.java	2009-11-23 11:10:55 UTC (rev 803)
+++ jcr/branches/1.12.0-JBC/component/core/src/test/java/org/exoplatform/services/jcr/impl/storage/JDBCWorkspaceDataContainerTestBase.java	2009-11-23 11:22:30 UTC (rev 804)
@@ -1,5 +1,7 @@
 package org.exoplatform.services.jcr.impl.storage;
 
+import junit.framework.TestCase;
+
 import org.apache.commons.dbcp.BasicDataSourceFactory;
 import org.exoplatform.services.idgenerator.impl.IDGeneratorServiceImpl;
 import org.exoplatform.services.jcr.access.AccessControlList;
@@ -33,8 +35,6 @@
 import javax.naming.InitialContext;
 import javax.sql.DataSource;
 
-import junit.framework.TestCase;
-
 /**
  * Created by The eXo Platform SAS.
  * 
@@ -52,7 +52,7 @@
    protected void setUp() throws Exception
    {
       super.setUp();
-      
+
       initPersistence();
    }
 
@@ -91,8 +91,8 @@
       return "jdbcjcr_" + IdGenerator.generate();
    } 
 
-   protected WorkspaceEntry getNewWs(String wsName, boolean isMultiDb, String dsName, String vsPath, ContainerEntry entry)
-      throws Exception
+   protected WorkspaceEntry getNewWs(String wsName, boolean isMultiDb, String dsName, String vsPath,
+      ContainerEntry entry) throws Exception
    {
       List params = new ArrayList();
 
@@ -225,7 +225,7 @@
    protected void deleteJCRRoot() throws Exception
    {
       // prepare     
-      
+
       // delete root (/) etc
    }
 
@@ -238,8 +238,8 @@
     * @param primaryType InternalQName
     * @throws Exception
     */
-   protected void addDbNode(WorkspaceStorageConnection conn, QPath root, String nodeId, InternalQName primaryType, String parentNodeId)
-      throws Exception
+   protected void addDbNode(WorkspaceStorageConnection conn, QPath root, String nodeId, InternalQName primaryType,
+      String parentNodeId) throws Exception
    {
       // add root (/)
       conn.add(new TransientNodeData(root, nodeId, 1, primaryType, new InternalQName[0], 0, parentNodeId,
@@ -250,6 +250,25 @@
    }
 
    /**
+    * Add Node to the connection but doesn't save it.
+    *
+    * @param conn WorkspaceStorageConnection
+    * @param root QPath
+    * @param nodeId String
+    * @param primaryType InternalQName
+    * @throws Exception
+    */
+   protected void addDbNodeWithMixin(WorkspaceStorageConnection conn, QPath root, String nodeId,
+      InternalQName primaryType, InternalQName[] mixins, String parentNodeId) throws Exception
+   {
+      // add root (/)
+      conn.add(new TransientNodeData(root, nodeId, 1, primaryType, mixins, 0, parentNodeId, new AccessControlList()));
+
+      // add property (/jcr:primaryType)
+      conn.add(createProperty(root, nodeId, Constants.JCR_PRIMARYTYPE, primaryType, false));
+   }
+
+   /**
     * Add Property to the connection but doesn't save it.
     *
     * @param conn WorkspaceStorageConnection
@@ -343,5 +362,4 @@
       //   new AccessControlList()));
    }
 
-   
 }

Modified: jcr/branches/1.12.0-JBC/component/core/src/test/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JDBCCacheLoaderTest.java
===================================================================
--- jcr/branches/1.12.0-JBC/component/core/src/test/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JDBCCacheLoaderTest.java	2009-11-23 11:10:55 UTC (rev 803)
+++ jcr/branches/1.12.0-JBC/component/core/src/test/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JDBCCacheLoaderTest.java	2009-11-23 11:22:30 UTC (rev 804)
@@ -42,10 +42,12 @@
 import org.jboss.cache.Modification;
 
 import java.util.ArrayList;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
+import javax.jcr.PropertyType;
 import javax.naming.Context;
 
 /**
@@ -186,11 +188,12 @@
       WorkspaceStorageConnection conn = persistentContainer.openConnection();
       QPath baseNodePath = QPath.makeChildPath(Constants.ROOT_PATH, InternalQName.parse("[]baseNode"));
       String baseNodeId = IdGenerator.generate();
-      addDbNode(conn, baseNodePath, baseNodeId,Constants.NT_UNSTRUCTURED, Constants.ROOT_UUID);
-      
+      addDbNode(conn, baseNodePath, baseNodeId, Constants.NT_UNSTRUCTURED, Constants.ROOT_UUID);
+
       // add child nodes [node1] 
       String nodeId = IdGenerator.generate();
-      addDbNode(conn, QPath.makeChildPath(baseNodePath, InternalQName.parse("[]node1")), nodeId, Constants.NT_UNSTRUCTURED, baseNodeId);
+      addDbNode(conn, QPath.makeChildPath(baseNodePath, InternalQName.parse("[]node1")), nodeId,
+         Constants.NT_UNSTRUCTURED, baseNodeId);
       conn.commit();
 
       List<Modification> modifications = new ArrayList<Modification>();
@@ -261,24 +264,24 @@
       QPath nodePath = QPath.parse("[]:1[]node:1");
       addDbNode(conn, nodePath, nodeId, Constants.NT_UNSTRUCTURED, Constants.ROOT_UUID);
       conn.commit();
-      
+
       conn = persistentContainer.openConnection();
-      
+
       NodeData nodeData =
          new TransientNodeData(nodePath, nodeId, 1, Constants.NT_UNSTRUCTURED, new InternalQName[0], 2,
             Constants.ROOT_UUID, new AccessControlList());
-      
+
       List<Modification> modifications = new ArrayList<Modification>();
 
       modifications.addAll(updateNode(nodeData));
-      
+
       loader.put(modifications);
 
       // tests it
       conn = persistentContainer.openConnection();
-      
-      NodeData destNodeData = (NodeData) conn.getItemData(nodeId);
-      
+
+      NodeData destNodeData = (NodeData)conn.getItemData(nodeId);
+
       assertNotNull(destNodeData);
       assertEquals(2, destNodeData.getOrderNumber());
    }
@@ -292,26 +295,29 @@
       String nodeId = IdGenerator.generate();
       QPath nodePath = QPath.parse("[]:1[]node:1");
       addDbNode(conn, nodePath, nodeId, Constants.NT_UNSTRUCTURED, Constants.ROOT_UUID);
-      
-      TransientPropertyData propData = addDbProperty(conn, nodePath, nodeId, InternalQName.parse("[]prop"), "JCR DATA VALUE [base]", false);
-      
+
+      TransientPropertyData propData =
+         addDbProperty(conn, nodePath, nodeId, InternalQName.parse("[]prop"), "JCR DATA VALUE [base]", false);
+
       conn.commit();
 
       // create update property
-      TransientPropertyData updatePropData = new TransientPropertyData(QPath.makeChildPath(nodePath, InternalQName.parse("[]prop")), propData.getIdentifier(), 1, 1, nodeId, false);
+      TransientPropertyData updatePropData =
+         new TransientPropertyData(QPath.makeChildPath(nodePath, InternalQName.parse("[]prop")), propData
+            .getIdentifier(), 1, 1, nodeId, false);
       updatePropData.setValue(new TransientValueData("JCR DATA VALUE [updated]"));
-      
+
       List<Modification> modifications = new ArrayList<Modification>();
-      
+
       modifications.addAll(updateProperty(updatePropData));
-      
+
       loader.put(modifications);
 
       // tests it
       conn = persistentContainer.openConnection();
-      
-      PropertyData destPropData = (PropertyData) conn.getItemData(propData.getIdentifier());
-      
+
+      PropertyData destPropData = (PropertyData)conn.getItemData(propData.getIdentifier());
+
       assertNotNull(destPropData);
       ValueData valueData = destPropData.getValues().get(0);
       assertEquals("JCR DATA VALUE [updated]", new String(valueData.getAsByteArray(), "UTF-8"));
@@ -362,25 +368,26 @@
 
       // prepare
       WorkspaceStorageConnection conn = persistentContainer.openConnection();
-      
+
       QPath baseNodePath = QPath.makeChildPath(Constants.ROOT_PATH, InternalQName.parse("[]baseNode"));
       String baseNodeId = IdGenerator.generate();
-      addDbNode(conn, baseNodePath, baseNodeId,Constants.NT_UNSTRUCTURED, Constants.ROOT_UUID);
-      
+      addDbNode(conn, baseNodePath, baseNodeId, Constants.NT_UNSTRUCTURED, Constants.ROOT_UUID);
+
       // add child nodes [node1] 
       String nodeId = IdGenerator.generate();
-      addDbNode(conn, QPath.makeChildPath(baseNodePath, InternalQName.parse("[]node1")), nodeId, Constants.NT_UNSTRUCTURED, baseNodeId);
+      addDbNode(conn, QPath.makeChildPath(baseNodePath, InternalQName.parse("[]node1")), nodeId,
+         Constants.NT_UNSTRUCTURED, baseNodeId);
       conn.commit();
-      
+
       // tests it
       Map<Object, Object> attrebutes = loader.get(Fqn.fromElements(JBossCacheStorage.NODES, baseNodeId, "[]node1:1"));
-      
+
       assertNotNull(attrebutes);
-      
-      String destNodeId = (String) attrebutes.get(JBossCacheStorage.ITEM_ID);
-      
+
+      String destNodeId = (String)attrebutes.get(JBossCacheStorage.ITEM_ID);
+
       assertNotNull(destNodeId);
-      assertEquals(nodeId, destNodeId);  
+      assertEquals(nodeId, destNodeId);
    }
 
    public void testGetPropertyByIdentifier() throws Exception
@@ -395,8 +402,7 @@
       connection.commit();
 
       // tests it
-      Map<Object, Object> attrebutes =
-         loader.get(Fqn.fromElements(JBossCacheStorage.PROPS, propData.getIdentifier()));
+      Map<Object, Object> attrebutes = loader.get(Fqn.fromElements(JBossCacheStorage.PROPS, propData.getIdentifier()));
 
       assertNotNull(attrebutes);
 
@@ -433,19 +439,22 @@
 
       QPath baseNodePath = QPath.makeChildPath(Constants.ROOT_PATH, InternalQName.parse("[]baseNode"));
       String baseNodeId = IdGenerator.generate();
-      addDbNode(conn, baseNodePath, baseNodeId,Constants.NT_UNSTRUCTURED, Constants.ROOT_UUID);
-      
+      addDbNode(conn, baseNodePath, baseNodeId, Constants.NT_UNSTRUCTURED, Constants.ROOT_UUID);
+
       // add child nodes [node1, node2, node3] 
-      addDbNode(conn, QPath.makeChildPath(baseNodePath, InternalQName.parse("[]node1")), IdGenerator.generate(), Constants.NT_UNSTRUCTURED, baseNodeId);
-      addDbNode(conn, QPath.makeChildPath(baseNodePath, InternalQName.parse("[]node2")), IdGenerator.generate(), Constants.NT_UNSTRUCTURED, baseNodeId);
-      addDbNode(conn, QPath.makeChildPath(baseNodePath, InternalQName.parse("[]node3")), IdGenerator.generate(), Constants.NT_UNSTRUCTURED, baseNodeId);
+      addDbNode(conn, QPath.makeChildPath(baseNodePath, InternalQName.parse("[]node1")), IdGenerator.generate(),
+         Constants.NT_UNSTRUCTURED, baseNodeId);
+      addDbNode(conn, QPath.makeChildPath(baseNodePath, InternalQName.parse("[]node2")), IdGenerator.generate(),
+         Constants.NT_UNSTRUCTURED, baseNodeId);
+      addDbNode(conn, QPath.makeChildPath(baseNodePath, InternalQName.parse("[]node3")), IdGenerator.generate(),
+         Constants.NT_UNSTRUCTURED, baseNodeId);
       conn.commit();
 
       // tests it
-      Set<String> childs = (Set<String>) loader.getChildrenNames(Fqn.fromElements(JBossCacheStorage.NODES, baseNodeId));
-      
+      Set<String> childs = (Set<String>)loader.getChildrenNames(Fqn.fromElements(JBossCacheStorage.NODES, baseNodeId));
+
       assertNotNull(childs);
-      
+
       assertEquals(3, childs.size());
       assertTrue(childs.contains("[]node1:1"));
       assertTrue(childs.contains("[]node2:1"));
@@ -460,24 +469,27 @@
 
       QPath baseNodePath = QPath.makeChildPath(Constants.ROOT_PATH, InternalQName.parse("[]baseNode"));
       String baseNodeId = IdGenerator.generate();
-      addDbNode(conn, baseNodePath, baseNodeId,Constants.NT_UNSTRUCTURED, Constants.ROOT_UUID);
+      addDbNode(conn, baseNodePath, baseNodeId, Constants.NT_UNSTRUCTURED, Constants.ROOT_UUID);
 
-      TransientPropertyData propData1 = addDbProperty(conn, baseNodePath, baseNodeId, InternalQName.parse("[]prop1"), "JCR DATA VALUE 1", false);
-      TransientPropertyData propData2 = addDbProperty(conn, baseNodePath, baseNodeId, InternalQName.parse("[]prop2"), "JCR DATA VALUE 2", false);
-      TransientPropertyData propData3 = addDbProperty(conn, baseNodePath, baseNodeId, InternalQName.parse("[]prop3"), "JCR DATA VALUE 3", false);
+      TransientPropertyData propData1 =
+         addDbProperty(conn, baseNodePath, baseNodeId, InternalQName.parse("[]prop1"), "JCR DATA VALUE 1", false);
+      TransientPropertyData propData2 =
+         addDbProperty(conn, baseNodePath, baseNodeId, InternalQName.parse("[]prop2"), "JCR DATA VALUE 2", false);
+      TransientPropertyData propData3 =
+         addDbProperty(conn, baseNodePath, baseNodeId, InternalQName.parse("[]prop3"), "JCR DATA VALUE 3", false);
 
       conn.commit();
-      
+
       // tests it
       Map<Object, Object> attrebutes = loader.get(Fqn.fromElements(JBossCacheStorage.NODES, baseNodeId));
-      
+
       assertNotNull(attrebutes);
-      
+
       assertTrue(attrebutes.containsKey(Constants.JCR_PRIMARYTYPE.getAsString()));
       assertTrue(attrebutes.containsKey("[]prop1"));
       assertTrue(attrebutes.containsKey("[]prop2"));
       assertTrue(attrebutes.containsKey("[]prop3"));
-      
+
       assertEquals(propData1.getIdentifier(), attrebutes.get("[]prop1"));
       assertEquals(propData2.getIdentifier(), attrebutes.get("[]prop2"));
       assertEquals(propData3.getIdentifier(), attrebutes.get("[]prop3"));
@@ -487,54 +499,142 @@
    {
 
       // prepare
+      String nodeId = IdGenerator.generate();
 
+      QPath nodePath = QPath.parse("[]:1[]node:1");
+      NodeData node =
+         new TransientNodeData(nodePath, nodeId, 1, Constants.NT_UNSTRUCTURED,
+            new InternalQName[]{Constants.MIX_REFERENCEABLE}, 0, Constants.ROOT_UUID, new AccessControlList());
+
+      PropertyData primaryType =
+         createProperty(nodePath, nodeId, Constants.JCR_PRIMARYTYPE, Constants.NT_UNSTRUCTURED, false);
+
+      List<Modification> modifications = new ArrayList<Modification>();
+      modifications.addAll(addNode(node));
+      modifications.addAll(addProperty(primaryType));
+
+      loader.put(modifications);
+
+      // make node with refernce
+      String refnodeId = IdGenerator.generate();
+
+      QPath refnodePath = QPath.parse("[]:1[]node2:1");
+      NodeData refnode =
+         new TransientNodeData(refnodePath, refnodeId, 1, Constants.NT_UNSTRUCTURED, new InternalQName[0], 0,
+            Constants.ROOT_UUID, new AccessControlList());
+
+      PropertyData refprimaryType =
+         createProperty(refnodePath, refnodeId, Constants.JCR_PRIMARYTYPE, Constants.NT_UNSTRUCTURED, false);
+
+      String refPropId1 = IdGenerator.generate();
+      TransientPropertyData propData =
+         new TransientPropertyData(QPath.makeChildPath(refnodePath, "[]refprop1"), refPropId1, 1,
+            PropertyType.REFERENCE, refnodeId, false);
+      propData.setValue(new TransientValueData(nodeId));
+
+      modifications.clear();
+      modifications.addAll(addNode(refnode));
+      modifications.addAll(addProperty(refprimaryType));
+      loader.put(modifications);
+
+      WorkspaceStorageConnection conn = persistentContainer.openConnection();
+
+      //      NodeData destNodeData = (NodeData)conn.getItemData(nodeId);
+      //
+      //      assertNotNull(destNodeData);
+      //      assertEquals(node.getIdentifier(), destNodeData.getIdentifier());
+      //      assertEquals(node.getOrderNumber(), destNodeData.getOrderNumber());
+      //      assertEquals(node.getParentIdentifier(), destNodeData.getParentIdentifier());
+      //      assertEquals(node.getPersistedVersion(), destNodeData.getPersistedVersion());
+      //      assertEquals(node.getQPath().getAsString(), destNodeData.getQPath().getAsString());
+      //      assertEquals(node.getPrimaryTypeName().getAsString(), destNodeData.getPrimaryTypeName().getAsString());
+
+      modifications.clear();
+      modifications.addAll(addProperty(propData));
+      loader.put(modifications);
+
+      String refPropId2 = IdGenerator.generate();
+      TransientPropertyData propData2 =
+         new TransientPropertyData(QPath.makeChildPath(refnodePath, "[]refprop2"), refPropId2, 1,
+            PropertyType.REFERENCE, refnodeId, false);
+      propData2.setValue(new TransientValueData(nodeId));
+
+      modifications.clear();
+      modifications.addAll(addProperty(propData2));
+      loader.put(modifications);
+
       // tests it
 
+      Set names = loader.getChildrenNames(Fqn.fromString("/$REFS/" + nodeId));
+
+      assertTrue(names.size() == 2);
+
+      Iterator it = names.iterator();
+
+      assertEquals(refPropId1, (String)it.next());
+      assertEquals(refPropId2, (String)it.next());
+
+      Set referncedNodes = loader.getChildrenNames(Fqn.fromString("/$REFS"));
+
+      assertTrue(referncedNodes.size() == 1);
+
+      it = referncedNodes.iterator();
+
+      assertEquals(nodeId, (String)it.next());
+
+      conn = persistentContainer.openConnection();
+
+      // tests it
+      List<PropertyData> refs = conn.getReferencesData(nodeId);
+
+      assertEquals(2, refs.size());
+      assertEquals(refPropId1, refs.get(0).getIdentifier());
+      assertEquals(refPropId2, refs.get(1).getIdentifier());
    }
-   
+
    public void testExistNode() throws Exception
    {
 
       // prepare
       WorkspaceStorageConnection conn = persistentContainer.openConnection();
-      
+
       QPath baseNodePath = QPath.makeChildPath(Constants.ROOT_PATH, InternalQName.parse("[]baseNode"));
       String baseNodeId = IdGenerator.generate();
-      addDbNode(conn, baseNodePath, baseNodeId,Constants.NT_UNSTRUCTURED, Constants.ROOT_UUID);
+      addDbNode(conn, baseNodePath, baseNodeId, Constants.NT_UNSTRUCTURED, Constants.ROOT_UUID);
       conn.commit();
-      
+
       // tests it
       String nodeId = IdGenerator.generate();
-      
+
       assertFalse(loader.exists(Fqn.fromElements(JBossCacheStorage.NODES, nodeId)));
       assertFalse(loader.exists(Fqn.fromElements(JBossCacheStorage.NODES, baseNodeId, "[]node1:1")));
-      
+
       conn = persistentContainer.openConnection();
-      
-      addDbNode(conn, QPath.makeChildPath(baseNodePath, InternalQName.parse("[]node1")), nodeId, Constants.NT_UNSTRUCTURED, baseNodeId);
+
+      addDbNode(conn, QPath.makeChildPath(baseNodePath, InternalQName.parse("[]node1")), nodeId,
+         Constants.NT_UNSTRUCTURED, baseNodeId);
       conn.commit();
-      
+
       assertTrue(loader.exists(Fqn.fromElements(JBossCacheStorage.NODES, nodeId)));
       assertTrue(loader.exists(Fqn.fromElements(JBossCacheStorage.NODES, baseNodeId, "[]node1:1")));
    }
-   
+
    public void testExistProperty() throws Exception
    {
 
       // prepare
       WorkspaceStorageConnection conn = persistentContainer.openConnection();
-      
+
       TransientPropertyData propData =
-         createProperty(Constants.ROOT_PATH, Constants.ROOT_UUID, Constants.JCR_DATA, "JCR DATA VALUE",
-            false);
-      
+         createProperty(Constants.ROOT_PATH, Constants.ROOT_UUID, Constants.JCR_DATA, "JCR DATA VALUE", false);
+
       // tests it
       assertFalse(loader.exists(Fqn.fromElements(JBossCacheStorage.PROPS, propData.getIdentifier())));
-      
+
       // commit in DB
       conn.add(propData);
       conn.commit();
-      
+
       assertTrue(loader.exists(Fqn.fromElements(JBossCacheStorage.PROPS, propData.getIdentifier())));
    }
 



More information about the exo-jcr-commits mailing list