Author: chathura
Date: Tue Feb 26 00:54:39 2008
New Revision: 14207

Log:


Implementing dependency management.
Added support for dependent browsing and analysing chained dependencies.



Modified:
   trunk/registry/modules/core/src/main/java/org/wso2/registry/Resource.java
   
trunk/registry/modules/core/src/main/java/org/wso2/registry/jdbc/JDBCRegistry.java
   
trunk/registry/modules/core/src/main/java/org/wso2/registry/jdbc/dao/VersionedResourceDAO.java
   
trunk/registry/modules/core/src/main/java/org/wso2/registry/jdbc/hsql/DBUtils.java
   
trunk/registry/modules/core/src/test/java/org/wso2/registry/jdbc/DependencyTest.java

Modified: 
trunk/registry/modules/core/src/main/java/org/wso2/registry/Resource.java
==============================================================================
--- trunk/registry/modules/core/src/main/java/org/wso2/registry/Resource.java   
(original)
+++ trunk/registry/modules/core/src/main/java/org/wso2/registry/Resource.java   
Tue Feb 26 00:54:39 2008
@@ -275,6 +275,14 @@
         return dependents.toArray(new String[dependents.size()]);
     }
 
+    public void setDependents(String[] dependents) {
+        this.dependents = new ArrayList();
+
+        for (String dependent : dependents) {
+            this.dependents.add(dependent);
+        }
+    }
+
     public void addDependent(String dependentPath) {
         dependents.add(dependentPath);
     }

Modified: 
trunk/registry/modules/core/src/main/java/org/wso2/registry/jdbc/JDBCRegistry.java
==============================================================================
--- 
trunk/registry/modules/core/src/main/java/org/wso2/registry/jdbc/JDBCRegistry.java
  (original)
+++ 
trunk/registry/modules/core/src/main/java/org/wso2/registry/jdbc/JDBCRegistry.java
  Tue Feb 26 00:54:39 2008
@@ -551,6 +551,11 @@
             conn = getConnection();
             long dependentID = 
resourceDAO.getResourceID(versionedPath.getPath(), conn);
 
+            if (versionedPath.getVersion() == -1) {
+                versionedPath.setVersion(
+                        
resourceDAO.getCurrentVersionNumber(versionedPath.getPath(), conn));
+            }
+
             resourceDAO.addDependencies(
                     dependentID, versionedPath.getVersion(), dependencyPaths, 
conn);
 

Modified: 
trunk/registry/modules/core/src/main/java/org/wso2/registry/jdbc/dao/VersionedResourceDAO.java
==============================================================================
--- 
trunk/registry/modules/core/src/main/java/org/wso2/registry/jdbc/dao/VersionedResourceDAO.java
      (original)
+++ 
trunk/registry/modules/core/src/main/java/org/wso2/registry/jdbc/dao/VersionedResourceDAO.java
      Tue Feb 26 00:54:39 2008
@@ -99,12 +99,12 @@
         // get resource children
 
         if (resource.isDirectory()) {
-
             String[] children = getChildPaths(resource.getId(), versionNumber, 
conn);
             resource.setContent(children);
         }
 
         resource.setDependencies(getDependencies(resource.getId(), 
versionNumber, conn));
+        resource.setDependents(getDependents(resource.getId(), versionNumber, 
conn));
 
         // get resource properties
         return getResourceWithProperties(conn, resource);
@@ -171,8 +171,8 @@
         }
 
         // get resource properties
-        resource.setDependencies(
-                getDependencies(resource.getId(), 
latestVerions?-1:versionNumber, conn));
+        resource.setDependencies(getDependencies(resource.getId(), 
versionNumber, conn));
+        resource.setDependents(getDependents(resource.getId(), versionNumber, 
conn));
         return getResourceWithProperties(conn, resource);
     }
 
