[jboss-svn-commits] JBL Code SVN: r11322 - in labs/jbossrules/trunk/drools-jbrms/src: main/java/org/drools/brms/server/util and 2 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Tue Apr 24 19:57:57 EDT 2007
Author: fmeyer
Date: 2007-04-24 19:57:56 -0400 (Tue, 24 Apr 2007)
New Revision: 11322
Added:
labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/util/FileUploadHelper.java
labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/util/FormData.java
labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/util/FileUploadHelperTest.java
Removed:
labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/FileUploadServletTest.java
Modified:
labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/FileUploadServlet.java
labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/PopulateDataTest.java
Log:
JBRULES-817 Refactor the file upload servlet to be more tested
Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/FileUploadServlet.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/FileUploadServlet.java 2007-04-24 22:28:42 UTC (rev 11321)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/FileUploadServlet.java 2007-04-24 23:57:56 UTC (rev 11322)
@@ -1,29 +1,23 @@
package org.drools.brms.server;
+import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
-import java.io.OutputStream;
import java.io.PrintWriter;
-import java.util.Iterator;
-import java.util.List;
+import javax.jcr.PathNotFoundException;
+import javax.jcr.RepositoryException;
import javax.servlet.ServletException;
-import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
-import org.apache.commons.fileupload.FileItem;
-import org.apache.commons.fileupload.FileItemFactory;
-import org.apache.commons.fileupload.FileUploadException;
-import org.apache.commons.fileupload.disk.DiskFileItemFactory;
-import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.drools.brms.client.admin.BackupManager;
import org.drools.brms.client.packages.ModelAttachmentFileWidget;
+import org.drools.brms.server.util.FileUploadHelper;
+import org.drools.brms.server.util.FormData;
import org.drools.brms.server.util.TestEnvironmentSessionHelper;
-import org.drools.repository.AssetItem;
import org.drools.repository.RulesRepository;
-import org.drools.repository.RulesRepositoryException;
import org.jboss.seam.Component;
import org.jboss.seam.contexts.Contexts;
@@ -38,42 +32,29 @@
public class FileUploadServlet extends HttpServlet {
private static final long serialVersionUID = 3909768997932550498L;
+ final FileUploadHelper uploadHelper = new FileUploadHelper();
+
/**
* The post accepts files for attachment to an asset.
*/
- //TODO: must extract bunisess logic form servlet action
-
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException,
IOException {
response.setContentType( "text/plain" );
+ FormData uploadItem = new FileUploadHelper().getFileItem( request );
- FormData uploadItem = getFileItem( request );
- RulesRepository repo = getRepository();
-
- if ( uploadItem.file.getFieldName().equals( "uploadFormElement" ) ) {
- processUploadRepository( uploadItem.file.getInputStream() );
+ if ( uploadItem.getFile().getFieldName().equals( "uploadFormElement" ) ) {
+ processUploadRepository( uploadItem.getFile().getInputStream() );
return;
- } else if ( uploadItem.file != null && uploadItem.uuid != null ) {
- attachFile( uploadItem,
- repo );
- uploadItem.file.getInputStream().close();
- response.getWriter().write( "OK" );
+ } else if ( uploadItem.getFile() != null && uploadItem.getUuid() != null ) {
+ response.getWriter().write( processUploadFileToAsset(uploadItem) );
return;
}
response.getWriter().write( "NO-SCRIPT-DATA" );
}
- protected void processUploadRepository(InputStream file) throws IOException {
- byte[] byteArray = new byte[file.available()];
- RulesRepository repo = getRepository();
-
- file.read( byteArray );
- repo.importRulesRepository( byteArray );
- }
-
/**
* doGet acting like a dispatcher.
*/
@@ -86,28 +67,41 @@
String repo = (String) req.getParameter( BackupManager.FORM_FIELD_REPOSITORY );
if ( uuid != null ) {
- getFilebyUUID( uuid,
- req,
- res );
+ processFileDownload( uuid, res );
} else if ( repo != null ) {
- ServletOutputStream out = res.getOutputStream();
try {
-
- res.setContentType( "application/zip" );
- res.setHeader( "Content-Disposition",
- "inline; filename=repository_export.zip;" );
-
- out.write( getRepository().exportRulesRepository() );
- out.flush();
+ processXmlFileDownload(res);
} catch ( Exception e ) {
- e.printStackTrace( new PrintWriter( out ) );
+ e.printStackTrace( new PrintWriter( res.getOutputStream() ) );
}
} else {
res.sendError( HttpServletResponse.SC_BAD_REQUEST );
return;
}
}
+
+ private void processXmlFileDownload(HttpServletResponse res) throws PathNotFoundException, IOException, RepositoryException {
+ res.setContentType( "application/zip" );
+ res.setHeader( "Content-Disposition",
+ "inline; filename=repository_export.zip;" );
+ res.getOutputStream().write( getRepository().exportRulesRepository() );
+ res.getOutputStream().flush();
+ }
+
+ private void processFileDownload(String uuid, HttpServletResponse response) throws IOException {
+ ByteArrayOutputStream output = new ByteArrayOutputStream();
+ String filename = uploadHelper.getFilebyUUID( uuid, output, getRepository() );
+
+
+ response.setContentType( "application/x-download" );
+ response.setHeader( "Content-Disposition",
+ "attachment; filename=" + filename + ");");
+ response.setContentLength( output.size() );
+ response.getOutputStream().write( output.toByteArray() );
+ response.getOutputStream().flush();
+ }
+
private RulesRepository getRepository() {
if ( Contexts.isApplicationContextActive() ) {
return (RulesRepository) Component.getInstance( "repository" );
@@ -124,85 +118,24 @@
}
}
}
+
+
+ private String processUploadFileToAsset(FormData uploadItem) throws IOException {
+ RulesRepository repo = getRepository();
- void attachFile(FormData uploadItem,
- RulesRepository repo) throws IOException {
- String uuid = uploadItem.uuid;
- InputStream fileData = uploadItem.file.getInputStream();
- String fileName = uploadItem.file.getName();
-
- attachFileToAsset( repo,
- uuid,
- fileData,
- fileName );
+ uploadHelper.attachFile( uploadItem, repo );
+ uploadItem.getFile().getInputStream().close();
+
+ return "OK";
}
- /**
- * This utility method attaches a file to an asset.
- */
- public static void attachFileToAsset(RulesRepository repo,
- String uuid,
- InputStream fileData,
- String fileName) {
- AssetItem item = repo.loadAssetByUUID( uuid );
- item.updateBinaryContentAttachment( fileData );
- item.updateBinaryContentAttachmentFileName( fileName );
- item.checkin( "Attached file: " + fileName );
- }
+ private void processUploadRepository(InputStream file) throws IOException {
+ byte[] byteArray = new byte[file.available()];
+ RulesRepository repo = getRepository();
- /**
- * This will return the file and the Asset UUID that it is to be attached to.
- */
- private FormData getFileItem(HttpServletRequest request) {
- FileItemFactory factory = new DiskFileItemFactory();
- ServletFileUpload upload = new ServletFileUpload( factory );
-
- FormData data = new FormData();
- try {
- List items = upload.parseRequest( request );
- Iterator it = items.iterator();
- while ( it.hasNext() ) {
- FileItem item = (FileItem) it.next();
- if ( item.isFormField() && item.getFieldName().equals( ModelAttachmentFileWidget.FORM_FIELD_UUID ) ) {
- data.uuid = item.getString();
- } else if ( !item.isFormField() ) {
- data.file = item;
- }
- }
- return data;
- } catch ( FileUploadException e ) {
- throw new RulesRepositoryException( e );
- }
-
+ file.read( byteArray );
+ repo.importRulesRepository( byteArray );
}
-
- static class FormData {
- FileItem file;
- String uuid;
- }
-
- /**
- * The get returns files based on UUID.
- * you can do a request like /fileManager?uuid=.....
- * (need to know the UUID) and it will return it as a file.
- */
-
- private void getFilebyUUID(String uuid,
- HttpServletRequest req,
- HttpServletResponse res) throws IOException {
-
- AssetItem item = getRepository().loadAssetByUUID( uuid );
-
- res.setContentType( "application/x-download" );
- res.setHeader( "Content-Disposition",
- "attachment; filename=" + item.getBinaryContentAttachmentFileName() );
-
- byte[] data = item.getBinaryContentAsBytes();
- res.setContentLength( data.length );
-
- OutputStream out = res.getOutputStream();
- out.write( data );
- out.flush();
- }
+
}
Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/util/FileUploadHelper.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/util/FileUploadHelper.java (rev 0)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/util/FileUploadHelper.java 2007-04-24 23:57:56 UTC (rev 11322)
@@ -0,0 +1,102 @@
+package org.drools.brms.server.util;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.commons.fileupload.FileItem;
+import org.apache.commons.fileupload.FileItemFactory;
+import org.apache.commons.fileupload.FileUploadException;
+import org.apache.commons.fileupload.disk.DiskFileItemFactory;
+import org.apache.commons.fileupload.servlet.ServletFileUpload;
+import org.drools.brms.client.packages.ModelAttachmentFileWidget;
+import org.drools.repository.AssetItem;
+import org.drools.repository.RulesRepository;
+import org.drools.repository.RulesRepositoryException;
+
+public class FileUploadHelper {
+
+ private String filename;
+
+ /**
+ * This will return the file and the Asset UUID that it is to be attached to.
+ */
+
+ public void attachFile(FormData uploadItem, RulesRepository repo) throws IOException {
+
+ String uuid = uploadItem.getUuid();
+ InputStream fileData = uploadItem.getFile().getInputStream();
+ String fileName = uploadItem.getFile().getName();
+
+ attachFileToAsset( repo, uuid, fileData, fileName );
+ uploadItem.getFile().getInputStream().close();
+ }
+
+ /**
+ * This utility method attaches a file to an asset.
+ */
+ public void attachFileToAsset(RulesRepository repo,
+ String uuid,
+ InputStream fileData,
+ String fileName) {
+ this.filename = fileName;
+
+ AssetItem item = repo.loadAssetByUUID( uuid );
+ item.updateBinaryContentAttachment( fileData );
+ item.updateBinaryContentAttachmentFileName( fileName );
+ item.checkin( "Attached file: " + fileName );
+ }
+
+ /**
+ * The get returns files based on UUID.
+ * you can do a request like /fileManager?uuid=.....
+ * (need to know the UUID) and it will return it as a file.
+ */
+
+ public String getFilebyUUID(String uuid,
+ OutputStream out,
+ RulesRepository repository) throws IOException {
+
+ AssetItem item = repository.loadAssetByUUID( uuid );
+
+ byte[] data = item.getBinaryContentAsBytes();
+
+ out.write( data );
+ out.flush();
+
+ this.filename = item.getBinaryContentAttachmentFileName();
+ return item.getBinaryContentAttachmentFileName();
+ }
+
+ public String getFileName () {
+ return this.filename;
+ }
+
+ public FormData getFileItem(HttpServletRequest request) {
+ FileItemFactory factory = new DiskFileItemFactory();
+ ServletFileUpload upload = new ServletFileUpload( factory );
+
+ FormData data = new FormData();
+ try {
+ List items = upload.parseRequest( request );
+ Iterator it = items.iterator();
+ while ( it.hasNext() ) {
+ FileItem item = (FileItem) it.next();
+ if ( item.isFormField() && item.getFieldName().equals( ModelAttachmentFileWidget.FORM_FIELD_UUID ) ) {
+ data.setUuid( item.getString() );
+ } else if ( !item.isFormField() ) {
+ data.setFile( item );
+ }
+ }
+ return data;
+ } catch ( FileUploadException e ) {
+ throw new RulesRepositoryException( e );
+ }
+ }
+
+
+}
Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/util/FormData.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/util/FormData.java (rev 0)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/util/FormData.java 2007-04-24 23:57:56 UTC (rev 11322)
@@ -0,0 +1,33 @@
+package org.drools.brms.server.util;
+
+import org.apache.commons.fileupload.FileItem;
+
+public class FormData {
+ private FileItem file;
+ private String uuid;
+
+ public FormData(FileItem file, String uuid){
+ this.file = file;
+ this.uuid = uuid;
+ }
+
+ public FormData() {
+ }
+
+ public FileItem getFile() {
+ return file;
+ }
+ public void setFile(FileItem file) {
+ this.file = file;
+ }
+ public String getUuid() {
+ return uuid;
+ }
+ public void setUuid(String uuid) {
+ this.uuid = uuid;
+ }
+
+ public void closeFile() {
+ }
+
+}
Deleted: labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/FileUploadServletTest.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/FileUploadServletTest.java 2007-04-24 22:28:42 UTC (rev 11321)
+++ labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/FileUploadServletTest.java 2007-04-24 23:57:56 UTC (rev 11322)
@@ -1,116 +0,0 @@
-package org.drools.brms.server;
-
-import java.io.ByteArrayInputStream;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.UnsupportedEncodingException;
-
-import junit.framework.TestCase;
-
-import org.apache.commons.fileupload.FileItem;
-import org.drools.brms.server.util.TestEnvironmentSessionHelper;
-import org.drools.repository.AssetItem;
-import org.drools.repository.RulesRepository;
-
-public class FileUploadServletTest extends TestCase {
-
- public void testUploadFile() throws Exception {
- FileUploadServlet serv = new FileUploadServlet();
- FileUploadServlet.FormData upload = new FileUploadServlet.FormData();
- upload.file = new MockFile();
-
-
-
- RulesRepository repo = new RulesRepository(TestEnvironmentSessionHelper.getSession());
-
- AssetItem item = repo.loadDefaultPackage().addAsset( "testUploadFile", "description" );
- upload.uuid = item.getUUID();
-
- serv.attachFile( upload, repo );
-
- AssetItem item2 = repo.loadDefaultPackage().loadAsset( "testUploadFile" );
- byte[] data = item2.getBinaryContentAsBytes();
-
- assertNotNull(data);
- assertEquals("foo bar", new String(data));
- assertEquals("foo.bar", item2.getBinaryContentAttachmentFileName());
-
- }
-
- static class MockFile implements FileItem {
-
- InputStream stream = new ByteArrayInputStream("foo bar".getBytes());
-
- public void delete() {
-
-
- }
-
- public byte[] get() {
-
- return null;
- }
-
- public String getContentType() {
-
- return null;
- }
-
- public String getFieldName() {
-
- return null;
- }
-
- public InputStream getInputStream() throws IOException {
- return stream;
- }
-
- public String getName() {
- return "foo.bar";
- }
-
- public OutputStream getOutputStream() throws IOException {
-
- return null;
- }
-
- public long getSize() {
- return 0;
- }
-
- public String getString() {
- return null;
- }
-
- public String getString(String arg0) throws UnsupportedEncodingException {
- return null;
- }
-
- public boolean isFormField() {
- return false;
- }
-
- public boolean isInMemory() {
- return false;
- }
-
- public void setFieldName(String arg0) {
-
-
- }
-
- public void setFormField(boolean arg0) {
-
-
- }
-
- public void write(File arg0) throws Exception {
-
-
- }
-
- }
-
-}
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 2007-04-24 22:28:42 UTC (rev 11321)
+++ labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/PopulateDataTest.java 2007-04-24 23:57:56 UTC (rev 11322)
@@ -7,6 +7,7 @@
import org.drools.brms.client.common.AssetFormats;
import org.drools.brms.client.modeldriven.SuggestionCompletionEngine;
import org.drools.brms.client.rpc.PackageConfigData;
+import org.drools.brms.server.util.FileUploadHelper;
import org.drools.brms.server.util.TestEnvironmentSessionHelper;
import org.drools.repository.AssetItem;
import org.drools.repository.PackageItem;
@@ -48,21 +49,18 @@
InputStream file = this.getClass().getResourceAsStream( "/billasurf.jar" );
assertNotNull(file);
- FileUploadServlet.attachFileToAsset( repo, uuid, file, "billasurf.jar" );
+ new FileUploadHelper().attachFileToAsset( repo, uuid, file, "billasurf.jar" );
AssetItem item = repo.loadAssetByUUID( uuid );
assertNotNull(item.getBinaryContentAsBytes());
+ assertEquals( item.getBinaryContentAttachmentFileName(), "billasurf.jar" );
-
-
PackageItem pkg = repo.loadPackage( "com.billasurf.manufacturing.plant" );
pkg.updateHeader( "import com.billasurf.Board\nimport com.billasurf.Person" +
"\n\nglobal com.billasurf.Person prs" );
pkg.checkin( "added imports" );
-
-
SuggestionCompletionEngine eng = serv.loadSuggestionCompletionEngine( "com.billasurf.manufacturing.plant" );
assertNotNull(eng);
Added: labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/util/FileUploadHelperTest.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/util/FileUploadHelperTest.java (rev 0)
+++ labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/util/FileUploadHelperTest.java 2007-04-24 23:57:56 UTC (rev 11322)
@@ -0,0 +1,146 @@
+package org.drools.brms.server.util;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.UnsupportedEncodingException;
+
+import junit.framework.TestCase;
+
+import org.apache.commons.fileupload.FileItem;
+import org.drools.repository.AssetItem;
+import org.drools.repository.RulesRepository;
+
+public class FileUploadHelperTest extends TestCase {
+
+ String storeduuid;
+
+ public void testAttachFile() throws Exception {
+
+ FileUploadHelper uploadHelper = new FileUploadHelper();
+ RulesRepository repo = new RulesRepository(TestEnvironmentSessionHelper.getSession());
+ AssetItem item = repo.loadDefaultPackage().addAsset( "testUploadFile", "description" );
+ FormData upload = new FormData();
+
+ upload.setFile( new MockFile() );
+ upload.setUuid( item.getUUID() );
+ this.storeduuid = item.getUUID();
+ uploadHelper.attachFile( upload, repo );
+
+ AssetItem item2 = repo.loadDefaultPackage().loadAsset( "testUploadFile" );
+ byte[] data = item2.getBinaryContentAsBytes();
+
+ assertNotNull(data);
+ assertEquals("foo bar", new String(data));
+ assertEquals("foo.bar", item2.getBinaryContentAttachmentFileName());
+ }
+
+ public void testUploadXmlFile() throws Exception {
+ RulesRepository repo = new RulesRepository(TestEnvironmentSessionHelper.getSession());
+
+ repo.createPackage( "testUploadXmlFile", "comment" );
+ repo.importRulesRepository( repo.dumpRepositoryXml() );
+ assertTrue( repo.containsPackage( "testUploadXmlFile" ) );
+ }
+
+ public void testGetFilebyUUID() throws Exception {
+ FileUploadHelper uploadHelper = new FileUploadHelper();
+ RulesRepository repo = new RulesRepository(TestEnvironmentSessionHelper.getSession());
+ AssetItem item = repo.loadDefaultPackage().addAsset( "testGetFilebyUUID", "description" );
+ FormData upload = new FormData();
+
+ upload.setFile( new MockFile() );
+ upload.setUuid( item.getUUID() );
+ uploadHelper.attachFile( upload, repo );
+
+
+ ByteArrayOutputStream out = new ByteArrayOutputStream ();
+
+ String filename = uploadHelper.getFilebyUUID(item.getUUID(), out, repo );
+
+ assertNotNull(out.toByteArray());
+ assertEquals("foo bar", new String(out.toByteArray()));
+ assertEquals("foo.bar", filename);
+ }
+}
+
+class MockFile implements FileItem {
+
+ private static final long serialVersionUID = -9170360363970788385L;
+ InputStream stream = new ByteArrayInputStream("foo bar".getBytes());
+
+ public void setInputStream(InputStream is) throws IOException {
+ stream.close();
+ stream = is;
+ }
+
+ public void delete() {
+ }
+
+ public byte[] get() {
+
+ return null;
+ }
+
+ public String getContentType() {
+
+ return null;
+ }
+
+ public String getFieldName() {
+
+ return null;
+ }
+
+ public InputStream getInputStream() throws IOException {
+ return stream;
+ }
+
+ public String getName() {
+ return "foo.bar";
+ }
+
+ public OutputStream getOutputStream() throws IOException {
+
+ return null;
+ }
+
+ public long getSize() {
+ return 0;
+ }
+
+ public String getString() {
+ return null;
+ }
+
+ public String getString(String arg0) throws UnsupportedEncodingException {
+ return null;
+ }
+
+ public boolean isFormField() {
+ return false;
+ }
+
+ public boolean isInMemory() {
+ return false;
+ }
+
+ public void setFieldName(String arg0) {
+
+
+ }
+
+ public void setFormField(boolean arg0) {
+
+
+ }
+
+ public void write(File arg0) throws Exception {
+
+ }
+
+}
+
More information about the jboss-svn-commits
mailing list