[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