[jboss-svn-commits] JBL Code SVN: r9626 - in labs/jbossrules/trunk/drools-jbrms/src: main/java/org/drools/brms/server and 2 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Tue Feb 20 00:20:45 EST 2007


Author: michael.neale at jboss.com
Date: 2007-02-20 00:20:45 -0500 (Tue, 20 Feb 2007)
New Revision: 9626

Added:
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/util/RepositoryManager.java
   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/RepositoryManagerTest.java
Removed:
   labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/JBRMSServiceServletTest.java
Modified:
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/packages/ModelArchiveFileWidget.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/AssetContentFormatHandler.java
   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/JBRMSServiceServlet.java
   labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/SessionHelper.java
Log:
JBRULES-668 model upload + refactoring, more tests

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/packages/ModelArchiveFileWidget.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/packages/ModelArchiveFileWidget.java	2007-02-20 05:19:46 UTC (rev 9625)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/packages/ModelArchiveFileWidget.java	2007-02-20 05:20:45 UTC (rev 9626)
@@ -58,7 +58,7 @@
         form.add( fields );
         
         FormStyleLayout layout = new FormStyleLayout("images/model_large.png", 
-                                                     asset.metaData.name + "." + asset.metaData.format);
+                                                     asset.metaData.name);
 
         
         layout.addAttribute( "Upload new version:", form );