@@ -197,8 +197,8 @@
     private String[] getDependencies(long resourceID, long version, Connection 
conn)
             throws SQLException {
 
-        String depSQL = "SELECT A.PATH, D.DAID, D.DVN FROM ARTIFACTS A, 
DEPENDENCY D WHERE " +
-                "D.AID=? AND D.VN=? AND D.DTYPE=? AND A.AID=D.DAID";
+        String depSQL = "SELECT A.PATH, D.DAID, D.DVN FROM ARTIFACTS A, 
DEPENDENCY_MANAGEMENT D " +
+                "WHERE D.AID=? AND D.VN=? AND D.DTYPE=? AND A.AID=D.DAID";
 
         PreparedStatement depSt = conn.prepareStatement(depSQL);
         depSt.setLong(1, resourceID);
@@ -220,11 +220,37 @@
         return depList.toArray(new String[depList.size()]);
     }
 
+    private String[] getDependents(long resourceID, long version, Connection 
conn)
+            throws SQLException {
+
+        String depSQL = "SELECT A.PATH, D.AID, D.VN FROM ARTIFACTS A, 
DEPENDENCY_MANAGEMENT D " +
+                "WHERE D.DAID=? AND D.DVN=? AND D.DTYPE=? AND A.AID=D.AID";
+
+        PreparedStatement depSt = conn.prepareStatement(depSQL);
+        depSt.setLong(1, resourceID);
+        depSt.setLong(2, version);
+        depSt.setString(3, RegistryConstants.DEFAULT_DEPENDENCY);
+
+        List<String> depList = new ArrayList();
+        ResultSet depResults = depSt.executeQuery();
+        while (depResults.next()) {
+            String dependentPath = 
depResults.getString(DatabaseConstants.PATH_FIELD);
+            long dependentVersion = depResults.getLong("VN");
+            String fullDependentPath = dependentPath + "?v=" + 
dependentVersion;
+
+            depList.add(fullDependentPath);
+        }
+
+        depResults.close();
+
+        return depList.toArray(new String[depList.size()]);
+    }
+
     private Dependency[] getOneLevelDependencies(long resourceID, long 
version, Connection conn)
             throws SQLException {
 
-        String depSQL = "SELECT A.PATH, D.DAID, D.DVN FROM ARTIFACTS A, 
DEPENDENCY D WHERE " +
-                "D.AID=? AND D.VN=? AND D.DTYPE=? AND A.AID=D.DAID";
+        String depSQL = "SELECT A.PATH, D.DAID, D.DVN FROM ARTIFACTS A, 
DEPENDENCY_MANAGEMENT D " +
+                "WHERE D.AID=? AND D.VN=? AND D.DTYPE=? AND A.AID=D.DAID";
 
         PreparedStatement depSt = conn.prepareStatement(depSQL);
         depSt.setLong(1, resourceID);
@@ -248,9 +274,14 @@
         return depList.toArray(new Dependency[depList.size()]);
     }
 
-    public Dependency[] getDependencies(String resourcePath, Connection conn) 
throws SQLException {
+    public Dependency[] getDependencies(String resourcePath, Connection conn)
+            throws SQLException, RegistryException {
 
         VersionedPath versionedPath = 
RegistryUtils.getVersionedPath(resourcePath);
+
+        if (versionedPath.getVersion() == -1) {
+            
versionedPath.setVersion(getCurrentVersionNumber(versionedPath.getPath(), 
conn));
+        }
         long resourceID = getResourceID(versionedPath.getPath(), conn);
 
         Dependency[] dependencies =
@@ -338,6 +369,7 @@
         }
 
         resource.setDependencies(getDependencies(resource.getId(), 
latestVersionNumber, conn));
+        resource.setDependents(getDependents(resource.getId(), 
latestVersionNumber, conn));
 
         // get resource properties
         return getResourceWithProperties(conn, resource);
@@ -663,11 +695,11 @@
             long resourceID, long version, String[] dependencyPaths, 
Connection conn)
             throws SQLException, RegistryException {
 
-        String depAddSQL = "INSERT INTO DEPENDENCY (AID, VN, DAID, DVN, DTYPE) 
" +
+        String depAddSQL = "INSERT INTO DEPENDENCY_MANAGEMENT (AID, VN, DAID, 
DVN, DTYPE) " +
                 "VALUES (?,?,?,?,?)";
         PreparedStatement addSt = conn.prepareStatement(depAddSQL);
 
