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

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Apr 30 03:45:37 EDT 2008


Author: michael.neale at jboss.com
Date: 2008-04-30 03:45:37 -0400 (Wed, 30 Apr 2008)
New Revision: 19773

Modified:
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/files/RestAPIServlet.java
   labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/files/MockHTTPRequest.java
   labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/files/MockHTTPResponse.java
   labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/files/RestAPIServletTest.java
Log:
JBRULES-1562 remote REST api

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/files/RestAPIServlet.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/files/RestAPIServlet.java	2008-04-30 07:44:58 UTC (rev 19772)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/files/RestAPIServlet.java	2008-04-30 07:45:37 UTC (rev 19773)
@@ -18,7 +18,10 @@
 
 
 import java.io.IOException;
-import java.io.UnsupportedEncodingException;
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
 
 import javax.security.auth.login.LoginException;
 import javax.servlet.ServletException;
@@ -30,7 +33,6 @@
 import org.apache.util.Base64;
 import org.drools.brms.server.util.TestEnvironmentSessionHelper;
 import org.drools.repository.RulesRepository;
-import org.drools.repository.RulesRepositoryException;
 import org.drools.repository.remoteapi.Response;
 import org.drools.repository.remoteapi.RestAPI;
 import org.jboss.seam.Component;
@@ -51,8 +53,15 @@
     protected void doPost(final HttpServletRequest req,
                           final HttpServletResponse res) throws ServletException,
                                                        IOException {
-
-
+        doAuthorizedAction(req, res, new A() {
+			public void a() throws Exception {
+					res.setContentType( "text/html" );
+					RestAPI api = getAPI();
+					String comment = req.getHeader("Checkin-Comment");
+					api.post(req.getRequestURI(), req.getInputStream(), (comment != null)? comment : "");
+					res.getWriter().write( "OK" );
+			}
+        });
     }
 
 
@@ -76,13 +85,47 @@
     }
 
 	@Override
-    protected void doPut(HttpServletRequest req, HttpServletResponse resp)
+    protected void doPut(final HttpServletRequest req, final HttpServletResponse res)
     		throws ServletException, IOException {
+        doAuthorizedAction(req, res, new A() {
+			public void a() throws Exception {
+					res.setContentType( "text/html" );
+					RestAPI api = getAPI();
+					String comment = req.getHeader("Checkin-Comment");
+					Calendar lastMod = getModified(req.getHeader("Last-Modified"));
+					api.put(req.getRequestURI(), lastMod, req.getInputStream(),  (comment != null)? comment : "");
+					res.getWriter().write( "OK" );
+			}
+        });
     }
 
-    @Override
-    protected void doDelete(HttpServletRequest req, HttpServletResponse resp)
+    Calendar getModified(String f) throws ParseException {
+
+		if (f == null) return null;
+		Calendar c = Calendar.getInstance();
+		SimpleDateFormat sdf = RestAPI.getISODateFormat();
+		try {
+			c.setTime(sdf.parse(f));
+		} catch (ParseException e) {
+			DateFormat df = DateFormat.getInstance();
+			c.setTime(df.parse(f));
+		}
+		return c;
+	}
+
+
+
+	@Override
+    protected void doDelete(final HttpServletRequest req, final HttpServletResponse res)
     		throws ServletException, IOException {
+        doAuthorizedAction(req, res, new A() {
+			public void a() throws Exception {
+					res.setContentType( "text/html" );
+					RestAPI api = getAPI();
+					api.delete(req.getRequestURI());
+					res.getWriter().write( "OK" );
+			}
+        });
     }
 
 

Modified: labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/files/MockHTTPRequest.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/files/MockHTTPRequest.java	2008-04-30 07:44:58 UTC (rev 19772)
+++ labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/files/MockHTTPRequest.java	2008-04-30 07:45:37 UTC (rev 19773)
@@ -2,6 +2,7 @@
 
 import java.io.BufferedReader;
 import java.io.IOException;
