[jboss-svn-commits] JBL Code SVN: r20242 - in labs/jbossrules/trunk/drools-jbrms/src: test/java/org/drools/brms/server and 1 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Sat May 31 05:58:03 EDT 2008


Author: michael.neale at jboss.com
Date: 2008-05-31 05:58:03 -0400 (Sat, 31 May 2008)
New Revision: 20242

Modified:
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/files/WebDAVImpl.java
   labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/PopulateDataTest.java
   labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/files/WebDAVImplTest.java
Log:
JBRULES-1612 WebDAV - adding snapshots

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/files/WebDAVImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/files/WebDAVImpl.java	2008-05-31 09:46:52 UTC (rev 20241)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/files/WebDAVImpl.java	2008-05-31 09:58:03 UTC (rev 20242)
@@ -122,20 +122,14 @@
         String[] path = getPath(uri);
         List<String> result = new ArrayList<String>();
         if (path.length == 0) {
-            return new String[] {"packages"};
+            return new String[] {"packages", "snapshots"};
         }
         if (path[0].equals("packages")) {
             if (path.length > 2) {
                 return null;
             }
             if (path.length == 1) {
-                Iterator<PackageItem> it = repository.listPackages();
-                while(it.hasNext()) {
-                    PackageItem pkg = it.next();
-                    if (!pkg.isArchived()) {
-                        result.add(pkg.getName());
-                    }
-                }
+                listPackages(repository, result);
             } else {
                 PackageItem pkg = repository.loadPackage(path[1]);
                 Iterator<AssetItem> it = pkg.getAssets();
@@ -146,12 +140,44 @@
                     }
                 }
             }
-            return result.toArray(new String[result.size()]);
+
+        } else if (path[0].equals("snapshots")) {
+        	if (path.length > 3) {
+        		return null;
+        	}
+        	if (path.length == 1) {
+        		listPackages(repository, result);
+        	} else if (path.length == 2){
+        		String[] snaps = repository.listPackageSnapshots(path[1]);
+        		return snaps;
+        	} else if (path.length == 3){
+        		Iterator<AssetItem> it  = repository.loadPackageSnapshot(path[1], path[2]).getAssets();
+        		while(it.hasNext()) {
+        		    AssetItem asset = it.next();
+        		    if (!asset.isArchived()) {
+        		    	result.add(asset.getName() + "." + asset.getFormat());
+        		    }
+        		}
+        	} else {
+        		throw new IllegalArgumentException();
+        	}
+
         } else {
-            throw new UnsupportedOperationException("Not implemented yet");
+        	throw new UnsupportedOperationException("Not a valid path : " + path[0]);
         }
+        return result.toArray(new String[result.size()]);
     }
 
+	private void listPackages(RulesRepository repository, List<String> result) {
+		Iterator<PackageItem> it = repository.listPackages();
+		while(it.hasNext()) {
+		    PackageItem pkg = it.next();
+		    if (!pkg.isArchived()) {
+		        result.add(pkg.getName());
+		    }
+		}
+	}
+
     public Date getCreationDate(String uri) {
     	System.out.println("getCreationDate :" + uri);
 
@@ -165,12 +191,24 @@
                 return pkg.getCreatedDate().getTime();
             } else {
                 String fileName = path[2];
-                String assetName = fileName.split("\\.")[0];
+                String assetName = AssetItem.getAssetNameFromFileName(fileName)[0];
                 AssetItem asset = pkg.loadAsset(assetName);
                 return asset.getCreatedDate().getTime();
             }
+        } else if (path[0].equals("snapshots")){
+            if (path.length == 2) {
+            	return new Date();
+            } else if (path.length == 3) {
+            	return repository.loadPackageSnapshot(path[1], path[2]).getCreatedDate().getTime();
+            } else if (path.length == 4) {
+            	PackageItem pkg = repository.loadPackageSnapshot(path[1], path[2]);
+            	AssetItem asset = pkg.loadAsset(AssetItem.getAssetNameFromFileName(path[3])[0]);
+            	return asset.getCreatedDate().getTime();
+            } else {
+            	throw new UnsupportedOperationException();
+            }
         } else {
-            throw new UnsupportedOperationException();
+        	throw new UnsupportedOperationException();
         }
     }
 
