[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