@@ -82,8 +82,7 @@
             }
 
             public void onSubmitComplete(FormSubmitCompleteEvent ev) {  
-                    if (ev.getResults().indexOf( "OK" ) > -1) {
-                        Window.alert( "Model archive was uploaded successfully.");  
+                    if (ev.getResults().indexOf( "OK" ) > -1) {                        
                         viewer.refreshDataAndView();
                     } else {
                         ErrorPopup.showMessage( "Unable to upload the file." );

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/AssetContentFormatHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/AssetContentFormatHandler.java	2007-02-20 05:19:46 UTC (rev 9625)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/AssetContentFormatHandler.java	2007-02-20 05:20:45 UTC (rev 9626)
@@ -136,6 +136,8 @@
         } else if (asset.content instanceof DSLRuleData) {
             DSLRuleData data = (DSLRuleData) asset.content;
             repoAsset.updateContent( data.text.content );
+        } else if (asset.metaData.format.equals( AssetFormats.MODEL )) {
+            //do nothing, as we have an attachment
         } else {
             throw new SerializableException("Not able to handle that type of content just yet...");
         }

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-02-20 05:19:46 UTC (rev 9625)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/FileUploadServlet.java	2007-02-20 05:20:45 UTC (rev 9626)
@@ -15,6 +15,9 @@
 import org.apache.commons.fileupload.disk.DiskFileItemFactory;
 import org.apache.commons.fileupload.servlet.ServletFileUpload;
 import org.drools.brms.client.packages.ModelArchiveFileWidget;
+import org.drools.brms.server.util.RepositoryManager;
+import org.drools.repository.AssetItem;
+import org.drools.repository.RulesRepository;
 import org.drools.repository.RulesRepositoryException;
 
 /**
@@ -24,6 +27,8 @@
  */
 public class FileUploadServlet extends HttpServlet {
 
+    private static final long serialVersionUID = 3909768997932550498L;
+
     protected void doPost(HttpServletRequest request,
                           HttpServletResponse response) throws ServletException,
                                                        IOException {
@@ -34,12 +39,25 @@
             response.getWriter().write( "NO-SCRIPT-DATA" );
             return;
         }
-
-        //TODO: this is where we attach the file to the asset.
         
+        
+        RepositoryManager repoMan = new RepositoryManager();
+        RulesRepository repo = repoMan.getRepositoryFrom( request.getSession() );
+        attachFile( uploadItem, repo );
+        
+        uploadItem.file.getInputStream().close();
+        
         response.getWriter().write( "OK" );
     }
 
+    void attachFile(FormData uploadItem,
+                            RulesRepository repo) throws IOException {
+        AssetItem item = repo.loadAssetByUUID( uploadItem.uuid );
+        item.updateBinaryContentAttachment( uploadItem.file.getInputStream() );
+        item.updateBinaryContentAttachmentFileName( uploadItem.file.getName() );
+        item.checkin( "Attached file: " + uploadItem.file.getName() );
+    }
+
     /**
      * This will return the file and the Asset UUID that it is to be attached to.
      */

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/JBRMSServiceServlet.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/JBRMSServiceServlet.java	2007-02-20 05:19:46 UTC (rev 9625)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/JBRMSServiceServlet.java	2007-02-20 05:20:45 UTC (rev 9626)
@@ -12,6 +12,8 @@
 import javax.jcr.Repository;
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletException;
 import javax.servlet.http.HttpSession;
 
 import org.drools.brms.client.common.AssetFormats;
@@ -23,6 +25,7 @@
 import org.drools.brms.client.rpc.TableDataResult;
 import org.drools.brms.client.rpc.TableDataRow;
 import org.drools.brms.server.util.MetaDataMapper;
+import org.drools.brms.server.util.RepositoryManager;
 import org.drools.brms.server.util.TableDisplayHandler;
 import org.drools.repository.AssetHistoryIterator;
 import org.drools.repository.AssetItem;
@@ -52,11 +55,9 @@
     private static final long serialVersionUID = 3150768417428383474L;
     private static final DateFormat dateFormatter = DateFormat.getInstance();
     
-    /**
-     * The shared repository instance. This could be bound to JNDI eventually.
-     */
-    public static Repository repository;
 
+
+
     private MetaDataMapper metaDataMapper;
 
     
@@ -151,74 +152,20 @@
     
     /** Get the rule repository for the "current" user */
     RulesRepository getRulesRepository() {
-        return this.getRepositoryFrom( getSession() );
+        RepositoryManager helper = new RepositoryManager();
+        return helper.getRepositoryFrom( getSession() );
     }
 
     private HttpSession getSession() {
         return this.getThreadLocalRequest().getSession();
     }
 
-    /**
-     * Pull or create the repository from session.
-     * If it is not found, it will create one and then bind it to the session.
-     */
-    RulesRepository getRepositoryFrom(HttpSession session) {
-        Object obj = session.getAttribute( "drools.repository" );
-        if ( obj == null ) {
-            obj = createRuleRepositoryInstance();
-            session.setAttribute( "drools.repository",
-                                  obj );
-        }
-        return (RulesRepository) obj;
-    }
 
-    /** Initialse the repository, set it up if it is brand new */
-    RulesRepository createRuleRepositoryInstance() {
-        
-        RepositoryConfigurator config = new RepositoryConfigurator();
 
-        try {
-            
-            Session session;
-            if (repository == null) {
-                long start = System.currentTimeMillis();
-                session = initialiseRepo( config );
-                System.out.println("initialise repo time: " + (System.currentTimeMillis() - start));
-            }  else {
-                long start = System.currentTimeMillis();
-                session = config.login( repository );
-                System.out.println("login repo time: " + (System.currentTimeMillis() - start));
-                
-            }
-            
-            return new RulesRepository( session );
-        } catch ( LoginException e ) {
-            throw new RuntimeException( e );
-        } catch ( RepositoryException e ) {
-            throw new RuntimeException( "Unable to get a repository: " + e.getMessage() );
-        }
-    }
-    
-    
 
-    /** This will create a new repository instance (should only happen once after startup) */
-    private Session initialiseRepo(RepositoryConfigurator config) throws LoginException,
-                                                                 RepositoryException {
-        Session session = config.login( getJCRRepository( config ) );
-        
-        config.setupRulesRepository( session );
-        return session;
-    }
 
 
 
-    synchronized static Repository getJCRRepository(RepositoryConfigurator config) {
-        if (repository == null) {
-            repository = config.createRepository();
-        }
-        return repository;
-    }
-
     /**
      * This actually does the hard work of loading up an asset based
      * on its format.

Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/util/RepositoryManager.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/util/RepositoryManager.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/util/RepositoryManager.java	2007-02-20 05:20:45 UTC (rev 9626)
@@ -0,0 +1,88 @@
+package org.drools.brms.server.util;
+
+import javax.jcr.LoginException;
+import javax.jcr.Repository;
+import javax.jcr.RepositoryException;
+import javax.jcr.Session;
+import javax.servlet.http.HttpSession;
+
+import org.drools.repository.RepositoryConfigurator;
+import org.drools.repository.RulesRepository;
+
+/**
+ * Currently a collection of hacked utilities for setting up the repo.
+ * TODO: repository itself should be injected into the context,
+ * and session should be created on each request.
+ * 
+ * Also, repository creation should be distinct from instantiation.
+ * 
+ * @author Michael Neale
+ *
+ */
+public class RepositoryManager {
+
+    /**
+     * The shared repository instance. This could be bound to JNDI eventually.
+     */
+    public static Repository repository;
+    
+    /** This will create a new repository instance (should only happen once after startup) */
+    private Session initialiseRepo(RepositoryConfigurator config) throws LoginException,
+                                                                 RepositoryException {
+        Session session = config.login( getJCRRepository( config ) );
+        
+        config.setupRulesRepository( session );
+        return session;
+    }
+    
+    public synchronized static Repository getJCRRepository(RepositoryConfigurator config) {
+        if (repository == null) {
+            repository = config.createRepository();
+        }
+        return repository;
+    }
+    
+    /** Initialse the repository, set it up if it is brand new */
+    public RulesRepository createRuleRepositoryInstance() {
+        
+        RepositoryConfigurator config = new RepositoryConfigurator();
+
+        try {
+            
+            Session session;
+            if (repository == null) {
+                //this should only need to be done on server startup
+                long start = System.currentTimeMillis();
+                session = initialiseRepo( config );
+                System.out.println("initialise repo time: " + (System.currentTimeMillis() - start));
+            }  else {
+                //ok this is probably fast enough to do with each request I think
+                long start = System.currentTimeMillis();
+                session = config.login( repository );
+                System.out.println("login repo time: " + (System.currentTimeMillis() - start));
+                
+            }
+            
+            return new RulesRepository( session );
+        } catch ( LoginException e ) {
+            throw new RuntimeException( e );
+        } catch ( RepositoryException e ) {
+            throw new RuntimeException( "Unable to get a repository: " + e.getMessage() );
+        }
+    }
+    
+    /**
+     * Pull or create the repository from session.
+     * If it is not found, it will create one and then bind it to the session.
+     */
+    public RulesRepository getRepositoryFrom(HttpSession session) {
+        Object obj = session.getAttribute( "drools.repository" );
+        if ( obj == null ) {
+            obj = createRuleRepositoryInstance();
+            session.setAttribute( "drools.repository",
+                                  obj );
+        }
+        return (RulesRepository) obj;
+    }
+    
+}


Property changes on: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/util/RepositoryManager.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: 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	                        (rev 0)
+++ labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/FileUploadServletTest.java	2007-02-20 05:20:45 UTC (rev 9626)
@@ -0,0 +1,115 @@
+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 org.apache.commons.fileupload.FileItem;
+import org.drools.repository.AssetItem;
+import org.drools.repository.RulesRepository;
+
+import junit.framework.TestCase;
+
+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(SessionHelper.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 {
+
+            
+        }
+        
+    }
+    
+}


Property changes on: labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/FileUploadServletTest.java
___________________________________________________________________
Name: svn:eol-style
   + native

Deleted: labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/JBRMSServiceServletTest.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/JBRMSServiceServletTest.java	2007-02-20 05:19:46 UTC (rev 9625)
+++ labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/JBRMSServiceServletTest.java	2007-02-20 05:20:45 UTC (rev 9626)
@@ -1,123 +0,0 @@
-package org.drools.brms.server;
-
-import java.util.Calendar;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.servlet.ServletContext;
-import javax.servlet.http.HttpSession;
-import javax.servlet.http.HttpSessionContext;
-
-import junit.framework.Assert;
-import junit.framework.TestCase;
-
-import org.drools.brms.client.rpc.RuleContentText;
-import org.drools.repository.RulesRepository;
-
-/**
- * This tests the basic http stuff for the servlet.
- */
-public class JBRMSServiceServletTest extends TestCase {
-
-    public void testInit() throws Exception {
-        JBRMSServiceServlet serv = new JBRMSServiceServlet();
-        MockHttpSession session = new MockHttpSession();
-        RulesRepository repo = serv.getRepositoryFrom( session );
-        assertTrue(session.sessionData.containsKey( "drools.repository" ));
-        assertEquals(repo, session.getAttribute( "drools.repository" ));
-        
-        RulesRepository repo2 = serv.getRepositoryFrom( session );
-        assertSame(repo, repo2);
-        
-        
-    }
-    
-    public void testGetRepository() throws Exception {
-        JBRMSServiceServlet serv = new JBRMSServiceServlet();
-        RulesRepository repo = serv.createRuleRepositoryInstance();
-        assertNotNull(repo);
-    }
-    
-
-
-    
-    
-    static class MockHttpSession implements HttpSession {
-
-        public Map sessionData = new HashMap();
-        
-        public Object getAttribute(String arg0) {
-            
-            return sessionData.get( arg0 );
-        }
-
-        public Enumeration getAttributeNames() {
-            // TODO Auto-generated method stub
-            return null;
-        }
-
-        public long getCreationTime() {
-            return 0;
-        }
-
-        public String getId() {
-            return null;
-        }
-
-        public long getLastAccessedTime() {
-            return 0;
-        }
-
-        public int getMaxInactiveInterval() {
-            return 0;
-        }
-
-        public ServletContext getServletContext() {
-            return null;
-        }
-
-        public HttpSessionContext getSessionContext() {
-            return null;
-        }
-
-        public Object getValue(String arg0) {
-            return null;
-        }
-
-        public String[] getValueNames() {
-            return null;
-        }
-
-        public void invalidate() {
-        }
-
-        public boolean isNew() {
-            return false;
-        }
-
-        public void putValue(String arg0,
-                             Object arg1) {
-            Assert.fail("DO NOT USE THIS METHOD !");
-            
-        }
-
-        public void removeAttribute(String arg0) {
-            this.sessionData.remove( arg0 );
-        }
-
-        public void removeValue(String arg0) {
-        }
-
-        public void setAttribute(String arg0,
-                                 Object arg1) {
-            sessionData.put( arg0, arg1 );
-        }
-
-        public void setMaxInactiveInterval(int arg0) {
-            
-            
-        }
-        
-    }
-}

Copied: labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/RepositoryManagerTest.java (from rev 9623, labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/JBRMSServiceServletTest.java)
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/RepositoryManagerTest.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/RepositoryManagerTest.java	2007-02-20 05:20:45 UTC (rev 9626)
@@ -0,0 +1,122 @@
+package org.drools.brms.server;
+
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.servlet.ServletContext;
+import javax.servlet.http.HttpSession;
+import javax.servlet.http.HttpSessionContext;
+
+import junit.framework.Assert;
+import junit.framework.TestCase;
+
+import org.drools.brms.server.util.RepositoryManager;
+import org.drools.repository.RulesRepository;
+
+/**
+ * This tests the basic http stuff for the servlet.
+ */
+public class RepositoryManagerTest extends TestCase {
+
+    public void testInit() throws Exception {
+        RepositoryManager serv = new RepositoryManager();
+        MockHttpSession session = new MockHttpSession();
+        RulesRepository repo = serv.getRepositoryFrom( session );
+        assertTrue(session.sessionData.containsKey( "drools.repository" ));
+        assertEquals(repo, session.getAttribute( "drools.repository" ));
+        
+        RulesRepository repo2 = serv.getRepositoryFrom( session );
+        assertSame(repo, repo2);
+        
+        
+    }
+    
+    public void testGetRepository() throws Exception {
+        RepositoryManager serv = new RepositoryManager();
+        RulesRepository repo = serv.createRuleRepositoryInstance();
+        assertNotNull(repo);
+    }
+    
+
+
+    
+    
+    static class MockHttpSession implements HttpSession {
+
+        public Map sessionData = new HashMap();
+        
+        public Object getAttribute(String arg0) {
+            
+            return sessionData.get( arg0 );
+        }
+
+        public Enumeration getAttributeNames() {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public long getCreationTime() {
+            return 0;
+        }
+
+        public String getId() {
+            return null;
+        }
+
+        public long getLastAccessedTime() {
+            return 0;
+        }
+
+        public int getMaxInactiveInterval() {
+            return 0;
+        }
+
+        public ServletContext getServletContext() {
+            return null;
+        }
+
+        public HttpSessionContext getSessionContext() {
+            return null;
+        }
+
+        public Object getValue(String arg0) {
+            return null;
+        }
+
+        public String[] getValueNames() {
+            return null;
+        }
+
+        public void invalidate() {
+        }
+
+        public boolean isNew() {
+            return false;
+        }
+
+        public void putValue(String arg0,
+                             Object arg1) {
+            Assert.fail("DO NOT USE THIS METHOD !");
+            
+        }
+
+        public void removeAttribute(String arg0) {
+            this.sessionData.remove( arg0 );
+        }
+
+        public void removeValue(String arg0) {
+        }
+
+        public void setAttribute(String arg0,
+                                 Object arg1) {
+            sessionData.put( arg0, arg1 );
+        }
+
+        public void setMaxInactiveInterval(int arg0) {
+            
+            
+        }
+        
+    }
+}

Modified: labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/SessionHelper.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/SessionHelper.java	2007-02-20 05:19:46 UTC (rev 9625)
+++ labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/SessionHelper.java	2007-02-20 05:20:45 UTC (rev 9626)
@@ -3,6 +3,7 @@
 import javax.jcr.Repository;
 import javax.jcr.Session;
 
+import org.drools.brms.server.util.RepositoryManager;
 import org.drools.repository.RepositoryConfigurator;
 
 /**
@@ -16,7 +17,7 @@
     public static Session getSession() throws Exception {
         if (testSession == null) {
             RepositoryConfigurator config = new RepositoryConfigurator();
-            Repository repo = JBRMSServiceServlet.getJCRRepository( config );
+            Repository repo = RepositoryManager.getJCRRepository( config );
             testSession = config.login( repo );
             config.clearRulesRepository( testSession );
             config.setupRulesRepository( testSession );




More information about the jboss-svn-commits mailing list