+import java.io.InputStream;
 import java.io.UnsupportedEncodingException;
 import java.security.Principal;
 import java.util.Enumeration;
@@ -18,12 +19,19 @@
 
 	final private String uri;
 	private Map<String, String> headers;
+	ServletInputStream stream;
 
 	public MockHTTPRequest(String uri, Map<String, String> headers) {
 		this.uri = uri;
 		this.headers = headers;
 	}
 
+	public MockHTTPRequest(String uri, Map<String, String> headers, InputStream in) {
+		this.uri = uri;
+		this.headers = headers;
+		this.stream = new MockInput(in);
+	}
+
 	public String getAuthType() {
 		// TODO Auto-generated method stub
 		return null;
@@ -173,8 +181,8 @@
 	}
 
 	public ServletInputStream getInputStream() throws IOException {
-		// TODO Auto-generated method stub
-		return null;
+
+		return stream ;
 	}
 
 	public Locale getLocale() {
@@ -273,4 +281,19 @@
 
 	}
 
+
+	static class MockInput extends ServletInputStream {
+
+		private InputStream stream;
+
+		MockInput(InputStream in) {
+			this.stream = in;
+		}
+
+		public int read() throws IOException {
+			// TODO Auto-generated method stub
+			return stream.read();
+		}
+
+	}
 }

Modified: labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/files/MockHTTPResponse.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/files/MockHTTPResponse.java	2008-04-30 07:44:58 UTC (rev 19772)
+++ labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/files/MockHTTPResponse.java	2008-04-30 07:45:37 UTC (rev 19773)
@@ -3,6 +3,7 @@
 import java.io.IOException;
 import java.io.OutputStream;
 import java.io.PrintWriter;
+import java.io.StringWriter;
 import java.util.HashMap;
 import java.util.Locale;
 import java.util.Map;
@@ -17,6 +18,8 @@
 	String contentType;
 	Map<String, String> headers = new HashMap<String, String>();
 	int errorCode;
+	StringWriter stringWriter = new StringWriter();
+	private PrintWriter writer = new PrintWriter(stringWriter);
 
 
 	public MockHTTPResponse(OutputStream out) {
@@ -135,8 +138,8 @@
 	}
 
 	public PrintWriter getWriter() throws IOException {
-		// TODO Auto-generated method stub
-		return null;
+
+		return writer ;
 	}
 
 	public boolean isCommitted() {

Modified: labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/files/RestAPIServletTest.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/files/RestAPIServletTest.java	2008-04-30 07:44:58 UTC (rev 19772)
+++ labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/files/RestAPIServletTest.java	2008-04-30 07:45:37 UTC (rev 19773)
@@ -1,5 +1,6 @@
 package org.drools.brms.server.files;
 
+import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.util.HashMap;
 import java.util.Map;
@@ -9,8 +10,10 @@
 import org.apache.util.Base64;
 import org.drools.brms.server.util.TestEnvironmentSessionHelper;
 import org.drools.repository.AssetItem;
+import org.drools.repository.AssetItemIterator;
 import org.drools.repository.PackageItem;
 import org.drools.repository.RulesRepository;
+import org.jboss.seam.mock.MockHttpServletResponse;
 
 import junit.framework.TestCase;
 
@@ -98,13 +101,110 @@
 		assertEquals("application/x-download", res.contentType);
 		assertEquals(true, res.containsHeader("Content-Disposition"));
 
+	}
 
