[jboss-svn-commits] JBL Code SVN: r11502 - in labs/jbossrules/trunk/drools-jbrms/src: main/java/org/drools/brms/client/admin and 13 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon Apr 30 03:47:48 EDT 2007


Author: michael.neale at jboss.com
Date: 2007-04-30 03:47:48 -0400 (Mon, 30 Apr 2007)
New Revision: 11502

Added:
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/packages/PackageBuilderWidget.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/public/images/package_build.gif
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/public/images/package_builder.png
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/public/images/tick_green.gif
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/files/
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/files/AssetFileServlet.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/files/FileUploadServlet.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/files/PackageDeploymentServlet.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/files/PackageDeploymentURIHelper.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/files/RepositoryBackupServlet.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/files/RepositoryServlet.java
   labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/PerfServiceTest.java
   labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/files/
   labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/files/DeploymentURIHelperTest.java
Removed:
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/ImportWidget.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/FileUploadServlet.java
Modified:
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/JBRMS.gwt.xml
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/admin/BackupManager.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/AssetFormats.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/packages/ModelAttachmentFileWidget.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/packages/PackageEditor.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/packages/PackageExplorerWidget.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/packages/PackageManagerView.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/packages/PackageSnapshotView.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/PackageConfigData.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/EditorLauncher.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/public/JBRMS.css
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/ServiceImplementation.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/util/FileManagerUtils.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/ServiceImplementationTest.java
   labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/util/FileManagerUtilsTest.java
Log:
JBRULES-823 Package builder w00t !

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/JBRMS.gwt.xml
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/JBRMS.gwt.xml	2007-04-30 07:46:08 UTC (rev 11501)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/JBRMS.gwt.xml	2007-04-30 07:47:48 UTC (rev 11502)
@@ -8,6 +8,8 @@
 	<entry-point class='org.drools.brms.client.JBRMSEntryPoint'/>
   
 	<servlet path="/jbrmsService" class="org.jboss.seam.remoting.gwt.GWTRemoteServiceServlet" />  
-    <servlet path="/fileManager" class="org.drools.brms.server.FileUploadServlet"/>
+    <servlet path="/asset" class="org.drools.brms.server.files.AssetFileServlet"/>
+    <servlet path="/backup" class="org.drools.brms.server.files.RepositoryBackupServlet"/>    
+    <servlet path="/package" class="org.drools.brms.server.files.PackageDeploymentServlet"/>  
     
 </module>

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/admin/BackupManager.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/admin/BackupManager.java	2007-04-30 07:46:08 UTC (rev 11501)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/admin/BackupManager.java	2007-04-30 07:47:48 UTC (rev 11502)
@@ -3,7 +3,6 @@
 import org.drools.brms.client.common.ErrorPopup;
 import org.drools.brms.client.common.FormStyleLayout;
 import org.drools.brms.client.common.HTMLFileManagerFields;
-import org.drools.brms.client.common.ImportWidget;
 import org.drools.brms.client.common.LoadingPopup;
 
 import com.google.gwt.core.client.GWT;
@@ -11,7 +10,9 @@
 import com.google.gwt.user.client.ui.Button;
 import com.google.gwt.user.client.ui.ClickListener;
 import com.google.gwt.user.client.ui.Composite;
+import com.google.gwt.user.client.ui.FileUpload;
 import com.google.gwt.user.client.ui.FormHandler;
+import com.google.gwt.user.client.ui.FormPanel;
 import com.google.gwt.user.client.ui.FormSubmitCompleteEvent;
 import com.google.gwt.user.client.ui.FormSubmitEvent;
 import com.google.gwt.user.client.ui.HTML;