@@ -191,6 +229,18 @@
                 AssetItem asset = pkg.loadAsset(assetName);
                 return asset.getLastModified().getTime();
             }
+        } else if (path[0].equals("snapshots")){
+            if (path.length == 2) {
+            	return new Date();
+            } else if (path.length == 3) {
+            	return repository.loadPackageSnapshot(path[1], path[2]).getLastModified().getTime();
+            } else if (path.length == 4) {
+            	PackageItem pkg = repository.loadPackageSnapshot(path[1], path[2]);
+            	AssetItem asset = pkg.loadAsset(AssetItem.getAssetNameFromFileName(path[3])[0]);
+            	return asset.getLastModified().getTime();
+            } else {
+            	throw new UnsupportedOperationException();
+            }
         } else {
             throw new UnsupportedOperationException();
         }
@@ -210,25 +260,40 @@
             String pkg = path[1];
             String asset = AssetItem.getAssetNameFromFileName(path[2])[0];
             AssetItem assetItem  = repository.loadPackage(pkg).loadAsset(asset);
-            if (assetItem.isBinary()) {
-                return assetItem.getBinaryContentAttachment();
-            } else {
-                return new ByteArrayInputStream(assetItem.getContent().getBytes());
-            }
-        } else {
+            return getAssetData(assetItem);
+        } else if (path[0].equals("snapshots")) {
+        	String pkg = path[1];
+        	String snap = path[2];
+        	String asset = AssetItem.getAssetNameFromFileName(path[3])[0];
+        	AssetItem assetItem = repository.loadPackageSnapshot(pkg, snap).loadAsset(asset);
+        	return getAssetData(assetItem);
+
+        }else {
             throw new UnsupportedOperationException();
         }
 	}
 