+	public void testPost() throws Exception {
+		RulesRepository repo = new RulesRepository( TestEnvironmentSessionHelper.getSession( true ) );
+		PackageItem pkg = repo.createPackage("testPostRestServlet", "");
 
+		HashMap<String, String> headers = new HashMap<String, String>() {
+			{
+				put("Authorization", "BASIC " + new String(Base64.encode("test:password".getBytes())));
+			}
+		};
 
+		ByteArrayInputStream in = new ByteArrayInputStream("some new content".getBytes());
+		RestAPIServlet serv = new RestAPIServlet();
+		MockHTTPRequest req = new MockHTTPRequest("http://foo/api/packages/testPostRestServlet/asset1.drl", headers, in);
 
+		MockHTTPResponse res = new MockHTTPResponse(null);
+		serv.doPost(req, res);
 
+		assertEquals("OK", res.stringWriter.toString());
 
+		AssetItemIterator it = pkg.listAssetsByFormat(new String[] {"drl"});
+		AssetItem ass = it.next();
+		assertEquals("asset1", ass.getName());
+		assertEquals("drl", ass.getFormat());
+		assertFalse(ass.isBinary());
+		assertEquals("some new content", ass.getContent());
 
+
+		in = new ByteArrayInputStream("more content".getBytes());
+		req = new MockHTTPRequest("http://foo/api/packages/testPostRestServlet/asset2.xls", headers, in);
+		res = new MockHTTPResponse(null);
+		serv.doPost(req, res);
+		assertEquals("OK", res.stringWriter.toString());
+
+		AssetItem ass2 = pkg.loadAsset("asset2");
+		assertEquals("xls", ass2.getFormat());
+		assertTrue(ass2.isBinary());
+
+
+		String out = new String(ass2.getBinaryContentAsBytes());
+		assertEquals("more content", out);
+
 	}
 
+	public void testPut() throws Exception {
+		RulesRepository repo = new RulesRepository( TestEnvironmentSessionHelper.getSession( true ) );
+		PackageItem pkg = repo.createPackage("testPutRestServlet", "");
+		AssetItem ass = pkg.addAsset("asset1", "abc");
+		ass.updateFormat("drl");
+		ass.checkin("");
+		long ver = ass.getVersionNumber();
+
+		HashMap<String, String> headers = new HashMap<String, String>() {
+			{
+				put("Authorization", "BASIC " + new String(Base64.encode("test:password".getBytes())));
+				put("Checkin-Comment", "hey ho");
+			}
+		};
+
+		ByteArrayInputStream in = new ByteArrayInputStream("some new content".getBytes());
+		RestAPIServlet serv = new RestAPIServlet();
+		MockHTTPRequest req = new MockHTTPRequest("http://foo/api/packages/testPutRestServlet/asset1.drl", headers, in);
+
+
+		MockHTTPResponse res = new MockHTTPResponse(null);
+		serv.doPut(req, res);
+
+		assertEquals("OK", res.stringWriter.toString());
+
+		ass = pkg.loadAsset("asset1");
+		assertEquals("some new content", ass.getContent());
+		assertEquals(ver + 1, ass.getVersionNumber());
+		assertEquals("hey ho", ass.getCheckinComment());
+	}
+
+
+	public void testDelete() throws Exception {
+		RulesRepository repo = new RulesRepository( TestEnvironmentSessionHelper.getSession( true ) );
+		PackageItem pkg = repo.createPackage("testDeleteRestServlet", "");
+		AssetItem ass = pkg.addAsset("asset1", "abc");
+		ass.updateFormat("drl");
+		ass.checkin("");
+
+		HashMap<String, String> headers = new HashMap<String, String>() {
+			{
+				put("Authorization", "BASIC " + new String(Base64.encode("test:password".getBytes())));
+			}
+		};
+
+		ByteArrayInputStream in = new ByteArrayInputStream("some new content".getBytes());
+		RestAPIServlet serv = new RestAPIServlet();
+		MockHTTPRequest req = new MockHTTPRequest("http://foo/api/packages/testDeleteRestServlet/asset1.drl", headers, in);
+
+		MockHTTPResponse res = new MockHTTPResponse(null);
+		serv.doDelete(req, res);
+
+		assertEquals("OK", res.stringWriter.toString());
+
+
+
+		pkg = repo.loadPackage("testDeleteRestServlet");
+		assertFalse(pkg.listAssetsByFormat(new String[] {"drl"}).hasNext());
+
+
+	}
 }




More information about the jboss-svn-commits mailing list