[jboss-svn-commits] JBL Code SVN: r10255 - in labs/jbossrules/trunk/drools-jbrms/src: main/java/org/drools/brms/client/common and 9 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Fri Mar 16 04:36:24 EDT 2007
Author: michael.neale at jboss.com
Date: 2007-03-16 04:36:24 -0400 (Fri, 16 Mar 2007)
New Revision: 10255
Added:
labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/ValidationMessageWidget.java
labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/ValidatedResponse.java
labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rulelist/AssetBrowser.java
labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rulelist/RuleListViewLegacy.java
labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/public/images/attention_needed.png
labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/public/images/warning.gif
Removed:
labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rulelist/RuleListView.java
Modified:
labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/RulesFeature.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/rpc/RepositoryService.java
labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/RepositoryServiceAsync.java
labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/JBRMSServiceServlet.java
labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/rules/SuggestionCompletionLoader.java
labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/util/SuggestionCompletionEngineBuilder.java
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/rules/SuggestionCompletionLoaderTest.java
Log:
JBRULES-735 Validation
Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/RulesFeature.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/RulesFeature.java 2007-03-16 08:35:09 UTC (rev 10254)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/RulesFeature.java 2007-03-16 08:36:24 UTC (rev 10255)
@@ -1,52 +1,13 @@
package org.drools.brms.client;
-import java.util.HashMap;
-import java.util.Map;
+import org.drools.brms.client.rulelist.AssetBrowser;
-import org.drools.brms.client.categorynav.CategoryExplorerWidget;
-import org.drools.brms.client.categorynav.CategorySelectHandler;
-import org.drools.brms.client.common.AssetFormats;
-import org.drools.brms.client.common.GenericCallback;
-import org.drools.brms.client.common.LoadingPopup;
-import org.drools.brms.client.modeldriven.SuggestionCompletionEngine;
-import org.drools.brms.client.packages.SuggestionCompletionCache;
-import org.drools.brms.client.rpc.RepositoryServiceFactory;
-import org.drools.brms.client.rpc.RuleAsset;
-import org.drools.brms.client.rpc.TableDataResult;
-import org.drools.brms.client.ruleeditor.EditorLauncher;
-import org.drools.brms.client.ruleeditor.NewAssetWizard;
-import org.drools.brms.client.ruleeditor.RuleViewer;
-import org.drools.brms.client.rulelist.AssetItemListViewer;
-import org.drools.brms.client.rulelist.EditItemEvent;
-import org.drools.brms.client.rulelist.QuickFindWidget;
-
-import com.google.gwt.user.client.Command;
-import com.google.gwt.user.client.DeferredCommand;
-import com.google.gwt.user.client.ui.ClickListener;
-import com.google.gwt.user.client.ui.FlexTable;
-import com.google.gwt.user.client.ui.HasHorizontalAlignment;
-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.TabPanel;
-import com.google.gwt.user.client.ui.Widget;
-import com.google.gwt.user.client.ui.FlexTable.FlexCellFormatter;
-
/**
* This controls the "Rules manager" top level feature.
- * TODO: refactor this into a "AssetExplorer" widget, this feature should purely be
- * for layout.
* @author Michael Neale
*/
public class RulesFeature extends JBRMSFeature {
- public static final int EDITOR_TAB = 1;
- private TabPanel tab;
- private Map openedViewers = new HashMap();
- private AssetItemListViewer list;
-
-
-
public static ComponentInfo init() {
return new ComponentInfo("Rules", "Find and edit rules.") {
public JBRMSFeature createInstance() {
@@ -56,139 +17,9 @@
};
}
-
public RulesFeature() {
- tab = new TabPanel();
- tab.setWidth("100%");
- tab.setHeight("100%");
-
- FlexTable explorePanel = doExplorer();
-
- tab.add(explorePanel, "Explore");
-
- tab.selectTab(0);
-
- initWidget(tab);
+ initWidget( new AssetBrowser() );
}
-
-
- /** This will setup the explorer tab */
- private FlexTable doExplorer() {
- final FlexTable table = new FlexTable();
- //and the the delegate to open an editor for a rule resource when
- //chosen to
- list = new AssetItemListViewer(new EditItemEvent() {
- public void open(String key) {
- showLoadEditor( key );
- }
- });
-
-
- FlexCellFormatter formatter = table.getFlexCellFormatter();
-
-
- //setup the nav, which will drive the list
- CategoryExplorerWidget nav = new CategoryExplorerWidget(new CategorySelectHandler() {
- public void selected(final String selectedPath) {
- Command load = getRuleListLoadingCommand( list,
- selectedPath );
- table.setWidget( 0, 1, list );
- DeferredCommand.add( load );
- list.setRefreshCommand(load);
- }
-
- });
-
- final QuickFindWidget quick = new QuickFindWidget(new EditItemEvent() {
- public void open(String key) {
- showLoadEditor( key );
- }
- });
-
- table.setWidget( 0, 0, nav );
- table.setWidget( 0, 1, quick);
-
- formatter.setAlignment( 0, 1, HasHorizontalAlignment.ALIGN_LEFT, HasVerticalAlignment.ALIGN_TOP );
- formatter.setAlignment( 0, 0, HasHorizontalAlignment.ALIGN_LEFT, HasVerticalAlignment.ALIGN_TOP );
- formatter.setRowSpan( 0, 1, 3 );
- formatter.setWidth( 0, 0, "30%" );
- formatter.setWidth( 0, 1, "70%" );
-
- formatter.setHeight( 0, 0, "90%" );
-
- table.setText( 2, 0, "" );
-
- Image newRule = new Image("images/new_rule.gif");
- newRule.setTitle( "Create new rule" );
-
- newRule.addClickListener( new ClickListener() {
- public void onClick(Widget w) {
- showNewAssetWizard();
- }
- });
-
- Image showFinder = new Image("images/find_items.gif");
- showFinder.setTitle( "Show the name finder." );
- showFinder.addClickListener( new ClickListener() {
- public void onClick(Widget w) {
- table.setWidget( 0, 1, quick );
- }
- } );
-
- HorizontalPanel actions = new HorizontalPanel();
- actions.add( showFinder );
- actions.add( newRule );
- table.setWidget( 1, 0, actions);
- formatter.setHeight( 1, 0, "5%" );
- formatter.setAlignment( 1, 0, HasHorizontalAlignment.ALIGN_CENTER, HasVerticalAlignment.ALIGN_TOP);
- formatter.setStyleName( 1, 0, "new-asset-Icons" );
-
- return table;
- }
-
- private Command getRuleListLoadingCommand(final AssetItemListViewer list,
- final String selectedPath) {
- return new Command() {
- public void execute() {
- RepositoryServiceFactory.getService().loadRuleListForCategories( selectedPath,
- new GenericCallback() {
- public void onSuccess(Object o) {
- TableDataResult result = (TableDataResult) o;
- list.loadTableData( result );
- }
-
- } );
- }
- };
- }
-
- public void showLoadEditor(String uuid) {
- EditorLauncher.showLoadEditor( openedViewers, tab, uuid, false );
- }
-
- private void showNewAssetWizard() {
- int left = 70;
- int top = 100;
-
- NewAssetWizard pop = new NewAssetWizard(new EditItemEvent() {
- public void open(String key) {
- showLoadEditor( key );
-
- }
- }, true, null, "Create a new rule");
- pop.setPopupPosition( left, top );
-
- pop.show();
- }
-
-
-
-
-
-
-
-
-
}
Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/ValidationMessageWidget.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/ValidationMessageWidget.java (rev 0)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/ValidationMessageWidget.java 2007-03-16 08:36:24 UTC (rev 10255)
@@ -0,0 +1,43 @@
+package org.drools.brms.client.common;
+
+import com.google.gwt.user.client.ui.TextArea;
+import com.google.gwt.user.client.ui.Widget;
+
+/**
+ * This presents validation error messages to the user, from the server side.
+ * Such as validation or compile errors.
+ *
+ * @author Michael Neale
+ */
+public class ValidationMessageWidget extends FormStylePopup {
+
+ /**
+ * The heading is the short description in bold at the top.
+ */
+ public ValidationMessageWidget(String heading, String body) {
+
+ super("images/attention_needed.png", heading);
+ addAttribute( "Detail:", details(body) );
+ //addRow( close() );
+
+ }
+
+// private Widget close() {
+// Image img = new Image("images/close.gif");
+// img.addClickListener( new ClickListener() {
+// public void onClick(Widget w) {
+// hide();
+// }
+// } );
+// return img;
+// }
+
+ private Widget details(String body) {
+ TextArea area = new TextArea();
+ area.setStyleName( "editable-Surface" );
+ area.setVisibleLines( 12 );
+ area.setText( body );
+ area.setWidth( "100%" );
+ return area;
+ }
+}
Property changes on: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/ValidationMessageWidget.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-03-16 08:35:09 UTC (rev 10254)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/packages/PackageEditor.java 2007-03-16 08:36:24 UTC (rev 10255)
@@ -9,9 +9,11 @@
import org.drools.brms.client.common.GenericCallback;
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.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.Timer;
@@ -24,6 +26,7 @@
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.Label;
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;
import com.google.gwt.user.client.ui.VerticalPanel;
@@ -38,6 +41,7 @@
private PackageConfigData conf;
private HTML status;
+ protected ValidatedResponse previousResponse;
public PackageEditor(PackageConfigData data) {
this.conf = data;
@@ -54,6 +58,10 @@
clear();
addHeader( "images/package_large.png", this.conf.name );
+
+ addRow( warnings() );
+
+
addAttribute( "Description:", description() );
addAttribute( "Header:", header() );
addAttribute( "External URI:", externalURI() );
@@ -82,6 +90,28 @@
addRow( saveWidgets() );
}
+ private Widget warnings() {
+ if (this.previousResponse != null && this.previousResponse.hasErrors) {
+ Image img = new Image("images/warning.gif");
+ HorizontalPanel h = new HorizontalPanel();
+ h.add( img );
+ HTML msg = new HTML("<b>There were errors validating this package configuration.");
+ h.add( msg );
+ Button show = new Button("View errors");
+ show.addClickListener( new ClickListener() {
+ public void onClick(Widget w) {
+ ValidationMessageWidget wid = new ValidationMessageWidget(previousResponse.errorHeader, previousResponse.errorMessage);
+ wid.setPopupPosition( Window.getClientWidth()/4, w.getAbsoluteTop() );
+ wid.show();
+ }
+ } );
+ h.add( show );
+ return h;
+ } else {
+ return new SimplePanel();
+ }
+ }
+
protected void showStatusChanger(Widget w) {
final StatusChangePopup pop = new StatusChangePopup(conf.uuid, true);
pop.setChangeStatusEvent(new Command() {
@@ -220,6 +250,8 @@
LoadingPopup.showMessage( "Saving package configuration. Please wait ..." );
RepositoryServiceFactory.getService().savePackage( this.conf, new GenericCallback() {
public void onSuccess(Object data) {
+ previousResponse = (ValidatedResponse) data;
+
reload();
SuggestionCompletionCache.getInstance().removePackage( conf.name );
LoadingPopup.showMessage( "Package configuration updated successfully" );
Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/RepositoryService.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/RepositoryService.java 2007-03-16 08:35:09 UTC (rev 10254)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/RepositoryService.java 2007-03-16 08:36:24 UTC (rev 10255)
@@ -89,9 +89,12 @@
/**
* Saves the package config data in place (does not create a new version of anything).
- * @return The UUID of the saved item.
+ * @return A ValidatedReponse, with any errors to be reported.
+ * No payload is in the response. If there are any errors, the user
+ * should be given the option to review them, and correct them if needed
+ * (but a save will not be prevented this way - as its not an exception).
*/
- public String savePackage(PackageConfigData data) throws SerializableException;
+ public ValidatedResponse savePackage(PackageConfigData data) throws SerializableException;
/**
Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/RepositoryServiceAsync.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/RepositoryServiceAsync.java 2007-03-16 08:35:09 UTC (rev 10254)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/RepositoryServiceAsync.java 2007-03-16 08:36:24 UTC (rev 10255)
@@ -41,5 +41,4 @@
public void removeCategory(java.lang.String p0, AsyncCallback cb);
public void loadSuggestionCompletionEngine(java.lang.String p0, AsyncCallback cb);
public void changeState(java.lang.String p0, java.lang.String p1, boolean p2, AsyncCallback cb);
-
}
Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/ValidatedResponse.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/ValidatedResponse.java (rev 0)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/ValidatedResponse.java 2007-03-16 08:36:24 UTC (rev 10255)
@@ -0,0 +1,28 @@
+package org.drools.brms.client.rpc;
+
+import com.google.gwt.user.client.rpc.IsSerializable;
+
+/**
+ * This is used for services that validate.
+ * Ie they may provide a validation error to be reported.
+ *
+ * @author Michael Neale
+ */
+public class ValidatedResponse
+ implements
+ IsSerializable {
+
+ /**
+ * If this is true, then the errorHeader and messages should be displayed.
+ */
+ public boolean hasErrors;
+ public String errorHeader;
+ public String errorMessage;
+
+ /**
+ * Optional payload, if some more is needed.
+ */
+ public IsSerializable payload;
+
+
+}
Property changes on: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/ValidatedResponse.java
___________________________________________________________________
Name: svn:eol-style
+ native
Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rulelist/AssetBrowser.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rulelist/AssetBrowser.java (rev 0)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rulelist/AssetBrowser.java 2007-03-16 08:36:24 UTC (rev 10255)
@@ -0,0 +1,165 @@
+package org.drools.brms.client.rulelist;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.drools.brms.client.categorynav.CategoryExplorerWidget;
+import org.drools.brms.client.categorynav.CategorySelectHandler;
+import org.drools.brms.client.common.GenericCallback;
+import org.drools.brms.client.rpc.RepositoryServiceFactory;
+import org.drools.brms.client.rpc.TableDataResult;
+import org.drools.brms.client.ruleeditor.EditorLauncher;
+import org.drools.brms.client.ruleeditor.NewAssetWizard;
+
+import com.google.gwt.user.client.Command;
+import com.google.gwt.user.client.DeferredCommand;
+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.HasHorizontalAlignment;
+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.TabPanel;
+import com.google.gwt.user.client.ui.Widget;
+import com.google.gwt.user.client.ui.FlexTable.FlexCellFormatter;
+
+/**
+ * This is the category based asset browser (ie it has a category tree browser, as well as
+ * a search box).
+ *
+ * @author Michael Neale
+ */
+public class AssetBrowser extends Composite {
+
+ public static final int EDITOR_TAB = 1;
+ private TabPanel tab;
+ private Map openedViewers = new HashMap();
+ private AssetItemListViewer list;
+
+ public AssetBrowser() {
+ tab = new TabPanel();
+ tab.setWidth("100%");
+ tab.setHeight("100%");
+
+ FlexTable explorePanel = doExplorer();
+
+ tab.add(explorePanel, "Explore");
+
+ tab.selectTab(0);
+
+ initWidget(tab);
+ }
+
+ /** This will setup the explorer tab */
+ private FlexTable doExplorer() {
+ final FlexTable table = new FlexTable();
+ //and the the delegate to open an editor for a rule resource when
+ //chosen to
+ list = new AssetItemListViewer(new EditItemEvent() {
+ public void open(String key) {
+ showLoadEditor( key );
+ }
+ });
+
+
+ FlexCellFormatter formatter = table.getFlexCellFormatter();
+
+
+ //setup the nav, which will drive the list
+ CategoryExplorerWidget nav = new CategoryExplorerWidget(new CategorySelectHandler() {
+ public void selected(final String selectedPath) {
+ Command load = getRuleListLoadingCommand( list,
+ selectedPath );
+ table.setWidget( 0, 1, list );
+ DeferredCommand.add( load );
+ list.setRefreshCommand(load);
+ }
+
+ });
+
+ final QuickFindWidget quick = new QuickFindWidget(new EditItemEvent() {
+ public void open(String key) {
+ showLoadEditor( key );
+ }
+ });
+
+ table.setWidget( 0, 0, nav );
+ table.setWidget( 0, 1, quick);
+
+ formatter.setAlignment( 0, 1, HasHorizontalAlignment.ALIGN_LEFT, HasVerticalAlignment.ALIGN_TOP );
+ formatter.setAlignment( 0, 0, HasHorizontalAlignment.ALIGN_LEFT, HasVerticalAlignment.ALIGN_TOP );
+ formatter.setRowSpan( 0, 1, 3 );
+ formatter.setWidth( 0, 0, "30%" );
+ formatter.setWidth( 0, 1, "70%" );
+
+ formatter.setHeight( 0, 0, "90%" );
+
+ table.setText( 2, 0, "" );
+
+ Image newRule = new Image("images/new_rule.gif");
+ newRule.setTitle( "Create new rule" );
+
+ newRule.addClickListener( new ClickListener() {
+ public void onClick(Widget w) {
+ showNewAssetWizard();
+ }
+ });
+
+ Image showFinder = new Image("images/find_items.gif");
+ showFinder.setTitle( "Show the name finder." );
+ showFinder.addClickListener( new ClickListener() {
+ public void onClick(Widget w) {
+ table.setWidget( 0, 1, quick );
+ }
+ } );
+
+ HorizontalPanel actions = new HorizontalPanel();
+ actions.add( showFinder );
+ actions.add( newRule );
+ table.setWidget( 1, 0, actions);
+ formatter.setHeight( 1, 0, "5%" );
+ formatter.setAlignment( 1, 0, HasHorizontalAlignment.ALIGN_CENTER, HasVerticalAlignment.ALIGN_TOP);
+ formatter.setStyleName( 1, 0, "new-asset-Icons" );
+
+ return table;
+ }
+
+ private Command getRuleListLoadingCommand(final AssetItemListViewer list,
+ final String selectedPath) {
+ return new Command() {
+ public void execute() {
+ RepositoryServiceFactory.getService().loadRuleListForCategories( selectedPath,
+ new GenericCallback() {
+ public void onSuccess(Object o) {
+ TableDataResult result = (TableDataResult) o;
+ list.loadTableData( result );
+ }
+
+ } );
+ }
+ };
+ }
+
+ public void showLoadEditor(String uuid) {
+ EditorLauncher.showLoadEditor( openedViewers, tab, uuid, false );
+ }
+
+ private void showNewAssetWizard() {
+ int left = 70;
+ int top = 100;
+
+ NewAssetWizard pop = new NewAssetWizard(new EditItemEvent() {
+ public void open(String key) {
+ showLoadEditor( key );
+
+ }
+ }, true, null, "Create a new rule");
+ pop.setPopupPosition( left, top );
+
+ pop.show();
+ }
+
+
+
+}
Property changes on: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rulelist/AssetBrowser.java
___________________________________________________________________
Name: svn:eol-style
+ native
Deleted: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rulelist/RuleListView.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rulelist/RuleListView.java 2007-03-16 08:35:09 UTC (rev 10254)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rulelist/RuleListView.java 2007-03-16 08:36:24 UTC (rev 10255)
@@ -1,294 +0,0 @@
-//package org.drools.brms.client.rulelist;
-//
-//import org.drools.brms.client.rpc.RepositoryServiceAsync;
-//import org.drools.brms.client.rpc.RepositoryServiceFactory;
-//import org.drools.brms.client.rpc.TableConfig;
-//
-//import com.google.gwt.user.client.rpc.AsyncCallback;
-//import com.google.gwt.user.client.ui.ClickListener;
-//import com.google.gwt.user.client.ui.Composite;
-//import com.google.gwt.user.client.ui.Grid;
-//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.SourcesTableEvents;
-//import com.google.gwt.user.client.ui.TableListener;
-//import com.google.gwt.user.client.ui.VerticalPanel;
-//import com.google.gwt.user.client.ui.Widget;
-//
-///**
-// * NOTE: this is not currently used, but it worked OK.
-// * It did NOT have sorting, but did have paging, and performed reasonably well.
-// *
-// * SO KEEP THIS AROUND IN CASE THE OTHER ONE BLOWS CHUNKS !
-// * This one is based on the mail app example.
-// *
-// * A composite that displays an explorer and a list view.
-// */
-//public class RuleListView extends Composite
-// implements
-// TableListener,
-// ClickListener {
-//
-//
-// public static final String RULE_LIST_TABLE_ID = "ruleList";
-//
-// private int visibleItemCount = -1;
-//
-// private HTML countLabel = new HTML();
-// private HTML prevButton = new HTML( "<a href='javascript:;'>< prev</a>",
-// true );
-// private HTML nextButton = new HTML( "<a href='javascript:;'>next ></a>",
-// true );
-// private HTML editButton = new HTML( "<a href='javascript:;'>edit</a>",
-// true );
-//
-// private int startIndex, selectedRow = -1;
-// private Grid table = new Grid();
-// private HorizontalPanel navBar = new HorizontalPanel();
-//
-//
-// private static final RepositoryServiceAsync service = RepositoryServiceFactory.getService();
-// private String[][] data;
-// protected int numberOfColumns;
-// private EditItemEvent editEvent;
-//
-// public RuleListView(EditItemEvent event) {
-//
-// this.editEvent = event;
-//
-//
-// // Setup the table.
-// table.setCellSpacing( 0 );
-// table.setCellPadding( 0 );
-// table.setWidth( "100%" );
-//
-// // Hook up events.
-// table.addTableListener( this );
-// prevButton.addClickListener( this );
-// nextButton.addClickListener( this );
-// editButton.addClickListener( this );
-//
-// // Create the 'navigation' bar at the upper-right.
-// HorizontalPanel innerNavBar = new HorizontalPanel();
-// innerNavBar.setStyleName( "rule-ListNavBar" );
-// innerNavBar.setSpacing( 8 );
-//
-// innerNavBar.add( prevButton );
-// innerNavBar.add( countLabel );
-// innerNavBar.add( nextButton );
-// innerNavBar.add( editButton );
-//
-// navBar.setHorizontalAlignment( HorizontalPanel.ALIGN_RIGHT );
-// navBar.add( innerNavBar );
-// navBar.setWidth( "100%" );
-//
-// //this is so we can stack controls on top of the table
-// VerticalPanel vert = new VerticalPanel();
-// vert.add( navBar );
-// vert.add( table );
-// vert.setStyleName( "rule-List" );
-// vert.setWidth( "100%" );
-//
-// table.setStyleName( "rule-List" );
-// table.setWidth( "100%" );
-//
-// // needed for composite to work
-// initWidget( vert );
-// setStyleName( "rule-List" );
-// initTable();
-//
-// }
-//
-// public void onCellClicked(SourcesTableEvents sender,
-// int row,
-// int cell) {
-// // Select the row that was clicked (-1 to account for header row).
-// if ( row > 0 ) selectRow( row - 1 );
-// }
-//
-// public void onClick(Widget sender) {
-// if ( sender == nextButton ) {
-// // Move forward a page.
-// startIndex += visibleItemCount;
-// if ( startIndex >= data.length ) startIndex -= visibleItemCount;
-// else {
-// styleRow( selectedRow,
-// false );
-// selectedRow = -1;
-// update();
-// }
-// } else if ( sender == prevButton ) {
-// // Move back a page.
-// startIndex -= visibleItemCount;
-// if ( startIndex < 0 ) startIndex = 0;
-// else {
-// styleRow( selectedRow,
-// false );
-// selectedRow = -1;
-// update();
-// }
-// } else if ( sender == editButton ) {
-// openEditor();
-// }
-// }
-//
-// /**
-// * Open the editor as pertains to the selected row !
-// */
-// private void openEditor() {
-// if (selectedRow < data.length) {
-// this.editEvent.open( data[selectedRow][0] );
-// }
-// }
-//
-// /**
-// * Initializes the table. Will load the header config, initialise etc.
-// */
-// private void initTable() {
-// // Create the header row.
-//
-// table.resize( 1, 1 );
-// table.getRowFormatter().setStyleName( 0, "rule-ListHeader" );
-// table.setText( 0, 0, "Please wait..." );
-//
-// service.loadTableConfig( RULE_LIST_TABLE_ID, new AsyncCallback() {
-//
-// public void onFailure(Throwable caught) {
-// //TODO
-// }
-//
-// public void onSuccess(Object result) {
-// TableConfig config = (TableConfig) result;
-//
-// String[] header = config.headers;
-// numberOfColumns = header.length;
-//
-// visibleItemCount = config.rowsPerPage;
-// table.resize( visibleItemCount + 1, numberOfColumns);
-//
-// for ( int i = 0; i < numberOfColumns; i++ ) {
-// table.setText( 0, i, header[i]);
-// }
-//
-// data = new String[1][numberOfColumns];
-// update();
-//
-// }
-//
-// });
-//
-// }
-//
-// /**
-// * Selects the given row (relative to the current page).
-// *
-// * @param row the row to be selected
-// */
-// private void selectRow(int row) {
-//
-// //change the style flags
-// styleRow( selectedRow,
-// false );
-// styleRow( row,
-// true );
-//
-// //mark the selected row
-// selectedRow = row;
-//
-// //TODO: also show "preview" view here of rule.
-// System.out.println("[Preview rule now]");
-// }
-//
-// private void styleRow(int row,
-// boolean selected) {
-// if ( row != -1 ) {
-// if ( selected ) table.getRowFormatter().addStyleName( row + 1,
-// "rule-SelectedRow" );
-// else table.getRowFormatter().removeStyleName( row + 1,
-// "rule-SelectedRow" );
-// }
-// }
-//
-//
-//
-//
-//
-//
-// private void update() {
-//
-// if (this.numberOfColumns == -1) {
-// //if it hasn't been setup, can't load data yet
-// return;
-// }
-//
-// // Update the older/newer buttons & label.
-// int count = data.length;
-// int max = startIndex + visibleItemCount;
-// if ( max > count ) max = count;
-//
-// prevButton.setVisible( startIndex != 0 );
-// nextButton.setVisible( startIndex + visibleItemCount < count );
-// countLabel.setText( "" + (startIndex + 1) + " - " + max + " of " + count );
-//
-// // Show the selected emails.
-// int i = 0;
-// for ( ; i < visibleItemCount; ++i ) {
-// // Don't read past the end.
-// if ( startIndex + i >= count ) break;
-//
-// String[] rowData = data[startIndex + i];
-//
-// //RuleListItem item = data.getMailItem( startIndex + i );
-//
-// // Add a new row to the table, then set each of its columns value
-//
-// for ( int col = 0; col < rowData.length; col++ ) {
-// table.setText( i + 1, col, rowData[col] );
-// }
-//
-//// table.setText( i + 1,
-//// 0,
-//// item.name );
-//// table.setText( i + 1,
-//// 1,
-//// item.status );
-//// table.setText( i + 1,
-//// 2,
-//// item.changedBy );
-//// table.setText( i + 1,
-//// 3,
-//// item.version );
-// }
-//
-// // Clear any remaining slots.
-// for ( ; i < visibleItemCount; ++i ) {
-// table.setHTML( i + 1, 0, " " );
-// }
-//
-// // Select the first row if none is selected.
-// if ( selectedRow == -1 ) selectRow( 0 );
-//
-// }
-//
-// public void loadRulesForCategoryPath(String selectedPath) {
-// service.loadRuleListForCategories( selectedPath, "", new AsyncCallback() {
-//
-// public void onFailure(Throwable caught) {
-// // TODO Auto-generated method stub
-// }
-//
-// public void onSuccess(Object result) {
-// String[][] data = (String[][]) result;
-// updateData(data);
-// }
-//
-// });
-//
-// }
-//
-// private void updateData(String[][] data) {
-// this.data = data;
-// update();
-// }
-//}
Copied: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rulelist/RuleListViewLegacy.java (from rev 10218, labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rulelist/RuleListView.java)
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rulelist/RuleListViewLegacy.java (rev 0)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rulelist/RuleListViewLegacy.java 2007-03-16 08:36:24 UTC (rev 10255)
@@ -0,0 +1,295 @@
+package org.drools.brms.client.rulelist;
+//package org.drools.brms.client.rulelist;
+//
+//import org.drools.brms.client.rpc.RepositoryServiceAsync;
+//import org.drools.brms.client.rpc.RepositoryServiceFactory;
+//import org.drools.brms.client.rpc.TableConfig;
+//
+//import com.google.gwt.user.client.rpc.AsyncCallback;
+//import com.google.gwt.user.client.ui.ClickListener;
+//import com.google.gwt.user.client.ui.Composite;
+//import com.google.gwt.user.client.ui.Grid;
+//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.SourcesTableEvents;
+//import com.google.gwt.user.client.ui.TableListener;
+//import com.google.gwt.user.client.ui.VerticalPanel;
+//import com.google.gwt.user.client.ui.Widget;
+//
+///**
+// * NOTE: this is not currently used, but it worked OK.
+// * It did NOT have sorting, but did have paging, and performed reasonably well.
+// *
+// * SO KEEP THIS AROUND IN CASE THE OTHER ONE BLOWS CHUNKS !
+// * This one is based on the mail app example.
+// *
+// * A composite that displays an explorer and a list view.
+// */
+//public class RuleListView extends Composite
+// implements
+// TableListener,
+// ClickListener {
+//
+//
+// public static final String RULE_LIST_TABLE_ID = "ruleList";
+//
+// private int visibleItemCount = -1;
+//
+// private HTML countLabel = new HTML();
+// private HTML prevButton = new HTML( "<a href='javascript:;'>< prev</a>",
+// true );
+// private HTML nextButton = new HTML( "<a href='javascript:;'>next ></a>",
+// true );
+// private HTML editButton = new HTML( "<a href='javascript:;'>edit</a>",
+// true );
+//
+// private int startIndex, selectedRow = -1;
+// private Grid table = new Grid();
+// private HorizontalPanel navBar = new HorizontalPanel();
+//
+//
+// private static final RepositoryServiceAsync service = RepositoryServiceFactory.getService();
+// private String[][] data;
+// protected int numberOfColumns;
+// private EditItemEvent editEvent;
+//
+// public RuleListView(EditItemEvent event) {
+//
+// this.editEvent = event;
+//
+//
+// // Setup the table.
+// table.setCellSpacing( 0 );
+// table.setCellPadding( 0 );
+// table.setWidth( "100%" );
+//
+// // Hook up events.
+// table.addTableListener( this );
+// prevButton.addClickListener( this );
+// nextButton.addClickListener( this );
+// editButton.addClickListener( this );
+//
+// // Create the 'navigation' bar at the upper-right.
+// HorizontalPanel innerNavBar = new HorizontalPanel();
+// innerNavBar.setStyleName( "rule-ListNavBar" );
+// innerNavBar.setSpacing( 8 );
+//
+// innerNavBar.add( prevButton );
+// innerNavBar.add( countLabel );
+// innerNavBar.add( nextButton );
+// innerNavBar.add( editButton );
+//
+// navBar.setHorizontalAlignment( HorizontalPanel.ALIGN_RIGHT );
+// navBar.add( innerNavBar );
+// navBar.setWidth( "100%" );
+//
+// //this is so we can stack controls on top of the table
+// VerticalPanel vert = new VerticalPanel();
+// vert.add( navBar );
+// vert.add( table );
+// vert.setStyleName( "rule-List" );
+// vert.setWidth( "100%" );
+//
+// table.setStyleName( "rule-List" );
+// table.setWidth( "100%" );
+//
+// // needed for composite to work
+// initWidget( vert );
+// setStyleName( "rule-List" );
+// initTable();
+//
+// }
+//
+// public void onCellClicked(SourcesTableEvents sender,
+// int row,
+// int cell) {
+// // Select the row that was clicked (-1 to account for header row).
+// if ( row > 0 ) selectRow( row - 1 );
+// }
+//
+// public void onClick(Widget sender) {
+// if ( sender == nextButton ) {
+// // Move forward a page.
+// startIndex += visibleItemCount;
+// if ( startIndex >= data.length ) startIndex -= visibleItemCount;
+// else {
+// styleRow( selectedRow,
+// false );
+// selectedRow = -1;
+// update();
+// }
+// } else if ( sender == prevButton ) {
+// // Move back a page.
+// startIndex -= visibleItemCount;
+// if ( startIndex < 0 ) startIndex = 0;
+// else {
+// styleRow( selectedRow,
+// false );
+// selectedRow = -1;
+// update();
+// }
+// } else if ( sender == editButton ) {
+// openEditor();
+// }
+// }
+//
+// /**
+// * Open the editor as pertains to the selected row !
+// */
+// private void openEditor() {
+// if (selectedRow < data.length) {
+// this.editEvent.open( data[selectedRow][0] );
+// }
+// }
+//
+// /**
+// * Initializes the table. Will load the header config, initialise etc.
+// */
+// private void initTable() {
+// // Create the header row.
+//
+// table.resize( 1, 1 );
+// table.getRowFormatter().setStyleName( 0, "rule-ListHeader" );
+// table.setText( 0, 0, "Please wait..." );
+//
+// service.loadTableConfig( RULE_LIST_TABLE_ID, new AsyncCallback() {
+//
+// public void onFailure(Throwable caught) {
+// //TODO
+// }
+//
+// public void onSuccess(Object result) {
+// TableConfig config = (TableConfig) result;
+//
+// String[] header = config.headers;
+// numberOfColumns = header.length;
+//
+// visibleItemCount = config.rowsPerPage;
+// table.resize( visibleItemCount + 1, numberOfColumns);
+//
+// for ( int i = 0; i < numberOfColumns; i++ ) {
+// table.setText( 0, i, header[i]);
+// }
+//
+// data = new String[1][numberOfColumns];
+// update();
+//
+// }
+//
+// });
+//
+// }
+//
+// /**
+// * Selects the given row (relative to the current page).
+// *
+// * @param row the row to be selected
+// */
+// private void selectRow(int row) {
+//
+// //change the style flags
+// styleRow( selectedRow,
+// false );
+// styleRow( row,
+// true );
+//
+// //mark the selected row
+// selectedRow = row;
+//
+// //TODO: also show "preview" view here of rule.
+// System.out.println("[Preview rule now]");
+// }
+//
+// private void styleRow(int row,
+// boolean selected) {
+// if ( row != -1 ) {
+// if ( selected ) table.getRowFormatter().addStyleName( row + 1,
+// "rule-SelectedRow" );
+// else table.getRowFormatter().removeStyleName( row + 1,
+// "rule-SelectedRow" );
+// }
+// }
+//
+//
+//
+//
+//
+//
+// private void update() {
+//
+// if (this.numberOfColumns == -1) {
+// //if it hasn't been setup, can't load data yet
+// return;
+// }
+//
+// // Update the older/newer buttons & label.
+// int count = data.length;
+// int max = startIndex + visibleItemCount;
+// if ( max > count ) max = count;
+//
+// prevButton.setVisible( startIndex != 0 );
+// nextButton.setVisible( startIndex + visibleItemCount < count );
+// countLabel.setText( "" + (startIndex + 1) + " - " + max + " of " + count );
+//
+// // Show the selected emails.
+// int i = 0;
+// for ( ; i < visibleItemCount; ++i ) {
+// // Don't read past the end.
+// if ( startIndex + i >= count ) break;
+//
+// String[] rowData = data[startIndex + i];
+//
+// //RuleListItem item = data.getMailItem( startIndex + i );
+//
+// // Add a new row to the table, then set each of its columns value
+//
+// for ( int col = 0; col < rowData.length; col++ ) {
+// table.setText( i + 1, col, rowData[col] );
+// }
+//
+//// table.setText( i + 1,
+//// 0,
+//// item.name );
+//// table.setText( i + 1,
+//// 1,
+//// item.status );
+//// table.setText( i + 1,
+//// 2,
+//// item.changedBy );
+//// table.setText( i + 1,
+//// 3,
+//// item.version );
+// }
+//
+// // Clear any remaining slots.
+// for ( ; i < visibleItemCount; ++i ) {
+// table.setHTML( i + 1, 0, " " );
+// }
+//
+// // Select the first row if none is selected.
+// if ( selectedRow == -1 ) selectRow( 0 );
+//
+// }
+//
+// public void loadRulesForCategoryPath(String selectedPath) {
+// service.loadRuleListForCategories( selectedPath, "", new AsyncCallback() {
+//
+// public void onFailure(Throwable caught) {
+// // TODO Auto-generated method stub
+// }
+//
+// public void onSuccess(Object result) {
+// String[][] data = (String[][]) result;
+// updateData(data);
+// }
+//
+// });
+//
+// }
+//
+// private void updateData(String[][] data) {
+// this.data = data;
+// update();
+// }
+//}
Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/public/images/attention_needed.png
===================================================================
(Binary files differ)
Property changes on: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/public/images/attention_needed.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/public/images/warning.gif
===================================================================
(Binary files differ)
Property changes on: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/public/images/warning.gif
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/JBRMSServiceServlet.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/JBRMSServiceServlet.java 2007-03-16 08:35:09 UTC (rev 10254)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/JBRMSServiceServlet.java 2007-03-16 08:36:24 UTC (rev 10255)
@@ -25,6 +25,7 @@
import org.drools.brms.client.rpc.TableConfig;
import org.drools.brms.client.rpc.TableDataResult;
import org.drools.brms.client.rpc.TableDataRow;
+import org.drools.brms.client.rpc.ValidatedResponse;
import org.drools.brms.server.contenthandler.ContentHandler;
import org.drools.brms.server.rules.SuggestionCompletionLoader;
import org.drools.brms.server.util.MetaDataMapper;
@@ -377,7 +378,7 @@
return data;
}
- public String savePackage(PackageConfigData data) throws SerializableException {
+ public ValidatedResponse savePackage(PackageConfigData data) throws SerializableException {
log.info( "SAVING package [" + data.name + "]" );
PackageItem item = getRulesRepository().loadPackage( data.name );
@@ -387,7 +388,22 @@
item.checkin( data.description );
- return item.getUUID();
+ SuggestionCompletionLoader loader = new SuggestionCompletionLoader();
+ loader.getSuggestionEngine( item );
+
+ ValidatedResponse res = new ValidatedResponse();
+ if (loader.hasErrors()) {
+ res.hasErrors = true;
+ String err = "";
+ for ( Iterator iter = loader.getErrors().iterator(); iter.hasNext(); ) {
+ err += (String) iter.next();
+ if (iter.hasNext()) err += "\n";
+ }
+ res.errorHeader = "Package validation errors";
+ res.errorMessage = err;
+ }
+
+ return res;
}
public TableDataResult listAssets(String uuid,
Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/rules/SuggestionCompletionLoader.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/rules/SuggestionCompletionLoader.java 2007-03-16 08:35:09 UTC (rev 10254)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/rules/SuggestionCompletionLoader.java 2007-03-16 08:36:24 UTC (rev 10255)
@@ -17,6 +17,7 @@
import org.drools.brms.server.util.SuggestionCompletionEngineBuilder;
import org.drools.compiler.DrlParser;
import org.drools.compiler.DroolsParserException;
+import org.drools.compiler.ParserError;
import org.drools.lang.descr.FactTemplateDescr;
import org.drools.lang.descr.FieldTemplateDescr;
import org.drools.lang.descr.GlobalDescr;
@@ -36,8 +37,12 @@
* This utility class loads suggestion completion stuff for the package,
* introspecting from models, templates etc.
*
- * This also includes DSL stuff.
+ * This also includes DSL stuff, basically, everything you need to get started with a package.
+ * It also validates the package configuration, and can provide errors.
*
+ * This does NOT validate assets in the package, other then to load up DSLs, models etc
+ * as needed.
+ *
* @author Michael Neale
*
*/
@@ -46,52 +51,66 @@
private SuggestionCompletionEngineBuilder builder = new SuggestionCompletionEngineBuilder();
private DrlParser parser = new DrlParser();
private final ByteArrayClassLoader loader;
+ private List errors;
public SuggestionCompletionLoader() {
loader = new ByteArrayClassLoader( this.getClass().getClassLoader() );
}
+ /**
+ * This will validate, and generate a new engine, ready to go.
+ * If there are errors, you can get them by doing getErrors();
+ * @param pkg
+ * @return
+ */
public SuggestionCompletionEngine getSuggestionEngine(PackageItem pkg) {
- StringBuffer errors = new StringBuffer();
+ errors = new ArrayList();
builder.newCompletionEngine();
String header = pkg.getHeader();
+ if (!header.trim().equals( "" )) {
+ processPackageHeader( pkg, header );
+ }
+
+ // populating DSL sentences
+ this.populateDSLSentences( pkg );
+
+ return builder.getInstance();
+ }
+
+ private void processPackageHeader(PackageItem pkg,
+ String header) {
// get fact types from imports
PackageDescr pkgDescr;
try {
pkgDescr = parser.parse( header );
} catch ( DroolsParserException e1 ) {
- throw new RuntimeDroolsException( "Error parsing header for package " + pkg.getName(),
- e1 );
+ throw new RulesRepositoryException( "Serious error, unable to validate package " + pkg.getName(), e1 );
}
-
+
+ if (this.parser.hasErrors()) {
+ for ( Iterator iter = this.parser.getErrors().iterator(); iter.hasNext(); ) {
+ ParserError element = (ParserError) iter.next();
+ errors.add( element.getMessage() );
+ }
+ }
// populating information for the model itself
- this.populateModelInfo( errors,
- pkgDescr,
+ this.populateModelInfo( pkgDescr,
pkg );
-
+
// populating globals
- this.populateGlobalInfo( errors,
- pkgDescr,
+ this.populateGlobalInfo( pkgDescr,
pkg );
+
- // populating DSL sentences
- this.populateDSLSentences( pkg,
- errors );
-
- if ( errors.length() > 0 ) {
- throw new RuntimeDroolsException( "Error(s) while loading suggestion completion engine: \n" + errors.toString() );
- }
- return builder.getInstance();
}
/**
* @param pkg
* @param errors
*/
- private void populateDSLSentences(PackageItem pkg,
- StringBuffer errors) {
+ private void populateDSLSentences(PackageItem pkg) {
AssetItemIterator it = pkg.listAssetsByFormat( new String[]{AssetFormats.DSL} );
while ( it.hasNext() ) {
AssetItem item = (AssetItem) it.next();
@@ -109,14 +128,10 @@
}
} else {
- errors.append( file.getErrors().toString() );
+ errors.add( file.getErrors().toString() );
}
} catch ( IOException e ) {
- errors.append( "\tError while loading DSL mapping " );
- errors.append( item.getBinaryContentAttachmentFileName() );
- errors.append( " : " );
- errors.append( e.getMessage() );
- errors.append( "\n" );
+ errors.add( "Error while loading DSL language configuration : " + item.getBinaryContentAttachmentFileName() + " error message: " + e.getMessage() );
}
}
}
@@ -124,8 +139,7 @@
/**
* Populate the global stuff.
*/
- private void populateGlobalInfo(StringBuffer errors,
- PackageDescr pkgDescr,
+ private void populateGlobalInfo(PackageDescr pkgDescr,
PackageItem pkg) {
// populating information for the globals
@@ -135,8 +149,7 @@
String shortTypeName = global.getType();
if ( !this.builder.hasFieldsForType( shortTypeName ) ) {
Class clazz = loadClass( pkg,
- global.getType(),
- errors );
+ global.getType() );
loadClassFields( clazz,
shortTypeName );
@@ -147,11 +160,7 @@
builder.addGlobalType( global.getIdentifier(),
shortTypeName );
} catch ( IOException e ) {
- errors.append( "\tError while inspecting class: " );
- errors.append( global.getType() );
- errors.append( " : " );
- errors.append( e.getMessage() );
- errors.append( "\n" );
+ errors.add( "Error while inspecting class for global: " + global.getType() + " error message: " + e.getMessage());
}
}
@@ -160,8 +169,7 @@
/**
* Populate the fact type data.
*/
- private void populateModelInfo(StringBuffer errors,
- PackageDescr pkgDescr,
+ private void populateModelInfo(PackageDescr pkgDescr,
PackageItem pkg) {
// iterating over the import list
@@ -172,8 +180,7 @@
resolver.addImport( classname );
Class clazz = loadClass( pkg,
- classname,
- errors );
+ classname );
if ( clazz != null ) {
try {
String shortTypeName = getShortNameOfClass( clazz.getName() );
@@ -181,11 +188,7 @@
shortTypeName );
builder.addFactType( shortTypeName );
} catch ( IOException e ) {
- errors.append( "\tError while inspecting class: " );
- errors.append( classname );
- errors.append( " : " );
- errors.append( e.getMessage() );
- errors.append( "\n" );
+ errors.add( "Error while inspecting the class: " + classname + ". The error was: " + e.getMessage() );
}
}
}
@@ -193,8 +196,7 @@
// iterating over templates
populateFactTemplateTypes( pkgDescr,
pkg,
- resolver,
- errors );
+ resolver );
}
/**
@@ -204,8 +206,7 @@
*/
private void populateFactTemplateTypes(PackageDescr pkgDescr,
PackageItem pkg,
- ClassTypeResolver resolver,
- StringBuffer errors) {
+ ClassTypeResolver resolver) {
for ( Iterator it = pkgDescr.getFactTemplates().iterator(); it.hasNext(); ) {
FactTemplateDescr templ = (FactTemplateDescr) it.next();
String factType = templ.getName();
@@ -225,9 +226,7 @@
try {
fieldTypeClass = resolver.resolveType( fieldType );
} catch ( ClassNotFoundException e ) {
- errors.append( "\tClass not found: " );
- errors.append( fieldType );
- errors.append( "\n" );
+ errors.add( "Fact template field type not found: " + fieldType );
}
builder.addFieldType( factType + "." + fieldDescr.getName(),
getFieldType( fieldTypeClass ) );
@@ -237,6 +236,7 @@
private void loadClassFields(Class clazz,
String shortTypeName) throws IOException {
+ if (clazz == null) return;
ClassFieldInspector inspector = new ClassFieldInspector( clazz );
String[] fields = (String[]) inspector.getFieldNames().keySet().toArray( new String[inspector.getFieldNames().size()] );
@@ -280,8 +280,7 @@
* @return
*/
private Class loadClass(PackageItem pkg,
- String classname,
- StringBuffer errors) {
+ String classname) {
Class clazz = null;
try {
// check if it is already in the classpath
@@ -319,9 +318,7 @@
} catch ( IOException e ) {
throw new RulesRepositoryException( e );
} catch ( ClassNotFoundException e ) {
- errors.append( "\tClass not found: " );
- errors.append( classname );
- errors.append( "\n" );
+ errors.add( "Class not found: " + classname );
}
}
return clazz;
@@ -350,5 +347,19 @@
}
return fieldType;
}
+
+ /**
+ * @return true if there were errors when processing the package.
+ */
+ public boolean hasErrors() {
+ return (this.errors.size() > 0);
+ }
+
+ /**
+ * Returns a list of String errors.
+ */
+ public List getErrors() {
+ return this.errors;
+ }
}
Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/util/SuggestionCompletionEngineBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/util/SuggestionCompletionEngineBuilder.java 2007-03-16 08:35:09 UTC (rev 10254)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/util/SuggestionCompletionEngineBuilder.java 2007-03-16 08:36:24 UTC (rev 10255)
@@ -20,12 +20,9 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
import org.drools.brms.client.modeldriven.SuggestionCompletionEngine;
import org.drools.brms.client.modeldriven.brxml.DSLSentence;
-import org.drools.lang.dsl.DSLMappingEntry;
/**
* A builder to incrementally populate a SuggestionCompletionEngine
@@ -34,24 +31,6 @@
*/
public class SuggestionCompletionEngineBuilder {
- // The following pattern is capable of spliting a DSL sentence into
- // fragments, supporting \{ escapes. Example:
- //
- // {This} is a {pattern} considered pretty \{{easy}\} by most \{people\}. What do you {say}?
- //
- // would be parsed into the following fragments:
- //
- // Fragment: [{This}]
- // Fragment: [ is a ]
- // Fragment: [{pattern}]
- // Fragment: [ considered pretty {]
- // Fragment: [{easy}]
- // Fragment: [} by most {people}. What do you ]
- // Fragment: [{say}]
- // Fragment: [?]
- private final static Pattern splitter = Pattern.compile( "(^|[^\\\\])(\\{[(\\\\\\{)|[^\\{]]*?\\})",
- Pattern.MULTILINE | Pattern.DOTALL );
-
private SuggestionCompletionEngine instance = new SuggestionCompletionEngine();
private List factTypes = new ArrayList();
private Map fieldsForType = new HashMap();
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-03-16 08:35:09 UTC (rev 10254)
+++ labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/ServiceImplementationTest.java 2007-03-16 08:36:24 UTC (rev 10255)
@@ -16,6 +16,7 @@
import org.drools.brms.client.rpc.TableConfig;
import org.drools.brms.client.rpc.TableDataResult;
import org.drools.brms.client.rpc.TableDataRow;
+import org.drools.brms.client.rpc.ValidatedResponse;
import org.drools.brms.client.rulelist.AssetItemListViewer;
import org.drools.brms.server.util.TableDisplayHandler;
import org.drools.repository.AssetItem;
@@ -351,14 +352,19 @@
data.externalURI = "new URI";
- String uuid2 = impl.savePackage( data );
- assertNotNull(uuid);
- assertEquals(uuid, uuid2);
+ ValidatedResponse res = impl.savePackage( data );
+ assertNotNull(res);
+ assertTrue(res.hasErrors);
+ assertNotNull(res.errorMessage);
data = impl.loadPackageConfig( uuid );
assertEquals("new desc", data.description);
assertEquals("wa", data.header);
- assertEquals("new URI", data.externalURI);
+ assertEquals("new URI", data.externalURI);
+
+ data.header = "";
+ res = impl.savePackage( data );
+ assertFalse(res.hasErrors);
}
public void testListByFormat() throws Exception {
Modified: labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/rules/SuggestionCompletionLoaderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/rules/SuggestionCompletionLoaderTest.java 2007-03-16 08:35:09 UTC (rev 10254)
+++ labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/rules/SuggestionCompletionLoaderTest.java 2007-03-16 08:36:24 UTC (rev 10255)
@@ -89,4 +89,26 @@
}
+ public void testErrors() throws Exception {
+ RulesRepository repo = new RulesRepository(SessionHelper.getSession());
+ PackageItem item = repo.createPackage( "testErrorsInPackage", "to test error handling" );
+
+ SuggestionCompletionLoader loader = new SuggestionCompletionLoader();
+ assertNotNull(loader.getSuggestionEngine( item ));
+ assertFalse(loader.hasErrors());
+
+ item.updateHeader( "gooble de gook" );
+ loader = new SuggestionCompletionLoader();
+ loader.getSuggestionEngine( item );
+ assertTrue(loader.hasErrors());
+
+
+ item.updateHeader( "import foo.bar; \nglobal goo.Bar baz;" );
+ loader = new SuggestionCompletionLoader();
+ loader.getSuggestionEngine( item );
+ assertTrue(loader.hasErrors());
+
+
+ }
+
}
More information about the jboss-svn-commits
mailing list