[jboss-svn-commits] JBL Code SVN: r20095 - in labs/jbossrules/trunk/drools-jbrms/src: main/webapp/WEB-INF and 1 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed May 21 04:53:01 EDT 2008


Author: michael.neale at jboss.com
Date: 2008-05-21 04:53:01 -0400 (Wed, 21 May 2008)
New Revision: 20095

Modified:
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/files/WebDAVImpl.java
   labs/jbossrules/trunk/drools-jbrms/src/main/webapp/WEB-INF/web.xml
   labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/files/WebDAVImplTest.java
Log:
JBRULES-1612 WebDAV

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-21 06:10:52 UTC (rev 20094)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/files/WebDAVImpl.java	2008-05-21 08:53:01 UTC (rev 20095)
@@ -7,12 +7,15 @@
 import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.Date;
+import java.util.HashMap;
 import java.util.Hashtable;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 
 import net.sf.webdav.IWebdavStorage;
 
+import org.apache.commons.io.IOUtils;
 import org.drools.repository.AssetItem;
 import org.drools.repository.PackageItem;
 import org.drools.repository.RulesRepository;
@@ -20,6 +23,9 @@
 public class WebDAVImpl implements IWebdavStorage {
 
 
+	static Map<String, byte[]> osxDoubleData = new HashMap<String, byte[]>();
+
+
     final ThreadLocal<RulesRepository> tlRepo = new ThreadLocal<RulesRepository>();;
 
 
@@ -85,6 +91,7 @@
 
             //for mac OSX, ignore these resource fork files
             if (path[2].startsWith("._")) {
+                this.osxDoubleData.put(uri, null);
                 return;
             }
             if (pkg.containsAsset(resource[0])) {
@@ -237,6 +244,9 @@
     	if (!path[0].equals("packages")) return false;
         if (repository.containsPackage(path[1])) {
         	PackageItem pkg = repository.loadPackage(path[1]);
+        	if (path[2].startsWith("._")) {
+        		return osxDoubleData.containsKey(uri);
+        	}
         	return pkg.containsAsset(AssetItem.getAssetNameFromFileName(path[2])[0]);
         } else {
         	return false;
@@ -245,13 +255,10 @@
     }
 
     public boolean objectExists(String uri) throws IOException {
-    	boolean result = internalObjectExists(uri);
-    	if (uri.contains("Premium_Colour_Combinations.brl copy")) {
-    		System.out.println("Object exists:" + result);
-    		throw new IllegalStateException("URI : " + uri);
+    	if (uri.endsWith(" copy")) {
+    		throw new IllegalArgumentException("OSX is not capable of copy and pasting without breaking the file extension.");
     	}
-    	return result;
-
+    	return internalObjectExists(uri);
     }
 
     public boolean internalObjectExists(String uri) throws IOException {
@@ -277,6 +284,9 @@
                 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();
@@ -296,7 +306,11 @@
             PackageItem pkg = repository.loadPackage(packName);
             if (path.length == 3) {
                 //delete asset
-                String asset = path[2].split("\\.")[0];
+            	if (path[2].startsWith("._")) {
+            		osxDoubleData.remove(uri);
+            		return;
+            	}
+                String asset = AssetItem.getAssetNameFromFileName(path[2])[0];
                 AssetItem item = pkg.loadAsset(asset);
                 item.archiveItem(true);
                 item.checkin("");
@@ -329,6 +343,10 @@
             }
 
              String packageName = path[1];
+             if (path[2].startsWith("._")) {
+            	 this.osxDoubleData.put(uri, IOUtils.toByteArray(content));
+            	 return;
+             }
              String[] assetName = AssetItem.getAssetNameFromFileName(path[2]);
              PackageItem pkg = repository.loadPackage(packageName);
              AssetItem asset = pkg.loadAsset(assetName[0]);

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/webapp/WEB-INF/web.xml
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/webapp/WEB-INF/web.xml	2008-05-21 06:10:52 UTC (rev 20094)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/webapp/WEB-INF/web.xml	2008-05-21 08:53:01 UTC (rev 20095)
@@ -38,7 +38,12 @@
 		<servlet-name>WebdavServlet</servlet-name>
 		<servlet-class>net.sf.webdav.WebdavServlet</servlet-class>
 	</servlet>
+	<servlet>
+		<servlet-name>RestAPIServlet</servlet-name>
+		<servlet-class>	org.drools.brms.server.files.RestAPIServlet</servlet-class>
+	</servlet>
 
+
 	<servlet-mapping>
 		<servlet-name>GWTRemotingServlet</servlet-name>
 		<url-pattern>/org.drools.brms.JBRMS/jbrmsService</url-pattern>
@@ -59,6 +64,10 @@
 		<servlet-name>WebdavServlet</servlet-name>
 		<url-pattern>/org.drools.brms.JBRMS/webdav</url-pattern>
 	</servlet-mapping>
+	<servlet-mapping>
+		<servlet-name>RestAPIServlet</servlet-name>
+		<url-pattern>/org.drools.brms.JBRMS/api</url-pattern>
+	</servlet-mapping>
 
     <session-config>
         <session-timeout>180</session-timeout>

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-21 06:10:52 UTC (rev 20094)
+++ labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/files/WebDAVImplTest.java	2008-05-21 08:53:01 UTC (rev 20095)
@@ -29,6 +29,20 @@
 
 	}
 
+	public void testBadCopy() throws Exception {
+		//OSX does stupid shit when copying in the same directory
+		//for instance, it creates the copy as foobar.x copy - totally hosing
+		//the file extension.
+		WebDAVImpl imp = new WebDAVImpl(null);
+		try {
+			imp.objectExists("/foo/webdav/packages/foobar/Something.drl copy");
+			fail("should not be allowed");
+		} catch (IllegalArgumentException e) {
+			assertNotNull(e.getMessage());
+		}
+
+	}
+
 	public void testListRoot() throws Exception {
 		WebDAVImpl imp = new WebDAVImpl(null);
 		String[] children = imp.getChildrenNames("foobar/webdav");




More information about the jboss-svn-commits mailing list