+	private InputStream getAssetData(AssetItem assetItem) {
+		if (assetItem.isBinary()) {
+		    return assetItem.getBinaryContentAttachment();
+		} else {
+		    return new ByteArrayInputStream(assetItem.getContent().getBytes());
+		}
+	}
+
     public long getResourceLength(String uri) {
     	System.out.println("get resource length :" + uri);
     	String[] path = getPath(uri);
     	try {
+    		RulesRepository repo = getRepo();
     		if (path.length == 3 && path[0].equals("packages")) {
-    			RulesRepository repo = getRepo();
     			PackageItem pkg = repo.loadPackage(path[1]);
     			AssetItem asset = pkg.loadAsset(AssetItem.getAssetNameFromFileName(path[2])[0]);
     			return asset.getContentLength();
+    		} else if (path.length == 4 && path[0].equals("snapshots")) {
+    			PackageItem pkg = repo.loadPackageSnapshot(path[1], path[2]);
+    			AssetItem asset = pkg.loadAsset(AssetItem.getAssetNameFromFileName(path[3])[0]);
+    			return asset.getContentLength();
     		} else {
     			return 0;
     		}
@@ -244,11 +309,14 @@
     	RulesRepository repository = getRepo();
         String[] path = getPath(uri);
         if (path.length == 0) return true;
-        if (path.length == 1 && path[0].equals("packages")) {
+        if (path.length == 1 && (path[0].equals("packages") || path[0].equals("snapshots"))) {
             return true;
         } else if (path.length == 2) {
         	return repository.containsPackage(path[1]);
+        } else if (path.length == 3 && path[0].equals("snapshots")) {
+        	return repository.containsPackage(path[1]);
         } else {
+
             return false;
         }
     }
@@ -258,17 +326,25 @@
     	System.out.println("is resource :" + uri);
     	String[] path = getPath(uri);
     	if (path.length < 3) return false;
-    	if (!path[0].equals("packages")) return false;
+    	if (!(path[0].equals("packages") || path[0].equals("snapshots"))) return false;
         if (repository.containsPackage(path[1])) {
-        	PackageItem pkg = repository.loadPackage(path[1]);
-        	if (path[2].startsWith("._")) {
-        		return osxDoubleData.containsKey(uri);
+        	if (path[0].equals("packages")) {
+	        	PackageItem pkg = repository.loadPackage(path[1]);
+	        	if (path[2].startsWith("._")) {
+	        		return osxDoubleData.containsKey(uri);
+	        	}
+	        	return pkg.containsAsset(AssetItem.getAssetNameFromFileName(path[2])[0]);
+        	} else {
+        		if (path.length == 4) {
+	        		PackageItem pkg = repository.loadPackageSnapshot(path[1], path[2]);
+	        		return pkg.containsAsset(AssetItem.getAssetNameFromFileName(path[3])[0]);
+        		} else {
+        			return false;
+        		}
         	}
-        	return pkg.containsAsset(AssetItem.getAssetNameFromFileName(path[2])[0]);
         } else {
         	return false;
         }
-
     }
 
     public boolean objectExists(String uri) {
@@ -278,17 +354,14 @@
     	return internalObjectExists(uri);
     }
 
-    public boolean internalObjectExists(String uri) {
-    	if (uri.contains("Premium_Colour_Combinations.brl copy")) {
-    		System.out.println("");
+    private boolean internalObjectExists(String uri) {
 
-    	}
     	RulesRepository repository = getRepo();
         System.out.println("object exist check :" + uri);
         if (uri.endsWith(".DS_Store")) return false;
         String[] path = getPath(uri);
         if (path.length == 0) return true;
-        if (path.length == 1 && path[0].equals("packages")) {
+        if (path.length == 1 && (path[0].equals("packages") || path[0].equals("snapshots"))) {
             return true;
         } else {
             if (path.length == 1) return false;
@@ -296,17 +369,32 @@
                 return false;
             }
 
-            if (path.length == 2) {
-                PackageItem pkg = repository.loadPackage(path[1]);
-                return !pkg.isArchived();
+            if (path[0].equals("packages")) {
+	            if (path.length == 2) {
+	                PackageItem pkg = repository.loadPackage(path[1]);
+	                return !pkg.isArchived();
+	            } else {
+	                PackageItem pkg = repository.loadPackage(path[1]);
+	                if (path[2].startsWith("._")){
+	                	return this.osxDoubleData.containsKey(uri);
+	                }
+	                String assetName = AssetItem.getAssetNameFromFileName(path[2])[0];
+
+	                return pkg.containsAsset(assetName) && !pkg.loadAsset(assetName).isArchived();
+	            }
+            } else if (path[0].equals("snapshots")) {
+            	if (path.length == 2) {
+            		return repository.containsPackage(path[1]);
+            	} else if (path.length == 3) {
+            		return repository.containsSnapshot(path[1], path[2]);
+            	} else if (path.length == 4) {
+            		PackageItem pkg = repository.loadPackageSnapshot(path[1], path[2]);
+            		return pkg.containsAsset(AssetItem.getAssetNameFromFileName(path[3])[0]);
+            	} else {
+            		return false;
+            	}
             } else {
-                PackageItem pkg = repository.loadPackage(path[1]);
-                if (path[2].startsWith("._")){
-                	return this.osxDoubleData.containsKey(uri);
-                }
-                String assetName = AssetItem.getAssetNameFromFileName(path[2])[0];
-
-                return pkg.containsAsset(assetName) && !pkg.loadAsset(assetName).isArchived();
+            	throw new IllegalStateException();
             }
         }
     }
@@ -337,7 +425,7 @@
                 pkg.checkin("");
             }
         } else {
-            throw new IllegalArgumentException();
+            throw new IllegalArgumentException("Not allowed to remove this file.");
         }
 
     }

Modified: labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/PopulateDataTest.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/PopulateDataTest.java	2008-05-31 09:46:52 UTC (rev 20241)
+++ labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/PopulateDataTest.java	2008-05-31 09:58:03 UTC (rev 20242)
@@ -103,9 +103,10 @@
     }
 
     private void createPackageSnapshots(ServiceImplementation serv) {
-        serv.createPackageSnapshot( "com.billasurf.finance", "TEST", false, "The testing region." );
-        serv.createPackageSnapshot( "com.billasurf.finance", "PRODUCTION", false, "The testing region." );
-        serv.createPackageSnapshot( "com.billasurf.finance", "PRODUCTION ROLLBACK", false, "The testing region." );
+        serv.createPackageSnapshot( "com.billasurf.manufacturing", "TEST", false, "The testing region." );
+        serv.createPackageSnapshot( "com.billasurf.manufacturing", "PRODUCTION", false, "The testing region." );
+        serv.createPackageSnapshot( "com.billasurf.manufacturing", "PRODUCTION ROLLBACK", false, "The testing region." );
+
     }
 
     private void createSomeRules(ServiceImplementation serv) throws SerializableException {
@@ -115,9 +116,11 @@
         serv.changeState( uuid, "Approved", false );
         uuid = serv.createNewRule( "Fibreglass supplier selection", "This defines XXX.", "Manufacturing/Boards", "com.billasurf.manufacturing", AssetFormats.BUSINESS_RULE );
         uuid = serv.createNewRule( "Recommended wax", "This defines XXX.", "Manufacturing/Boards", "com.billasurf.manufacturing", AssetFormats.BUSINESS_RULE );
+        uuid = serv.createNewRule( "SomeDSL", "Ignore me.", "Manufacturing/Boards", "com.billasurf.manufacturing", AssetFormats.DSL );
 
 
 
+
     }
 
     private void createPackages(ServiceImplementation serv) throws SerializableException {

Modified: labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/files/WebDAVImplTest.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/files/WebDAVImplTest.java	2008-05-31 09:46:52 UTC (rev 20241)
+++ labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/files/WebDAVImplTest.java	2008-05-31 09:58:03 UTC (rev 20242)
@@ -47,8 +47,9 @@
 	public void testListRoot() throws Exception {
 		WebDAVImpl imp = new WebDAVImpl(new File(""));
 		String[] children = imp.getChildrenNames("foobar/webdav");
-		assertEquals(1, children.length);
+		assertEquals(2, children.length);
 		assertEquals("packages", children[0]);
+		assertEquals("snapshots", children[1]);
 	}
 
 	public void testChildrenNames() throws Exception {
@@ -335,6 +336,122 @@
 
 	}
 
+	public void testSnapshot() throws Exception {
+		WebDAVImpl imp  = getImpl();
+		imp.createFolder("/foo/webdav/packages/testDavSnapshot");
+		imp.createResource("/foo/webdav/packages/testDavSnapshot/Something.drl");
+		imp.setResourceContent("/foo/webdav/packages/testDavSnapshot/Something.drl", IOUtils.toInputStream("some input"), null, null);
+
+		RulesRepository repo = imp.getRepo();
+
+		repo.createPackageSnapshot("testDavSnapshot", "SNAP1");
+		repo.createPackageSnapshot("testDavSnapshot", "SNAP2");
+
+		String[] packages = imp.getChildrenNames("/foo/webdav/snapshots");
+		assertTrue(packages.length > 0);
+		assertContains("testDavSnapshot", packages);
+
+		String[] snaps = imp.getChildrenNames("/foo/webdav/snapshots/testDavSnapshot");
+		assertEquals(2, snaps.length);
+
+		assertEquals("SNAP1", snaps[0]);
+		assertEquals("SNAP2", snaps[1]);
+
+
+		String[] list = imp.getChildrenNames("/foo/webdav/snapshots/testDavSnapshot/SNAP1");
+		assertEquals(1, list.length);
+		assertEquals("Something.drl", list[0]);
+
+		list = imp.getChildrenNames("/foo/webdav/snapshots/testDavSnapshot/SNAP2");
+		assertEquals(1, list.length);
+		assertEquals("Something.drl", list[0]);
+
+		assertNotNull(imp.getCreationDate("/foo/webdav/snapshots"));
+		assertNotNull(imp.getCreationDate("/foo/webdav/snapshots/testDavSnapshot"));
+		assertNotNull(imp.getCreationDate("/foo/webdav/snapshots/testDavSnapshot/SNAP1"));
+		assertNotNull(imp.getCreationDate("/foo/webdav/snapshots/testDavSnapshot/SNAP1/Something.drl"));
+
+		assertNotNull(imp.getLastModified("/foo/webdav/snapshots"));
+		assertNotNull(imp.getLastModified("/foo/webdav/snapshots/testDavSnapshot"));
+		assertNotNull(imp.getLastModified("/foo/webdav/snapshots/testDavSnapshot/SNAP1"));
+		assertNotNull(imp.getLastModified("/foo/webdav/snapshots/testDavSnapshot/SNAP1/Something.drl"));
+
+		createFolderTry(imp, "/foo/webdav/snapshots/randomAss");
+		createFolderTry(imp, "/foo/webdav/snapshots/testDavSnapshot/SNAPX");
+		createFolderTry(imp, "/foo/webdav/snapshots/testDavSnapshot/SNAP1/Something.drl");
+		createFolderTry(imp, "/foo/webdav/snapshots/testDavSnapshot/SNAP1/Another.drl");
+
+		createResourceTry(imp, "/foo/webdav/snapshots/randomAss");
+		createResourceTry(imp, "/foo/webdav/snapshots/testDavSnapshot/SNAPX");
+		createResourceTry(imp, "/foo/webdav/snapshots/testDavSnapshot/SNAP1/Something.drl");
+		createResourceTry(imp, "/foo/webdav/snapshots/testDavSnapshot/SNAP1/Another.drl");
+
+
+		InputStream in = imp.getResourceContent("/foo/webdav/snapshots/testDavSnapshot/SNAP1/Something.drl");
+		assertEquals("some input", IOUtils.toString(in));
+
+
+		assertEquals(0, imp.getResourceLength("/foo/webdav/snapshots/testDavSnapshot/SNAP1"));
+		assertEquals("some input".getBytes().length, imp.getResourceLength("/foo/webdav/snapshots/testDavSnapshot/SNAP1/Something.drl"));
+
+
+		assertTrue(imp.isFolder("/foo/webdav/snapshots"));
+		assertTrue(imp.isFolder("/foo/webdav/snapshots/testDavSnapshot"));
+		assertTrue(imp.isFolder("/foo/webdav/snapshots/testDavSnapshot/SNAP2"));
+		assertFalse(imp.isFolder("/foo/webdav/snapshots/testDavSnapshot/SNAP2/Something.drl"));
+
+		assertFalse(imp.isResource("/foo/webdav/snapshots"));
+		assertFalse(imp.isResource("/foo/webdav/snapshots/testDavSnapshot"));
+		assertFalse(imp.isResource("/foo/webdav/snapshots/testDavSnapshot/SNAP2"));
+		assertTrue(imp.isResource("/foo/webdav/snapshots/testDavSnapshot/SNAP2/Something.drl"));
+
+		assertFalse(imp.isResource("/foo/webdav/snapshots/testDavSnapshot/SNAP2/DoesNotExist.drl"));
+
+		assertTrue(imp.objectExists("/foo/webdav/snapshots"));
+		assertFalse(imp.objectExists("/foo/webdav/snapshots/testDavSnapshotXX"));
+		assertTrue(imp.objectExists("/foo/webdav/snapshots/testDavSnapshot"));
+		assertTrue(imp.objectExists("/foo/webdav/snapshots/testDavSnapshot/SNAP1"));
+		assertFalse(imp.objectExists("/foo/webdav/snapshots/testDavSnapshot/SNAPX"));
+
+		assertFalse(imp.objectExists("/foo/webdav/snapshots/testDavSnapshot/SNAP1/Foo.drl"));
+		assertTrue(imp.objectExists("/foo/webdav/snapshots/testDavSnapshot/SNAP1/Something.drl"));
+
+		assertNull(imp.getChildrenNames("/foo/webdav/snapshots/testDavSnapshot/SNAP1/Something.drl"));
+
+		try {
+			imp.removeObject("/foo/webdav/snapshots/testDavSnapshot/SNAP1/Something.drl");
+			fail("Should not delete files from snapshots");
+		} catch (Exception e) {
+			assertNotNull(e.getMessage());
+		}
+
+		try {
+			imp.setResourceContent("/foo/webdav/snapshots/testDavSnapshot/SNAP1/Something.drl", null, null, null);
+			fail("should not be allowed to update content in snapshots.");
+		} catch (Exception e) {
+			assertNotNull(e.getMessage());
+		}
+
+	}
+
+	private void createResourceTry(WebDAVImpl imp, String path) {
+		try {
+			imp.createResource(path);
+			fail("Should not be allowed");
+		} catch (UnsupportedOperationException e) {
+			assertNotNull(e.getMessage());
+		}
+	}
+
+	private void createFolderTry(WebDAVImpl imp, String path) {
+		try {
+			imp.createFolder(path);
+			fail("should not be allowed");
+		} catch (UnsupportedOperationException e) {
+			assertNotNull(e.getMessage());
+		}
+	}
+
 	public void testThreadLocal() throws Exception {
 		Thread t = new Thread(new Runnable() {
 			public void run()  {




More information about the jboss-svn-commits mailing list