[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