@@ -83,18 +84,35 @@
 //    }
 
     private Widget newImportWidget() {
-        final ImportWidget impWidget = new ImportWidget( HTMLFileManagerFields.FILE_UPLOAD_FIELD_NAME_IMPORT);
-        
-        impWidget.add( new Button( "Import", new ClickListener() {
-            public void onClick(Widget sender) {
-                if (Window.confirm( "Are you sure you want to import? this will erase any content in the repository currently?" )) {
-                    LoadingPopup.showMessage( "Importing 'drools:repository' file" );
-                    impWidget.submit();
-                }
-            }
-        } ) );
 
-        impWidget.addFormHandler( new FormHandler() {
+        final FormPanel uploadFormPanel = new FormPanel();
+        uploadFormPanel.setAction( GWT.getModuleBaseURL() + "backup" );
+        uploadFormPanel.setEncoding( FormPanel.ENCODING_MULTIPART );
+        uploadFormPanel.setMethod( FormPanel.METHOD_POST );
+
+        HorizontalPanel panel = new HorizontalPanel();
+        uploadFormPanel.setWidget( panel );
+
+        final FileUpload upload = new FileUpload();
+        upload.setName( HTMLFileManagerFields.FILE_UPLOAD_FIELD_NAME_IMPORT );
+        panel.add( upload );
+
+        panel.add( new Button( "Import",
+                               new ClickListener() {
+                                   public void onClick(Widget sender) {
+                                       doImportFile( uploadFormPanel );
+                                   }
+
+                                private void doImportFile(final FormPanel uploadFormPanel) {
+                                       if (Window.confirm( "Are you sure you want to import? this will erase any content in the " +
+                                            "repository currently?" )) {
+                                           LoadingPopup.showMessage( "Importing repository, please wait, as this could take some time..." );
+                                           uploadFormPanel.submit();
+                                       }
+                                }
+                               } ) );
+
+        uploadFormPanel.addFormHandler( new FormHandler() {
             public void onSubmitComplete(FormSubmitCompleteEvent event) {
                 if (event.getResults().indexOf( "OK" ) > -1) {
                     Window.alert( "Rules repository imported successfully. Please refresh your browser (F5) to show the new content. ");
@@ -105,23 +123,24 @@
             }
 
             public void onSubmit(FormSubmitEvent event) {
-                if ( impWidget.getFilename().length() == 0 ) {
+                if ( upload.getFilename().length() == 0 ) {
                     Window.alert( "You did not specify an exported repository filename !" );
                     event.setCancelled( true );
-                } else if ( !impWidget.getFilename().endsWith( ".xml" ) ) {
+                } else if ( !upload.getFilename().endsWith( ".xml" ) ) {
                     Window.alert( "Please specify a valid repository xml file." );
                     event.setCancelled( true );
                 }
 
             }
         } );
-        return impWidget;
+
+        return uploadFormPanel;
     }
-    
 
     private void exportRepository() {
-        LoadingPopup.showMessage( "Exporting 'drools:repository' file" );
-        Window.open( GWT.getModuleBaseURL() + "fileManager?" + HTMLFileManagerFields.FORM_FIELD_REPOSITORY + "=true",
+
+        LoadingPopup.showMessage( "Exporting repository, please wait, as this could take some time..." );
+        Window.open( GWT.getModuleBaseURL() + "backup?" + HTMLFileManagerFields.FORM_FIELD_REPOSITORY + "=true",
                      "downloading...",
                      "" );
         LoadingPopup.close();

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/AssetFormats.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/AssetFormats.java	2007-04-30 07:46:08 UTC (rev 11501)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/AssetFormats.java	2007-04-30 07:47:48 UTC (rev 11502)
@@ -34,6 +34,8 @@
     /** use a DSL, not sure about this one - can use text or constrained editor */
     public static String DSL_TEMPLATE_RULE   = "brule";
 
+
+    
     /**
      * The following group the 
      */

Deleted: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/ImportWidget.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/ImportWidget.java	2007-04-30 07:46:08 UTC (rev 11501)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/ImportWidget.java	2007-04-30 07:47:48 UTC (rev 11502)
@@ -1,85 +0,0 @@
-package org.drools.brms.client.common;
-
-import com.google.gwt.core.client.GWT;
-import com.google.gwt.user.client.ui.FileUpload;
-import com.google.gwt.user.client.ui.FormPanel;
-import com.google.gwt.user.client.ui.HorizontalPanel;
-import com.google.gwt.user.client.ui.TextBox;
-import com.google.gwt.user.client.ui.Widget;
-
-/**
- * This builds an ImportWidget for providing common import file features in a 
- * form layout
- * 
- * @author Fernando Meyer
- */
-
-public class ImportWidget extends FormPanel {
-    
-    private HorizontalPanel panel;
-    private FileUpload upload; 
-    
-    
-    /**
-     * 
-     * @param field
-     * @param uuid
-     */
-    public ImportWidget(String field, String uuid) {
-        initWidgets( field, uuid );
-    }
-    
-    /**
-     * 
-     * @param field
-     */
-    public ImportWidget (String field) {
-        initWidgets( field, null );
-    }
-    
-    /**
-     * 
-     * @param field
-     * @param uuid
-     */
-    public void initWidgets(String field, String uuid) {
-        panel = new HorizontalPanel();
-
-        setAction( GWT.getModuleBaseURL() + "fileManager" );
-        setEncoding( FormPanel.ENCODING_MULTIPART );
-        setMethod( FormPanel.METHOD_POST );
-
-        setWidget( panel );
-
-        upload = new FileUpload();
-        
-        if ( uuid != null ) { 
-            panel.add( getHiddenField(HTMLFileManagerFields.FORM_FIELD_UUID, uuid) );
-        }
-        upload.setName( field );
-
-        panel.add( upload );
-        
-    }
-
-    /**
-     * Override the add method to insert widget on internal panel  
-     */
-    public void add (Widget a) {
-        panel.add( a );
-    }
-    
-    public String getFilename() {
-        return upload.getFilename();
-    }
-    
-    private TextBox getHiddenField(String name, String value) {
-        TextBox t = new TextBox();
-        t.setName( name );
-        t.setText( value );
-        t.setVisible( false );
-        return t;
-    }
-
-    
-}

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/packages/ModelAttachmentFileWidget.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/packages/ModelAttachmentFileWidget.java	2007-04-30 07:46:08 UTC (rev 11501)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/packages/ModelAttachmentFileWidget.java	2007-04-30 07:47:48 UTC (rev 11502)
@@ -3,21 +3,25 @@
 import org.drools.brms.client.common.ErrorPopup;
 import org.drools.brms.client.common.FormStyleLayout;
 import org.drools.brms.client.common.HTMLFileManagerFields;
-import org.drools.brms.client.common.ImportWidget;
-import org.drools.brms.client.common.LoadingPopup;
 import org.drools.brms.client.rpc.RuleAsset;
+import org.drools.brms.client.ruleeditor.RuleViewer;
 
 import com.google.gwt.core.client.GWT;
+import com.google.gwt.user.client.Command;
+import com.google.gwt.user.client.DeferredCommand;
 import com.google.gwt.user.client.Window;
 import com.google.gwt.user.client.ui.Button;
 import com.google.gwt.user.client.ui.ClickListener;
 import com.google.gwt.user.client.ui.Composite;
+import com.google.gwt.user.client.ui.FileUpload;
 import com.google.gwt.user.client.ui.FormHandler;
+import com.google.gwt.user.client.ui.FormPanel;
 import com.google.gwt.user.client.ui.FormSubmitCompleteEvent;
 import com.google.gwt.user.client.ui.FormSubmitEvent;
 import com.google.gwt.user.client.ui.HorizontalPanel;
 import com.google.gwt.user.client.ui.Image;
 import com.google.gwt.user.client.ui.Label;
+import com.google.gwt.user.client.ui.TextBox;
 import com.google.gwt.user.client.ui.Widget;
 
 /**
@@ -31,59 +35,45 @@
 public class ModelAttachmentFileWidget extends Composite {
 
 
+    private FormPanel form;
     private Button ok;
     private HorizontalPanel busy;
+    private RuleViewer viewer;
     
 
-    public ModelAttachmentFileWidget(final RuleAsset asset ) {
+    public ModelAttachmentFileWidget(final RuleAsset asset, final RuleViewer viewer) {
+        this.viewer = viewer;
         initWidgets(asset.uuid, asset.metaData.name);
+        initAssetHandlers();
     }
     
-    private Widget newImportWidget(final String uuid) {
-
-        final ImportWidget impWidget = new ImportWidget( HTMLFileManagerFields.UPLOAD_FIELD_NAME_ATTACH, uuid);
-
-        impWidget.add( new Button( "Import", new ClickListener() {
-           public void onClick(Widget sender) {
-               doImportFile();
-           }
+    protected void initWidgets(final String uuid, String formName) {
+        form = new FormPanel();
+        form.setAction( GWT.getModuleBaseURL() + "asset" );
+        form.setEncoding( FormPanel.ENCODING_MULTIPART );
+        form.setMethod( FormPanel.METHOD_POST );
         
-           private void doImportFile() {
-               if ( Window.confirm( "Are you sure you want to import? this will erase the previous file?" ) ) {  
-                   LoadingPopup.showMessage( "Importing file to asset" );
-                   impWidget.submit();
-               }
-           }
-           
-        } ) );
-
-        impWidget.addFormHandler( new FormHandler() {
-            public void onSubmitComplete(FormSubmitCompleteEvent event) {
-                if (event.getResults().indexOf( "OK" ) > -1) {
-                    Window.alert( "File imported successfully. Please refresh your browser (F5) to show the new content. ");
-                } else {
-                    ErrorPopup.showMessage( "Unable to import into the repository. Consult the server logs for error messages." );
-                }                
-                LoadingPopup.close();
-            }
-
-            public void onSubmit(FormSubmitEvent event) {
-
-            }
-        } );
+        FileUpload up = new FileUpload();
+        up.setName( HTMLFileManagerFields.UPLOAD_FIELD_NAME_ATTACH );        
+        HorizontalPanel fields = new HorizontalPanel();
+        fields.add( getHiddenField(HTMLFileManagerFields.FORM_FIELD_UUID, uuid) );
+  
+        ok = new Button("Upload");
+                
+        fields.add( up );
+        fields.add( ok );
         
-        return impWidget;
-    }
-    
-    
-    protected void initWidgets(final String uuid, String formName) {
+        form.add( fields );
+        
         FormStyleLayout layout = new FormStyleLayout("images/model_large.png", 
                                                      formName);
-        layout.addAttribute( "Upload new version:", newImportWidget(uuid) );
+
+        
+        layout.addAttribute( "Upload new version:", form );
         Button dl = new Button("Download");
         dl.addClickListener( new ClickListener() {
             public void onClick(Widget w) {
-                Window.open( GWT.getModuleBaseURL() + "fileManager?" +  HTMLFileManagerFields.FORM_FIELD_UUID + "=" + uuid, 
+                Window.open( GWT.getModuleBaseURL() + "asset?" +  HTMLFileManagerFields.FORM_FIELD_UUID + "=" + uuid, 
                              "downloading...", "" );
             }            
         });
@@ -95,16 +85,55 @@
         busy.add( new Image("images/spinner.gif") );
         
         layout.addRow( busy );
+        ok.addClickListener( new ClickListener() {
+            public void onClick(Widget w) {
+                showUploadingBusy();
+                submitUpload();
+            }            
+        });
+                
         initWidget( layout );
         
         this.setStyleName( "editable-Surface" );        
     }
+    
+    void initAssetHandlers( ) {
+        form.addFormHandler( new FormHandler() {
 
+            public void onSubmit(FormSubmitEvent ev) {                
+            }
+
+            public void onSubmitComplete(FormSubmitCompleteEvent ev) {  
+                    if (ev.getResults().indexOf( "OK" ) > -1) {                        
+                        viewer.refreshDataAndView();
+                    } else {
+                        ErrorPopup.showMessage( "Unable to upload the file." );
+                    }
+            }
+            
+        });        
+    }
+
+    protected void submitUpload() {
+        DeferredCommand.add( new Command() {
+            public void execute() {
+                form.submit();
+            }            
+        });
+    }
+
     protected void showUploadingBusy() {
         this.ok.setVisible( false );
-//        this.form.setVisible( false );
+        this.form.setVisible( false );
         this.busy.setVisible( true );
     }
 
+    private TextBox getHiddenField(String name, String value) {
+        TextBox t = new TextBox();
+        t.setName( name );
+        t.setText( value );
+        t.setVisible( false );
+        return t;
+    }
     
 }

Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/packages/PackageBuilderWidget.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/packages/PackageBuilderWidget.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/packages/PackageBuilderWidget.java	2007-04-30 07:47:48 UTC (rev 11502)
@@ -0,0 +1,291 @@
+package org.drools.brms.client.packages;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.drools.brms.client.common.ErrorPopup;
+import org.drools.brms.client.common.FormStyleLayout;
+import org.drools.brms.client.common.FormStylePopup;
+import org.drools.brms.client.common.GenericCallback;
+import org.drools.brms.client.common.InfoPopup;
+import org.drools.brms.client.common.LoadingPopup;
+import org.drools.brms.client.rpc.BuilderResult;
+import org.drools.brms.client.rpc.PackageConfigData;
+import org.drools.brms.client.rpc.RepositoryServiceFactory;
+import org.drools.brms.client.rpc.SnapshotInfo;
+import org.drools.brms.client.rulelist.EditItemEvent;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.user.client.Command;
+import com.google.gwt.user.client.DeferredCommand;
+import com.google.gwt.user.client.Window;
+import com.google.gwt.user.client.rpc.AsyncCallback;
+import com.google.gwt.user.client.ui.AbsolutePanel;
+import com.google.gwt.user.client.ui.Button;
+import com.google.gwt.user.client.ui.ClickListener;
+import com.google.gwt.user.client.ui.Composite;
+import com.google.gwt.user.client.ui.FlexTable;
+import com.google.gwt.user.client.ui.HTML;
+import com.google.gwt.user.client.ui.HorizontalPanel;
+import com.google.gwt.user.client.ui.Hyperlink;
+import com.google.gwt.user.client.ui.Image;
+import com.google.gwt.user.client.ui.Label;
+import com.google.gwt.user.client.ui.Panel;
+import com.google.gwt.user.client.ui.RadioButton;
+import com.google.gwt.user.client.ui.SimplePanel;
+import com.google.gwt.user.client.ui.TextBox;
+import com.google.gwt.user.client.ui.VerticalPanel;
+import com.google.gwt.user.client.ui.Widget;
+
+/**
+ * This is the widget for building packages, validating etc. 
+ * 
+ * @author Michael Neale
+ */
+public class PackageBuilderWidget extends Composite {
+
+
+    public FormStyleLayout layout;
+    private PackageConfigData conf;
+    private EditItemEvent editEvent;
+
+    
+    public PackageBuilderWidget(PackageConfigData conf, EditItemEvent editEvent) {
+        layout = new FormStyleLayout("images/package_builder.png", "Verify and assemble package");
+        this.conf = conf;
+        this.editEvent = editEvent;
+        
+        final SimplePanel buildResults = new SimplePanel();
+
+        Button b = new Button("Build package");
+        b.addClickListener( new ClickListener() {
+            public void onClick(Widget w) {
+                doBuild(buildResults);
+            }
+        } );
+        layout.addAttribute( "Build binary package:", b);
+        layout.addRow( new HTML("<i><small>Building a package will collect all the assets, validate and compile into a deployable package.</small></i>") );
+        layout.addRow( buildResults );
+        
+        layout.setStyleName( "package-Editor" );
+        
+        layout.setWidth( "100%" );
+        
+        initWidget( layout );
+    }
+    
+    
+    
+    /**
+     * Actually do the building.
+     * @param buildResults The panel to stuff the results in.
+     */
+    private void doBuild(final Panel buildResults) {
+
+        buildResults.clear();
+        
+        final HorizontalPanel busy = new HorizontalPanel();
+        busy.add( new Label("Validating and building package, please wait...") );
+        busy.add( new Image("images/spinner.gif") );
+        
+        buildResults.add( busy );
+        
+        DeferredCommand.add( new Command() {
+            public void execute() {
+                RepositoryServiceFactory.getService().buildPackage( conf.uuid, new AsyncCallback() {
+                    public void onSuccess(Object data) {
+                        if (data == null) {
+                            showSuccessfulBuild(buildResults);
+                            
+                        } else {
+                            BuilderResult[] results = (BuilderResult[]) data;
+                            showBuilderErrors(results, buildResults);
+                        }
+                    }
+                    public void onFailure(Throwable t) {
+                        ErrorPopup.showMessage( t.getMessage() );
+                        buildResults.clear();
+                    }
+                });
+            }
+        });
+        
+
+        
+    }    
+    
+    /**
+     * This is called to display the success (and a download option).
+     * @param buildResults
+     */
+    private void showSuccessfulBuild(Panel buildResults) {
+        buildResults.clear();
+        VerticalPanel vert = new VerticalPanel();
+        
+        vert.add( new HTML("<img src='images/tick_green.gif'/><i>Package built successfully.</i>") );
+        final String hyp = getDownloadLink(this.conf);
+        Button download = new Button("Download binary package");
+        download.addClickListener( new ClickListener()  {
+            public void onClick(Widget arg0) {
+                        Window.open( hyp, "downloading...", "" );
+            }
+        });
+        
+        vert.add( download );
+        
+        Button snap = new Button("Create snapshot for deployment");
+        snap.addClickListener( new ClickListener() {
+            public void onClick(Widget w) {
+                showSnapshotDialog(w);
+            }
+        } );
+        vert.add( snap );
+        
+        buildResults.add( vert );
+    }
+
+
+    /**
+     * Get a download link for the binary package.
+     */
+    public static String getDownloadLink(PackageConfigData conf) {
+        String hurl = GWT.getModuleBaseURL() + "package/" + conf.name;
+        if (!conf.isSnapshot) {
+            hurl = hurl + "/" + PackageSnapshotView.LATEST_SNAPSHOT;
+        } else {
+            hurl = hurl + "/" + conf.snapshotName;
+        }
+        final String uri = hurl;
+        return uri;
+    }
+    
+    
+    /**
+     * This is called in the unhappy event of there being errors.  
+     */
+    private void showBuilderErrors(BuilderResult[] results, Panel buildResults) {
+        buildResults.clear();
+        
+        FlexTable errTable = new FlexTable();
+        errTable.setStyleName( "build-Results" );
+        errTable.setText( 0, 1, "Format" );
+        errTable.setText( 0, 2, "Name" );
+        errTable.setText( 0, 3, "Message" );
+        
+        for ( int i = 0; i < results.length; i++ ) {
+            int row = i+1;
+            final BuilderResult res = results[i];
+            errTable.setWidget( row, 0, new Image("images/error.gif"));
+            errTable.setText( row, 1, res.assetFormat );
+            errTable.setText( row, 2, res.assetName );
+            errTable.setText( row, 3, res.message );
+            
+            if (!"package".equals( res.assetFormat)) {
+                Button show = new Button("Show");
+                show.addClickListener( new ClickListener() {
+                    public void onClick(Widget w) {
+                        editEvent.open( res.uuid );
+                    }
+                } );
+                errTable.setWidget( row, 4, show );                
+            }
+        }
+        
+        errTable.setWidth( "100%" );
+        buildResults.add( errTable );
+        
+    }        
+    
+    /**
+     * This will display a dialog for creating a snapshot.
+     */
+    private void showSnapshotDialog(Widget w) {
+        LoadingPopup.showMessage( "Loading existing snapshots..." );
+        final FormStylePopup form = new FormStylePopup("images/snapshot.png", "Create a snapshot for deployment.");
+        form.addRow( new HTML("<i>A package snapshot is essentially a " +
+                "read only 'locked in' and labelled view of a package at a point in time, which can be used for deployment.</i>") );
+        
+        final VerticalPanel vert = new VerticalPanel();
+        form.addAttribute( "Choose or create snapshot name:",  vert);
+        final List radioList = new ArrayList();
+        final TextBox newName = new TextBox();
+        final String newSnapshotText = "NEW: ";
+        
+        RepositoryServiceFactory.getService().listSnapshots( conf.name, new GenericCallback() {
+            public void onSuccess(Object data) {
+                SnapshotInfo[] result = (SnapshotInfo[]) data;
+                for ( int i = 0; i < result.length; i++ ) {
+                    RadioButton existing = new RadioButton("snapshotNameGroup", result[i].name);
+                    radioList.add( existing );
+                    vert.add( existing );    
+                }
+                HorizontalPanel newSnap = new HorizontalPanel();
+                
+                final RadioButton newSnapRadio = new RadioButton("snapshotNameGroup", newSnapshotText);                
+                newSnap.add( newSnapRadio );
+                newName.setEnabled( false );
+                newSnapRadio.addClickListener( new ClickListener() {
+
+                    public void onClick(Widget w) {
+                        newName.setEnabled( true );
+                    }
+                    
+                });
+                
+                newSnap.add( newName );
+                radioList.add( newSnapRadio );
+                vert.add( newSnap );
+                
+                LoadingPopup.close();
+            }
+        });
+        
+        final TextBox comment = new TextBox();
+        form.addAttribute( "Comment:", comment );
+        
+        Button create = new Button("Create new snapshot");
+        form.addAttribute( "", create );
+        
+        create.addClickListener( new ClickListener() {
+            String name = "";
+            public void onClick(Widget w) {
+                boolean replace = false;
+                for ( Iterator iter = radioList.iterator(); iter.hasNext(); ) {
+                    RadioButton but = (RadioButton) iter.next();
+                    if (but.isChecked()) {
+                        name = but.getText();
+                        if (!but.getText().equals( newSnapshotText )) {
+                            replace = true;
+                        }
+                        break;
+                    }
+                }
+                if (name.equals( newSnapshotText )) {
+                    name = newName.getText();
+                }
+                
+                if (name.equals( "" )) {
+                    Window.alert( "You have to enter or chose a label (name) for the snapshot." );
+                    return;
+                }
+                
+                
+                RepositoryServiceFactory.getService().createPackageSnapshot( conf.name, name, replace, comment.getText(), new GenericCallback() {
+                    public void onSuccess(Object data) {
+                        Window.alert( "The snapshot called: " + name + " was successfully created." );
+                        form.hide();
+                    }
+                });
+            }
+        } );
+        
+        form.setWidth( "50%" );
+        form.setPopupPosition( Window.getClientWidth() / 3, Window.getClientHeight() / 3 );
+        form.show();
+        
+        
+    }    
+    
+    
+}


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

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/packages/PackageEditor.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/packages/PackageEditor.java	2007-04-30 07:46:08 UTC (rev 11501)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/packages/PackageEditor.java	2007-04-30 07:47:48 UTC (rev 11502)
@@ -1,45 +1,26 @@
 package org.drools.brms.client.packages;
 
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.drools.brms.client.common.ErrorPopup;
 import org.drools.brms.client.common.FormStyleLayout;
-import org.drools.brms.client.common.FormStylePopup;
 import org.drools.brms.client.common.GenericCallback;
 import org.drools.brms.client.common.ImageButton;
-import org.drools.brms.client.common.InfoPopup;
 import org.drools.brms.client.common.LoadingPopup;
 import org.drools.brms.client.common.StatusChangePopup;
 import org.drools.brms.client.common.ValidationMessageWidget;
 import org.drools.brms.client.common.YesNoDialog;
-import org.drools.brms.client.rpc.BuilderResult;
 import org.drools.brms.client.rpc.PackageConfigData;
 import org.drools.brms.client.rpc.RepositoryServiceFactory;
-import org.drools.brms.client.rpc.SnapshotInfo;
 import org.drools.brms.client.rpc.ValidatedResponse;
 
 import com.google.gwt.user.client.Command;
-import com.google.gwt.user.client.DeferredCommand;
 import com.google.gwt.user.client.Timer;
 import com.google.gwt.user.client.Window;
-import com.google.gwt.user.client.rpc.AsyncCallback;
-import com.google.gwt.user.client.ui.AbsolutePanel;
 import com.google.gwt.user.client.ui.Button;
 import com.google.gwt.user.client.ui.ChangeListener;
 import com.google.gwt.user.client.ui.ClickListener;
-import com.google.gwt.user.client.ui.FlexTable;
-import com.google.gwt.user.client.ui.FormHandler;
-import com.google.gwt.user.client.ui.FormPanel;
-import com.google.gwt.user.client.ui.FormSubmitCompleteEvent;
-import com.google.gwt.user.client.ui.FormSubmitEvent;
 import com.google.gwt.user.client.ui.HTML;
 import com.google.gwt.user.client.ui.HorizontalPanel;
 import com.google.gwt.user.client.ui.Image;
 import com.google.gwt.user.client.ui.Label;
-import com.google.gwt.user.client.ui.Panel;
-import com.google.gwt.user.client.ui.RadioButton;
 import com.google.gwt.user.client.ui.SimplePanel;
 import com.google.gwt.user.client.ui.TextArea;
 import com.google.gwt.user.client.ui.TextBox;
@@ -61,35 +42,24 @@
 
     public PackageEditor(PackageConfigData data) {
         this.conf = data;
-        
         setStyleName( "package-Editor" );
-
         setWidth( "100%" );
-        
         refreshWidgets();
     }
 
     private void refreshWidgets() {
         clear();
-        addHeader( "images/package_large.png", this.conf.name );
-        
+        //addHeader( "images/package_large.png", this.conf.name );
 
         addRow( warnings() );
-
-        //build stuff
-        final SimplePanel buildResults = new SimplePanel();
-        buildResults.setStyleName( "build-Results" );
-        addAttribute( "Build binary package", buildButton(buildResults));
-        addRow( buildResults );
         
-      
-        
         addAttribute( "Description:", description() );
         addAttribute( "Header:", header() );
-        addAttribute( "External URI:", externalURI() );
+        //addAttribute( "External repository sync URI:", externalURI() );
         addRow(new HTML("<hr/>"));
         addAttribute( "Last modified:", new Label(this.conf.lastModified.toLocaleString())  );
         addAttribute( "Last contributor:", new Label(this.conf.lasContributor));
+
         addRow(new HTML("<hr/>"));
         
         status = new HTML();
@@ -104,107 +74,29 @@
         } );
         statusBar.add( status );
         
-        statusBar.add( editState );
+        if (!this.conf.isSnapshot) {
+            statusBar.add( editState );
+        }
         
         setState(conf.state);
         addAttribute("Status:", statusBar);
 
-        addRow( saveWidgets() );
+        if (!conf.isSnapshot) {
+            addRow( saveWidgets() );
+        }
         addRow(new HTML("<hr/>"));
 
         
     }
     
-    private Widget buildButton(final Panel buildResults) {
-        final Button build = new Button("Build");
-        InfoPopup info = new InfoPopup("Building", "Building the package will collate, " +
-                "validate, and compile all the rules into a binary package, ready for deployment." +
-                "If successful, a package will be downloaded. If not, a list of errors will show what needs to be addressed.");
-        final AbsolutePanel ab = new AbsolutePanel();
-        ab.add( build ); ab.add( info );
-        build.addClickListener( new ClickListener() {
-            public void onClick(Widget w) {
-                build.setEnabled( false );
-                doBuild(buildResults);
-                build.setEnabled( true );
-            }
-        });          
-        return ab;
-    }
 
-    /**
-     * Actually do the building.
-     * @param buildResults The panel to stuff the results in.
-     */
-    private void doBuild(final Panel buildResults) {
-        buildResults.clear();
-        
-        final HorizontalPanel busy = new HorizontalPanel();
-        busy.add( new Label("Validating and building package...") );
-        busy.add( new Image("images/spinner.gif") );
-        
-        buildResults.add( busy );
-        
-        DeferredCommand.add( new Command() {
-            public void execute() {
-                RepositoryServiceFactory.getService().buildPackage( conf.uuid, new AsyncCallback() {
-                    public void onSuccess(Object data) {
-                        if (data == null) {
-                            showSuccessfulBuild(buildResults);
-                            
-                        } else {
-                            BuilderResult[] results = (BuilderResult[]) data;
-                            showBuilderErrors(results, buildResults);
-                        }
-                    }
-                    public void onFailure(Throwable t) {
-                        ErrorPopup.showMessage( t.getMessage() );
-                        buildResults.clear();
-                    }
-                });
-            }
-        });
-        
 
-        
-    }
+
     
-    /**
-     * This is called to display the success (and a download option).
-     * @param buildResults
-     */
-    private void showSuccessfulBuild(Panel buildResults) {
-        buildResults.clear();
-        buildResults.add( new Label("Package build successfully.") );
-    }
+
     
-    /**
-     * This is called in the unhappy event of there being errors.  
-     */
-    private void showBuilderErrors(BuilderResult[] results, Panel buildResults) {
-        buildResults.clear();
-        
-        FlexTable errTable = new FlexTable();
-        errTable.setStyleName( "error-List" );
-        errTable.setText( 0, 1, "Format" );
-        errTable.setText( 0, 2, "Name" );
-        errTable.setText( 0, 3, "Message" );
-        
-        for ( int i = 0; i < results.length; i++ ) {
-            int row = i+1;
-            BuilderResult res = results[i];
-            errTable.setWidget( row, 0, new Image("images/error.gif"));
-            errTable.setText( row, 1, res.assetFormat );
-            errTable.setText( row, 2, res.assetName );
-            errTable.setText( row, 3, res.message );
-            
-            errTable.setWidget( row, 4, new Button("show") );
-        }
-        
-        buildResults.add( errTable );
-        
-    }    
 
+
     private Widget warnings() {
         if (this.previousResponse != null && this.previousResponse.hasErrors) {
             Image img = new Image("images/warning.gif");
@@ -241,7 +133,6 @@
 
     private void setState(String state) {
         status.setHTML( "<b>" + state + "</b>" );
-        
     }
 
     /**
@@ -251,133 +142,41 @@
         
         HorizontalPanel horiz = new HorizontalPanel();
         
-        Button save = new Button("Save configuration changes");
+
         
-        save.addClickListener( new ClickListener() {
-            public void onClick(Widget w) {
-                doSaveAction();                
-            }
-        } );
+            Button save = new Button("Save configuration changes");
+            
+            save.addClickListener( new ClickListener() {
+                public void onClick(Widget w) {
+                    doSaveAction();                
+                }
+            } );
+            
+            horiz.add( save );
+            
+            
+            Button archive = new Button("Archive");
+            archive.addClickListener(new ClickListener() {
+                public void onClick(Widget w) {
+                    YesNoDialog diag = new YesNoDialog("Are you sure you want to archive (remove) this package?", new Command() {
+                        public void execute() {
+                            conf.archived = true;
+                            doSaveAction();
+                            PackageExplorerWidget local = (PackageExplorerWidget) getParent().getParent();
+                            local.refreshTreeView();
+                        }                        
+                    });
+                    diag.setPopupPosition(Window.getClientWidth() / 2, Window.getClientHeight() / 2);
+                    diag.show();
+                }
+            });
+            horiz.add(archive);
         
-        horiz.add( save );
-        
-        Button snap = new Button("Create snapshot for deployment");
-        snap.addClickListener( new ClickListener() {
-            public void onClick(Widget w) {
-                showSnapshotDialog(w);
-            }
-        } );
-        horiz.add( snap );
-        
-        Button archive = new Button("Archive");
-        archive.addClickListener(new ClickListener() {
-            public void onClick(Widget w) {
-                YesNoDialog diag = new YesNoDialog("Are you sure you want to archive (remove) this package?", new Command() {
-                    public void execute() {
-                        conf.archived = true;
-                        doSaveAction();
-                        PackageExplorerWidget local = (PackageExplorerWidget) getParent().getParent();
-                        local.refreshTreeView();
-                    }                        
-                });
-                diag.setPopupPosition(Window.getClientWidth() / 2, Window.getClientHeight() / 2);
-                diag.show();
-            }
-        });
-        horiz.add(archive);
                 
         return horiz;
     }
 
-    /**
-     * This will display a dialog for creating a snapshot.
-     */
-    private void showSnapshotDialog(Widget w) {
-        LoadingPopup.showMessage( "Loading existing snapshots..." );
-        final FormStylePopup form = new FormStylePopup("images/snapshot.png", "Create a snapshot for deployment.");
-        form.addRow( new HTML("<i>A package snapshot is essentially a " +
-                "read only 'locked in' and labelled view of a package at a point in time, which can be used for deployment.</i>") );
-        
-        final VerticalPanel vert = new VerticalPanel();
-        form.addAttribute( "Choose or create snapshot name:",  vert);
-        final List radioList = new ArrayList();
-        final TextBox newName = new TextBox();
-        final String newSnapshotText = "NEW: ";
-        
-        RepositoryServiceFactory.getService().listSnapshots( conf.name, new GenericCallback() {
-            public void onSuccess(Object data) {
-                SnapshotInfo[] result = (SnapshotInfo[]) data;
-                for ( int i = 0; i < result.length; i++ ) {
-                    RadioButton existing = new RadioButton("snapshotNameGroup", result[i].name);
-                    radioList.add( existing );
-                    vert.add( existing );    
-                }
-                HorizontalPanel newSnap = new HorizontalPanel();
-                
-                final RadioButton newSnapRadio = new RadioButton("snapshotNameGroup", newSnapshotText);                
-                newSnap.add( newSnapRadio );
-                newName.setEnabled( false );
-                newSnapRadio.addClickListener( new ClickListener() {
 
-                    public void onClick(Widget w) {
-                        newName.setEnabled( true );
-                    }
-                    
-                });
-                
-                newSnap.add( newName );
-                radioList.add( newSnapRadio );
-                vert.add( newSnap );
-                
-                LoadingPopup.close();
-            }
-        });
-        
-        final TextBox comment = new TextBox();
-        form.addAttribute( "Comment:", comment );
-        
-        Button create = new Button("Create new snapshot");
-        form.addAttribute( "", create );
-        
-        create.addClickListener( new ClickListener() {
-            String name = "";
-            public void onClick(Widget w) {
-                boolean replace = false;
-                for ( Iterator iter = radioList.iterator(); iter.hasNext(); ) {
-                    RadioButton but = (RadioButton) iter.next();
-                    if (but.isChecked()) {
-                        name = but.getText();
-                        if (!but.getText().equals( newSnapshotText )) {
-                            replace = true;
-                        }
-                        break;
-                    }
-                }
-                if (name.equals( newSnapshotText )) {
-                    name = newName.getText();
-                }
-                
-                if (name.equals( "" )) {
-                    Window.alert( "You have to enter or chose a label (name) for the snapshot." );
-                    return;
-                }
-                
-                
-                RepositoryServiceFactory.getService().createPackageSnapshot( conf.name, name, replace, comment.getText(), new GenericCallback() {
-                    public void onSuccess(Object data) {
-                        Window.alert( "The snapshot called: " + name + " was successfully created." );
-                        form.hide();
-                    }
-                });
-            }
-        } );
-        
-        form.setWidth( "50%" );
-        form.setPopupPosition( Window.getClientWidth() / 3, Window.getClientHeight() / 3 );
-        form.show();
-        
-        
-    }
 
     private void doSaveAction() {
         LoadingPopup.showMessage( "Saving package configuration. Please wait ..." );

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/packages/PackageExplorerWidget.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/packages/PackageExplorerWidget.java	2007-04-30 07:46:08 UTC (rev 11501)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/packages/PackageExplorerWidget.java	2007-04-30 07:47:48 UTC (rev 11502)
@@ -1,6 +1,7 @@
 package org.drools.brms.client.packages;
 
 import org.drools.brms.client.common.AssetFormats;
+import org.drools.brms.client.common.FormStyleLayout;
 import org.drools.brms.client.common.FormStylePopup;
 import org.drools.brms.client.common.GenericCallback;
 import org.drools.brms.client.common.LoadingPopup;
@@ -13,6 +14,8 @@
 
 import com.google.gwt.user.client.Command;
 import com.google.gwt.user.client.DeferredCommand;
+import com.google.gwt.user.client.Window;
+import com.google.gwt.user.client.ui.AbsolutePanel;
 import com.google.gwt.user.client.ui.Button;
 import com.google.gwt.user.client.ui.ClickListener;
 import com.google.gwt.user.client.ui.Composite;
@@ -22,6 +25,8 @@
 import com.google.gwt.user.client.ui.HasVerticalAlignment;
 import com.google.gwt.user.client.ui.HorizontalPanel;
 import com.google.gwt.user.client.ui.Image;
+import com.google.gwt.user.client.ui.Label;
+import com.google.gwt.user.client.ui.StackPanel;
 import com.google.gwt.user.client.ui.TextArea;
 import com.google.gwt.user.client.ui.TextBox;
 import com.google.gwt.user.client.ui.Tree;
@@ -33,6 +38,7 @@
 
 /**
  * Contains the explorer to view (and lazy load) the packages in a repository.
+ * This uses the explorer type motif, with a tree on the left, and a list or "panel" on the right.
  * 
  * @author Michael Neale
  */
@@ -44,12 +50,14 @@
     private AssetItemListViewer listView;
     private EditItemEvent editEvent;
     private String uuid;
+
+    private String snapshotName;
     
     /**
      * This is for the generic and re-useable package explorer.
      */    
     public PackageExplorerWidget(EditItemEvent edit) {
-        this(edit, null, false);
+        this(edit, null, null);
     }
     
     /**
@@ -57,10 +65,12 @@
      * @param edit The edit event (action) when the user wants to open an item.
      * @param uuid The package to lock this to.
      */
-    public PackageExplorerWidget(EditItemEvent edit, String uuid, boolean readonly) {
+    public PackageExplorerWidget(EditItemEvent edit, String uuid, String snapshotName) {
         
         this.editEvent = edit;
         this.uuid = uuid;
+        this.snapshotName = snapshotName;
+        
         exTree = new Tree();
         layout = new FlexTable();
         
@@ -83,7 +93,7 @@
         exTree.addTreeListener( treeListener );
         VerticalPanel left = new VerticalPanel();
 
-        if (!readonly) {
+        if (snapshotName == null) {
             //only care about new buttons if its not read only
             FlexTable buttons = new FlexTable();
             buttons.getCellFormatter().setStyleName( 0, 0, "new-asset-Icons" );
@@ -353,8 +363,45 @@
 
             public void onSuccess(Object data) {
                 PackageConfigData conf = (PackageConfigData) data;
-                PackageEditor ed = new PackageEditor(conf);
-                layout.setWidget( 0, 1, ed );              
+                
+                StackPanel sp = new StackPanel();
+                
+                FormStyleLayout infoLayout = new FormStyleLayout("images/package_large.png", conf.name);
+                infoLayout.setStyleName( "package-Editor" );
+                infoLayout.setWidth( "100%" );
+                infoLayout.addAttribute( "Description:", new Label(conf.description) );
+                infoLayout.addAttribute( "Date created:", new Label(conf.dateCreated.toLocaleString()));
+                
+                if (conf.isSnapshot) {
+                    infoLayout.addAttribute( "Snapshot created on:", new Label(conf.lastModified.toLocaleString()) );
+                    infoLayout.addAttribute( "Snapshot comment:", new Label(conf.checkinComment) );
+                    final String uri = PackageBuilderWidget.getDownloadLink( conf );
+                    Button download = new Button("Download package");
+                    download.addClickListener( new ClickListener() {
+                        public void onClick(Widget arg0) {
+                            Window.open( uri, "downloading...", "" );
+                        }                        
+                    });
+                    infoLayout.addAttribute( "Download package:", download );
+                    infoLayout.addAttribute( "Package URI:", new Label(uri) );
+                }
+                
+                if (!conf.isSnapshot) {
+                    infoLayout.addRow( new HTML("<i>Choose one of the options below</i>") );
+                }                
+                
+                sp.add( infoLayout, "<img src='images/information.gif'/>Info", true );
+                if (!conf.isSnapshot) {
+                    sp.add( new PackageEditor(conf), "<img src='images/package.gif'/>Edit Package configuration", true);
+                    sp.add( new PackageBuilderWidget(conf, editEvent), "<img src='images/package_build.gif'/>Build, validate and deploy", true );
+                } else {
+                    sp.add( new PackageEditor(conf),  "<img src='images/package.gif'/>View Package configuration", true);
+                    
+                }
+                
+                sp.setWidth( "100%" );
+                
+                layout.setWidget( 0, 1, sp );              
             }            
         });
         

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/packages/PackageManagerView.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/packages/PackageManagerView.java	2007-04-30 07:46:08 UTC (rev 11501)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/packages/PackageManagerView.java	2007-04-30 07:47:48 UTC (rev 11502)
@@ -14,10 +14,11 @@
  * The first tab always shows the list of packages in tree form, 
  * with a list/explorer like motif.
  * 
+ * This can also be specified to only show one package (ie when viewing a snapshot).
+ * 
  * Each editor that is opened is opened in a new tab.
  * 
  * @author Michael Neale
- *
  */
 public class PackageManagerView extends Composite {
 
@@ -29,20 +30,21 @@
      * not including snapshots.
      */
     public PackageManagerView() {
-        this(null, false);
+        this(null, null);
     }
 
     /**
      * This is used when you only want to view one package.
      * @param packageUUID The UUID of the package.
      */
-    public PackageManagerView(String packageUUID, final boolean readonly) {
+    public PackageManagerView(String packageUUID, final String snapshotName) {
         tab = new TabPanel();
         tab.setWidth("100%");
-        tab.setHeight("100%");   
+        tab.setHeight("100%");
+        
         EditItemEvent editEvent = new EditItemEvent() {
             public void open(String key) {
-                EditorLauncher.showLoadEditor( openedViewers, tab, key, readonly );
+                EditorLauncher.showLoadEditor( openedViewers, tab, key, (snapshotName != null) );
             }
         };
         PackageExplorerWidget explorer = null;
@@ -50,7 +52,7 @@
         if (packageUUID == null) {
             explorer = new PackageExplorerWidget(editEvent);            
         } else {
-            explorer = new PackageExplorerWidget(editEvent, packageUUID, readonly);
+            explorer = new PackageExplorerWidget(editEvent, packageUUID, snapshotName);
         }
         
         tab.add( explorer,  "Explore");        

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/packages/PackageSnapshotView.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/packages/PackageSnapshotView.java	2007-04-30 07:46:08 UTC (rev 11501)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/packages/PackageSnapshotView.java	2007-04-30 07:47:48 UTC (rev 11502)
@@ -42,6 +42,8 @@
     private RepositoryServiceAsync service;
     private TabPanel tab;
     private FlexTable layout;
+    
+    public static final String LATEST_SNAPSHOT = "LATEST";    
 
     public PackageSnapshotView() {
         
@@ -267,14 +269,14 @@
             public void onClick(Widget w) {
                 tab.remove( 1 );
                 tab.selectTab( 0 );
-            }
+            } 
         } );
         horiz.add( close );
         viewLayout.setWidget( 0, 0, horiz );
         FlexCellFormatter formatter = viewLayout.getFlexCellFormatter();
         formatter.setStyleName( 0, 0, "editable-Surface" );
         
-        viewLayout.setWidget( 1, 0, new PackageManagerView(uuid, true) );
+        viewLayout.setWidget( 1, 0, new PackageManagerView(uuid, snapshotName) );
         
         viewLayout.setWidth( "100%" );
         viewLayout.setHeight( "100%" );

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/PackageConfigData.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/PackageConfigData.java	2007-04-30 07:46:08 UTC (rev 11501)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/PackageConfigData.java	2007-04-30 07:47:48 UTC (rev 11502)
@@ -22,4 +22,8 @@
     public String lasContributor;
     public String state;
     public boolean archived = false;
+    public boolean isSnapshot = false;
+    public String snapshotName;
+    public Date dateCreated;
+    public String checkinComment;
 }

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/EditorLauncher.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/EditorLauncher.java	2007-04-30 07:46:08 UTC (rev 11501)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/EditorLauncher.java	2007-04-30 07:47:48 UTC (rev 11502)
@@ -40,7 +40,7 @@
         } else if ( asset.metaData.format.equals( AssetFormats.DSL_TEMPLATE_RULE ) ) {
             return new DSLRuleEditor( asset );
         } else if ( asset.metaData.format.equals( AssetFormats.MODEL ) ) {
-            return new ModelAttachmentFileWidget( asset );
+            return new ModelAttachmentFileWidget( asset, viewer );
         } else {
 
             return new DefaultRuleContentWidget( asset );

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/public/JBRMS.css
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/public/JBRMS.css	2007-04-30 07:46:08 UTC (rev 11501)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/public/JBRMS.css	2007-04-30 07:47:48 UTC (rev 11502)
@@ -340,6 +340,23 @@
   font-color: white !important;
 }
 
+.build-Results {
+	border: 1px solid #666;
+	background-color: white;
+	font-size: small;
+	border-width: 1px;
+	border-collapse: collapse
+	border-style: inset;
+}
+
+
+
+
+
+
+
+
+
 .welcome-Page {
   width: 100%;
   height: 100%;

Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/public/images/package_build.gif
===================================================================
(Binary files differ)


Property changes on: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/public/images/package_build.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/public/images/package_builder.png
===================================================================
(Binary files differ)


Property changes on: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/public/images/package_builder.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/public/images/tick_green.gif
===================================================================
(Binary files differ)


Property changes on: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/public/images/tick_green.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Deleted: 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-30 07:46:08 UTC (rev 11501)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/FileUploadServlet.java	2007-04-30 07:47:48 UTC (rev 11502)
@@ -1,141 +0,0 @@
-package org.drools.brms.server;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.PrintWriter;
-
-import javax.jcr.PathNotFoundException;
-import javax.jcr.RepositoryException;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.drools.brms.client.common.HTMLFileManagerFields;
-import org.drools.brms.server.util.FileManagerUtils;
-import org.drools.brms.server.util.FormData;
-import org.drools.brms.server.util.TestEnvironmentSessionHelper;
-import org.drools.repository.RulesRepository;
-import org.jboss.seam.Component;
-import org.jboss.seam.contexts.Contexts;
-
-/**
- * Files can be uploaded as part of the repo (eg model classes, spreadsheets).
- * This servlet supports the uploading and downloading of files 
- * in assets in the repository.
- * 
- * @author Michael Neale
- * @author Fernando Meyer
- */
-public class FileUploadServlet extends HttpServlet {
-
-    private static final long serialVersionUID = 3909768997932550498L;
-    final FileManagerUtils uploadHelper = new FileManagerUtils();
-    
-
-    /**
-     * Posting accepts content of various types - 
-     * may be an attachement for an asset, or perhaps a repository import to process.
-     */
-    protected void doPost(HttpServletRequest request,
-                          HttpServletResponse response) throws ServletException,
-                                                       IOException {
-        FormData uploadItem = new FileManagerUtils().getFormData( request );
-        
-        if ( uploadItem.getFile().getFieldName().equals( HTMLFileManagerFields.FILE_UPLOAD_FIELD_NAME_IMPORT ) ) {
-            //importing a while repo
-            response.getWriter().write(processImportRepository( uploadItem.getFile().getInputStream() ));
-            return;
-        } else if ( uploadItem.getFile() != null && uploadItem.getUuid() != null ) {
-            //attaching to an asset.
-            response.getWriter().write( processAttachFileToAsset(uploadItem) );
-            return;
-        }
-        response.getWriter().write( "NO-SCRIPT-DATA" );
-    }
-
-    /**
-     * doGet acting like a dispatcher.
-     */
-    protected void doGet(HttpServletRequest req,
-                         HttpServletResponse res) throws ServletException,
-                                                 IOException {
-
-        String uuid = (String) req.getParameter( HTMLFileManagerFields.FORM_FIELD_UUID );
-        String repo = (String) req.getParameter( HTMLFileManagerFields.FORM_FIELD_REPOSITORY );
-        
-        if ( uuid != null ) {
-            processAttachmentDownload( uuid, res );
-        } else if ( repo != null ) {
-            try {
-                processXmlFileDownload(res);
-            } catch ( Exception e ) {
-                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 processAttachmentDownload(String uuid, HttpServletResponse response) throws IOException {
-        ByteArrayOutputStream output = new ByteArrayOutputStream();
-        String filename = uploadHelper.loadFileAttachmentByUUID( 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" );
-        } else {
-            //MN: NOTE THIS IS MY HACKERY TO GET IT WORKING IN GWT HOSTED MODE.
-            //THIS IS ALL THAT IS NEEDED.
-            System.out.println( "WARNING: RUNNING IN NON SEAM MODE SINGLE USER MODE - ONLY FOR TESTING AND DEBUGGING !!!!!" );
-
-            try {
-                return new RulesRepository( TestEnvironmentSessionHelper.getSession( false ) );
-            } catch ( Exception e ) {
-                throw new IllegalStateException( "Unable to launch debug mode..." );
-            }
-        }
-    }
- 
-    
-    private String processAttachFileToAsset(FormData uploadItem) throws IOException {
-        RulesRepository repo = getRepository();
-
-        uploadHelper.attachFile( uploadItem, repo );
-        
-        uploadItem.getFile().getInputStream().close();
-        
-        return "OK";
-    }
-
-
-    private String processImportRepository(InputStream file) throws IOException {
-        byte[] byteArray = new byte[file.available()];
-        RulesRepository repo = getRepository();
-
-        file.read( byteArray );
-        repo.importRulesRepository( byteArray );
-        return "OK";
-    }
-    
-}

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/ServiceImplementation.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/ServiceImplementation.java	2007-04-30 07:46:08 UTC (rev 11501)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/ServiceImplementation.java	2007-04-30 07:47:48 UTC (rev 11502)
@@ -391,10 +391,14 @@
         data.description = item.getDescription();
         data.name = item.getName();
         data.lastModified = item.getLastModified().getTime();
+        data.dateCreated = item.getCreatedDate().getTime();
+        data.checkinComment = item.getCheckinComment();
         data.lasContributor = item.getLastContributor();
         data.state = item.getStateDescription();
-        
-        
+        data.isSnapshot = item.isSnapshot();
+        if (data.isSnapshot) {
+            data.snapshotName = item.getSnapshotName();
+        }        
         return data;
     }
 

Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/files/AssetFileServlet.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/files/AssetFileServlet.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/files/AssetFileServlet.java	2007-04-30 07:47:48 UTC (rev 11502)
@@ -0,0 +1,86 @@
+package org.drools.brms.server.files;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.drools.brms.client.common.HTMLFileManagerFields;
+import org.drools.brms.server.util.FileManagerUtils;
+import org.drools.brms.server.util.FormData;
+import org.drools.repository.RulesRepository;
+
+/**
+ * This is for dealing with assets that have an attachment (ie assets that are really an attachment).
+ * 
+ * @author Michael Neale
+ * @author Fernando Meyer
+ */
+public class AssetFileServlet extends RepositoryServlet {
+
+    private static final long serialVersionUID = 3909768997932550498L;
+    
+
+    /**
+     * Posting accepts content of various types - 
+     * may be an attachement for an asset, or perhaps a repository import to process.
+     */
+    protected void doPost(HttpServletRequest request,
+                          HttpServletResponse response) throws ServletException,
+                                                       IOException {
+        response.setContentType( "text/plain" );
+        FormData uploadItem = new FileManagerUtils().getFormData( request );
+
+        if ( uploadItem.getFile() != null && uploadItem.getUuid() != null ) {
+            //attaching to an asset.
+            response.getWriter().write( processAttachFileToAsset(uploadItem) );
+            return;
+        }
+        response.getWriter().write( "NO-SCRIPT-DATA" );
+    }
+
+    /**
+     * doGet acting like a dispatcher.
+     */
+    protected void doGet(HttpServletRequest req,
+                         HttpServletResponse res) throws ServletException,
+                                                 IOException {
+        
+        String uuid = (String) req.getParameter( HTMLFileManagerFields.FORM_FIELD_UUID );
+        
+        if ( uuid != null ) {
+            processAttachmentDownload( uuid, res );
+        } else {
+            res.sendError( HttpServletResponse.SC_BAD_REQUEST );
+            return;
+        }
+    }
+    
+
+    private void processAttachmentDownload(String uuid, HttpServletResponse response) throws IOException {
+        ByteArrayOutputStream output = new ByteArrayOutputStream();
+        String filename = uploadHelper.loadFileAttachmentByUUID( 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 String processAttachFileToAsset(FormData uploadItem) throws IOException {
+        RulesRepository repo = getRepository();
+
+        uploadHelper.attachFile( uploadItem, repo );
+        uploadItem.getFile().getInputStream().close();
+        
+        return "OK";
+    }
+
+    
+}


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

Copied: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/files/FileUploadServlet.java (from rev 11432, 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/files/FileUploadServlet.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/files/FileUploadServlet.java	2007-04-30 07:47:48 UTC (rev 11502)
@@ -0,0 +1,132 @@
+package org.drools.brms.server.files;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.PrintWriter;
+
+import javax.jcr.PathNotFoundException;
+import javax.jcr.RepositoryException;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.drools.brms.client.admin.BackupManager;
+import org.drools.brms.client.common.HTMLFileManagerFields;
+import org.drools.brms.client.packages.ModelAttachmentFileWidget;
+import org.drools.brms.server.util.FileManagerUtils;
+import org.drools.brms.server.util.FormData;
+import org.drools.brms.server.util.TestEnvironmentSessionHelper;
+import org.drools.repository.RulesRepository;
+import org.jboss.seam.Component;
+import org.jboss.seam.contexts.Contexts;
+
+/**
+ * Files can be uploaded as part of the repo (eg model classes, spreadsheets).
+ * This servlet supports the uploading and downloading of files 
+ * in assets in the repository.
+ * 
+ * @author Michael Neale
+ * @author Fernando Meyer
+ */
+public class FileUploadServlet extends RepositoryServlet {
+
+    private static final long serialVersionUID = 3909768997932550498L;
+    
+
+    /**
+     * Posting accepts content of various types - 
+     * may be an attachement for an asset, or perhaps a repository import to process.
+     */
+    protected void doPost(HttpServletRequest request,
+                          HttpServletResponse response) throws ServletException,
+                                                       IOException {
+        response.setContentType( "text/plain" );
+        FormData uploadItem = new FileManagerUtils().getFormData( request );
+
+        if ( uploadItem.getFile().getFieldName().equals( HTMLFileManagerFields.FILE_UPLOAD_FIELD_NAME_IMPORT ) ) {
+            //importing a while repo
+            response.getWriter().write(processImportRepository( uploadItem.getFile().getInputStream() ));
+            return;
+        } else if ( uploadItem.getFile() != null && uploadItem.getUuid() != null ) {
+            //attaching to an asset.
+            response.getWriter().write( processAttachFileToAsset(uploadItem) );
+            return;
+        }
+        response.getWriter().write( "NO-SCRIPT-DATA" );
+    }
+
+    /**
+     * doGet acting like a dispatcher.
+     */
+    protected void doGet(HttpServletRequest req,
+                         HttpServletResponse res) throws ServletException,
+                                                 IOException {
+
+        System.err.println("path info:" + req.getPathInfo());
+        System.err.println("servlet path:" + req.getServletPath());
+        System.err.println("URI:" + req.getRequestURI());
+        System.err.println("URL:" + req.getRequestURL());
+        System.err.println("path translated:" + req.getPathTranslated());
+        
+        String uuid = (String) req.getParameter( HTMLFileManagerFields.FORM_FIELD_UUID );
+        String repo = (String) req.getParameter( HTMLFileManagerFields.FORM_FIELD_REPOSITORY );
+        
+        if ( uuid != null ) {
+            processAttachmentDownload( uuid, res );
+        } else if ( repo != null ) {
+            try {
+                processXmlFileDownload(res);
+            } catch ( Exception e ) {
+                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 processAttachmentDownload(String uuid, HttpServletResponse response) throws IOException {
+        ByteArrayOutputStream output = new ByteArrayOutputStream();
+        String filename = uploadHelper.loadFileAttachmentByUUID( 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 String processAttachFileToAsset(FormData uploadItem) throws IOException {
+        RulesRepository repo = getRepository();
+
+        uploadHelper.attachFile( uploadItem, repo );
+        uploadItem.getFile().getInputStream().close();
+        
+        return "OK";
+    }
+
+
+    private String processImportRepository(InputStream file) throws IOException {
+        byte[] byteArray = new byte[file.available()];
+        RulesRepository repo = getRepository();
+
+        file.read( byteArray );
+        repo.importRulesRepository( byteArray );
+        return "OK";
+    }
+    
+}

Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/files/PackageDeploymentServlet.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/files/PackageDeploymentServlet.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/files/PackageDeploymentServlet.java	2007-04-30 07:47:48 UTC (rev 11502)
@@ -0,0 +1,66 @@
+package org.drools.brms.server.files;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.drools.brms.client.common.HTMLFileManagerFields;
+import org.drools.brms.server.util.FileManagerUtils;
+import org.drools.brms.server.util.FormData;
+import org.drools.repository.RulesRepository;
+
+/**
+ * This servlet deals with providing packages in binary form.
+ *   
+ * @author Michael Neale
+ */
+public class PackageDeploymentServlet extends RepositoryServlet {
+
+    private static final long serialVersionUID = 3909768997932550498L;
+    
+
+    /**
+     * post makes no sense in this context.
+     */
+    protected void doPost(HttpServletRequest request,
+                          HttpServletResponse response) throws ServletException,
+                                                       IOException {
+
+        response.sendError( HttpServletResponse.SC_METHOD_NOT_ALLOWED, "This servlet only provides packages, they can " +
+                "not be updated via a POST." );
+    }
+
+    /**
+     * Get the binary package.
+     * This will get the compiled package stuff from either the latest package, 
+     * or a snapshot.
+     * 
+     * The end of the URI is of the form:
+     * /<packageName>/(<snapshotVersionName> | LATEST)
+     * 
+     * if you pass in "LATEST" it will get the latest (not a snapshot) if it exists.
+     * Normally that will only be used when downloading on demand, otherwise you should ONLY
+     * use a snapshot as they are always "up to date".
+     */
+    protected void doGet(HttpServletRequest req,
+                         HttpServletResponse response) throws ServletException,
+                                                 IOException {
+        PackageDeploymentURIHelper helper = new PackageDeploymentURIHelper(req.getRequestURI());
+        ByteArrayOutputStream out = new ByteArrayOutputStream();
+        String fileName = uploadHelper.loadBinaryPackage( helper.getPackageName(), 
+                                        helper.getVersion(), helper.isLatest(), out, getRepository() );
+        response.setContentType( "application/x-download" );
+        response.setHeader( "Content-Disposition",
+                       "attachment; filename=" + fileName + ";");
+        response.setContentLength( out.size() );
+        response.getOutputStream().write( out.toByteArray() );
+        response.getOutputStream().flush();        
+        
+    }
+
+
+    
+}


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

Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/files/PackageDeploymentURIHelper.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/files/PackageDeploymentURIHelper.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/files/PackageDeploymentURIHelper.java	2007-04-30 07:47:48 UTC (rev 11502)
@@ -0,0 +1,56 @@
+package org.drools.brms.server.files;
+
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import java.util.StringTokenizer;
+
+import org.drools.brms.client.packages.PackageSnapshotView;
+
+/**
+ * Works out from the path URI what package is being requested.
+ * 
+ * @author Michael Neale
+ */
+public class PackageDeploymentURIHelper {
+    
+
+    
+    private String version;
+    private String packageName;
+
+    public PackageDeploymentURIHelper(String uri) throws UnsupportedEncodingException {
+        StringTokenizer tok = new StringTokenizer( URLDecoder.decode( uri, "UTF-8" ), "/" );
+        String[] toks = new String[tok.countTokens()];
+        int i = 0;
+        while ( tok.hasMoreTokens() ) {
+            toks[i] = tok.nextToken();
+            i++;
+        }
+        
+        if ( i < 3 ) {
+            throw new IllegalArgumentException( "Bad URI - can't get a package binary for " + uri );
+        }
+        
+        this.version = toks[i - 1];
+        this.packageName = toks[i -2];
+    }
+
+    public String getPackageName() {
+        return packageName;
+    }
+
+
+    public String getVersion() {
+        return version;
+    }
+
+    public boolean isLatest() {
+        return PackageSnapshotView.LATEST_SNAPSHOT.equals( version );
+    }
+
+
+    
+    
+    
+    
+}


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

Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/files/RepositoryBackupServlet.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/files/RepositoryBackupServlet.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/files/RepositoryBackupServlet.java	2007-04-30 07:47:48 UTC (rev 11502)
@@ -0,0 +1,73 @@
+package org.drools.brms.server.files;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.PrintWriter;
+
+import javax.jcr.PathNotFoundException;
+import javax.jcr.RepositoryException;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.drools.brms.server.util.FileManagerUtils;
+import org.drools.brms.server.util.FormData;
+import org.drools.repository.RulesRepository;
+
+/**
+ * 
+ * This servlet deals with import and export of the repository to XML/zip files.
+ * 
+ * @author Michael Neale
+ * @author Fernando Meyer
+ */
+public class RepositoryBackupServlet extends RepositoryServlet {
+
+    private static final long serialVersionUID = 3909768997932550498L;
+    final FileManagerUtils uploadHelper = new FileManagerUtils();
+    
+
+    /**
+     * This accepts a repository, and will apply it.
+     */
+    protected void doPost(HttpServletRequest request,
+                          HttpServletResponse response) throws ServletException,
+                                                       IOException {
+        response.setContentType( "text/plain" );
+        FormData uploadItem = new FileManagerUtils().getFormData( request );
+        response.getWriter().write(processImportRepository( uploadItem.getFile().getInputStream() ));
+    }
+
+    /**
+     * Explore the repo, provide a download
+     */
+    protected void doGet(HttpServletRequest req,
+                         HttpServletResponse res) throws ServletException,
+                                                 IOException {
+            try {
+                processExportRepositoryDownload(res);
+            } catch ( Exception e ) {
+                e.printStackTrace( new PrintWriter( res.getOutputStream() ) );
+            }
+    }
+    
+    private void processExportRepositoryDownload(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 String processImportRepository(InputStream file) throws IOException {
+        byte[] byteArray = new byte[file.available()];
+        RulesRepository repo = getRepository();
+
+        file.read( byteArray );
+        repo.importRulesRepository( byteArray );
+        return "OK";
+    }
+    
+}


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

Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/files/RepositoryServlet.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/files/RepositoryServlet.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/files/RepositoryServlet.java	2007-04-30 07:47:48 UTC (rev 11502)
@@ -0,0 +1,37 @@
+package org.drools.brms.server.files;
+
+import javax.servlet.http.HttpServlet;
+
+import org.drools.brms.server.util.FileManagerUtils;
+import org.drools.brms.server.util.TestEnvironmentSessionHelper;
+import org.drools.repository.RulesRepository;
+import org.jboss.seam.Component;
+import org.jboss.seam.contexts.Contexts;
+
+/**
+ * This is a base servlet that all repo servlets inherit behaviour from. 
+ * 
+ * @author Michael Neale
+ */
+public class RepositoryServlet extends HttpServlet {
+
+    private static final long serialVersionUID = 3909768997932550498L;
+    protected final FileManagerUtils uploadHelper = new FileManagerUtils();    
+    
+    protected RulesRepository getRepository() {
+        if ( Contexts.isApplicationContextActive() ) {
+            return (RulesRepository) Component.getInstance( "repository" );
+        } else {
+            //MN: NOTE THIS IS MY HACKERY TO GET IT WORKING IN GWT HOSTED MODE.
+            //THIS IS ALL THAT IS NEEDED.
+            System.out.println( "WARNING: RUNNING IN NON SEAM MODE SINGLE USER MODE - ONLY FOR TESTING AND DEBUGGING !!!!!" );
+
+            try {
+                return new RulesRepository( TestEnvironmentSessionHelper.getSession( false ) );
+            } catch ( Exception e ) {
+                throw new IllegalStateException( "Unable to launch debug mode..." );
+            }
+        }
+    }    
+    
+}


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

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/util/FileManagerUtils.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/util/FileManagerUtils.java	2007-04-30 07:46:08 UTC (rev 11501)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/util/FileManagerUtils.java	2007-04-30 07:47:48 UTC (rev 11502)
@@ -3,6 +3,7 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
+import java.net.URLEncoder;
 import java.util.Iterator;
 import java.util.List;
 
@@ -15,6 +16,7 @@
 import org.apache.commons.fileupload.servlet.ServletFileUpload;
 import org.drools.brms.client.common.HTMLFileManagerFields;
 import org.drools.repository.AssetItem;
+import org.drools.repository.PackageItem;
 import org.drools.repository.RulesRepository;
 import org.drools.repository.RulesRepositoryException;
 
@@ -55,11 +57,8 @@
     }
 
     /** 
-     * 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.
+     * The get returns files based on UUID of an asset.
      */
-
     public String loadFileAttachmentByUUID(String uuid,
                                  OutputStream out,
                                  RulesRepository repository) throws IOException {
@@ -99,5 +98,35 @@
         }
     }
     
+    /**
+     * Load up the approproate package version.
+     * @param packageName The name of the package. 
+     * @param packageVersion The version (if it is a snapshot).
+     * @param isLatest true if the latest package binary will be used (ie NOT a snapshot).
+     * @return The filename if its all good.
+     */
+    public String loadBinaryPackage(String packageName, 
+                                    String packageVersion, 
+                                    boolean isLatest, 
+                                    OutputStream out, 
+                                    RulesRepository repository) throws IOException {
+        PackageItem item = null;
+        if (isLatest) {
+            item = repository.loadPackage( packageName );
+            byte[] data = item.getCompiledPackageBytes();
+            out.write( data );
+            out.flush();
+            return packageName + ".pkg";            
+        } else {
+            item = repository.loadPackageSnapshot( packageName, packageVersion );
+            byte[] data = item.getCompiledPackageBytes();
+            out.write( data );
+            out.flush();       
+            return packageName + "_" + URLEncoder.encode( packageVersion, "UTF-8") + ".pkg";            
+        }
 
+        
+    }
+    
+
 }

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	2007-04-30 07:46:08 UTC (rev 11501)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/webapp/WEB-INF/web.xml	2007-04-30 07:47:48 UTC (rev 11502)
@@ -19,16 +19,28 @@
         <url-pattern>/*</url-pattern>
     </filter-mapping>
       
-  
+	<!-- servlets - mostly to do with file management -->
 	<servlet>
 		<servlet-name>GWTRemotingServlet</servlet-name>
 		<servlet-class>org.jboss.seam.remoting.gwt.GWTRemoteServiceServlet</servlet-class>
 	</servlet>  
 	
 	<servlet>
-		<servlet-name>FileUploadServlet</servlet-name>
-		<servlet-class>org.drools.brms.server.FileUploadServlet</servlet-class>
+		<servlet-name>AssetFileServlet</servlet-name>
+		<servlet-class>org.drools.brms.server.files.AssetFileServlet</servlet-class>
 	</servlet>  
+	
+	<servlet>
+		<servlet-name>PackageDeploymentServlet</servlet-name>
+		<servlet-class>org.drools.brms.server.files.PackageDeploymentServlet</servlet-class>
+	</servlet>  
+	
+	<servlet>
+		<servlet-name>RepositoryBackupServlet</servlet-name>
+		<servlet-class>org.drools.brms.server.files.RepositoryBackupServlet</servlet-class>
+	</servlet>  
+	
+	
   
 	<servlet-mapping>
 		<servlet-name>GWTRemotingServlet</servlet-name>
@@ -36,10 +48,22 @@
 	</servlet-mapping>  
 	
 	<servlet-mapping>
-		<servlet-name>FileUploadServlet</servlet-name>
-		<url-pattern>/org.drools.brms.JBRMS/fileManager</url-pattern>
+		<servlet-name>AssetFileServlet</servlet-name>
+		<url-pattern>/org.drools.brms.JBRMS/asset</url-pattern>
 	</servlet-mapping>  
 	
+	<servlet-mapping>
+		<servlet-name>PackageDeploymentServlet</servlet-name>
+		<url-pattern>/org.drools.brms.JBRMS/package</url-pattern>
+	</servlet-mapping>  
+
+	<servlet-mapping>
+		<servlet-name>RepositoryBackupServlet</servlet-name>
+		<url-pattern>/org.drools.brms.JBRMS/backup</url-pattern>
+	</servlet-mapping>  
+	
+	
+	
 	<!--
     <listener>
         <listener-class>org.apache.myfaces.webapp.StartupServletContextListener</listener-class>

Added: labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/PerfServiceTest.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/PerfServiceTest.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/PerfServiceTest.java	2007-04-30 07:47:48 UTC (rev 11502)
@@ -0,0 +1,146 @@
+package org.drools.brms.server;
+
+import java.io.ByteArrayInputStream;
+import java.io.ObjectInputStream;
+import java.util.Calendar;
+
+import javax.jcr.Node;
+import javax.jcr.Session;
+
+import junit.framework.TestCase;
+
+import org.drools.brms.client.rpc.BuilderResult;
+import org.drools.brms.server.util.TestEnvironmentSessionHelper;
+import org.drools.repository.AssetItem;
+import org.drools.repository.PackageItem;
+import org.drools.repository.RulesRepository;
+import org.drools.repository.VersionableItem;
+import org.drools.rule.Package;
+
+/**
+ * A playground for performance analysing.
+ * @author Michael Neale
+ *
+ */
+public class PerfServiceTest extends TestCase {
+
+    private long time;
+
+    public void testDummy() {}
+    
+    public void XXXtestWarmup() throws Exception {
+        
+        ServiceImplementation impl = getService();
+        RulesRepository repo = impl.repository;
+        
+
+        
+        //create our package
+        PackageItem pkg = repo.createPackage( "testBinaryPackageCompile", "" );
+        pkg.updateHeader( "import org.drools.Person" );
+        Session session = repo.getSession();
+        Node pkgNode = repo.getSession().getNodeByUUID( pkg.getUUID() );        
+        
+        Node assetNode = pkgNode.getNode( "assets" );
+        
+        
+        
+        for (int i = 0; i < 500; i++) {
+            System.out.println("processing asset:" + i);
+            Node ruleNode = assetNode.addNode( "" + i, "drools:assetNodeType" );
+
+            ruleNode.setProperty( AssetItem.TITLE_PROPERTY_NAME,
+                                  "" + i );
+
+            ruleNode.setProperty( AssetItem.DESCRIPTION_PROPERTY_NAME,
+                                  "" );
+
+            ruleNode.setProperty( AssetItem.FORMAT_PROPERTY_NAME,
+                                  "DRL" );
+            
+
+            ruleNode.setProperty( VersionableItem.CHECKIN_COMMENT,
+                                  "Initial" );
+
+            Calendar lastModified = Calendar.getInstance();
+            
+            ruleNode.setProperty( AssetItem.LAST_MODIFIED_PROPERTY_NAME, lastModified );            
+            ruleNode.setProperty( AssetItem.PACKAGE_NAME_PROPERTY, this.getName() );
+            ruleNode.setProperty( AssetItem.CREATOR_PROPERTY_NAME, session.getUserID() );
+
+                        
+            
+            repo.save();
+            ruleNode.checkin();
+//            AssetItem rule1 = pkg.addAsset( "rule_" + i, "" );
+//            rule1.updateFormat( AssetFormats.DRL );
+//            rule1.updateContent( "rule 'rule_" + i + "'  \n when p:Person() \n then p.setAge(" + i + "); \n end"); 
+//            rule1.checkin( "" );
+            
+        }
+        
+        repo.save();
+        
+        
+    }
+    
+    /**
+     * This will test creating a package, check it compiles, and can exectute rules, 
+     * then take a snapshot, and check that it reports errors. 
+     */
+    public void XXXtestBinaryPackageCompileAndExecute() throws Exception {
+
+        
+        ServiceImplementation impl = getService();
+        RulesRepository repo = impl.repository;
+        
+        reset();
+        
+        PackageItem pkg = repo.loadPackage( "testBinaryPackageCompile" );
+        
+        time("loaded package"); reset();
+        
+        BuilderResult[] results = impl.buildPackage( pkg.getUUID() );
+        
+        time("built"); reset();        
+        assertNull(results);
+        
+        pkg = repo.loadPackage( "testBinaryPackageCompile" );
+        byte[] binPackage = pkg.getCompiledPackageBytes();
+
+        time("got bytes"); reset();
+        
+        assertNotNull(binPackage);
+        
+        ByteArrayInputStream bin = new ByteArrayInputStream(binPackage);
+        ObjectInputStream in = new ObjectInputStream(bin);
+        Package binPkg = (Package) in.readObject();
+         
+        assertNotNull(binPkg);
+        assertTrue(binPkg.isValid());
+        
+
+        
+        impl.createPackageSnapshot( "testBinaryPackageCompile", "SNAP1", false, "" );
+        
+
+        
+    }
+
+    private void time(String m) {
+        System.out.println(m + " : " + (System.currentTimeMillis() - time) );
+        
+    }
+
+    private void reset() {
+        this.time = System.currentTimeMillis();
+        
+    }
+
+    private ServiceImplementation getService() throws Exception {
+        ServiceImplementation impl = new ServiceImplementation();
+        impl.repository = new RulesRepository( TestEnvironmentSessionHelper.getSession() );
+        return impl;
+    }    
+    
+}


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

Modified: labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/ServiceImplementationTest.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/ServiceImplementationTest.java	2007-04-30 07:46:08 UTC (rev 11501)
+++ labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/ServiceImplementationTest.java	2007-04-30 07:47:48 UTC (rev 11502)
@@ -475,7 +475,21 @@
                       data.externalURI );
 
         assertNotNull( data.uuid );
-
+        assertFalse(data.isSnapshot);
+        
+        assertNotNull(data.dateCreated);
+        Date original = data.lastModified;
+        
+        Thread.sleep( 100 );
+        
+        impl.createPackageSnapshot( "default", "TEST SNAP 2.0", false, "ya" );
+        PackageItem loaded = impl.repository.loadPackageSnapshot( "default", "TEST SNAP 2.0" );
+        
+        data = impl.loadPackageConfig( loaded.getUUID() );
+        assertTrue(data.isSnapshot);
+        assertEquals("TEST SNAP 2.0", data.snapshotName);
+        assertFalse(original.equals( data.lastModified ));
+        assertEquals("ya", data.checkinComment);
     }
 
     public void testPackageConfSave() throws Exception {
@@ -959,6 +973,11 @@
         repo.save();
         
         BuilderResult[] results = impl.buildPackage( pkg.getUUID() );
+        if (results != null) {
+            for ( int i = 0; i < results.length; i++ ) {
+                System.err.println(results[i].message);
+            }
+        }
         assertNull(results);
         
         pkg = repo.loadPackage( "testBinaryPackageCompileBRXML" );

Added: labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/files/DeploymentURIHelperTest.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/files/DeploymentURIHelperTest.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/files/DeploymentURIHelperTest.java	2007-04-30 07:47:48 UTC (rev 11502)
@@ -0,0 +1,23 @@
+package org.drools.brms.server.files;
+
+import junit.framework.TestCase;
+
+public class DeploymentURIHelperTest extends TestCase {
+
+    public void testGetPackageToExport() throws Exception {
+        String uri = "/org.drools.brms.JBRMS/asset/boo/ya+man";
+        //from getPathInfo() on req.
+
+        PackageDeploymentURIHelper helper = new PackageDeploymentURIHelper(uri);
+
+        assertEquals( "ya man", helper.getVersion() );
+        assertEquals( "boo", helper.getPackageName() );
+        assertFalse(helper.isLatest());
+
+        helper = new PackageDeploymentURIHelper("/foo/bar/LATEST");
+        assertTrue(helper.isLatest());
+        assertEquals("bar", helper.getPackageName());
+        
+    }
+
+}


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

Modified: labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/util/FileManagerUtilsTest.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/util/FileManagerUtilsTest.java	2007-04-30 07:46:08 UTC (rev 11501)
+++ labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/util/FileManagerUtilsTest.java	2007-04-30 07:47:48 UTC (rev 11502)
@@ -7,11 +7,17 @@
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
 
 import junit.framework.TestCase;
 
 import org.apache.commons.fileupload.FileItem;
+import org.drools.brms.client.packages.PackageSnapshotView;
+import org.drools.brms.server.builder.ContentPackageAssembler;
+import org.drools.brms.server.files.DeploymentURIHelperTest;
+import org.drools.brms.server.files.PackageDeploymentURIHelper;
 import org.drools.repository.AssetItem;
+import org.drools.repository.PackageItem;
 import org.drools.repository.RulesRepository;
 
 public class FileManagerUtilsTest extends TestCase {
@@ -63,6 +69,33 @@
         assertEquals("foo bar", new String(out.toByteArray()));
         assertEquals("foo.bar", filename);
     }
+    
+    public void testGetBinaryPackage() throws Exception {
+        FileManagerUtils uploadHelper = new FileManagerUtils();
+        RulesRepository repo = new RulesRepository(TestEnvironmentSessionHelper.getSession());
+        PackageItem pkg = repo.createPackage( "testGetBinaryPackageServlet", "" );
+        pkg.updateHeader( "import java.util.List" );
+        pkg.updateCompiledPackage( new ByteArrayInputStream("foo".getBytes()) );
+        pkg.checkin( "" );
+
+        repo.createPackageSnapshot( pkg.getName(), "SNAPPY 1" );
+        
+        ByteArrayOutputStream out = new ByteArrayOutputStream();
+        String fileName = uploadHelper.loadBinaryPackage( pkg.getName(), PackageSnapshotView.LATEST_SNAPSHOT, true, out, repo );
+        assertEquals("testGetBinaryPackageServlet.pkg", fileName);
+        byte[] file = out.toByteArray();
+        assertNotNull(file);
+        assertEquals("foo", new String(file));
+        
+        
+        out = new ByteArrayOutputStream();
+        fileName = uploadHelper.loadBinaryPackage( pkg.getName(),"SNAPPY 1", false, out, repo );
+        assertEquals("testGetBinaryPackageServlet_SNAPPY+1.pkg", fileName);
+        file = out.toByteArray();
+        assertNotNull(file);
+        assertEquals("foo", new String(file));        
+        
+    }
 }
 
 class MockFile implements FileItem {




More information about the jboss-svn-commits mailing list