-        String checkSQL = "SELECT AID FROM DEPENDENCY " +
+        String checkSQL = "SELECT AID FROM DEPENDENCY_MANAGEMENT " +
                 "WHERE AID=? AND VN=? AND DAID=? AND DVN=? AND DTYPE=?";
         PreparedStatement checkSt = conn.prepareStatement(checkSQL);
 
@@ -710,10 +742,10 @@
     public void addDependencies(long resourceID, long version, Dependency[] 
dependencies, Connection conn)
             throws SQLException, RegistryException {
 
-        String depAddSQL = "INSERT INTO DEPENDENCY (AID, VN, DAID, DVN, DTYPE) 
VALUES (?,?,?,?,?)";
+        String depAddSQL = "INSERT INTO DEPENDENCY_MANAGEMENT (AID, VN, DAID, 
DVN, DTYPE) VALUES (?,?,?,?,?)";
         PreparedStatement addSt = conn.prepareStatement(depAddSQL);
 
-        String checkSQL = "SELECT AID FROM DEPENDENCY WHERE AID=? AND VN=? AND 
DAID=? AND DVN=? AND DTYPE=?";
+        String checkSQL = "SELECT AID FROM DEPENDENCY_MANAGEMENT WHERE AID=? 
AND VN=? AND DAID=? AND DVN=? AND DTYPE=?";
         PreparedStatement checkSt = conn.prepareStatement(checkSQL);
 
         for (Dependency dependency : dependencies) {

Modified: 
trunk/registry/modules/core/src/main/java/org/wso2/registry/jdbc/hsql/DBUtils.java
==============================================================================
--- 
trunk/registry/modules/core/src/main/java/org/wso2/registry/jdbc/hsql/DBUtils.java
  (original)
+++ 
trunk/registry/modules/core/src/main/java/org/wso2/registry/jdbc/hsql/DBUtils.java
  Tue Feb 26 00:54:39 2008
@@ -109,6 +109,16 @@
                                                   "FOREIGN KEY (DAID) 
REFERENCES ARTIFACTS (AID)," +
                                                   "FOREIGN KEY (AID) 
REFERENCES ARTIFACTS (AID));";
 
+    private static final String dependencyManagementTable = "CREATE TABLE 
DEPENDENCY_MANAGEMENT (" +
+                                                  "AID INTEGER NOT NULL," +
+                                                  "VN INTEGER NOT NULL," +
+                                                  "DAID INTEGER NOT NULL," +
+                                                  "DVN INTEGER NOT NULL," +
+                                                  "DTYPE VARCHAR (20)," +
+                                                  "UNIQUE (AID,VN,DAID,DVN)," +
+                                                  "FOREIGN KEY (DAID) 
REFERENCES ARTIFACTS (AID)," +
+                                                  "FOREIGN KEY (AID) 
REFERENCES ARTIFACTS (AID));";
+
     public void initializeDatabase(Connection conn) throws SQLException {
 
         DatabaseMetaData metaData = conn.getMetaData();
@@ -134,5 +144,6 @@
         // creating version related tables
         s.executeUpdate(versionTable);
         s.executeUpdate(dependencyTable);
+        s.executeUpdate(dependencyManagementTable);
     }
 }

Modified: 
trunk/registry/modules/core/src/test/java/org/wso2/registry/jdbc/DependencyTest.java
==============================================================================
--- 
trunk/registry/modules/core/src/test/java/org/wso2/registry/jdbc/DependencyTest.java
        (original)
+++ 
trunk/registry/modules/core/src/test/java/org/wso2/registry/jdbc/DependencyTest.java
        Tue Feb 26 00:54:39 2008
@@ -20,6 +20,7 @@
 import org.wso2.registry.Registry;
 import org.wso2.registry.RegistryException;
 import org.wso2.registry.Resource;
