[jboss-svn-commits] JBL Code SVN: r32498 - in labs/jbossrules/trunk: drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/dt and 19 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Fri Apr 9 18:20:53 EDT 2010
Author: baunax
Date: 2010-04-09 18:20:49 -0400 (Fri, 09 Apr 2010)
New Revision: 32498
Added:
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/dt/TemplateModel.java
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ModellerWidgetFactory.java
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/RuleModelEditor.java
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/RuleModellerWidgetFactory.java
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/RuleTemplateEditor.java
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/TemplateModellerWidgetFactory.java
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/public/images/new_template.gif
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/contenthandler/BaseXStreamContentHandler.java
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/contenthandler/TemplateModelHandler.java
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/modeldriven/
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/modeldriven/template/
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/modeldriven/template/TemplateModelDataProvider.java
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/util/BRDRTPersistence.java
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/util/BRDRTXMLPersistence.java
labs/jbossrules/trunk/drools-guvnor/src/main/webapp/org.drools.guvnor.Guvnor/images/new_template.gif
labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/util/BRDRTPersistenceTest.java
labs/jbossrules/trunk/drools-templates/src/main/java/org/drools/template/objects/ArrayDataProvider.java
Removed:
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/modeldriven/template/
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/modeldriven/template/TemplateModelDataProvider.java
Modified:
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/ActionFieldValue.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/ISingleFieldConstraint.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/RuleModel.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/SingleFieldConstraint.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/guvnor/server/util/BRDRLPersistence.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/guvnor/server/util/BRXMLPersistence.java
labs/jbossrules/trunk/drools-guvnor/pom.xml
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/common/AssetFormats.java
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/decisiontable/GuidedDecisionTableWidget.java
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/explorer/PackagesPanel.java
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/messages/Constants.java
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/messages/Constants.properties
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/messages/Constants_es_ES.properties
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ActionInsertFactWidget.java
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ActionValueEditor.java
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ConstraintValueEditor.java
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/FactPatternWidget.java
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/RuleModeller.java
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/qa/FieldDataConstraintEditor.java
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/ruleeditor/ActionToolbar.java
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/ruleeditor/EditorLauncher.java
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/ruleeditor/WorkingSetEditor.java
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/contenthandler/BRLContentHandler.java
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/contenthandler/WorkingSetHandler.java
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/util/RowLoader.java
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/util/TestEnvironmentSessionHelper.java
labs/jbossrules/trunk/drools-guvnor/src/main/resources/contenthandler.properties
Log:
added brl templates using drools-templates.
merge with https://svn.jboss.org/repos/labs/labs/jbossrules/branches/guvnor_rules_templates_baunax_esteban_diega
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/ActionFieldValue.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/ActionFieldValue.java 2010-04-09 21:51:33 UTC (rev 32497)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/ActionFieldValue.java 2010-04-09 22:20:49 UTC (rev 32498)
@@ -46,6 +46,11 @@
public static final int TYPE_PREDICATE = 5;
/**
+ * This is for a field to be a placeholder for a template
+ */
+ public static final int TYPE_TEMPLATE = 7;
+
+ /**
* This is the datatype archectype (eg String, Numeric etc).
*/
public String type;
@@ -61,8 +66,6 @@
public ActionFieldValue() {
}
-
-
/**
* This will return true if the value is really a "formula" - in
* the sense of like an excel spreadsheet.
@@ -72,14 +75,7 @@
*
*/
public boolean isFormula() {
- if ( this.value == null ) {
- return false;
- }
- if ( this.value.trim().startsWith( "=" ) ) {
- return true;
- } else {
- return false;
- }
+ return this.value != null && this.value.trim().startsWith( "=" );
}
}
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/ISingleFieldConstraint.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/ISingleFieldConstraint.java 2010-04-09 21:51:33 UTC (rev 32497)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/ISingleFieldConstraint.java 2010-04-09 22:20:49 UTC (rev 32498)
@@ -46,6 +46,11 @@
* The fieldName and fieldBinding is not used in the case of a predicate.
*/
public static final int TYPE_PREDICATE = 5;
+
+ /**
+ * This is for a field to be a placeholder for a template
+ */
+ public static final int TYPE_TEMPLATE = 7;
public String value;
public int constraintValueType;
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/RuleModel.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/RuleModel.java 2010-04-09 21:51:33 UTC (rev 32497)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/RuleModel.java 2010-04-09 22:20:49 UTC (rev 32498)
@@ -5,9 +5,7 @@
import java.util.Collections;
import java.util.List;
-public class RuleModel
- implements
- PortableObject {
+public class RuleModel implements PortableObject {
/**
* This name is generally not used - the asset name or the
@@ -21,6 +19,8 @@
public IPattern[] lhs = new IPattern[0];
public IAction[] rhs = new IAction[0];
+ public RuleModel() {
+ }
/**
* This will return the fact pattern that a variable is bound to.
*
@@ -562,16 +562,16 @@
public boolean hasDSLSentences() {
if (this.lhs != null) {
- for (int i = 0; i < this.lhs.length; i++) {
- if (lhs[i] instanceof DSLSentence) {
+ for (IPattern pattern : this.lhs) {
+ if (pattern instanceof DSLSentence) {
return true;
}
}
}
if (this.rhs != null) {
- for (int i = 0; i < this.rhs.length; i++) {
- if (rhs[i] instanceof DSLSentence) {
+ for (IAction action : this.rhs) {
+ if (action instanceof DSLSentence) {
return true;
}
}
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/SingleFieldConstraint.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/SingleFieldConstraint.java 2010-04-09 21:51:33 UTC (rev 32497)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/brl/SingleFieldConstraint.java 2010-04-09 22:20:49 UTC (rev 32498)
@@ -2,7 +2,7 @@
/**
- * This represents a contraint on a fact - involving a SINGLE FIELD.
+ * This represents a constraint on a fact - involving a SINGLE FIELD.
*
* Can also include optional "connective constraints" that extend the options for matches.
* @author Michael Neale
@@ -17,7 +17,7 @@
/**
* Used instead of "value" when constraintValueType = TYPE_EXPR_BUILDER.
- * Eteban Aliverti
+ * Esteban Aliverti
*/
private ExpressionFormLine expression = new ExpressionFormLine();
@@ -62,11 +62,7 @@
* Returns true of there is a field binding.
*/
public boolean isBound() {
- if ( this.fieldBinding != null && !"".equals( this.fieldBinding ) ) {
- return true;
- } else {
- return false;
- }
+ return this.fieldBinding != null && this.fieldBinding.length() > 0 ;
}
public ExpressionFormLine getExpression() {
@@ -76,7 +72,4 @@
public void setExpression(ExpressionFormLine expression) {
this.expression = expression;
}
-
-
-
}
Copied: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/dt/TemplateModel.java (from rev 32495, labs/jbossrules/branches/guvnor_rules_templates_baunax_esteban_diega/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/dt/TemplateModel.java)
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/dt/TemplateModel.java (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/guvnor/client/modeldriven/dt/TemplateModel.java 2010-04-09 22:20:49 UTC (rev 32498)
@@ -0,0 +1,138 @@
+package org.drools.guvnor.client.modeldriven.dt;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.drools.guvnor.client.modeldriven.brl.ActionFieldValue;
+import org.drools.guvnor.client.modeldriven.brl.ActionInsertFact;
+import org.drools.guvnor.client.modeldriven.brl.FactPattern;
+import org.drools.guvnor.client.modeldriven.brl.FieldConstraint;
+import org.drools.guvnor.client.modeldriven.brl.IAction;
+import org.drools.guvnor.client.modeldriven.brl.IPattern;
+import org.drools.guvnor.client.modeldriven.brl.ISingleFieldConstraint;
+import org.drools.guvnor.client.modeldriven.brl.PortableObject;
+import org.drools.guvnor.client.modeldriven.brl.RuleModel;
+
+public class TemplateModel extends RuleModel implements PortableObject {
+ private Map<String, List<String>> table = new HashMap<String, List<String>>();
+ private int rowsCount = 0;
+
+ public int getColsCount() {
+ return getInterpolationVariables().size();
+ }
+
+ public int getRowsCount() {
+ return rowsCount;
+ }
+
+ public void addRow(String[] row) {
+ Map<String, Integer> vars = getInterpolationVariables();
+ if (row.length != vars.size()) {
+ throw new IllegalArgumentException("Invalid numbers of columns: " +
+ row.length + " expected: " + vars.size());
+ }
+ for (Map.Entry<String, Integer> entry : vars.entrySet()) {
+ List<String> list = table.get(entry.getKey());
+ if (list == null) {
+ list = new ArrayList<String>();
+ table.put(entry.getKey(), list);
+ }
+ if (rowsCount != list.size() ) {
+ throw new IllegalArgumentException("invalid list size for " + entry.getKey() + ", expected: " + rowsCount + " was: " + list.size());
+ }
+ list.add(row[entry.getValue()]);
+ }
+ rowsCount++;
+ }
+
+ public void removeRow(int row) {
+ if (row >= 0 && row < rowsCount) {
+ for (List<String> col : table.values()) {
+ col.remove(row);
+ }
+ rowsCount--;
+ } else {
+ throw new ArrayIndexOutOfBoundsException(row);
+ }
+ }
+
+ public void putInSync() {
+ Map<String, Integer> vars = getInterpolationVariables();
+ table.keySet().retainAll(vars.keySet());
+
+ vars.keySet().removeAll(table.keySet());
+
+ List<String> aux = new ArrayList<String>(rowsCount);
+ for (int i = 0; i < rowsCount; i++) {
+ aux.add("");
+ }
+ for (String varName : vars.keySet()) {
+ table.put(varName, new ArrayList<String>(aux));
+ }
+ }
+
+ public String[] getInterpolationVariablesList() {
+ Map<String, Integer> vars = getInterpolationVariables();
+ String[] ret = new String[vars.size()];
+ for (Map.Entry<String, Integer> entry: vars.entrySet()) {
+ ret[entry.getValue()] = entry.getKey();
+ }
+ return ret;
+ }
+
+ public Map<String, Integer> getInterpolationVariables() {
+ Map<String, Integer> result = new HashMap<String, Integer>();
+ for (IPattern pattern : this.lhs) {
+ if (pattern instanceof FactPattern) {
+ FactPattern fact = (FactPattern) pattern;
+ for (FieldConstraint fc : fact.getFieldConstraints()) {
+ if (fc instanceof ISingleFieldConstraint) {
+ ISingleFieldConstraint con = (ISingleFieldConstraint) fc;
+ if (ISingleFieldConstraint.TYPE_TEMPLATE == con.constraintValueType && !result.containsKey(con.value)) {
+ result.put(con.value, result.size());
+ }
+ }
+ }
+ }
+ }
+ for (IAction action : this.rhs) {
+ if (action instanceof ActionInsertFact) {
+ ActionInsertFact fact = (ActionInsertFact) action;
+ for (ActionFieldValue afv : fact.fieldValues) {
+ if (afv.nature == ActionFieldValue.TYPE_TEMPLATE && !result.containsKey(afv.value)) {
+ result.put(afv.value, result.size());
+ }
+ }
+ }
+ }
+ return result;
+ }
+
+ public Map<String, List<String>> getTable() {
+ return table;
+ }
+
+ public String[][] getTableAsArray() {
+ if (rowsCount <= 0) {
+ return new String[0][0];
+ }
+ String[][] ret = new String[rowsCount][table.size()];
+ Map<String, Integer> vars = getInterpolationVariables();
+ for (Map.Entry<String, Integer> entry : vars.entrySet()) {
+ String varName = entry.getKey();
+ int idx = entry.getValue();
+ for (int row = 0; row < rowsCount; row++) {
+ ret[row][idx] = table.get(varName).get(row);
+ }
+ }
+ return ret;
+ }
+
+ public void setValue(String varName, int rowIndex, String newValue) {
+ getTable().get(varName).set(rowIndex, newValue);
+ }
+
+
+}
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/guvnor/server/util/BRDRLPersistence.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/guvnor/server/util/BRDRLPersistence.java 2010-04-09 21:51:33 UTC (rev 32497)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/guvnor/server/util/BRDRLPersistence.java 2010-04-09 22:20:49 UTC (rev 32498)
@@ -13,7 +13,7 @@
private static final BRLPersistence INSTANCE = new BRDRLPersistence();
- private BRDRLPersistence() {
+ protected BRDRLPersistence() {
}
public static BRLPersistence getInstance() {
@@ -28,15 +28,14 @@
* .client.modeldriven.brl.RuleModel)
*/
public String marshal(RuleModel model) {
- boolean isDSLEnhanced = model.hasDSLSentences();
+ return marshalRule(model);
+ }
+
+ protected String marshalRule(RuleModel model) {
+ boolean isDSLEnhanced = model.hasDSLSentences();
StringBuilder buf = new StringBuilder();
- buf.append("rule \"" + model.name + "\"");
- if (null != model.parentName && model.parentName.length() > 0) {
- buf.append(" extends \"" + model.parentName + "\"\n");
- } else {
- buf.append("\n");
- }
+ this.marshalHeader(model, buf);
this.marshalMetadata(buf, model);
this.marshalAttributes(buf, model);
@@ -44,13 +43,28 @@
this.marshalLHS(buf, model, isDSLEnhanced);
buf.append("\tthen\n");
this.marshalRHS(buf, model, isDSLEnhanced);
- buf.append("end\n");
+ this.marshalFooter(buf);
return buf.toString();
- }
+ }
- /*
- * (non-Javadoc)
- *
+ protected void marshalFooter(StringBuilder buf) {
+ buf.append("end\n");
+ }
+
+ protected void marshalHeader(RuleModel model, StringBuilder buf) {
+ buf.append("rule \"" + marshalRuleName(model) + "\"");
+ if (null != model.parentName && model.parentName.length() > 0) {
+ buf.append(" extends \"" + model.parentName + "\"\n");
+ } else {
+ buf.append('\n');
+ }
+ }
+
+ protected String marshalRuleName(RuleModel model) {
+ return model.name;
+ }
+
+ /**
* @see
* org.drools.guvnor.server.util.BRLPersistence#unmarshal(java.lang.String)
*/
@@ -109,22 +123,22 @@
*/
private void marshalLHS(StringBuilder buf, RuleModel model,
boolean isDSLEnhanced) {
- IPattern[] lhs = model.lhs;
- LHSPatternVisitor visitor = new LHSPatternVisitor(isDSLEnhanced, buf);
- for (int i = 0; i < lhs.length; i++) {
- final IPattern cond = lhs[i];
- visitor.visit(cond);
- }
+ if (model.lhs != null) {
+ LHSPatternVisitor visitor = new LHSPatternVisitor(isDSLEnhanced, buf);
+ for (IPattern cond : model.lhs) {
+ visitor.visit(cond);
+ }
+ }
}
private void marshalRHS(StringBuilder buf, RuleModel model,
boolean isDSLEnhanced) {
- IAction[] rhs = model.rhs;
- RHSActionVisitor visitor = new RHSActionVisitor(isDSLEnhanced, buf);
- for (int i = 0; i < rhs.length; i++) {
- final IAction action = rhs[i];
- visitor.visit(action);
- }
+ if (model.rhs != null) {
+ RHSActionVisitor visitor = new RHSActionVisitor(isDSLEnhanced, buf);
+ for (IAction action : model.rhs) {
+ visitor.visit(action);
+ }
+ }
}
public static class LHSPatternVisitor extends ReflectiveVisitor {
@@ -438,6 +452,15 @@
buf.append(expression.getText());
}
break;
+ case ISingleFieldConstraint.TYPE_TEMPLATE:
+ if (operator.equals("in")) {
+ buf.append(value);
+ } else {
+ buf.append("\"@{");
+ buf.append(value);
+ buf.append("}\"");
+ }
+ break;
default:
buf.append(value);
}
@@ -601,15 +624,22 @@
buf.append(fieldValues[i].value.substring(1));
} else if (SuggestionCompletionEngine.TYPE_STRING.equals(fieldValues[i].type)) {
buf.append("\"");
- buf.append(fieldValues[i].value);
+ buf.append(generateFieldValue(fieldValues[i]));
buf.append("\"");
} else {
- buf.append(fieldValues[i].value);
+ buf.append(generateFieldValue(fieldValues[i]));
}
buf.append(" );\n");
}
}
+ private String generateFieldValue(final ActionFieldValue fieldValue) {
+ if (fieldValue.nature == ActionFieldValue.TYPE_TEMPLATE) {
+ return "@{" + fieldValue.value + "}";
+ }
+ return fieldValue.value;
+ }
+
private void generateSetMethodCallsMethod(final ActionCallMethod action,
final ActionFieldValue[] fieldValues) {
buf.append("\t\t");
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/guvnor/server/util/BRXMLPersistence.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/guvnor/server/util/BRXMLPersistence.java 2010-04-09 21:51:33 UTC (rev 32497)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/guvnor/server/util/BRXMLPersistence.java 2010-04-09 22:20:49 UTC (rev 32498)
@@ -19,7 +19,7 @@
private XStream xt;
private static final BRLPersistence INSTANCE = new BRXMLPersistence();
- private BRXMLPersistence() {
+ protected BRXMLPersistence() {
this.xt = new XStream( new DomDriver() );
this.xt.alias( "rule",
@@ -108,12 +108,9 @@
* @see org.drools.guvnor.server.util.BRLPersistence#toModel(java.lang.String)
*/
public RuleModel unmarshal(final String xml) {
- if ( xml == null ) {
- return new RuleModel();
+ if ( xml == null || xml.trim().length() == 0) {
+ return createEmptyModel();
}
- if ( xml.trim().equals( "" ) ) {
- return new RuleModel();
- }
RuleModel rm = (RuleModel) this.xt.fromXML( xml );
//Fixme , hack for a upgrade to add Metadata
if ( rm.metadataList == null ) {
@@ -125,6 +122,10 @@
return rm;
}
+ protected RuleModel createEmptyModel() {
+ return new RuleModel();
+ }
+
/**
*
* The way method calls are done changed after 5.0.0.CR1 so every rule done before that needs to be updated.
Modified: labs/jbossrules/trunk/drools-guvnor/pom.xml
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/pom.xml 2010-04-09 21:51:33 UTC (rev 32497)
+++ labs/jbossrules/trunk/drools-guvnor/pom.xml 2010-04-09 22:20:49 UTC (rev 32498)
@@ -160,6 +160,10 @@
</dependency>
<dependency>
<groupId>org.drools</groupId>
+ <artifactId>drools-templates</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.drools</groupId>
<artifactId>drools-doc</artifactId>
</dependency>
<dependency>
Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/common/AssetFormats.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/common/AssetFormats.java 2010-04-09 21:51:33 UTC (rev 32497)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/common/AssetFormats.java 2010-04-09 22:20:49 UTC (rev 32498)
@@ -76,10 +76,12 @@
public static final String WORKING_SET = "workingset";
+ public static final String RULE_TEMPLATE = "template";
+
/**
* The following group the assets together for lists, helpers etc...
*/
- public static final String[] BUSINESS_RULE_FORMATS = new String[]{AssetFormats.BUSINESS_RULE, AssetFormats.DSL_TEMPLATE_RULE, AssetFormats.DECISION_SPREADSHEET_XLS, AssetFormats.DECISION_TABLE_GUIDED};
+ public static final String[] BUSINESS_RULE_FORMATS = new String[]{AssetFormats.BUSINESS_RULE, AssetFormats.DSL_TEMPLATE_RULE, AssetFormats.DECISION_SPREADSHEET_XLS, AssetFormats.DECISION_TABLE_GUIDED, AssetFormats.RULE_TEMPLATE};
/**
* These define assets that are really package level "things". Used to decide when to flush any caches.
@@ -91,13 +93,11 @@
* Package dependencies are needed before the package is validated, and any rule assets are processed.
*/
public static boolean isPackageDependency(String format) {
- for ( int i = 0; i < PACKAGE_DEPENCENCIES.length; i++ ) {
- if (PACKAGE_DEPENCENCIES[i].equals( format )) {
+ for (String dep : PACKAGE_DEPENCENCIES) {
+ if (dep.equals( format )) {
return true;
}
}
return false;
}
-
-
}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/decisiontable/GuidedDecisionTableWidget.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/decisiontable/GuidedDecisionTableWidget.java 2010-04-09 21:51:33 UTC (rev 32497)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/decisiontable/GuidedDecisionTableWidget.java 2010-04-09 22:20:49 UTC (rev 32498)
@@ -98,7 +98,7 @@
private VerticalPanel conditionsConfigWidget;
private String packageName;
private VerticalPanel actionsConfigWidget;
- private Map colMap;
+ private Map<String, DTColumnConfig> colMap;
private SuggestionCompletionEngine sce;
private GroupingStore store;
private Constants constants = ((Constants) GWT.create( Constants.class ));
@@ -152,44 +152,35 @@
list.addItem( constants.Description(),
"desc" ); //NON-NLS
- if ( dt.getMetadataCols() == null ) {
- dt.setMetadataCols( new ArrayList<MetadataCol>() );
- }
- for ( Iterator iterator = dt.getMetadataCols().iterator(); iterator.hasNext(); ) {
- MetadataCol c = (MetadataCol) iterator.next();
- list.addItem( c.attr,
- c.attr );
- if ( c.attr.equals( dt.groupField ) ) {
- list.setSelectedIndex( list.getItemCount() - 1 );
- }
- }
- for ( Iterator iterator = dt.attributeCols.iterator(); iterator.hasNext(); ) {
- AttributeCol c = (AttributeCol) iterator.next();
- list.addItem( c.attr,
- c.attr );
- if ( c.attr.equals( dt.groupField ) ) {
- list.setSelectedIndex( list.getItemCount() - 1 );
- }
- }
- for ( Iterator iterator = dt.conditionCols.iterator(); iterator.hasNext(); ) {
- ConditionCol c = (ConditionCol) iterator.next();
- list.addItem( c.header,
- c.header );
- if ( c.header.equals( dt.groupField ) ) {
- list.setSelectedIndex( list.getItemCount() - 1 );
- }
- }
- for ( Iterator iterator = dt.actionCols.iterator(); iterator.hasNext(); ) {
- ActionCol c = (ActionCol) iterator.next();
- list.addItem( c.header,
- c.header );
- if ( c.header.equals( dt.groupField ) ) {
- list.setSelectedIndex( list.getItemCount() - 1 );
- }
- }
+ if (dt.getMetadataCols() == null) {
+ dt.setMetadataCols(new ArrayList<MetadataCol>());
+ }
+ for (MetadataCol c : dt.getMetadataCols()) {
+ list.addItem(c.attr, c.attr);
+ if (c.attr.equals(dt.groupField)) {
+ list.setSelectedIndex(list.getItemCount() - 1);
+ }
+ }
+ for (AttributeCol c : dt.attributeCols) {
+ list.addItem(c.attr, c.attr);
+ if (c.attr.equals(dt.groupField)) {
+ list.setSelectedIndex(list.getItemCount() - 1);
+ }
+ }
+ for (ConditionCol c : dt.conditionCols) {
+ list.addItem(c.header, c.header);
+ if (c.header.equals(dt.groupField)) {
+ list.setSelectedIndex(list.getItemCount() - 1);
+ }
+ }
+ for (ActionCol c : dt.actionCols) {
+ list.addItem(c.header, c.header);
+ if (c.header.equals(dt.groupField)) {
+ list.setSelectedIndex(list.getItemCount() - 1);
+ }
+ }
- list.addItem( constants.none(),
- "" );
+ list.addItem(constants.none(), "");
if ( dt.groupField == null ) {
list.setSelectedIndex( list.getItemCount() - 1 );
}
@@ -220,8 +211,7 @@
private void refreshActionsWidget() {
this.actionsConfigWidget.clear();
- for ( int i = 0; i < dt.actionCols.size(); i++ ) {
- ActionCol c = (ActionCol) dt.actionCols.get( i );
+ for (ActionCol c : dt.actionCols) {
HorizontalPanel hp = new HorizontalPanel();
hp.add( removeAction( c ) );
hp.add( editAction( c ) );
@@ -229,7 +219,6 @@
actionsConfigWidget.add( hp );
}
actionsConfigWidget.add( newAction() );
-
}
private Widget editAction(final ActionCol c) {
@@ -469,8 +458,7 @@
hp.add( new SmallLabel( constants.Metadata() ) );
attributeConfigWidget.add( hp );
}
- for ( int i = 0; i < dt.getMetadataCols().size(); i++ ) {
- MetadataCol at = (MetadataCol) dt.getMetadataCols().get( i );
+ for (MetadataCol at : dt.getMetadataCols()) {
HorizontalPanel hp = new HorizontalPanel();
hp.add( new HTML( " " ) ); //NON-NLS
hp.add( removeMeta( at ) );
@@ -484,9 +472,8 @@
attributeConfigWidget.add( hp );
}
- for ( int i = 0; i < dt.attributeCols.size(); i++ ) {
-
- final AttributeCol at = dt.attributeCols.get( i );
+ for (AttributeCol atc : dt.attributeCols) {
+ final AttributeCol at = atc;
HorizontalPanel hp = new HorizontalPanel();
hp.add( new SmallLabel( at.attr ) );
@@ -578,9 +565,9 @@
}
private boolean hasAttribute(String at,
- List attributeCols) {
- for ( Iterator iterator = attributeCols.iterator(); iterator.hasNext(); ) {
- AttributeCol c = (AttributeCol) iterator.next();
+ List<AttributeCol> attributeCols) {
+ for ( Iterator<AttributeCol> iterator = attributeCols.iterator(); iterator.hasNext(); ) {
+ AttributeCol c = iterator.next();
if ( c.attr.equals( at ) ) {
return true;
}
@@ -713,7 +700,7 @@
fds = new FieldDef[dt.getMetadataCols().size() + dt.attributeCols.size() + dt.actionCols.size() + dt.conditionCols.size() + 2]; //its +2 as we have counter and description data
- colMap = new HashMap();
+ colMap = new HashMap<String, DTColumnConfig>();
fds[0] = new IntegerFieldDef( "num" ); //NON-NLS
fds[1] = new StringFieldDef( "desc" ); //NON-NLS
@@ -770,8 +757,7 @@
}
};
- colMap.put( attr.attr,
- attr );
+ colMap.put( attr.attr, attr );
colCount++;
}
@@ -892,7 +878,7 @@
boolean hidden) {
final String dta = cm.getDataIndex(colIndex);
if (colMap.containsKey(dta)) {
- DTColumnConfig col = (DTColumnConfig) colMap.get(dta);
+ DTColumnConfig col = colMap.get(dta);
col.hideColumn = hidden;
}
}
@@ -964,7 +950,7 @@
final String dataIdx = grid.getColumnModel().getDataIndex( colIndex );
final Record r = store.getAt( rowIndex );
String val = r.getAsString( dataIdx );
- DTColumnConfig colConf = (DTColumnConfig) colMap.get( dataIdx );
+ DTColumnConfig colConf = colMap.get( dataIdx );
String[] vals = dt.getValueList( colConf,
getSCE() );
if ( vals.length == 0 ) {
@@ -994,7 +980,7 @@
dt.descriptionWidth = newSize;
} else {
if ( colMap.containsKey( dta ) ) {
- DTColumnConfig col = (DTColumnConfig) colMap.get( dta );
+ DTColumnConfig col = colMap.get( dta );
col.width = newSize;
}
}
@@ -1294,18 +1280,15 @@
}
- private void changeRowPositions(Record from,
- Record to) {
- int fromNum = from.getAsInteger( "num" );
- int toNum = to.getAsInteger( "num" );
- from.set( "num",
- toNum );
- to.set( "num",
- fromNum );
+ private void changeRowPositions(Record from, Record to) {
+ int fromNum = from.getAsInteger("num");
+ int toNum = to.getAsInteger("num");
+ from.set("num", toNum);
+ to.set("num", fromNum);
- scrapeData( -1 );
+ scrapeData(-1);
- refreshGrid();
- }
+ refreshGrid();
+ }
}
Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/explorer/PackagesPanel.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/explorer/PackagesPanel.java 2010-04-09 21:51:33 UTC (rev 32497)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/explorer/PackagesPanel.java 2010-04-09 22:20:49 UTC (rev 32498)
@@ -201,6 +201,13 @@
}
}, "images/refresh.gif")); //NON-NLS
+ m.addItem(new Item(constants.NewRuleTemplate(), new BaseItemListenerAdapter() {
+ @Override
+ public void onClick(BaseItem item, EventObject e) {
+ launchWizard(AssetFormats.RULE_TEMPLATE, constants.NewRuleTemplate(), true);
+ }
+ }, "images/new_template.gif")); //NON-NLS
+
return m;
}
Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/messages/Constants.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/messages/Constants.java 2010-04-09 21:51:33 UTC (rev 32497)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/messages/Constants.java 2010-04-09 22:20:49 UTC (rev 32498)
@@ -2081,4 +2081,6 @@
String EditRulesVerificationConfiguration();
String AutomaticVerification();
String Enabled();
+ String NewRuleTemplate();
+ String TemplateKey();
}
Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/messages/Constants.properties
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/messages/Constants.properties 2010-04-09 21:51:33 UTC (rev 32497)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/messages/Constants.properties 2010-04-09 22:20:49 UTC (rev 32498)
@@ -1021,3 +1021,5 @@
EditRulesVerificationConfiguration=Edit Rules Verification Configuration
AutomaticVerification=Automatic Verification
Enabled=Enabled
+NewRuleTemplate=New rule template
+TemplateKey=Template key
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/messages/Constants_es_ES.properties
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/messages/Constants_es_ES.properties 2010-04-09 21:51:33 UTC (rev 32497)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/messages/Constants_es_ES.properties 2010-04-09 22:20:49 UTC (rev 32498)
@@ -926,4 +926,6 @@
RulesVerificationManager=Administraci\u00F3n de Verificaci\u00F3n de Reglas
EditRulesVerificationConfiguration=Editar la Configuraci\u00F3n de la Verificaci\u00F3n de Reglas
AutomaticVerification=Verificaci\u00F3n Autom\u00E1tica
-Enabled=Activado
\ No newline at end of file
+Enabled=Activado
+NewRuleTemplate=Nueva plantilla de regla
+TemplateKey=Clave en plantilla
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ActionInsertFactWidget.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ActionInsertFactWidget.java 2010-04-09 21:51:33 UTC (rev 32497)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ActionInsertFactWidget.java 2010-04-09 22:20:49 UTC (rev 32498)
@@ -47,16 +47,18 @@
private final String factType;
private Constants constants = GWT.create(Constants.class);
private boolean readOnly;
+ private boolean template;
public ActionInsertFactWidget(RuleModeller mod, ActionInsertFact set) {
this(mod, set, null);
}
- public ActionInsertFactWidget(RuleModeller mod, ActionInsertFact set,Boolean readOnly) {
+ public ActionInsertFactWidget(RuleModeller mod, ActionInsertFact set,Boolean readOnly, boolean template) {
super(mod);
this.model = set;
this.layout = new DirtyableFlexTable();
this.factType = set.factType;
+ this.template = template;
SuggestionCompletionEngine completions = this.getModeller().getSuggestionCompletions();
this.fieldCompletions = completions.getFieldCompletions( FieldAccessorsAndMutators.MUTATOR,
@@ -77,9 +79,14 @@
doLayout();
initWidget(this.layout);
+
+ }
+
+ public ActionInsertFactWidget(RuleModeller mod, ActionInsertFact set,Boolean readOnly) {
+ this(mod, set, readOnly, false);
}
- private void doLayout() {
+ private void doLayout() {
layout.clear();
layout.setWidget( 0, 0, getAssertLabel() );
layout.setWidget( 1, 0, new HTML(" "));
@@ -117,7 +124,7 @@
private Widget valueEditor(final ActionFieldValue val) {
SuggestionCompletionEngine completions = this.getModeller().getSuggestionCompletions();
DropDownData enums = completions.getEnums(this.factType, this.model.fieldValues, val.field);
- return new ActionValueEditor(val, enums,this.getModeller(),val.type,this.readOnly);
+ return new ActionValueEditor(val, enums,this.getModeller(),val.type,this.readOnly, isTemplate());
}
private Widget fieldSelector(final ActionFieldValue val) {
@@ -211,6 +218,10 @@
return this.readOnly;
}
+ public boolean isTemplate() {
+ return template;
+ }
+
}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ActionValueEditor.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ActionValueEditor.java 2010-04-09 21:51:33 UTC (rev 32497)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ActionValueEditor.java 2010-04-09 22:20:49 UTC (rev 32498)
@@ -1,9 +1,13 @@
package org.drools.guvnor.client.modeldriven.ui;
-import com.google.gwt.core.client.GWT;
-import com.google.gwt.user.client.Command;
-import com.google.gwt.user.client.ui.*;
-import org.drools.guvnor.client.common.*;
+import java.util.List;
+
+import org.drools.guvnor.client.common.DirtyableComposite;
+import org.drools.guvnor.client.common.DropDownValueChanged;
+import org.drools.guvnor.client.common.FieldEditListener;
+import org.drools.guvnor.client.common.FormStylePopup;
+import org.drools.guvnor.client.common.InfoPopup;
+import org.drools.guvnor.client.common.SmallLabel;
import org.drools.guvnor.client.messages.Constants;
import org.drools.guvnor.client.modeldriven.DropDownData;
import org.drools.guvnor.client.modeldriven.SuggestionCompletionEngine;
@@ -11,7 +15,19 @@
import org.drools.guvnor.client.modeldriven.brl.ActionInsertFact;
import org.drools.guvnor.client.modeldriven.brl.FactPattern;
-import java.util.List;
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.user.client.Command;
+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.HTML;
+import com.google.gwt.user.client.ui.HorizontalPanel;
+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.SimplePanel;
+import com.google.gwt.user.client.ui.TextBox;
+import com.google.gwt.user.client.ui.Widget;
/**
* This provides for editing of fields in the RHS of a rule.
@@ -28,20 +44,11 @@
private RuleModeller model = null;
private String variableType = null;
private boolean readOnly;
+ private boolean template;
public ActionValueEditor(final ActionFieldValue val,
final DropDownData enums, boolean readOnly) {
- this.readOnly = readOnly;
- if (val.type.equals(SuggestionCompletionEngine.TYPE_BOOLEAN)) {
- this.enums = DropDownData.create(new String[]{"true", "false"});
- } else {
- this.enums = enums;
- }
- this.root = new SimplePanel();
- this.value = val;
-
- refresh();
- initWidget(root);
+ this(val, enums, null, null, readOnly, false);
}
public ActionValueEditor(final ActionFieldValue val,
@@ -56,10 +63,15 @@
this(val, enums, model, variableType, false);
}
+ public ActionValueEditor(ActionFieldValue val, DropDownData enums,
+ RuleModeller model, String type, boolean readOnly) {
+ this(val, enums, model, type, readOnly, false);
+ }
+
public ActionValueEditor(final ActionFieldValue val,
final DropDownData enums,
RuleModeller model,
- String variableType, boolean readOnly) {
+ String variableType, boolean readOnly, boolean template) {
this.readOnly = readOnly;
@@ -72,11 +84,12 @@
this.value = val;
this.model = model;
this.variableType = variableType;
+ this.template = template;
refresh();
initWidget(root);
}
- private void refresh() {
+ private void refresh() {
root.clear();
if (enums != null && (enums.fixedList != null || enums.queryExpression != null)) {
//enum
@@ -103,6 +116,10 @@
if (value.nature == ActionFieldValue.TYPE_VARIABLE) {
Widget list = boundVariable(value);
root.add(list);
+ } else if(value.nature == ActionFieldValue.TYPE_TEMPLATE){
+ value.type = SuggestionCompletionEngine.TYPE_STRING;
+ Widget box = boundTextBox(this.value);
+ root.add(box);
} else {
//formula and literal
Widget box = boundTextBox(this.value);
@@ -273,7 +290,6 @@
} else {
Image clickme = new Image("images/edit.gif");
clickme.addClickListener(new ClickListener() {
-
public void onClick(Widget w) {
showTypeChoice(w);
}
@@ -301,6 +317,23 @@
widgets(lit,
new InfoPopup(constants.Literal(),
constants.ALiteralValueMeansTheValueAsTypedInIeItsNotACalculation())));
+
+ if(isTemplate()){
+ Button templateButton = new Button(constants.TemplateKey(), new ClickListener() {
+ public void onClick(Widget arg0) {
+ value.nature = ActionFieldValue.TYPE_TEMPLATE;
+ value.value = " ";
+ makeDirty();
+ refresh();
+ form.hide();
+ }
+ });
+ form.addAttribute(constants.TemplateKey() + ":",
+ widgets(templateButton,
+ new InfoPopup(constants.Literal(),
+ constants.ALiteralValueMeansTheValueAsTypedInIeItsNotACalculation())));
+ }
+
form.addRow(new HTML("<hr/>"));
form.addRow(new SmallLabel(constants.AdvancedSection()));
@@ -380,4 +413,8 @@
h.add(popup);
return h;
}
+
+ public boolean isTemplate(){
+ return this.template;
+ }
}
Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ConstraintValueEditor.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ConstraintValueEditor.java 2010-04-09 21:51:33 UTC (rev 32497)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ConstraintValueEditor.java 2010-04-09 22:20:49 UTC (rev 32498)
@@ -42,7 +42,6 @@
import com.google.gwt.user.client.ui.SimplePanel;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.Widget;
-import org.drools.guvnor.client.modeldriven.brl.ExpressionFormLine;
/**
* This is an editor for constraint values.
@@ -66,6 +65,7 @@
private Constants constants = ((Constants) GWT.create(Constants.class));
private String fieldType;
private boolean readOnly;
+ private boolean template;
/**
* @param con The constraint being edited.
@@ -76,19 +76,30 @@
RuleModeller modeller,
String valueType /* eg is numeric */,
boolean readOnly) {
+ this(pattern, fieldName, con, modeller, valueType, readOnly, false);
+ }
+
+ public ConstraintValueEditor(FactPattern pattern, String fieldName,
+ ISingleFieldConstraint con, RuleModeller modeller, String valueType,
+ boolean readOnly, boolean template) {
this.pattern = pattern;
this.fieldName = fieldName;
+ this.sce = modeller.getSuggestionCompletions();
this.constraint = con;
- this.readOnly = readOnly;
- this.sce = modeller.getSuggestionCompletions();
- valueType = sce.getFieldType(pattern.factType,
- fieldName);
+ this.panel = new SimplePanel();
+ this.model = modeller.getModel();
+ this.modeller = modeller;
+ this.template = template;
+
+ valueType = sce.getFieldType(pattern.factType, fieldName);
this.fieldType = valueType;
if (SuggestionCompletionEngine.TYPE_NUMERIC.equals(valueType)) {
this.numericValue = true;
} else {
this.numericValue = false;
}
+
+ this.readOnly = readOnly;
if (SuggestionCompletionEngine.TYPE_BOOLEAN.equals(valueType)) {
this.dropDownData = DropDownData.create(new String[]{"true", "false"}); //NON-NLS
} else {
@@ -96,17 +107,14 @@
fieldName);
}
- this.model = modeller.getModel();
- this.modeller = modeller;
-
- panel = new SimplePanel();
refreshEditor();
initWidget(panel);
}
- private void refreshEditor() {
+ private void refreshEditor() {
panel.clear();
+ Widget constraintWidget = null;
if (constraint.constraintValueType == SingleFieldConstraint.TYPE_UNDEFINED) {
Image clickme = new Image("images/edit.gif"); //NON-NLS
clickme.addClickListener(new ClickListener() {
@@ -116,15 +124,15 @@
constraint);
}
});
- panel.add(clickme);
+ constraintWidget = clickme;
} else {
switch (constraint.constraintValueType) {
case SingleFieldConstraint.TYPE_LITERAL:
if (this.dropDownData != null) {
- panel.add(new EnumDropDownLabel(this.pattern,
+ constraintWidget = new EnumDropDownLabel(this.pattern,
this.fieldName,
this.sce,
- this.constraint));
+ this.constraint);
} else if (SuggestionCompletionEngine.TYPE_DATE.equals(this.fieldType)) {
DatePickerLabel datePicker = new DatePickerLabel(constraint.value);
@@ -140,32 +148,36 @@
}
});
- panel.add(datePicker);
+ constraintWidget = datePicker;
} else {
- panel.add(new SmallLabel(this.constraint.value));
+ constraintWidget = new SmallLabel(this.constraint.value);
}
} else {
if (!this.readOnly) {
- panel.add(new DefaultLiteralEditor(this.constraint,
- this.numericValue));
+ constraintWidget = new DefaultLiteralEditor(this.constraint,
+ this.numericValue);
} else {
- panel.add(new SmallLabel(this.constraint.value));
+ constraintWidget = new SmallLabel(this.constraint.value);
}
}
break;
case SingleFieldConstraint.TYPE_RET_VALUE:
- panel.add(returnValueEditor());
+ constraintWidget = returnValueEditor();
break;
case SingleFieldConstraint.TYPE_EXPR_BUILDER:
- panel.add(expressionEditor());
+ constraintWidget = expressionEditor();
break;
case SingleFieldConstraint.TYPE_VARIABLE:
- panel.add(variableEditor());
+ constraintWidget = variableEditor();
break;
+ case ISingleFieldConstraint.TYPE_TEMPLATE:
+ constraintWidget = new DefaultLiteralEditor(this.constraint, false);
+ break;
default:
break;
}
}
+ panel.add(constraintWidget);
}
private Widget variableEditor() {
@@ -263,6 +275,22 @@
new InfoPopup(constants.LiteralValue(),
constants.LiteralValTip())));
+ if(isTemplate()){
+ String templateKeyLabel = constants.TemplateKey();
+ Button templateKeyButton = new Button(templateKeyLabel);
+ templateKeyButton.addClickListener(new ClickListener() {
+ public void onClick(Widget arg0) {
+ con.constraintValueType = ISingleFieldConstraint.TYPE_TEMPLATE;
+ doTypeChosen(form);
+ }
+ });
+
+ form.addAttribute(templateKeyLabel + ":",
+ widgets(templateKeyButton,
+ new InfoPopup(templateKeyLabel,
+ constants.LiteralValTip())));
+ }
+
form.addRow(new HTML("<hr/>"));
form.addRow(new SmallLabel(constants.AdvancedOptions()));
@@ -353,4 +381,8 @@
public boolean isDirty() {
return super.isDirty();
}
+
+ public boolean isTemplate() {
+ return template;
+ }
}
Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/FactPatternWidget.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/FactPatternWidget.java 2010-04-09 21:51:33 UTC (rev 32497)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/FactPatternWidget.java 2010-04-09 22:20:49 UTC (rev 32498)
@@ -56,6 +56,7 @@
private Constants constants = ((Constants) GWT.create(Constants.class));
private String customLabel;
private boolean readOnly;
+ private boolean template;
public FactPatternWidget(RuleModeller mod, IPattern p,
boolean canBind) {
@@ -85,11 +86,22 @@
*/
public FactPatternWidget(RuleModeller mod, IPattern p,
String customLabel, boolean canBind, Boolean readOnly) {
+ this(mod, p, customLabel, canBind, readOnly, false);
+ }
+
+ public FactPatternWidget(RuleModeller ruleModeller, IPattern pattern,
+ boolean canBind, Boolean readOnly, boolean template) {
+ this(ruleModeller, pattern, null, canBind, readOnly, template);
+ }
+
+ public FactPatternWidget(RuleModeller mod, IPattern p,
+ String customLabel, boolean canBind, Boolean readOnly, boolean template) {
super(mod);
this.pattern = (FactPattern) p;
this.completions = mod.getSuggestionCompletions();
this.bindable = canBind;
-
+ this.template = template;
+
this.connectives = new Connectives();
this.connectives.setCompletions(completions);
this.connectives.setModeller(mod);
@@ -115,7 +127,7 @@
formatter.setAlignment(0, 0, HasHorizontalAlignment.ALIGN_LEFT, HasVerticalAlignment.ALIGN_BOTTOM);
formatter.setStyleName(0, 0, "modeller-fact-TypeHeader");
- ArrayList sortedConst = sortConstraints(pattern.getFieldConstraints());
+ List<FieldConstraint> sortedConst = sortConstraints(pattern.getFieldConstraints());
pattern.setFieldConstraints(sortedConst);
drawConstraints(sortedConst);
@@ -132,7 +144,8 @@
}
- /**
+
+ /**
* Render a hierarchy of constraints, hierarchy here means constraints that may
* themselves depend on members of constraint objects. With this code, the GUI
* enables clicking rules of the form:
@@ -141,10 +154,10 @@
*
* @param sortedConst a sorted list of constraints to display.
* */
- private void drawConstraints(ArrayList sortedConst) {
+ private void drawConstraints(List<FieldConstraint> sortedConst) {
final DirtyableFlexTable table = new DirtyableFlexTable();
layout.setWidget(1, 0, table);
- List parents = new ArrayList();
+ List<FieldConstraint> parents = new ArrayList<FieldConstraint>();
for (int i = 0; i < sortedConst.size(); i++) {
int tabs = -1;
@@ -199,8 +212,8 @@
* @param constraints the list of inheriting constraints to sort.
* @return a sorted list of constraints ready for display.
* */
- private ArrayList sortConstraints(FieldConstraint[] constraints) {
- ArrayList sortedConst = new ArrayList(constraints.length);
+ private List<FieldConstraint> sortConstraints(FieldConstraint[] constraints) {
+ List<FieldConstraint> sortedConst = new ArrayList<FieldConstraint>(constraints.length);
for (int i = 0; i < constraints.length; i++) {
FieldConstraint current = constraints[i];
if (current instanceof SingleFieldConstraint) {
@@ -225,7 +238,7 @@
* @param sortedConst the array to fill.
* @param fieldConst the constraint to investigate.
* */
- private void insertSingleFieldConstraint(SingleFieldConstraint fieldConst, ArrayList sortedConst) {
+ private void insertSingleFieldConstraint(SingleFieldConstraint fieldConst, List<FieldConstraint> sortedConst) {
if (fieldConst.parent instanceof SingleFieldConstraint) {
insertSingleFieldConstraint((SingleFieldConstraint) fieldConst.parent, sortedConst);
}
@@ -423,7 +436,7 @@
private Widget valueEditor(final SingleFieldConstraint c, String factType) {
//String type = this.modeller.getSuggestionCompletions().getFieldType( factType, c.fieldName );
- return new ConstraintValueEditor(pattern, c.fieldName, c, this.getModeller(), c.fieldType,this.readOnly);
+ return new ConstraintValueEditor(pattern, c.fieldName, c, this.getModeller(), c.fieldType,this.readOnly, isTemplate());
}
private Widget operatorDropDown(final SingleFieldConstraint c) {
@@ -516,4 +529,8 @@
return this.readOnly;
}
+ public boolean isTemplate() {
+ return template;
+ }
+
}
Copied: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ModellerWidgetFactory.java (from rev 32495, labs/jbossrules/branches/guvnor_rules_templates_baunax_esteban_diega/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ModellerWidgetFactory.java)
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ModellerWidgetFactory.java (rev 0)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/ModellerWidgetFactory.java 2010-04-09 22:20:49 UTC (rev 32498)
@@ -0,0 +1,28 @@
+package org.drools.guvnor.client.modeldriven.ui;
+
+import org.drools.guvnor.client.modeldriven.brl.IAction;
+import org.drools.guvnor.client.modeldriven.brl.IPattern;
+
+public interface ModellerWidgetFactory {
+
+ /**
+ * Used for get widgets for RHS
+ * @param ruleModeller
+ * @param action
+ * @param readOnly
+ * @return
+ */
+ public abstract RuleModellerWidget getWidget(RuleModeller ruleModeller,
+ IAction action, Boolean readOnly);
+
+ /**
+ * Used for get widgets for LHS
+ * @param ruleModeller
+ * @param pattern
+ * @param readOnly
+ * @return
+ */
+ public abstract RuleModellerWidget getWidget(RuleModeller ruleModeller,
+ IPattern pattern, Boolean readOnly);
+
+}
\ No newline at end of file
Copied: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/RuleModelEditor.java (from rev 32495, labs/jbossrules/branches/guvnor_rules_templates_baunax_esteban_diega/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/RuleModelEditor.java)
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/RuleModelEditor.java (rev 0)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/RuleModelEditor.java 2010-04-09 22:20:49 UTC (rev 32498)
@@ -0,0 +1,5 @@
+package org.drools.guvnor.client.modeldriven.ui;
+
+public interface RuleModelEditor {
+ public RuleModeller getRuleModeller();
+}
Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/RuleModeller.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/RuleModeller.java 2010-04-09 21:51:33 UTC (rev 32497)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/RuleModeller.java 2010-04-09 22:20:49 UTC (rev 32498)
@@ -15,10 +15,13 @@
* limitations under the License.
*/
+import java.util.ArrayList;
+import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import org.drools.guvnor.client.common.ClickableLabel;
import org.drools.guvnor.client.common.DirtyableComposite;
@@ -29,6 +32,7 @@
import org.drools.guvnor.client.common.FormStylePopup;
import org.drools.guvnor.client.common.ImageButton;
import org.drools.guvnor.client.common.InfoPopup;
+import org.drools.guvnor.client.common.LoadingPopup;
import org.drools.guvnor.client.common.SmallLabel;
import org.drools.guvnor.client.explorer.ExplorerLayoutManager;
import org.drools.guvnor.client.messages.Constants;
@@ -43,7 +47,6 @@
import org.drools.guvnor.client.modeldriven.brl.ActionUpdateField;
import org.drools.guvnor.client.modeldriven.brl.CompositeFactPattern;
import org.drools.guvnor.client.modeldriven.brl.DSLSentence;
-import org.drools.guvnor.client.modeldriven.brl.ExpressionFormLine;
import org.drools.guvnor.client.modeldriven.brl.FactPattern;
import org.drools.guvnor.client.modeldriven.brl.FreeFormLine;
import org.drools.guvnor.client.modeldriven.brl.FromAccumulateCompositeFactPattern;
@@ -55,6 +58,10 @@
import org.drools.guvnor.client.modeldriven.brl.RuleMetadata;
import org.drools.guvnor.client.modeldriven.brl.RuleModel;
import org.drools.guvnor.client.packages.SuggestionCompletionCache;
+import org.drools.guvnor.client.packages.WorkingSetManager;
+import org.drools.guvnor.client.rpc.AnalysisReport;
+import org.drools.guvnor.client.rpc.AnalysisReportLine;
+import org.drools.guvnor.client.rpc.RepositoryServiceFactory;
import org.drools.guvnor.client.rpc.RuleAsset;
import org.drools.guvnor.client.ruleeditor.RuleViewer;
import org.drools.guvnor.client.security.Capabilities;
@@ -80,14 +87,6 @@
import com.google.gwt.user.client.ui.Widget;
import com.gwtext.client.core.ExtElement;
import com.gwtext.client.util.Format;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Set;
-import org.drools.guvnor.client.common.LoadingPopup;
-import org.drools.guvnor.client.packages.WorkingSetManager;
-import org.drools.guvnor.client.rpc.AnalysisReport;
-import org.drools.guvnor.client.rpc.AnalysisReportLine;
-import org.drools.guvnor.client.rpc.RepositoryServiceFactory;
/**
* This is the parent widget that contains the model based rule builder.
@@ -95,7 +94,7 @@
* @author Michael Neale
*
*/
-public class RuleModeller extends DirtyableComposite {
+public class RuleModeller extends DirtyableComposite implements RuleModelEditor {
private DirtyableFlexTable layout;
private RuleModel model;
@@ -104,16 +103,19 @@
private int currentLayoutRow = 0;
private String packageName;
private RuleAsset asset;
+ private ModellerWidgetFactory widgetFactory;
- public RuleModeller(RuleAsset asset, RuleViewer viewer) {
- this(asset);
+ public RuleModeller(RuleAsset asset, RuleViewer viewer, ModellerWidgetFactory widgetFactory) {
+ this(asset, widgetFactory);
}
- public RuleModeller(RuleAsset asset) {
- this.asset = asset;
+ public RuleModeller(RuleAsset asset, ModellerWidgetFactory widgetFactory) {
+ this.asset = asset;
this.model = (RuleModel) asset.content;
this.packageName = asset.metaData.packageName;
+ this.widgetFactory = widgetFactory;
+
layout = new DirtyableFlexTable();
initWidget();
@@ -357,23 +359,7 @@
//if lockRHS() set the widget RO, otherwise let them decide.
Boolean readOnly = this.lockRHS()?true:null;
- RuleModellerWidget w = null;
- if (action instanceof ActionCallMethod) {
- w = new ActionCallMethodWidget(this, (ActionCallMethod) action,readOnly);
- } else if (action instanceof ActionSetField) {
- w = new ActionSetFieldWidget(this, (ActionSetField) action,readOnly);
- } else if (action instanceof ActionInsertFact) {
- w = new ActionInsertFactWidget(this, (ActionInsertFact) action, readOnly);
- } else if (action instanceof ActionRetractFact) {
- w = new ActionRetractFactWidget(this, (ActionRetractFact) action, readOnly);
- } else if (action instanceof DSLSentence) {
- w = new DSLSentenceWidget(this,(DSLSentence) action, readOnly);
- w.addStyleName("model-builderInner-Background"); //NON-NLS
- } else if (action instanceof FreeFormLine) {
- w = new FreeFormLineWidget(this, (FreeFormLine) action, readOnly);
- } else if (action instanceof ActionGlobalCollectionAdd) {
- w = new GlobalCollectionAddWidget(this, (ActionGlobalCollectionAdd) action, readOnly);
- }
+ RuleModellerWidget w = getWidgetFactory().getWidget(this, action, readOnly);
w.setWidth( "100%" );
widget.add(spacerWidget());
@@ -502,7 +488,7 @@
// The list of facts
//
final String[] facts = completions.getFactTypes();
- if (facts != null && facts.length > 0) {
+ if (facts.length > 0) {
choices.addItem("..................");
for (int i = 0; i < facts.length; i++) {
@@ -651,7 +637,6 @@
popup.setWidth(-1);
popup.setTitle(constants.AddANewAction());
-
final ListBox positionCbo = new ListBox();
if (position == null) {
positionCbo.addItem(constants.Bottom(), String.valueOf(this.model.rhs.length));
@@ -665,10 +650,6 @@
positionCbo.setSelectedIndex(0);
}
-
-
-
-
final ListBox choices = new ListBox(true);
final Map<String, Command> cmds = new HashMap<String, Command>();
@@ -976,26 +957,8 @@
Boolean readOnly = this.lockLHS()?true:null;
IPattern pattern = model.lhs[i];
- RuleModellerWidget w = null;
- if (pattern instanceof FactPattern) {
- w = new FactPatternWidget(this, pattern, true, readOnly);
- } else if (pattern instanceof CompositeFactPattern) {
- w = new CompositeFactPatternWidget(this, (CompositeFactPattern) pattern, readOnly);
- } else if (pattern instanceof FromAccumulateCompositeFactPattern) {
- w = new FromAccumulateCompositeFactPatternWidget(this, (FromAccumulateCompositeFactPattern) pattern, readOnly);
- } else if (pattern instanceof FromCollectCompositeFactPattern) {
- w = new FromCollectCompositeFactPatternWidget(this, (FromCollectCompositeFactPattern) pattern, readOnly);
- } else if (pattern instanceof FromCompositeFactPattern) {
- w = new FromCompositeFactPatternWidget(this, (FromCompositeFactPattern) pattern, readOnly);
- } else if (pattern instanceof DSLSentence) {
- w = new DSLSentenceWidget(this,(DSLSentence) pattern, readOnly);
- } else if (pattern instanceof FreeFormLine) {
- w = new FreeFormLineWidget(this, (FreeFormLine)pattern, readOnly);
- } else if (pattern instanceof ExpressionFormLine) {
- w = new ExpressionBuilder(this, (ExpressionFormLine) pattern, readOnly);
- } else {
- throw new RuntimeException("I don't know what type of pattern it is: "+pattern);
- }
+
+ RuleModellerWidget w = getWidgetFactory().getWidget(this, pattern, readOnly);
vert.add(wrapLHSWidget(model, i, w));
vert.add(spacerWidget());
@@ -1259,4 +1222,16 @@
public boolean hasVerifierWarnings(){
return this.warnings != null && this.warnings.size() > 0;
}
+
+ public ModellerWidgetFactory getWidgetFactory() {
+ return widgetFactory;
+ }
+
+ public void setWidgetFactory(ModellerWidgetFactory widgetFactory) {
+ this.widgetFactory = widgetFactory;
+ }
+
+ public RuleModeller getRuleModeller() {
+ return this;
+ }
}
Copied: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/RuleModellerWidgetFactory.java (from rev 32495, labs/jbossrules/branches/guvnor_rules_templates_baunax_esteban_diega/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/RuleModellerWidgetFactory.java)
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/RuleModellerWidgetFactory.java (rev 0)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/RuleModellerWidgetFactory.java 2010-04-09 22:20:49 UTC (rev 32498)
@@ -0,0 +1,86 @@
+package org.drools.guvnor.client.modeldriven.ui;
+
+import org.drools.guvnor.client.modeldriven.brl.ActionCallMethod;
+import org.drools.guvnor.client.modeldriven.brl.ActionGlobalCollectionAdd;
+import org.drools.guvnor.client.modeldriven.brl.ActionInsertFact;
+import org.drools.guvnor.client.modeldriven.brl.ActionRetractFact;
+import org.drools.guvnor.client.modeldriven.brl.ActionSetField;
+import org.drools.guvnor.client.modeldriven.brl.CompositeFactPattern;
+import org.drools.guvnor.client.modeldriven.brl.DSLSentence;
+import org.drools.guvnor.client.modeldriven.brl.ExpressionFormLine;
+import org.drools.guvnor.client.modeldriven.brl.FactPattern;
+import org.drools.guvnor.client.modeldriven.brl.FreeFormLine;
+import org.drools.guvnor.client.modeldriven.brl.FromAccumulateCompositeFactPattern;
+import org.drools.guvnor.client.modeldriven.brl.FromCollectCompositeFactPattern;
+import org.drools.guvnor.client.modeldriven.brl.FromCompositeFactPattern;
+import org.drools.guvnor.client.modeldriven.brl.IAction;
+import org.drools.guvnor.client.modeldriven.brl.IPattern;
+
+public class RuleModellerWidgetFactory implements ModellerWidgetFactory {
+
+ /* (non-Javadoc)
+ * @see org.drools.guvnor.client.modeldriven.ui.ModellerWidgetFactory#getWidget(org.drools.guvnor.client.modeldriven.ui.RuleModeller, org.drools.guvnor.client.modeldriven.brl.IAction, boolean)
+ */
+ public RuleModellerWidget getWidget(RuleModeller ruleModeller, IAction action, Boolean readOnly){
+ if (action instanceof ActionCallMethod) {
+ return new ActionCallMethodWidget(ruleModeller, (ActionCallMethod) action, readOnly);
+ }
+ if (action instanceof ActionSetField) {
+ return new ActionSetFieldWidget(ruleModeller, (ActionSetField) action,readOnly);
+ }
+ if (action instanceof ActionInsertFact) {
+ return new ActionInsertFactWidget(ruleModeller, (ActionInsertFact) action, readOnly, isTemplate());
+ }
+ if (action instanceof ActionRetractFact) {
+ return new ActionRetractFactWidget(ruleModeller, (ActionRetractFact) action, readOnly);
+ }
+ if (action instanceof DSLSentence) {
+ RuleModellerWidget w = new DSLSentenceWidget(ruleModeller,(DSLSentence) action, readOnly);
+ w.addStyleName("model-builderInner-Background"); //NON-NLS
+ return w;
+ }
+ if (action instanceof FreeFormLine) {
+ return new FreeFormLineWidget(ruleModeller, (FreeFormLine) action, readOnly);
+ }
+ if (action instanceof ActionGlobalCollectionAdd) {
+ return new GlobalCollectionAddWidget(ruleModeller, (ActionGlobalCollectionAdd) action, readOnly);
+ }
+ throw new RuntimeException("I don't know what type of action is: " + action); //NON-NLS
+ }
+
+ /* (non-Javadoc)
+ * @see org.drools.guvnor.client.modeldriven.ui.ModellerWidgetFactory#getWidget(org.drools.guvnor.client.modeldriven.ui.RuleModeller, org.drools.guvnor.client.modeldriven.brl.IPattern, boolean)
+ */
+ public RuleModellerWidget getWidget(RuleModeller ruleModeller, IPattern pattern, Boolean readOnly){
+ if (pattern instanceof FactPattern) {
+ return new FactPatternWidget(ruleModeller, pattern, true, readOnly, isTemplate());
+ }
+ if (pattern instanceof CompositeFactPattern) {
+ return new CompositeFactPatternWidget(ruleModeller, (CompositeFactPattern) pattern, readOnly);
+ }
+ if (pattern instanceof FromAccumulateCompositeFactPattern) {
+ return new FromAccumulateCompositeFactPatternWidget(ruleModeller, (FromAccumulateCompositeFactPattern) pattern, readOnly);
+ }
+ if (pattern instanceof FromCollectCompositeFactPattern) {
+ return new FromCollectCompositeFactPatternWidget(ruleModeller, (FromCollectCompositeFactPattern) pattern, readOnly);
+ }
+ if (pattern instanceof FromCompositeFactPattern) {
+ return new FromCompositeFactPatternWidget(ruleModeller, (FromCompositeFactPattern) pattern, readOnly);
+ }
+ if (pattern instanceof DSLSentence) {
+ return new DSLSentenceWidget(ruleModeller,(DSLSentence) pattern, readOnly);
+ }
+ if (pattern instanceof FreeFormLine) {
+ return new FreeFormLineWidget(ruleModeller, (FreeFormLine)pattern, readOnly);
+ }
+ if (pattern instanceof ExpressionFormLine) {
+ return new ExpressionBuilder(ruleModeller, (ExpressionFormLine) pattern, readOnly);
+ }
+ throw new RuntimeException("I don't know what type of pattern is: "+pattern);
+
+ }
+
+ protected boolean isTemplate(){
+ return false;
+ }
+}
Copied: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/RuleTemplateEditor.java (from rev 32495, labs/jbossrules/branches/guvnor_rules_templates_baunax_esteban_diega/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/RuleTemplateEditor.java)
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/RuleTemplateEditor.java (rev 0)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/RuleTemplateEditor.java 2010-04-09 22:20:49 UTC (rev 32498)
@@ -0,0 +1,182 @@
+package org.drools.guvnor.client.modeldriven.ui;
+
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import org.drools.guvnor.client.common.DirtyableComposite;
+import org.drools.guvnor.client.messages.Constants;
+import org.drools.guvnor.client.modeldriven.dt.TemplateModel;
+import org.drools.guvnor.client.rpc.RuleAsset;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.user.client.ui.Label;
+import com.google.gwt.user.client.ui.Widget;
+import com.gwtext.client.core.EventObject;
+import com.gwtext.client.data.ArrayReader;
+import com.gwtext.client.data.FieldDef;
+import com.gwtext.client.data.GroupingStore;
+import com.gwtext.client.data.MemoryProxy;
+import com.gwtext.client.data.Record;
+import com.gwtext.client.data.RecordDef;
+import com.gwtext.client.data.StringFieldDef;
+import com.gwtext.client.widgets.Panel;
+import com.gwtext.client.widgets.TabPanel;
+import com.gwtext.client.widgets.Toolbar;
+import com.gwtext.client.widgets.ToolbarMenuButton;
+import com.gwtext.client.widgets.event.TabPanelListenerAdapter;
+import com.gwtext.client.widgets.form.TextField;
+import com.gwtext.client.widgets.grid.ColumnConfig;
+import com.gwtext.client.widgets.grid.ColumnModel;
+import com.gwtext.client.widgets.grid.EditorGridPanel;
+import com.gwtext.client.widgets.grid.GridEditor;
+import com.gwtext.client.widgets.grid.GridPanel;
+import com.gwtext.client.widgets.grid.GroupingView;
+import com.gwtext.client.widgets.grid.event.EditorGridListenerAdapter;
+import com.gwtext.client.widgets.menu.BaseItem;
+import com.gwtext.client.widgets.menu.Item;
+import com.gwtext.client.widgets.menu.Menu;
+import com.gwtext.client.widgets.menu.event.BaseItemListenerAdapter;
+
+public class RuleTemplateEditor extends DirtyableComposite implements RuleModelEditor {
+
+ private TemplateModel model;
+ private GroupingStore store;
+ private RuleModeller ruleModeller;
+ private Constants constants = ((Constants) GWT.create(Constants.class));
+
+ public RuleTemplateEditor(RuleAsset asset) {
+ model = (TemplateModel) asset.content;
+ TabPanel tPanel = new TabPanel();
+ tPanel.setAutoWidth(true);
+ tPanel.setAutoHeight(true);
+
+ Panel pnl = new Panel();
+ pnl.setAutoWidth(true);
+ pnl.setClosable(false);
+ pnl.setTitle("Template Editor");
+ pnl.setAutoHeight(true);
+ ruleModeller = new RuleModeller(asset, new TemplateModellerWidgetFactory());
+ pnl.add(ruleModeller);
+ tPanel.add(pnl);
+
+ pnl = new Panel();
+ pnl.setAutoWidth(true);
+ pnl.setClosable(false);
+ pnl.setTitle("Template Data");
+ pnl.setAutoHeight(true);
+ pnl.add(buildTemplateTable());
+ pnl.setId("tplTable");
+ tPanel.add(pnl);
+
+ tPanel.addListener(new TabPanelListenerAdapter() {
+
+ @Override
+ public boolean doBeforeTabChange(TabPanel source, Panel newPanel, Panel oldPanel) {
+ if ("tplTable".equals(newPanel.getId())) {
+ Set<String> keySet = new HashSet<String>(model.getTable().keySet());
+ model.putInSync();
+ if (!keySet.equals(model.getTable().keySet())) {
+ newPanel.clear();
+ newPanel.add(buildTemplateTable());
+ }
+ }
+ return true;
+ }
+ });
+
+ tPanel.setActiveTab(0);
+ initWidget(tPanel);
+ }
+
+ private Widget buildTemplateTable() {
+
+ final Map<String, Integer> vars = model.getInterpolationVariables();
+ if (vars.isEmpty()) {
+ return new Label("");
+ }
+
+ FieldDef[] fds = new FieldDef[vars.size()];
+ ColumnConfig[] cols = new ColumnConfig[fds.length];
+
+ for (Map.Entry<String, Integer> entry: vars.entrySet()) {
+ int idx = entry.getValue();
+ String var = entry.getKey();
+
+ cols[idx] = new ColumnConfig();
+ cols[idx].setHeader(var);
+ cols[idx].setDataIndex(var);
+ cols[idx].setSortable(false);
+ cols[idx].setWidth(50);
+ cols[idx].setResizable(true);
+ cols[idx].setEditor(new GridEditor(new TextField()));
+ fds[idx] = new StringFieldDef(var);
+ }
+ final RecordDef recordDef = new RecordDef(fds);
+ ArrayReader reader = new ArrayReader(recordDef);
+
+ MemoryProxy proxy = new MemoryProxy(model.getTableAsArray());
+
+ ColumnModel cm = new ColumnModel(cols);
+
+ for (int i = 0; i < cm.getColumnCount(); i++) {
+ cm.setEditable(i, true);
+ }
+ store = new GroupingStore(proxy, reader);
+ store.load();
+ EditorGridPanel grid = new EditorGridPanel(store, cm);
+ grid.setStripeRows(true);
+
+ GroupingView gv = new GroupingView();
+
+ // to stretch it out
+ gv.setForceFit(true);
+ gv.setGroupTextTpl("{text} ({[values.rs.length]} {[values.rs.length > 1 ? \"" // NON-NLS
+ + constants.Items() + "\" : \"" + constants.Item() + "\"]})");
+
+ grid.setView(gv);
+
+ grid.setStore(store);
+ grid.setAutoWidth(true);
+ grid.setAutoHeight(true);
+
+ Toolbar tb = new Toolbar();
+ Menu menu = new Menu();
+
+ menu.addItem(new Item(constants.AddRow(), new BaseItemListenerAdapter() {
+ public void onClick(BaseItem item, EventObject e) {
+ String[] rowData = new String[recordDef.getFields().length];
+ for (int i = 0; i < rowData.length; i++) {
+ rowData[i] = "";
+ }
+ store.add(recordDef.createRecord(rowData));
+ model.addRow(rowData);
+ }
+ }));
+
+ ToolbarMenuButton tbb = new ToolbarMenuButton(constants.Modify(), menu);
+ tb.addButton(tbb);
+ grid.add(tb);
+
+ grid.addEditorGridListener(new EditorGridListenerAdapter() {
+ @Override
+ public void onAfterEdit(GridPanel grid, Record record, String field, Object newValue, Object oldValue,
+ int rowIndex, int colIndex) {
+ model.setValue(field, rowIndex, (String) newValue);
+ }
+ });
+
+ return grid;
+ }
+
+ @Override
+ public void resetDirty() {
+ super.resetDirty();
+ store.commitChanges();
+
+ }
+
+ public RuleModeller getRuleModeller() {
+ return ruleModeller;
+ }
+}
Copied: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/TemplateModellerWidgetFactory.java (from rev 32495, labs/jbossrules/branches/guvnor_rules_templates_baunax_esteban_diega/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/TemplateModellerWidgetFactory.java)
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/TemplateModellerWidgetFactory.java (rev 0)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/modeldriven/ui/TemplateModellerWidgetFactory.java 2010-04-09 22:20:49 UTC (rev 32498)
@@ -0,0 +1,9 @@
+package org.drools.guvnor.client.modeldriven.ui;
+
+public class TemplateModellerWidgetFactory extends RuleModellerWidgetFactory {
+
+ @Override
+ protected boolean isTemplate() {
+ return true;
+ }
+}
Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/qa/FieldDataConstraintEditor.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/qa/FieldDataConstraintEditor.java 2010-04-09 21:51:33 UTC (rev 32497)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/qa/FieldDataConstraintEditor.java 2010-04-09 22:20:49 UTC (rev 32498)
@@ -1,9 +1,16 @@
package org.drools.guvnor.client.qa;
-import com.google.gwt.core.client.GWT;
-import com.google.gwt.user.client.ui.*;
-import com.gwtext.client.util.Format;
-import org.drools.guvnor.client.common.*;
+import java.util.List;
+import java.util.Map;
+
+import org.drools.guvnor.client.common.DirtyableComposite;
+import org.drools.guvnor.client.common.DirtyableHorizontalPane;
+import org.drools.guvnor.client.common.DropDownValueChanged;
+import org.drools.guvnor.client.common.FormStylePopup;
+import org.drools.guvnor.client.common.ImageButton;
+import org.drools.guvnor.client.common.InfoPopup;
+import org.drools.guvnor.client.common.SmallLabel;
+import org.drools.guvnor.client.common.ValueChanged;
import org.drools.guvnor.client.messages.Constants;
import org.drools.guvnor.client.modeldriven.DropDownData;
import org.drools.guvnor.client.modeldriven.SuggestionCompletionEngine;
@@ -14,8 +21,20 @@
import org.drools.guvnor.client.modeldriven.ui.ActionValueEditor;
import org.drools.guvnor.client.modeldriven.ui.EnumDropDown;
-import java.util.List;
-import java.util.Map;
+import com.google.gwt.core.client.GWT;
+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.HTML;
+import com.google.gwt.user.client.ui.HorizontalPanel;
+import com.google.gwt.user.client.ui.Image;
+import com.google.gwt.user.client.ui.ListBox;
+import com.google.gwt.user.client.ui.Panel;
+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;
+import com.gwtext.client.util.Format;
/**
* Constraint editor for the FieldData in the Given Section
@@ -281,26 +300,18 @@
}
private void calculateValueFromList() {
+ if (this.field.collectionFieldList == null || this.field.collectionFieldList.isEmpty()) {
+ this.field.value = "=[]";
+ return;
+ }
StringBuffer listContent = new StringBuffer();
- listContent.append("=[");
- boolean isFirst = true;
for (final FieldData f : this.field.collectionFieldList) {
- if (isFirst == true){
- isFirst = false;
- if (f.value!=null){
- listContent.append(f.value.substring(1));
- }
- } else{
- if (f.value==null){
- listContent.append(",");
- }else{
- listContent.append(","+f.value.substring(1));
- }
+ listContent.append(',');
+ if (f.value != null) {
+ listContent.append(f.value.substring(1));
}
}
- listContent.append("]");
- this.field.value = listContent.toString();
-
+ this.field.value = "=[" + listContent.substring(1) + "]";
}
private void showTypeChoice(Widget w,
Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/ruleeditor/ActionToolbar.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/ruleeditor/ActionToolbar.java 2010-04-09 21:51:33 UTC (rev 32497)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/ruleeditor/ActionToolbar.java 2010-04-09 22:20:49 UTC (rev 32498)
@@ -41,6 +41,7 @@
import org.drools.guvnor.client.rpc.RuleAsset;
import org.drools.guvnor.client.rpc.BuilderResult;
import org.drools.guvnor.client.explorer.ExplorerLayoutManager;
+import org.drools.guvnor.client.modeldriven.ui.RuleModelEditor;
import org.drools.guvnor.client.modeldriven.ui.RuleModeller;
import org.drools.guvnor.client.security.Capabilities;
import org.drools.guvnor.client.packages.PackageBuilderWidget;
@@ -53,9 +54,9 @@
*/
public class ActionToolbar extends Composite {
- static String[] VALIDATING_FORMATS = new String[]{BUSINESS_RULE, DSL_TEMPLATE_RULE, DECISION_SPREADSHEET_XLS, DRL, ENUMERATION, DECISION_TABLE_GUIDED, DRL_MODEL, DSL, FUNCTION};
+ static String[] VALIDATING_FORMATS = new String[]{BUSINESS_RULE, DSL_TEMPLATE_RULE, DECISION_SPREADSHEET_XLS, DRL, ENUMERATION, DECISION_TABLE_GUIDED, DRL_MODEL, DSL, FUNCTION, RULE_TEMPLATE};
- static String[] VERIFY_FORMATS = new String[]{BUSINESS_RULE, DECISION_SPREADSHEET_XLS, DRL, DECISION_TABLE_GUIDED, DRL_MODEL};
+ static String[] VERIFY_FORMATS = new String[]{BUSINESS_RULE, DECISION_SPREADSHEET_XLS, DRL, DECISION_TABLE_GUIDED, DRL_MODEL, RULE_TEMPLATE};
private Toolbar toolbar;
private CheckinAction checkinAction;
@@ -224,17 +225,16 @@
if ( isValidatorTypeAsset() ) {
- if (editor instanceof RuleModeller){
- ToolbarButton workingSets = new ToolbarButton();
- workingSets.setText( constants.SelectWorkingSets() );
- workingSets.addListener( new ButtonListenerAdapter() {
- public void onClick(com.gwtext.client.widgets.Button button,
- EventObject e) {
- showWorkingSetsSelection((RuleModeller)editor);
- }
- } );
- toolbar.addButton( workingSets );
- }
+ if (editor instanceof RuleModelEditor) {
+ ToolbarButton workingSets = new ToolbarButton();
+ workingSets.setText(constants.SelectWorkingSets());
+ workingSets.addListener(new ButtonListenerAdapter() {
+ public void onClick(com.gwtext.client.widgets.Button button, EventObject e) {
+ showWorkingSetsSelection(((RuleModelEditor) editor).getRuleModeller());
+ }
+ });
+ toolbar.addButton(workingSets);
+ }
ToolbarButton validate = new ToolbarButton();
validate.setText( constants.Validate() );
Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/ruleeditor/EditorLauncher.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/ruleeditor/EditorLauncher.java 2010-04-09 21:51:33 UTC (rev 32497)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/ruleeditor/EditorLauncher.java 2010-04-09 22:20:49 UTC (rev 32498)
@@ -27,6 +27,8 @@
import org.drools.guvnor.client.explorer.Preferences;
import org.drools.guvnor.client.factmodel.FactModelWidget;
import org.drools.guvnor.client.modeldriven.ui.RuleModeller;
+import org.drools.guvnor.client.modeldriven.ui.RuleModellerWidgetFactory;
+import org.drools.guvnor.client.modeldriven.ui.RuleTemplateEditor;
import org.drools.guvnor.client.packages.ModelAttachmentFileWidget;
import org.drools.guvnor.client.qa.ScenarioWidget;
import org.drools.guvnor.client.rpc.RuleAsset;
@@ -56,7 +58,7 @@
RulePackageSelector.currentlySelectedPackage = asset.metaData.packageName;
// depending on the format, load the appropriate editor
if (asset.metaData.format.equals(AssetFormats.BUSINESS_RULE)) {
- return new RuleModeller(asset);
+ return new RuleModeller(asset, new RuleModellerWidgetFactory());
} else if (asset.metaData.format.equals(AssetFormats.DSL_TEMPLATE_RULE)) {
return new RuleValidatorWrapper(new DSLRuleEditor(asset), asset);
} else if (asset.metaData.format.equals(AssetFormats.BPEL_PACKAGE)
@@ -90,6 +92,8 @@
return new FunctionEditor(asset);
} else if (asset.metaData.format.equals(AssetFormats.WORKING_SET)) {
return new WorkingSetEditor(asset);
+ } else if (asset.metaData.format.equals(AssetFormats.RULE_TEMPLATE)) {
+ return new RuleTemplateEditor(asset);
} else {
return new DefaultContentUploadEditor(asset, viewer);
}
Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/ruleeditor/WorkingSetEditor.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/ruleeditor/WorkingSetEditor.java 2010-04-09 21:51:33 UTC (rev 32497)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/ruleeditor/WorkingSetEditor.java 2010-04-09 22:20:49 UTC (rev 32498)
@@ -73,7 +73,7 @@
Panel pnl = new Panel();
pnl.setAutoWidth(true);
pnl.setClosable(false);
- pnl.setTitle("WS Definition");
+ pnl.setTitle("WS Definition"); //TODO {bauna} i18n
pnl.setAutoHeight(true);
pnl.add(buildDoubleList(wsData));
tPanel.add(pnl);
@@ -81,7 +81,7 @@
pnl = new Panel();
pnl.setAutoWidth(true);
pnl.setClosable(false);
- pnl.setTitle("WS Constraints");
+ pnl.setTitle("WS Constraints"); //TODO {bauna} i18n
pnl.setAutoHeight(true);
pnl.add(buildFactsConstraintsEditor(tPanel));
tPanel.add(pnl);
Copied: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/public/images/new_template.gif (from rev 32495, labs/jbossrules/branches/guvnor_rules_templates_baunax_esteban_diega/drools-guvnor/src/main/java/org/drools/guvnor/public/images/new_template.gif)
===================================================================
(Binary files differ)
Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/contenthandler/BRLContentHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/contenthandler/BRLContentHandler.java 2010-04-09 21:51:33 UTC (rev 32497)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/contenthandler/BRLContentHandler.java 2010-04-09 22:20:49 UTC (rev 32498)
@@ -25,6 +25,7 @@
import org.drools.guvnor.server.builder.BRMSPackageBuilder;
import org.drools.guvnor.server.builder.ContentPackageAssembler;
import org.drools.guvnor.server.util.BRDRLPersistence;
+import org.drools.guvnor.server.util.BRLPersistence;
import org.drools.guvnor.server.util.BRXMLPersistence;
import org.drools.repository.AssetItem;
import org.drools.repository.PackageItem;
@@ -32,16 +33,13 @@
import com.google.gwt.user.client.rpc.SerializableException;
public class BRLContentHandler extends ContentHandler
- implements
- IRuleAsset {
+ implements IRuleAsset {
- public void retrieveAssetContent(RuleAsset asset,
+
+ public void retrieveAssetContent(RuleAsset asset,
PackageItem pkg,
AssetItem item) throws SerializableException {
- RuleModel model = BRXMLPersistence.getInstance().unmarshal( item.getContent() );
-
- asset.content = model;
-
+ asset.content = getBrlXmlPersistence().unmarshal( item.getContent() );
}
public void storeAssetContent(RuleAsset asset,
@@ -50,7 +48,7 @@
if ( data.name == null ) {
data.name = repoAsset.getName();
}
- repoAsset.updateContent( BRXMLPersistence.getInstance().marshal( data ) );
+ repoAsset.updateContent( getBrlXmlPersistence().marshal( data ) );
}
public void compile(BRMSPackageBuilder builder,
@@ -71,21 +69,33 @@
private String getSourceDRL(AssetItem asset,
BRMSPackageBuilder builder) {
- RuleModel model = BRXMLPersistence.getInstance().unmarshal( asset.getContent() );
- model.name = asset.getName();
- model.parentName = this.parentNameFromCategory( asset,
- model.parentName );
+ RuleModel model = buildModelFromAsset(asset);
- String drl = BRDRLPersistence.getInstance().marshal( model );
+ String drl = getBrlDrlPersistence().marshal( model );
if ( builder.hasDSL() && model.hasDSLSentences() ) {
drl = builder.getDSLExpander().expand( drl );
}
return drl;
}
+ protected RuleModel buildModelFromAsset(AssetItem asset) {
+ RuleModel model = getBrlXmlPersistence().unmarshal(asset.getContent());
+ model.name = asset.getName();
+ model.parentName = this.parentNameFromCategory(asset, model.parentName);
+ return model;
+ }
+
public String getRawDRL(AssetItem asset) {
- RuleModel model = BRXMLPersistence.getInstance().unmarshal( asset.getContent() );
+ RuleModel model = getBrlXmlPersistence().unmarshal( asset.getContent() );
- return BRDRLPersistence.getInstance().marshal( model );
+ return getBrlDrlPersistence().marshal( model );
}
+
+ protected BRLPersistence getBrlDrlPersistence() {
+ return BRDRLPersistence.getInstance();
+ }
+
+ protected BRLPersistence getBrlXmlPersistence() {
+ return BRXMLPersistence.getInstance();
+ }
}
\ No newline at end of file
Copied: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/contenthandler/BaseXStreamContentHandler.java (from rev 32495, labs/jbossrules/branches/guvnor_rules_templates_baunax_esteban_diega/drools-guvnor/src/main/java/org/drools/guvnor/server/contenthandler/BaseXStreamContentHandler.java)
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/contenthandler/BaseXStreamContentHandler.java (rev 0)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/contenthandler/BaseXStreamContentHandler.java 2010-04-09 22:20:49 UTC (rev 32498)
@@ -0,0 +1,46 @@
+package org.drools.guvnor.server.contenthandler;
+
+import org.drools.guvnor.client.modeldriven.brl.PortableObject;
+import org.drools.guvnor.client.rpc.RuleAsset;
+import org.drools.guvnor.client.rpc.WorkingSetConfigData;
+import org.drools.repository.AssetItem;
+import org.drools.repository.PackageItem;
+import org.drools.repository.RulesRepositoryException;
+import org.slf4j.Logger;
+
+import com.google.gwt.user.client.rpc.SerializableException;
+import com.thoughtworks.xstream.XStream;
+import com.thoughtworks.xstream.io.xml.DomDriver;
+
+public abstract class BaseXStreamContentHandler<T extends PortableObject> extends ContentHandler {
+ protected final Logger log = org.slf4j.LoggerFactory.getLogger(getClass());
+
+ private static final XStream xt = new XStream(new DomDriver());
+
+ protected XStream getXStream() {
+ return xt;
+ }
+
+ @SuppressWarnings("unchecked")
+ public void retrieveAssetContent(RuleAsset asset, PackageItem pkg, AssetItem item) throws SerializableException {
+ if (item.getContent() != null && item.getContent().length() > 0) {
+ try {
+ asset.content = (T) getXStream().fromXML(item.getContent());
+ } catch (RulesRepositoryException e) {
+ log.error("error marshalling asset content: " + asset.metaData.name, e);
+ throw new SerializableException(e.getMessage());
+ }
+ } else {
+ asset.content = new WorkingSetConfigData();
+ }
+ }
+
+ public void storeAssetContent(RuleAsset asset, AssetItem repoAsset) throws SerializableException {
+ try {
+ repoAsset.updateContent(getXStream().toXML(asset.content));
+ } catch (Exception e) {
+ log.error("error marshalling asset content: " + asset.metaData.name, e);
+ throw new SerializableException(e.getMessage());
+ }
+ }
+}
Copied: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/contenthandler/TemplateModelHandler.java (from rev 32495, labs/jbossrules/branches/guvnor_rules_templates_baunax_esteban_diega/drools-guvnor/src/main/java/org/drools/guvnor/server/contenthandler/TemplateModelHandler.java)
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/contenthandler/TemplateModelHandler.java (rev 0)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/contenthandler/TemplateModelHandler.java 2010-04-09 22:20:49 UTC (rev 32498)
@@ -0,0 +1,19 @@
+package org.drools.guvnor.server.contenthandler;
+
+import org.drools.guvnor.server.util.BRDRTPersistence;
+import org.drools.guvnor.server.util.BRDRTXMLPersistence;
+import org.drools.guvnor.server.util.BRLPersistence;
+
+public class TemplateModelHandler extends BRLContentHandler {
+
+ @Override
+ protected BRLPersistence getBrlDrlPersistence() {
+ return BRDRTPersistence.getInstance();
+ }
+
+ @Override
+ protected BRLPersistence getBrlXmlPersistence() {
+ return BRDRTXMLPersistence.getInstance();
+ }
+
+}
Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/contenthandler/WorkingSetHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/contenthandler/WorkingSetHandler.java 2010-04-09 21:51:33 UTC (rev 32497)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/contenthandler/WorkingSetHandler.java 2010-04-09 22:20:49 UTC (rev 32498)
@@ -1,46 +1,9 @@
package org.drools.guvnor.server.contenthandler;
-import org.apache.log4j.spi.LoggerFactory;
-import org.drools.guvnor.client.rpc.RuleAsset;
import org.drools.guvnor.client.rpc.WorkingSetConfigData;
-import org.drools.repository.AssetItem;
-import org.drools.repository.PackageItem;
-import org.drools.repository.RulesRepositoryException;
-import org.slf4j.Logger;
-import com.google.gwt.user.client.rpc.SerializableException;
-import com.thoughtworks.xstream.XStream;
-import com.thoughtworks.xstream.io.xml.DomDriver;
-
/**
*
*/
-public class WorkingSetHandler extends ContentHandler {
- private static final Logger log = org.slf4j.LoggerFactory.getLogger(WorkingSetHandler.class);
-
- private static final XStream xt = new XStream( new DomDriver() );
-
- public void retrieveAssetContent(RuleAsset asset, PackageItem pkg, AssetItem item)
- throws SerializableException {
- if (item.getContent() != null && item.getContent().length() > 0) {
- try {
- asset.content = (WorkingSetConfigData) xt.fromXML(item.getContent());
- } catch (RulesRepositoryException e) {
- log.error("error marshalling working set: " + asset.metaData.name, e);
- throw new SerializableException(e.getMessage());
- }
- } else {
- asset.content = new WorkingSetConfigData();
- }
- }
-
- public void storeAssetContent(RuleAsset asset, AssetItem repoAsset) throws SerializableException {
- try {
- WorkingSetConfigData wsData = (WorkingSetConfigData) asset.content;
- repoAsset.updateContent(xt.toXML(wsData));
- } catch (Exception e) {
- log.error("error marshalling working set: " + asset.metaData.name, e);
- throw new SerializableException(e.getMessage());
- }
- }
+public class WorkingSetHandler extends BaseXStreamContentHandler<WorkingSetConfigData> {
}
Copied: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/modeldriven (from rev 32495, labs/jbossrules/branches/guvnor_rules_templates_baunax_esteban_diega/drools-guvnor/src/main/java/org/drools/guvnor/server/modeldriven)
Copied: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/modeldriven/template (from rev 32495, labs/jbossrules/branches/guvnor_rules_templates_baunax_esteban_diega/drools-guvnor/src/main/java/org/drools/guvnor/server/modeldriven/template)
Deleted: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/modeldriven/template/TemplateModelDataProvider.java
===================================================================
--- labs/jbossrules/branches/guvnor_rules_templates_baunax_esteban_diega/drools-guvnor/src/main/java/org/drools/guvnor/server/modeldriven/template/TemplateModelDataProvider.java 2010-04-09 21:14:41 UTC (rev 32495)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/modeldriven/template/TemplateModelDataProvider.java 2010-04-09 22:20:49 UTC (rev 32498)
@@ -1,24 +0,0 @@
-package org.drools.guvnor.server.modeldriven.template;
-
-import org.drools.guvnor.client.modeldriven.dt.TemplateModel;
-import org.drools.template.DataProvider;
-
-public class TemplateModelDataProvider implements DataProvider {
-
- private String[][] rows;
- private int rowsCount;
- private int currRow = 0;
-
- public TemplateModelDataProvider(TemplateModel model) {
- this.rows = model.getTableAsArray();
- rowsCount = model.getRowsCount();
- }
-
- public boolean hasNext() {
- return rowsCount != -1 && currRow < rowsCount;
- }
-
- public String[] next() {
- return rows[currRow++];
- }
-}
Copied: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/modeldriven/template/TemplateModelDataProvider.java (from rev 32495, labs/jbossrules/branches/guvnor_rules_templates_baunax_esteban_diega/drools-guvnor/src/main/java/org/drools/guvnor/server/modeldriven/template/TemplateModelDataProvider.java)
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/modeldriven/template/TemplateModelDataProvider.java (rev 0)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/modeldriven/template/TemplateModelDataProvider.java 2010-04-09 22:20:49 UTC (rev 32498)
@@ -0,0 +1,24 @@
+package org.drools.guvnor.server.modeldriven.template;
+
+import org.drools.guvnor.client.modeldriven.dt.TemplateModel;
+import org.drools.template.DataProvider;
+
+public class TemplateModelDataProvider implements DataProvider {
+
+ private String[][] rows;
+ private int rowsCount;
+ private int currRow = 0;
+
+ public TemplateModelDataProvider(TemplateModel model) {
+ this.rows = model.getTableAsArray();
+ rowsCount = model.getRowsCount();
+ }
+
+ public boolean hasNext() {
+ return rowsCount != -1 && currRow < rowsCount;
+ }
+
+ public String[] next() {
+ return rows[currRow++];
+ }
+}
Copied: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/util/BRDRTPersistence.java (from rev 32495, labs/jbossrules/branches/guvnor_rules_templates_baunax_esteban_diega/drools-guvnor/src/main/java/org/drools/guvnor/server/util/BRDRTPersistence.java)
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/util/BRDRTPersistence.java (rev 0)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/util/BRDRTPersistence.java 2010-04-09 22:20:49 UTC (rev 32498)
@@ -0,0 +1,95 @@
+package org.drools.guvnor.server.util;
+
+import java.io.ByteArrayInputStream;
+
+import org.drools.guvnor.client.modeldriven.brl.RuleModel;
+import org.drools.guvnor.client.modeldriven.dt.TemplateModel;
+import org.drools.template.DataProvider;
+import org.drools.template.DataProviderCompiler;
+import org.drools.template.objects.ArrayDataProvider;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * This class persists a {@link TemplateModel} to DRL template
+ *
+ * @author baunax
+ */
+public class BRDRTPersistence extends BRDRLPersistence {
+ private static final Logger log = LoggerFactory.getLogger(BRDRTPersistence.class);
+ private static final BRLPersistence INSTANCE = new BRDRTPersistence();
+ private static final String PACKAGE_DECLARATION = "\npackage __template_dummy_package__\n";
+
+ private BRDRTPersistence() {
+ super();
+ }
+
+ public static BRLPersistence getInstance() {
+ return INSTANCE;
+ }
+
+ @Override
+ public String marshal(RuleModel model) {
+ TemplateModel tplModel = (TemplateModel) model;
+ String ruleTemplate = super.marshalRule(model);
+ log.debug("ruleTemplate:\n{}", ruleTemplate);
+ DataProviderCompiler tplCompiler = new DataProviderCompiler();
+ DataProvider dataProvider;
+ if (tplModel.getRowsCount() > 0) {
+ dataProvider = new ArrayDataProvider(tplModel.getTableAsArray());
+ } else {
+ dataProvider = new ArrayDataProvider(generateEmptyIterator(tplModel));
+ }
+
+ String generatedDRl = tplCompiler.compile(dataProvider, new ByteArrayInputStream(ruleTemplate.getBytes()))
+ .substring(PACKAGE_DECLARATION.length()).trim();
+
+ log.debug("generated drl:\n{}", generatedDRl);
+ return generatedDRl;
+ }
+
+ private String[][] generateEmptyIterator(TemplateModel tplModel) {
+ String[][] rows = new String[1][];
+
+ String[] interpolationVariables = tplModel.getInterpolationVariablesList();
+ if (interpolationVariables == null || interpolationVariables.length == 0) {
+ rows[0] = new String[] { "" };
+ } else {
+ for (int i = 0; i < interpolationVariables.length; i++) {
+ interpolationVariables[i] += "_na";
+ }
+ rows[0] = interpolationVariables;
+ }
+ return rows;
+ }
+
+ @Override
+ protected void marshalHeader(RuleModel model, StringBuilder buf) {
+ TemplateModel tplModel = (TemplateModel) model;
+ buf.append("template header\n");
+
+ String[] interpolationVariables = tplModel.getInterpolationVariablesList();
+ if (interpolationVariables.length == 0) {
+ buf.append("test_var").append('\n');
+ } else {
+ for (String var : interpolationVariables) {
+ buf.append(var).append('\n');
+ }
+ }
+ buf.append(PACKAGE_DECLARATION)
+ .append("\ntemplate \"" + super.marshalRuleName(tplModel) + "\"\n\n");
+ super.marshalHeader(model, buf);
+ }
+
+ @Override
+ protected String marshalRuleName(RuleModel model) {
+ return super.marshalRuleName(model) + "_@{row.rowNumber}";
+ }
+
+ @Override
+ protected void marshalFooter(StringBuilder buf) {
+ super.marshalFooter(buf);
+ buf.append("\nend template");
+ }
+
+}
Copied: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/util/BRDRTXMLPersistence.java (from rev 32495, labs/jbossrules/branches/guvnor_rules_templates_baunax_esteban_diega/drools-guvnor/src/main/java/org/drools/guvnor/server/util/BRDRTXMLPersistence.java)
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/util/BRDRTXMLPersistence.java (rev 0)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/util/BRDRTXMLPersistence.java 2010-04-09 22:20:49 UTC (rev 32498)
@@ -0,0 +1,43 @@
+package org.drools.guvnor.server.util;
+
+import org.drools.guvnor.client.modeldriven.brl.RuleModel;
+import org.drools.guvnor.client.modeldriven.dt.TemplateModel;
+
+/**
+ * This class persists the template rule model to XML and back.
+ *
+ * This is the 'brl' xml format (Business Rule Language).
+ *
+ * @author baunax at gmail.com
+ * @author dieguitoll at gmail.com
+ */
+public class BRDRTXMLPersistence extends BRXMLPersistence {
+
+ private static final BRLPersistence INSTANCE = new BRDRTXMLPersistence();
+
+ private BRDRTXMLPersistence() {
+ super();
+ }
+
+ public static BRLPersistence getInstance() {
+ return INSTANCE;
+ }
+
+ @Override
+ public String marshal(RuleModel model) {
+ ((TemplateModel) model).putInSync();
+ return super.marshal(model);
+ }
+
+ @Override
+ public TemplateModel unmarshal(String xml) {
+ TemplateModel model = (TemplateModel) super.unmarshal(xml);
+ model.putInSync();
+ return model;
+ }
+
+ @Override
+ protected RuleModel createEmptyModel() {
+ return new TemplateModel();
+ }
+}
Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/util/RowLoader.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/util/RowLoader.java 2010-04-09 21:51:33 UTC (rev 32497)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/util/RowLoader.java 2010-04-09 22:20:49 UTC (rev 32498)
@@ -5,7 +5,6 @@
import java.io.InputStream;
import java.io.InputStreamReader;
import java.lang.reflect.Method;
-import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
@@ -15,12 +14,9 @@
import org.drools.repository.RulesRepositoryException;
public class RowLoader {
-
-
- private static SimpleDateFormat DF = new SimpleDateFormat("yyyy-MM-dd");
private String[] headers;
private String[] headerTypes;
- List extractors;
+ List<Method> extractors;
public String[] getHeaders() {
return headers;
@@ -30,11 +26,10 @@
return headerTypes;
}
-
public String[] getRow(AssetItem item) {
String[] row = new String[headers.length];
for ( int i = 0; i < row.length; i++ ) {
- Method meth = (Method) extractors.get( i );
+ Method meth = extractors.get( i );
try {
Object val = meth.invoke( item,
(Object[]) null );
@@ -63,10 +58,13 @@
public RowLoader(String resourcename) {
InputStream in = RowLoader.class.getResourceAsStream( "/" + resourcename + ".properties" );
+ if (in == null) {
+ throw new IllegalStateException("can't find resource name: /" + resourcename + ".properties");
+ }
BufferedReader reader = new BufferedReader( new InputStreamReader( in ) );
List<String> fields = new ArrayList<String>();
List<String> fieldTypes = new ArrayList<String>();
- extractors = new ArrayList();
+ extractors = new ArrayList<Method>();
String line;
try {
@@ -96,8 +94,8 @@
} finally {
closeStream( reader );
}
- headers = (String[]) fields.toArray( new String[fields.size()] );
- headerTypes = (String[]) fieldTypes.toArray( new String[fieldTypes.size()] );
+ headers = fields.toArray( new String[fields.size()] );
+ headerTypes = fieldTypes.toArray( new String[fieldTypes.size()] );
}
private void closeStream(BufferedReader reader) {
Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/util/TestEnvironmentSessionHelper.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/util/TestEnvironmentSessionHelper.java 2010-04-09 21:51:33 UTC (rev 32497)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/util/TestEnvironmentSessionHelper.java 2010-04-09 22:20:49 UTC (rev 32498)
@@ -18,6 +18,8 @@
import java.io.File;
+import java.io.FileOutputStream;
+import java.io.PrintWriter;
import javax.jcr.Repository;
import javax.jcr.RepositoryException;
@@ -60,26 +62,63 @@
String home = System.getProperty("guvnor.repository.dir");
repository = config.getJCRRepository(home);
- Session testSession = repository.login(
- new SimpleCredentials("alan_parsons", "password".toCharArray()));
+ Session testSession = repository.login(new SimpleCredentials("alan_parsons", "password".toCharArray()));
RulesRepositoryAdministrator admin = new RulesRepositoryAdministrator(testSession);
if (erase && admin.isRepositoryInitialized()) {
-
admin.clearRulesRepository( );
}
config.setupRulesRepository( testSession );
+ PrintWriter out = new PrintWriter(new FileOutputStream("/tmp/pepe.txt"));
+ //dump(testSession.getRootNode(), out);
+// OutputStream out = new FileOutputStream("/tmp/pepe.txt");
+// testSession.exportSystemView("/", out, true, false);
+ out.close();
return testSession;
} else {
- return repository.login(
- new SimpleCredentials("alan_parsons", "password".toCharArray()));
+ return repository.login(new SimpleCredentials("alan_parsons", "password".toCharArray()));
}
- } catch (RepositoryException e) {
+ } catch (Exception e) {
throw new IllegalStateException(e);
}
}
+ /** Recursively outputs the contents of the given node. */
+// private static void dump(Node node, PrintWriter out) throws Exception {
+//
+// // First output the node path
+// out.println(node.getPath());
+// // Skip the virtual (and large!) jcr:system subtree
+// if (node.getName().equals("jcr:system")) {
+// return;
+// }
+//
+// // Then output the properties
+// PropertyIterator properties = node.getProperties();
+// while (properties.hasNext()) {
+// Property property = properties.nextProperty();
+// if (property.getDefinition().isMultiple()) {
+// // A multi-valued property, print all values
+// Value[] values = property.getValues();
+// for (int i = 0; i < values.length; i++) {
+// out.println(property.getPath() + " = "
+// + values[i].getString());
+// }
+// } else {
+// // A single-valued property
+// out.println(property.getPath() + " = "
+// + property.getString());
+// }
+// }
+//
+// // Finally output all the child nodes recursively
+// NodeIterator nodes = node.getNodes();
+// while (nodes.hasNext()) {
+// dump(nodes.nextNode(), out);
+// }
+// }
+
/**
* Uses the given user name.
*/
Modified: labs/jbossrules/trunk/drools-guvnor/src/main/resources/contenthandler.properties
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/resources/contenthandler.properties 2010-04-09 21:51:33 UTC (rev 32497)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/resources/contenthandler.properties 2010-04-09 22:20:49 UTC (rev 32498)
@@ -36,4 +36,5 @@
xml=org.drools.guvnor.server.contenthandler.XmlFileHandler
#Working_Set
workingset=org.drools.guvnor.server.contenthandler.WorkingSetHandler
-
+#Rule Template
+template=org.drools.guvnor.server.contenthandler.TemplateModelHandler
Copied: labs/jbossrules/trunk/drools-guvnor/src/main/webapp/org.drools.guvnor.Guvnor/images/new_template.gif (from rev 32495, labs/jbossrules/branches/guvnor_rules_templates_baunax_esteban_diega/drools-guvnor/src/main/webapp/org.drools.guvnor.Guvnor/images/new_template.gif)
===================================================================
(Binary files differ)
Copied: labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/util/BRDRTPersistenceTest.java (from rev 32495, labs/jbossrules/branches/guvnor_rules_templates_baunax_esteban_diega/drools-guvnor/src/test/java/org/drools/guvnor/server/util/BRDRTPersistenceTest.java)
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/util/BRDRTPersistenceTest.java (rev 0)
+++ labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/util/BRDRTPersistenceTest.java 2010-04-09 22:20:49 UTC (rev 32498)
@@ -0,0 +1,224 @@
+package org.drools.guvnor.server.util;
+
+import java.util.HashSet;
+
+import junit.framework.TestCase;
+
+import org.drools.guvnor.client.modeldriven.brl.ActionFieldValue;
+import org.drools.guvnor.client.modeldriven.brl.ActionInsertFact;
+import org.drools.guvnor.client.modeldriven.brl.FactPattern;
+import org.drools.guvnor.client.modeldriven.brl.IAction;
+import org.drools.guvnor.client.modeldriven.brl.IPattern;
+import org.drools.guvnor.client.modeldriven.brl.ISingleFieldConstraint;
+import org.drools.guvnor.client.modeldriven.brl.SingleFieldConstraint;
+import org.drools.guvnor.client.modeldriven.dt.TemplateModel;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class BRDRTPersistenceTest extends TestCase {
+ private static final Logger log = LoggerFactory.getLogger(BRDRTPersistenceTest.class);
+ private BRLPersistence p;
+
+ @Override
+ protected void setUp() throws Exception {
+ p = BRDRTPersistence.getInstance();
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ p = null;
+ }
+
+ public void testGenerateEmptyDRL() {
+ String expected =
+ "rule \"null_0\"\n" +
+ " dialect \"mvel\"\n" +
+ " when\n" +
+ " then\n" +
+ "end";
+
+ final String drl = p.marshal(new TemplateModel());
+ log.info("drl :\n{}", drl);
+
+ assertNotNull(drl);
+ assertEquals(expected, drl);
+ }
+
+ public void testEmptyData() {
+ String expected =
+ "rule \"with composite_0\"\n" +
+ " dialect \"mvel\"\n" +
+ " when\n" +
+ " $p : Person( name == \"name_na\" )\n" +
+ " then\n" +
+ "end";
+ TemplateModel m = new TemplateModel();
+ m.name = "with composite";
+ m.lhs = new IPattern[1];
+ m.rhs = new IAction[0];
+
+ FactPattern fp = new FactPattern("Person");
+ fp.boundName = "$p";
+
+ SingleFieldConstraint sfc = new SingleFieldConstraint("name");
+ sfc.fieldName = "name";
+ sfc.value = "name";
+ sfc.operator = "==";
+
+ sfc.constraintValueType = ISingleFieldConstraint.TYPE_TEMPLATE;
+ fp.addConstraint(sfc);
+
+ m.lhs[0] = fp;
+ final String drl = p.marshal(m);
+ log.info("drl :\n{}", drl);
+ assertNotNull(drl);
+ assertEquals(expected, drl);
+ }
+
+ public void testEmptyDataWithRHS() {
+ String expected =
+ "rule \"with composite_1\"\n" +
+ " dialect \"mvel\"\n" +
+ " when\n" +
+ " $p : Person( name == \"diegoll\" )\n" +
+ " then\n" +
+ " Person fact0 = new Person();\n" +
+ " fact0.setAge( 87 );\n" +
+ " insert(fact0 );\n" +
+ "end\n" +
+ "\n" +
+ "rule \"with composite_0\"\n" +
+ " dialect \"mvel\"\n" +
+ " when\n" +
+ " $p : Person( name == \"baunax\" )\n" +
+ " then\n" +
+ " Person fact0 = new Person();\n" +
+ " fact0.setAge( 34 );\n" +
+ " insert(fact0 );\n" +
+ "end";
+
+ TemplateModel m = new TemplateModel();
+ m.name = "with composite";
+ m.lhs = new IPattern[1];
+ m.rhs = new IAction[1];
+
+ FactPattern fp = new FactPattern("Person");
+ fp.boundName = "$p";
+
+ SingleFieldConstraint sfc = new SingleFieldConstraint("name");
+ sfc.fieldName = "name";
+ sfc.value = "name";
+ sfc.operator = "==";
+
+ sfc.constraintValueType = ISingleFieldConstraint.TYPE_TEMPLATE;
+ fp.addConstraint(sfc);
+
+ m.lhs[0] = fp;
+
+ ActionInsertFact aif = new ActionInsertFact("Person");
+ ActionFieldValue afv = new ActionFieldValue("age", "age", "");
+ afv.nature = ActionFieldValue.TYPE_TEMPLATE;
+
+ aif.addFieldValue(afv);
+ m.rhs[0] = aif;
+
+ m.addRow(new String[] {"baunax", "34"});
+ m.addRow(new String[] {"diegoll", "87"});
+ final String drl = p.marshal(m);
+ log.info("drl :\n{}", drl);
+
+ assertNotNull(drl);
+ assertEquals(expected, drl);
+ }
+
+ public void testWithData() {
+ String expected =
+ "rule \"with composite_1\"\n" +
+ " dialect \"mvel\"\n" +
+ " when\n" +
+ " $p : Person( name == \"diegoll\" )\n" +
+ " then\n" +
+ "end\n" +
+ "\n" +
+ "rule \"with composite_0\"\n" +
+ " dialect \"mvel\"\n" +
+ " when\n" +
+ " $p : Person( name == \"baunax\" )\n" +
+ " then\n" +
+ "end";
+
+ TemplateModel m = new TemplateModel();
+ m.name = "with composite";
+ m.lhs = new IPattern[1];
+ m.rhs = new IAction[0];
+
+ FactPattern fp = new FactPattern("Person");
+ fp.boundName = "$p";
+
+ SingleFieldConstraint sfc = new SingleFieldConstraint("name");
+ sfc.fieldName = "name";
+ sfc.value = "name";
+ sfc.operator = "==";
+
+ sfc.constraintValueType = ISingleFieldConstraint.TYPE_TEMPLATE;
+ fp.addConstraint(sfc);
+
+ m.lhs[0] = fp;
+
+ m.addRow(new String[] {"baunax"});
+ m.addRow(new String[] {"diegoll"});
+
+ final String drl = p.marshal(m);
+ log.info("drl :\n{}", drl);
+ assertNotNull(drl);
+ assertEquals(expected, drl);
+
+ }
+
+ public void testWithDataAndSync() {
+ TemplateModel m = new TemplateModel();
+ m.name = "with composite";
+ m.lhs = new IPattern[1];
+ m.rhs = new IAction[0];
+
+ FactPattern fp = new FactPattern("Person");
+ fp.boundName = "$p";
+
+ SingleFieldConstraint sfc = new SingleFieldConstraint("name");
+ sfc.fieldName = "name";
+ sfc.value = "name";
+ sfc.operator = "==";
+ sfc.constraintValueType = ISingleFieldConstraint.TYPE_TEMPLATE;
+
+ fp.addConstraint(sfc);
+
+ sfc = new SingleFieldConstraint("age");
+ sfc.fieldName = "age";
+ sfc.value = "age";
+ sfc.operator = "==";
+ sfc.constraintValueType = ISingleFieldConstraint.TYPE_TEMPLATE;
+
+ fp.addConstraint(sfc);
+
+ m.lhs[0] = fp;
+
+ m.putInSync();
+ HashSet<String> expected = new HashSet<String>();
+ expected.add("name");
+ expected.add("age");
+ assertEquals(expected, m.getTable().keySet());
+
+ fp.removeConstraint(1);
+ m.putInSync();
+
+ expected.remove("age");
+ assertEquals(expected, m.getTable().keySet());
+
+ fp.addConstraint(sfc);
+ m.putInSync();
+
+ expected.add("age");
+ assertEquals(expected, m.getTable().keySet());
+
+ }
+}
Copied: labs/jbossrules/trunk/drools-templates/src/main/java/org/drools/template/objects/ArrayDataProvider.java (from rev 32495, labs/jbossrules/branches/guvnor_rules_templates_baunax_esteban_diega/drools-templates/src/main/java/org/drools/template/objects/ArrayDataProvider.java)
===================================================================
--- labs/jbossrules/trunk/drools-templates/src/main/java/org/drools/template/objects/ArrayDataProvider.java (rev 0)
+++ labs/jbossrules/trunk/drools-templates/src/main/java/org/drools/template/objects/ArrayDataProvider.java 2010-04-09 22:20:49 UTC (rev 32498)
@@ -0,0 +1,29 @@
+package org.drools.template.objects;
+
+import org.drools.template.DataProvider;
+
+public class ArrayDataProvider implements DataProvider {
+
+ private String[][] rows;
+ private int currRow;
+ private int rowsCount;
+
+ public ArrayDataProvider(String[][] rows) {
+ if (rows == null) {
+ this.rows = new String[0][0];
+ } else {
+ this.rows = rows;
+ }
+ this.currRow = 0;
+ this.rowsCount = this.rows.length;
+ }
+
+ public boolean hasNext() {
+ return currRow < rowsCount;
+ }
+
+ public String[] next() {
+ return rows[currRow++];
+ }
+
+}
More information about the jboss-svn-commits
mailing list