[jboss-svn-commits] JBL Code SVN: r9443 - in labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms: client/rpc and 4 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Sun Feb 11 22:37:48 EST 2007
Author: michael.neale at jboss.com
Date: 2007-02-11 22:37:48 -0500 (Sun, 11 Feb 2007)
New Revision: 9443
Added:
labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/DSLRuleData.java
labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/DSLRuleEditor.java
labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/public/images/new_dsl_action.gif
labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/public/images/new_dsl_pattern.gif
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/FormStylePopup.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/client/ruleeditor/NewRuleWizard.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/AssetContentFormatHandler.java
Log:
JBRULES-665
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-02-12 01:58:39 UTC (rev 9442)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/AssetFormats.java 2007-02-12 03:37:48 UTC (rev 9443)
@@ -3,6 +3,13 @@
/**
* Keeps track of the different rule formats we support.
* Each format type corresponds to the dublin core "format" attribute.
+ *
+ * This is used both by the UI, to determine what are valid formats, and also on the server.
+ * If you are adding new types they need to be registered here.
+ *
+ * If an asset type is unknown, then it will be opened with the default editor.
+ *
+ *
* @author Michael Neale
*
*/
@@ -11,6 +18,7 @@
/** For functions */
public static final String FUNCTION = "function";
+ /** For "model" assets */
public static final String MODEL = "model";
/** Vanilla DRL "file" */
Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/FormStylePopup.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/FormStylePopup.java 2007-02-12 01:58:39 UTC (rev 9442)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/FormStylePopup.java 2007-02-12 03:37:48 UTC (rev 9443)
@@ -29,6 +29,10 @@
public void addAttribute(String label, Widget wid) {
form.addAttribute( label, wid );
}
+
+ public void addRow(Widget wid) {
+ form.addRow( wid );
+ }
public void show() {
Image close = new Image("images/close.gif");
Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/DSLRuleData.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/DSLRuleData.java (rev 0)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/DSLRuleData.java 2007-02-12 03:37:48 UTC (rev 9443)
@@ -0,0 +1,18 @@
+package org.drools.brms.client.rpc;
+
+import com.google.gwt.user.client.rpc.IsSerializable;
+
+/**
+ * Used to transfer the payload for a simple DSL based rule.
+ *
+ * @author Michael Neale
+ */
+public class DSLRuleData
+ implements
+ IsSerializable {
+
+ public String[] lhsSuggestions;
+ public String[] rhsSuggestions;
+ public RuleContentText text;
+
+}
Property changes on: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/DSLRuleData.java
___________________________________________________________________
Name: svn:eol-style
+ native
Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/DSLRuleEditor.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/DSLRuleEditor.java (rev 0)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/DSLRuleEditor.java 2007-02-12 03:37:48 UTC (rev 9443)
@@ -0,0 +1,150 @@
+package org.drools.brms.client.ruleeditor;
+
+import org.drools.brms.client.rpc.RuleContentText;
+
+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.Composite;
+import com.google.gwt.user.client.ui.DialogBox;
+import com.google.gwt.user.client.ui.DockPanel;
+import com.google.gwt.user.client.ui.FlexTable;
+import com.google.gwt.user.client.ui.Image;
+import com.google.gwt.user.client.ui.KeyboardListener;
+import com.google.gwt.user.client.ui.ListBox;
+import com.google.gwt.user.client.ui.TextArea;
+import com.google.gwt.user.client.ui.VerticalPanel;
+import com.google.gwt.user.client.ui.Widget;
+import com.google.gwt.user.client.ui.DockPanel.DockLayoutConstant;
+
+
+/**
+ * This is a textual rule editor, which provides DSL content assistance.
+ * This is similar (but simpler) to the IDE based one.
+ * @author michael neale
+ */
+public class DSLRuleEditor extends Composite {
+
+ private TextArea text;
+ final private RuleContentText data;
+
+
+
+ public DSLRuleEditor(RuleContentText tex, final String[] dslConditions, final String[] dslActions) {
+
+ this.data = tex;
+ text = new TextArea();
+ text.setWidth("100%");
+ text.setHeight("100%");
+ text.setVisibleLines(10);
+ text.setText(tex.content);
+
+ text.setStyleName( "dsl-text-Editor" );
+
+ FlexTable layout = new FlexTable();
+ layout.setWidget( 0, 0, text );
+
+ text.addChangeListener( new ChangeListener() {
+ public void onChange(Widget w) {
+ data.content = text.getText();
+ }
+ });
+
+
+
+ VerticalPanel vert = new VerticalPanel();
+
+ Image lhsOptions = new Image("images/new_dsl_pattern.gif");
+ final String msg = "Add a new condition";
+ lhsOptions.setTitle( msg );
+ lhsOptions.addClickListener( new ClickListener() {
+ public void onClick(Widget w) {
+ showOptions( dslConditions, w, msg );
+ }
+ });
+
+ Image rhsOptions = new Image("images/new_dsl_action.gif");
+ final String msg2 = "Add an action";
+ rhsOptions.setTitle( msg2 );
+ rhsOptions.addClickListener( new ClickListener() {
+ public void onClick(Widget w) {
+ showOptions( dslActions, w, msg2 );
+ }
+ });
+
+ vert.add( lhsOptions );
+ vert.add( rhsOptions );
+ layout.setWidget( 0, 1, vert );
+
+ layout.getCellFormatter().setWidth( 0, 0, "95%" );
+ layout.getCellFormatter().setWidth( 0, 1, "5%" );
+
+ layout.setWidth( "100%" );
+ layout.setHeight( "100%" );
+
+ initWidget( layout );
+ }
+
+ private void showOptions(final String[] items,
+ Widget w, String message) {
+ PickList pick = new PickList(message, items, this);
+ pick.setPopupPosition( w.getAbsoluteLeft() - 250, w.getAbsoluteTop() );
+ pick.show();
+ }
+
+ private void insertText(String ins) {
+ int i = text.getCursorPos();
+ String left = text.getText().substring( 0, i );
+ String right = text.getText().substring( i, text.getText().length() );
+ text.setText( left + ins + right );
+ }
+
+ /**
+ * The popup content assistance. Can be dragged around.
+ */
+ static class PickList extends DialogBox {
+
+ public PickList(String message, String[] items, final DSLRuleEditor self) {
+ setStyleName( "ks-popups-Popup" );
+
+ final ListBox list = new ListBox();
+ for ( int i = 0; i < items.length; i++ ) {
+ list.addItem( items[i] );
+ }
+
+
+ setText( message );
+
+ VerticalPanel vert = new VerticalPanel();
+ list.setVisibleItemCount( 6 );
+ vert.add( list );
+
+ DockPanel buttons = new DockPanel();
+
+
+ Button ok = new Button("OK");
+ ok.addClickListener( new ClickListener() {
+ public void onClick(Widget w) {
+ self.insertText( list.getItemText( list.getSelectedIndex() ) );
+ hide();
+ }
+ } );
+ buttons.add( ok, DockPanel.WEST );
+
+
+
+ Button close = new Button("close");
+ close.addClickListener( new ClickListener() {
+ public void onClick(Widget w) {
+ hide();
+ }
+ } );
+ buttons.add( close, DockPanel.EAST );
+ buttons.setWidth( "100%" );
+ vert.add( buttons );
+
+ setWidget( vert );
+ }
+ }
+
+}
Property changes on: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/DSLRuleEditor.java
___________________________________________________________________
Name: svn:eol-style
+ native
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-02-12 01:58:39 UTC (rev 9442)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/EditorLauncher.java 2007-02-12 03:37:48 UTC (rev 9443)
@@ -4,6 +4,7 @@
import org.drools.brms.client.modeldriven.SuggestionCompletionEngine;
import org.drools.brms.client.modeldriven.brxml.RuleModel;
import org.drools.brms.client.modeldriven.ui.RuleModeller;
+import org.drools.brms.client.rpc.DSLRuleData;
import org.drools.brms.client.rpc.RuleAsset;
import org.drools.brms.client.rpc.RuleModelData;
@@ -11,7 +12,14 @@
/**
* This launches the appropriate editor for the asset type.
+ * This uses the format attribute to determine the appropriate editor, and
+ * ALSO to unpackage the content payload from the generic asset RPC object.
*
+ * NOTE: when adding new editors for asset types, this will also need to be enhanced to load
+ * it up/unpackage it correctly for the editor.
+ * The editors will make changes to the rpc objects in place, and when checking in the whole RPC
+ * objects will be sent back to the server.
+ *
* @author Michael Neale
*/
public class EditorLauncher {
@@ -23,6 +31,9 @@
//depending on the format, load the appropriate editor
if ( asset.metaData.format.equals( AssetFormats.BUSINESS_RULE ) ) {
return new RuleModeller( getSuggestionCompletionEngine(asset), getRuleModel(asset) );
+ } else if (asset.metaData.format.equals( AssetFormats.DSL_TEMPLATE_RULE )){
+ DSLRuleData data = (DSLRuleData) asset.content;
+ return new DSLRuleEditor( data.text, data.lhsSuggestions, data.rhsSuggestions );
} else {
return new DefaultRuleContentWidget( asset );
}
Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/NewRuleWizard.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/NewRuleWizard.java 2007-02-12 01:58:39 UTC (rev 9442)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/ruleeditor/NewRuleWizard.java 2007-02-12 03:37:48 UTC (rev 9443)
@@ -119,6 +119,7 @@
box.addItem( "Business rule", AssetFormats.BUSINESS_RULE );
box.addItem( "DRL file", AssetFormats.DRL );
box.addItem( "Technical rule", AssetFormats.TECHNICAL_RULE );
+ box.addItem( "Business rule using a DSL template", AssetFormats.DSL_TEMPLATE_RULE );
box.setSelectedIndex( 0 );
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-02-12 01:58:39 UTC (rev 9442)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/public/JBRMS.css 2007-02-12 03:37:48 UTC (rev 9443)
@@ -410,6 +410,13 @@
height: 100%
}
+.dsl-text-Editor {
+ font-family: Arial, sans-serif;
+ font-size: smaller;
+ border: 1px solid #B8B8B8;
+ padding: 0px;
+}
+
.dt-field-TextBox {
border: none;
padding: 0px;
Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/public/images/new_dsl_action.gif
===================================================================
(Binary files differ)
Property changes on: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/public/images/new_dsl_action.gif
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/public/images/new_dsl_pattern.gif
===================================================================
(Binary files differ)
Property changes on: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/public/images/new_dsl_pattern.gif
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/AssetContentFormatHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/AssetContentFormatHandler.java 2007-02-12 01:58:39 UTC (rev 9442)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/AssetContentFormatHandler.java 2007-02-12 03:37:48 UTC (rev 9443)
@@ -9,6 +9,7 @@
import org.drools.brms.client.modeldriven.brxml.DSLSentence;
import org.drools.brms.client.modeldriven.brxml.DSLSentenceFragment;
import org.drools.brms.client.modeldriven.brxml.RuleModel;
+import org.drools.brms.client.rpc.DSLRuleData;
import org.drools.brms.client.rpc.RuleAsset;
import org.drools.brms.client.rpc.RuleContentText;
import org.drools.brms.client.rpc.RuleModelData;
@@ -27,6 +28,8 @@
* It uses the content attribute of asset nodes (drools:content) based
* on the (drools:format) format key.
*
+ * NOTE: when enhancing this, don't forget to do the retrieve AND the store !
+ *
* @see AssetFormats
*
* @author Michael Neale
@@ -41,11 +44,7 @@
*/
public void retrieveAssetContent(RuleAsset asset,
AssetItem item) throws SerializableException {
- if (item.getFormat().equals( AssetFormats.DSL_TEMPLATE_RULE)) {
- //ok here is where we do DSLs...
- throw new SerializableException("Can't load DSL rules just yet.");
-
- } else if (item.getFormat().equals( AssetFormats.BUSINESS_RULE )) {
+ if (item.getFormat().equals( AssetFormats.BUSINESS_RULE )) {
RuleModel model = BRLPersistence.getInstance().toModel( item.getContent() );
RuleModelData data = new RuleModelData();
@@ -55,6 +54,15 @@
data.completionEngine = getDummySuggestionEngine();
asset.content = data;
+ } else if (item.getFormat().equals( AssetFormats.DSL_TEMPLATE_RULE )) {
+ RuleContentText text = new RuleContentText();
+ text.content = item.getContent();
+
+ //TODO: make this read in the DSL files in the current package.
+ DSLRuleData data = getDummyDSLSuggestions();
+ data.text = text;
+
+ asset.content = data;
} else {
//default to text, goode olde texte, just like mum used to make.
RuleContentText text = new RuleContentText();
@@ -67,6 +75,13 @@
}
+ private DSLRuleData getDummyDSLSuggestions() {
+ DSLRuleData data = new DSLRuleData();
+ data.lhsSuggestions = new String[] {"The persons name is {name}", "- age is less than {age}"};
+ data.rhsSuggestions = new String[] {"Reject claim", "Send notification to [{email}]"};
+ return data;
+ }
+
private SuggestionCompletionEngine getDummySuggestionEngine() {
SuggestionCompletionEngine com = new SuggestionCompletionEngine();
@@ -118,6 +133,9 @@
} else if (asset.content instanceof RuleModelData) {
RuleModelData data = (RuleModelData) asset.content;
repoAsset.updateContent( BRLPersistence.getInstance().toXML( data.model ) );
+ } else if (asset.content instanceof DSLRuleData) {
+ DSLRuleData data = (DSLRuleData) asset.content;
+ repoAsset.updateContent( data.text.content );
} else {
throw new SerializableException("Not able to handle that type of content just yet...");
}
More information about the jboss-svn-commits
mailing list