+import org.wso2.registry.Dependency;
 import org.wso2.registry.jdbc.realm.RegistryRealm;
 import org.wso2.registry.jdbc.realm.InMemoryRegistryRealm;
 
@@ -50,11 +51,79 @@
         r2.addDependency("/depTest/test1/r1");
         registry.put("/depTest/test1/r2", r2);
 
+        Resource r21 = registry.get("/depTest/test1/r1");
         Resource r22 = registry.get("/depTest/test1/r2");
 
+        assertTrue(containsString(r21.getDependents(), "/depTest/test1/r2"));
         assertTrue(containsString(r22.getDependencies(), "/depTest/test1/r1"));
     }
 
+    public void testSettingDependenciesFromAPI() throws RegistryException {
+
+        Resource r1 = new Resource();
+        r1.setContent("some content for second r1".getBytes());
+        registry.put("/depTest/test2/r1", r1);
+
+        Resource r2 = new Resource();
+        r2.setContent("this is dependent on r2".getBytes());
+        registry.put("/depTest/test2/r2", r2);
+
+        registry.addDependencies("/depTest/test2/r2", new String[] 
{"/depTest/test2/r1"});
+
+        Resource r21 = registry.get("/depTest/test2/r1");
+        Resource r22 = registry.get("/depTest/test2/r2");
+
+        assertTrue(containsString(r21.getDependents(), "/depTest/test2/r2"));
+        assertTrue(containsString(r22.getDependencies(), "/depTest/test2/r1"));
+    }
+
+    public void testDependencyChainAnalysis() throws RegistryException {
+
+        Resource r1 = new Resource();
+        r1.setContent("some content for second r1".getBytes());
+        registry.put("/depTest/test3/r1", r1);
+
+        Resource r2 = new Resource();
+        r2.setContent("this is dependent on r2".getBytes());
+        registry.put("/depTest/test3/r2", r2);
+
+        Resource r3 = new Resource();
+        r3.setContent("some content for second r3".getBytes());
+        registry.put("/depTest/test3/r3", r3);
+
+        Resource r4 = new Resource();
+        r4.setContent("this is dependent on r4".getBytes());
+        registry.put("/depTest/test3/r4", r4);
+
+        registry.addDependencies("/depTest/test3/r1", new String[] 
{"/depTest/test3/r2"});
+        registry.addDependencies("/depTest/test3/r2", new String[] 
{"/depTest/test3/r3"});
+        registry.addDependencies("/depTest/test3/r3", new String[] 
{"/depTest/test3/r4"});
+
+        Dependency[] dependencies1 = 
registry.getAllDependencies("/depTest/test3/r1");
+        
+        assertEquals("There should be one dependency for the resource: 
/depTest/test3/r1",
+                1, dependencies1.length);
+
+        assertTrue("/depTest/test3/r2 should be a dependency of 
/depTest/test3/r1",
+                
dependencies1[0].getDependencyPath().startsWith("/depTest/test3/r2"));
+
+        Dependency[] dependencies2 = dependencies1[0].getDependencies();
+
+        assertEquals("There should be one dependency for the resource: 
/depTest/test3/r2",
+                1, dependencies2.length);
+
+        assertTrue("/depTest/test3/r3 should be a dependency of 
/depTest/test3/r2",
+                
dependencies2[0].getDependencyPath().startsWith("/depTest/test3/r3"));
+
+        Dependency[] dependencies3 = dependencies2[0].getDependencies();
+
+        assertEquals("There should be one dependency for the resource: 
/depTest/test3/r3",
+                1, dependencies3.length);
+
+        assertTrue("/depTest/test3/r4 should be a dependency of 
/depTest/test3/r3",
+                
dependencies3[0].getDependencyPath().startsWith("/depTest/test3/r4"));
+    }
+
     private boolean containsString(String[] array, String value) {
 
         boolean found = false;

_______________________________________________
Registry-dev mailing list
[email protected]
http://wso2.org/cgi-bin/mailman/listinfo/registry-dev

Reply via email to