[jboss-svn-commits] JBL Code SVN: r23600 - in labs/jbossrules/trunk: drools-compiler/src/main/java/org/drools/xml and 25 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Mon Oct 27 20:27:54 EDT 2008
Author: KrisVerlaenen
Date: 2008-10-27 20:27:54 -0400 (Mon, 27 Oct 2008)
New Revision: 23600
Added:
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/FunctionImportHandler.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ProcessMultiThreadTest.java
labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_ProcessMultithreadEvent.rf
labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/color/
labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/color/ColorCellEditor.java
labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/color/ColorPropertyDescriptor.java
Modified:
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/ProcessBuilder.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/ProcessSemanticModule.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/XmlWorkflowProcessDumper.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/AbstractNodeHandler.java
labs/jbossrules/trunk/drools-compiler/src/main/resources/META-INF/drools-processes-4.0.xsd
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/datatype/DataType.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/datatype/impl/type/BooleanDataType.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/datatype/impl/type/FloatDataType.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/datatype/impl/type/IntegerDataType.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/datatype/impl/type/ListDataType.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/datatype/impl/type/ObjectDataType.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/datatype/impl/type/StringDataType.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/datatype/impl/type/UndefinedDataType.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/instance/impl/ProcessInstanceImpl.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/WorkflowProcess.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/impl/WorkflowProcessImpl.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/HumanTaskNode.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/impl/WorkflowProcessInstanceImpl.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/MilestoneNodeInstance.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/RuleSetNodeInstance.java
labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/DroolsEclipsePlugin.java
labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/DRLRuleEditor.java
labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/CompletionContext.java
labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/DefaultCompletionProcessor.java
labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/RuleCompletionProcessor.java
labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/core/DefaultElementWrapper.java
labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/editpart/figure/AbstractElementFigure.java
labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/editpart/figure/ElementContainerFigure.java
labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/editpart/figure/ElementFigure.java
labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/AbstractNodeWrapper.java
labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/HumanTaskNodeWrapper.java
labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/ActionEditPart.java
labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/action/ActionCompletionProcessor.java
labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/action/ActionDialog.java
labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/constraint/ConstraintCompletionProcessor.java
labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/constraint/RuleFlowConstraintDialog.java
labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/constraint/RuleFlowImportsDialog.java
labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/preferences/DroolsPreferencePage.java
labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/preferences/IDroolsConstants.java
labs/jbossrules/trunk/drools-eclipse/drools-eclipse-test/src/test/java/org/drools/eclipse/editors/completion/CompletionContextTest.java
Log:
JBRULES-1825: Support function imports for processes
- added function import support
- fixed code completion accordingly
JBRULES-1824: Multi-threading for process instances
- multiple threads are not allowed to access process instances simultaneously
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/ProcessBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/ProcessBuilder.java 2008-10-27 23:41:19 UTC (rev 23599)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/ProcessBuilder.java 2008-10-28 00:27:54 UTC (rev 23600)
@@ -208,6 +208,12 @@
builder.append( "import " + importString + ";\n" );
}
}
+ List<String> functionImports = ruleFlow.getFunctionImports();
+ if ( functionImports != null ) {
+ for ( String importString: functionImports ) {
+ builder.append( "import function " + importString + ";\n" );
+ }
+ }
Map<String, String> globals = ruleFlow.getGlobals();
if ( globals != null ) {
for ( Map.Entry<String, String> entry: globals.entrySet()) {
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/ProcessSemanticModule.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/ProcessSemanticModule.java 2008-10-27 23:41:19 UTC (rev 23599)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/ProcessSemanticModule.java 2008-10-28 00:27:54 UTC (rev 23600)
@@ -10,6 +10,7 @@
import org.drools.xml.processes.ExceptionHandlerHandler;
import org.drools.xml.processes.FaultNodeHandler;
import org.drools.xml.processes.ForEachNodeHandler;
+import org.drools.xml.processes.FunctionImportHandler;
import org.drools.xml.processes.GlobalHandler;
import org.drools.xml.processes.HumanTaskNodeHandler;
import org.drools.xml.processes.ImportHandler;
@@ -70,6 +71,8 @@
new ConnectionHandler() );
addHandler( "import",
new ImportHandler() );
+ addHandler( "functionImport",
+ new FunctionImportHandler() );
addHandler( "global",
new GlobalHandler() );
addHandler( "variable",
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/XmlWorkflowProcessDumper.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/XmlWorkflowProcessDumper.java 2008-10-27 23:41:19 UTC (rev 23599)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/XmlWorkflowProcessDumper.java 2008-10-28 00:27:54 UTC (rev 23600)
@@ -81,6 +81,7 @@
private void visitHeader(WorkflowProcess process, StringBuffer xmlDump, boolean includeMeta) {
xmlDump.append(" <header>" + EOL);
visitImports(process.getImports(), xmlDump);
+ visitFunctionImports(process.getFunctionImports(), xmlDump);
visitGlobals(process.getGlobals(), xmlDump);
VariableScope variableScope = (VariableScope) process.getDefaultContext(VariableScope.VARIABLE_SCOPE);
if (variableScope != null) {
@@ -107,6 +108,16 @@
}
}
+ private void visitFunctionImports(List<String> imports, StringBuffer xmlDump) {
+ if (imports != null && imports.size() > 0) {
+ xmlDump.append(" <functionImports>" + EOL);
+ for (String importString: imports) {
+ xmlDump.append(" <functionImport name=\"" + importString + "\" />" + EOL);
+ }
+ xmlDump.append(" </functionImports>" + EOL);
+ }
+ }
+
private void visitGlobals(Map<String, String> globals, StringBuffer xmlDump) {
if (globals != null && globals.size() > 0) {
xmlDump.append(" <globals>" + EOL);
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/AbstractNodeHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/AbstractNodeHandler.java 2008-10-27 23:41:19 UTC (rev 23599)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/AbstractNodeHandler.java 2008-10-28 00:27:54 UTC (rev 23600)
@@ -106,6 +106,14 @@
throw new SAXParseException("<" + localName + "> requires an Integer 'height' attribute", parser.getLocator());
}
}
+ final String color = element.getAttribute("color");
+ if (color != null && color.length() != 0) {
+ try {
+ node.setMetaData("color", new Integer(color));
+ } catch (NumberFormatException exc) {
+ throw new SAXParseException("<" + localName + "> requires an Integer 'color' attribute", parser.getLocator());
+ }
+ }
}
protected void handleAction(final Node node, final Element element, String type) {
@@ -151,6 +159,7 @@
Integer y = (Integer) node.getMetaData("y");
Integer width = (Integer) node.getMetaData("width");
Integer height = (Integer) node.getMetaData("height");
+ Integer color = (Integer) node.getMetaData("color");
if (x != null && x != 0) {
xmlDump.append("x=\"" + x + "\" ");
}
@@ -163,6 +172,9 @@
if (height != null && height != -1) {
xmlDump.append("height=\"" + height + "\" ");
}
+ if (color != null && color != 0) {
+ xmlDump.append("color=\"" + color + "\" ");
+ }
}
}
Added: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/FunctionImportHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/FunctionImportHandler.java (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/FunctionImportHandler.java 2008-10-28 00:27:54 UTC (rev 23600)
@@ -0,0 +1,63 @@
+package org.drools.xml.processes;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+
+import org.drools.process.core.Process;
+import org.drools.workflow.core.impl.WorkflowProcessImpl;
+import org.drools.xml.BaseAbstractHandler;
+import org.drools.xml.ExtensibleXmlParser;
+import org.drools.xml.Handler;
+import org.w3c.dom.Element;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+
+public class FunctionImportHandler extends BaseAbstractHandler
+ implements
+ Handler {
+ public FunctionImportHandler() {
+ if ( (this.validParents == null) && (this.validPeers == null) ) {
+ this.validParents = new HashSet();
+ this.validParents.add( Process.class );
+
+ this.validPeers = new HashSet();
+ this.validPeers.add( null );
+
+ this.allowNesting = false;
+ }
+ }
+
+ public Object start(final String uri,
+ final String localName,
+ final Attributes attrs,
+ final ExtensibleXmlParser parser) throws SAXException {
+ parser.startElementBuilder( localName,
+ attrs );
+
+ WorkflowProcessImpl process = ( WorkflowProcessImpl ) parser.getParent();
+
+ final String name = attrs.getValue( "name" );
+ emptyAttributeCheck( localName, "name", name, parser );
+
+ java.util.List<String> list = process.getFunctionImports();
+ if ( list == null ) {
+ list = new ArrayList<String>();
+ process.setFunctionImports( list );
+ }
+ list.add( name );
+
+ return null;
+ }
+
+ public Object end(final String uri,
+ final String localName,
+ final ExtensibleXmlParser parser) throws SAXException {
+ final Element element = parser.endElementBuilder();
+ return null;
+ }
+
+ public Class generateNodeFor() {
+ return null;
+ }
+
+}
Modified: labs/jbossrules/trunk/drools-compiler/src/main/resources/META-INF/drools-processes-4.0.xsd
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/resources/META-INF/drools-processes-4.0.xsd 2008-10-27 23:41:19 UTC (rev 23599)
+++ labs/jbossrules/trunk/drools-compiler/src/main/resources/META-INF/drools-processes-4.0.xsd 2008-10-28 00:27:54 UTC (rev 23600)
@@ -19,6 +19,7 @@
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="drools:imports"/>
+ <xs:element ref="drools:functionImports"/>
<xs:element ref="drools:globals"/>
<xs:element ref="drools:variables"/>
<xs:element ref="drools:swimlanes"/>
@@ -38,6 +39,18 @@
<xs:attribute name="name" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
+ <xs:element name="functionImports">
+ <xs:complexType>
+ <xs:sequence minOccurs="0" maxOccurs="unbounded">
+ <xs:element ref="drools:functionImport"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="functionImport">
+ <xs:complexType>
+ <xs:attribute name="name" type="xs:string" use="required"/>
+ </xs:complexType>
+ </xs:element>
<xs:element name="globals">
<xs:complexType>
<xs:sequence minOccurs="0" maxOccurs="unbounded">
Added: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ProcessMultiThreadTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ProcessMultiThreadTest.java (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ProcessMultiThreadTest.java 2008-10-28 00:27:54 UTC (rev 23600)
@@ -0,0 +1,102 @@
+package org.drools.integrationtests;
+
+import java.io.InputStreamReader;
+import java.util.ArrayList;
+import java.util.List;
+
+import junit.framework.TestCase;
+
+import org.drools.RuleBase;
+import org.drools.RuleBaseFactory;
+import org.drools.StatefulSession;
+import org.drools.compiler.DroolsError;
+import org.drools.compiler.PackageBuilder;
+import org.drools.process.instance.ProcessInstance;
+
+public class ProcessMultiThreadTest extends TestCase {
+
+ public void testMultiThreadProcessInstanceSignalling() {
+ final int THREAD_COUNT = 30;
+ try {
+ boolean success = true;
+ final Thread[] t = new Thread[THREAD_COUNT];
+
+ final PackageBuilder builder = new PackageBuilder();
+ builder.addProcessFromXml(new InputStreamReader( getClass().getResourceAsStream( "test_ProcessMultithreadEvent.rf" ) ) );
+ if (builder.getErrors().getErrors().length > 0) {
+ for (DroolsError error: builder.getErrors().getErrors()) {
+ System.err.println(error);
+ }
+ fail("Could not parse process");
+ }
+ RuleBase ruleBase = RuleBaseFactory.newRuleBase();
+ ruleBase.addPackage( builder.getPackage() );
+ ruleBase = SerializationHelper.serializeObject(ruleBase);
+ StatefulSession session = ruleBase.newStatefulSession();
+ session = SerializationHelper.getSerialisedStatefulSession(session);
+ List<String> list = new ArrayList<String>();
+ session.setGlobal("list", list);
+ ProcessInstance processInstance = session.startProcess("org.drools.integrationtests.multithread");
+ final ProcessInstanceSignalRunner[] r = new ProcessInstanceSignalRunner[THREAD_COUNT];
+ for ( int i = 0; i < t.length; i++ ) {
+ r[i] = new ProcessInstanceSignalRunner(i, processInstance, "event" + (i+1));
+ t[i] = new Thread( r[i], "thread-" + i );
+ t[i].start();
+ }
+ for ( int i = 0; i < t.length; i++ ) {
+ t[i].join();
+ if ( r[i].getStatus() == ProcessInstanceSignalRunner.Status.FAIL ) {
+ success = false;
+ }
+ }
+ if ( !success ) {
+ fail( "Multithread test failed. Look at the stack traces for details. " );
+ }
+ assertEquals(2, list.size());
+ assertFalse(list.get(0).equals(list.get(1)));
+ assertEquals(ProcessInstance.STATE_COMPLETED, processInstance.getState());
+ } catch ( Exception e ) {
+ e.printStackTrace();
+ fail( "Should not raise any exception: " + e.getMessage() );
+ }
+ }
+
+ public static class ProcessInstanceSignalRunner implements Runnable {
+
+ private ProcessInstance processInstance;
+ private String type;
+ private Status status;
+ private int id;
+
+ public ProcessInstanceSignalRunner(int id, ProcessInstance processInstance, String type) {
+ this.id = id;
+ this.processInstance = processInstance;
+ this.type = type;
+ this.status = Status.SUCCESS;
+ }
+
+ public void run() {
+ try {
+ processInstance.signalEvent(type, null);
+ } catch ( Exception e ) {
+ this.status = Status.FAIL;
+ System.out.println( Thread.currentThread().getName() + " failed: " + e.getMessage() );
+ e.printStackTrace();
+ }
+ }
+
+ public static enum Status {
+ SUCCESS, FAIL
+ }
+
+ public int getId() {
+ return id;
+ }
+
+ public Status getStatus() {
+ return status;
+ }
+
+ }
+
+}
Added: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_ProcessMultithreadEvent.rf
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_ProcessMultithreadEvent.rf (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_ProcessMultithreadEvent.rf 2008-10-28 00:27:54 UTC (rev 23600)
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<process xmlns="http://drools.org/drools-4.0/process"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
+ xs:schemaLocation="http://drools.org/drools-4.0/process drools-processes-4.0.xsd"
+ type="RuleFlow" name="flow" id="org.drools.integrationtests.multithread" package-name="org.drools.integrationtests" >
+
+ <header>
+ <globals>
+ <global identifier="list" type="java.util.List" />
+ </globals>
+ <variables>
+ <variable name="var" >
+ <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+ </variable>
+ </variables>
+ </header>
+
+ <nodes>
+ <start id="1" name="Start" />
+ <join id="2" name="Join" type="1" />
+ <end id="3" name="End" />
+ <eventNode id="4" name="Event" >
+ <eventFilters>
+ <eventFilter type="eventType" eventType="event1" />
+ </eventFilters>
+ </eventNode>
+ <actionNode id="5" name="action1" >
+ <action type="expression" dialect="java" >context.setVariable("var", "action1"); try { Thread.sleep(3000); } catch (Throwable t) {} list.add(context.getVariable("var"));</action>
+ </actionNode>
+ <eventNode id="6" name="Event" >
+ <eventFilters>
+ <eventFilter type="eventType" eventType="event2" />
+ </eventFilters>
+ </eventNode>
+ <actionNode id="7" name="action2" >
+ <action type="expression" dialect="java" >context.setVariable("var", "action2"); try { Thread.sleep(3000); } catch (Throwable t) {} list.add(context.getVariable("var"));</action>
+ </actionNode>
+ </nodes>
+
+ <connections>
+ <connection from="1" to="2" />
+ <connection from="2" to="3" />
+ <connection from="4" to="5" />
+ <connection from="5" to="2" />
+ <connection from="6" to="7" />
+ <connection from="7" to="2" />
+ </connections>
+
+</process>
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/datatype/DataType.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/datatype/DataType.java 2008-10-27 23:41:19 UTC (rev 23599)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/datatype/DataType.java 2008-10-28 00:27:54 UTC (rev 23600)
@@ -33,5 +33,10 @@
String writeValue(Object value);
Object readValue(String value);
+
+ /**
+ * Returns the corresponding Java type of this datatype
+ */
+ String getStringType();
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/datatype/impl/type/BooleanDataType.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/datatype/impl/type/BooleanDataType.java 2008-10-27 23:41:19 UTC (rev 23599)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/datatype/impl/type/BooleanDataType.java 2008-10-28 00:27:54 UTC (rev 23600)
@@ -53,4 +53,8 @@
public String writeValue(Object value) {
return (Boolean) value ? "true" : "false";
}
+
+ public String getStringType() {
+ return "Boolean";
+ }
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/datatype/impl/type/FloatDataType.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/datatype/impl/type/FloatDataType.java 2008-10-27 23:41:19 UTC (rev 23599)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/datatype/impl/type/FloatDataType.java 2008-10-28 00:27:54 UTC (rev 23600)
@@ -57,4 +57,8 @@
Float f = (Float) value;
return f == null ? "" : f.toString();
}
+
+ public String getStringType() {
+ return "Float";
+ }
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/datatype/impl/type/IntegerDataType.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/datatype/impl/type/IntegerDataType.java 2008-10-27 23:41:19 UTC (rev 23599)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/datatype/impl/type/IntegerDataType.java 2008-10-28 00:27:54 UTC (rev 23600)
@@ -58,4 +58,8 @@
return i == null ? "" : i.toString();
}
+ public String getStringType() {
+ return "String";
+ }
+
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/datatype/impl/type/ListDataType.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/datatype/impl/type/ListDataType.java 2008-10-27 23:41:19 UTC (rev 23599)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/datatype/impl/type/ListDataType.java 2008-10-28 00:27:54 UTC (rev 23600)
@@ -19,7 +19,6 @@
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
-import java.util.Iterator;
import java.util.List;
import org.drools.process.core.TypeObject;
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/datatype/impl/type/ObjectDataType.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/datatype/impl/type/ObjectDataType.java 2008-10-27 23:41:19 UTC (rev 23599)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/datatype/impl/type/ObjectDataType.java 2008-10-28 00:27:54 UTC (rev 23600)
@@ -83,4 +83,8 @@
XStream xstream = new XStream();
return xstream.toXML(value);
}
+
+ public String getStringType() {
+ return className == null ? "Object" : className;
+ }
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/datatype/impl/type/StringDataType.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/datatype/impl/type/StringDataType.java 2008-10-27 23:41:19 UTC (rev 23599)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/datatype/impl/type/StringDataType.java 2008-10-28 00:27:54 UTC (rev 23600)
@@ -55,4 +55,7 @@
return (String) value;
}
+ public String getStringType() {
+ return "String";
+ }
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/datatype/impl/type/UndefinedDataType.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/datatype/impl/type/UndefinedDataType.java 2008-10-27 23:41:19 UTC (rev 23599)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/datatype/impl/type/UndefinedDataType.java 2008-10-28 00:27:54 UTC (rev 23600)
@@ -60,4 +60,7 @@
throw new IllegalArgumentException("Undefined datatype");
}
+ public String getStringType() {
+ return "Object";
+ }
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/instance/impl/ProcessInstanceImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/instance/impl/ProcessInstanceImpl.java 2008-10-27 23:41:19 UTC (rev 23599)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/instance/impl/ProcessInstanceImpl.java 2008-10-28 00:27:54 UTC (rev 23600)
@@ -38,7 +38,9 @@
*/
public abstract class ProcessInstanceImpl implements ProcessInstance, Serializable {
- private long id;
+ private static final long serialVersionUID = 4L;
+
+ private long id;
private String processId;
private transient Process process;
private int state = STATE_PENDING;
@@ -159,11 +161,13 @@
}
public void start() {
- if ( getState() != ProcessInstanceImpl.STATE_PENDING ) {
- throw new IllegalArgumentException( "A process instance can only be started once" );
- }
- setState( ProcessInstanceImpl.STATE_ACTIVE );
- internalStart();
+ synchronized (this) {
+ if ( getState() != ProcessInstanceImpl.STATE_PENDING ) {
+ throw new IllegalArgumentException( "A process instance can only be started once" );
+ }
+ setState( ProcessInstanceImpl.STATE_ACTIVE );
+ internalStart();
+ }
}
protected abstract void internalStart();
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/WorkflowProcess.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/WorkflowProcess.java 2008-10-27 23:41:19 UTC (rev 23599)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/WorkflowProcess.java 2008-10-28 00:27:54 UTC (rev 23600)
@@ -37,6 +37,14 @@
List<String> getImports();
/**
+ * Returns the function imports of this RuleFlow process.
+ * They are defined as a List of fully qualified class names.
+ *
+ * @return the function imports of this RuleFlow process
+ */
+ List<String> getFunctionImports();
+
+ /**
* Sets the imports of this RuleFlow process
*
* @param imports the imports as a List of fully qualified class names
@@ -44,6 +52,13 @@
void setImports(List<String> imports);
/**
+ * Sets the imports of this RuleFlow process
+ *
+ * @param imports the imports as a List of fully qualified class names
+ */
+ void setFunctionImports(List<String> functionImports);
+
+ /**
* Returns the globals of this RuleFlow process.
* They are defined as a Map with the name as key and the type as value.
*
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/impl/WorkflowProcessImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/impl/WorkflowProcessImpl.java 2008-10-27 23:41:19 UTC (rev 23599)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/impl/WorkflowProcessImpl.java 2008-10-28 00:27:54 UTC (rev 23600)
@@ -37,6 +37,7 @@
private NodeContainer nodeContainer;
private List<String> imports;
+ private List<String> functionImports;
private Map<String, String> globals;
public WorkflowProcessImpl() {
@@ -77,6 +78,14 @@
this.imports = imports;
}
+ public List<String> getFunctionImports() {
+ return functionImports;
+ }
+
+ public void setFunctionImports(List<String> functionImports) {
+ this.functionImports = functionImports;
+ }
+
public Map<String, String> getGlobals() {
return globals;
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/HumanTaskNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/HumanTaskNode.java 2008-10-27 23:41:19 UTC (rev 23599)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/HumanTaskNode.java 2008-10-28 00:27:54 UTC (rev 23600)
@@ -24,6 +24,7 @@
parameterDefinitions.add(new ParameterDefinitionImpl("Priority", new StringDataType()));
parameterDefinitions.add(new ParameterDefinitionImpl("Comment", new StringDataType()));
parameterDefinitions.add(new ParameterDefinitionImpl("Skippable", new StringDataType()));
+ parameterDefinitions.add(new ParameterDefinitionImpl("Content", new StringDataType()));
// TODO: initiator
// TODO: attachments
// TODO: deadlines
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/impl/WorkflowProcessInstanceImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/impl/WorkflowProcessInstanceImpl.java 2008-10-27 23:41:19 UTC (rev 23599)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/impl/WorkflowProcessInstanceImpl.java 2008-10-28 00:27:54 UTC (rev 23600)
@@ -153,26 +153,28 @@
}
public void setState(final int state) {
- super.setState( state );
- // TODO move most of this to ProcessInstanceImpl
- if ( state == ProcessInstance.STATE_COMPLETED
- || state == ProcessInstance.STATE_ABORTED ) {
- InternalWorkingMemory workingMemory = (InternalWorkingMemory) getWorkingMemory();
- ((EventSupport) getWorkingMemory()).getRuleFlowEventSupport()
- .fireBeforeRuleFlowProcessCompleted( this, workingMemory );
- // deactivate all node instances of this process instance
- while ( !nodeInstances.isEmpty() ) {
- NodeInstance nodeInstance = (NodeInstance) nodeInstances.get( 0 );
- nodeInstance.cancel();
- }
- removeEventListeners();
- workingMemory.removeProcessInstance( this );
- ((EventSupport) workingMemory).getRuleFlowEventSupport()
- .fireAfterRuleFlowProcessCompleted( this, workingMemory );
-
- String type = "processInstanceCompleted:" + getId();
- workingMemory.getSignalManager().signalEvent(type, this);
- }
+ synchronized (this) {
+ super.setState( state );
+ // TODO move most of this to ProcessInstanceImpl
+ if ( state == ProcessInstance.STATE_COMPLETED
+ || state == ProcessInstance.STATE_ABORTED ) {
+ InternalWorkingMemory workingMemory = (InternalWorkingMemory) getWorkingMemory();
+ ((EventSupport) getWorkingMemory()).getRuleFlowEventSupport()
+ .fireBeforeRuleFlowProcessCompleted( this, workingMemory );
+ // deactivate all node instances of this process instance
+ while ( !nodeInstances.isEmpty() ) {
+ NodeInstance nodeInstance = (NodeInstance) nodeInstances.get( 0 );
+ nodeInstance.cancel();
+ }
+ removeEventListeners();
+ workingMemory.removeProcessInstance( this );
+ ((EventSupport) workingMemory).getRuleFlowEventSupport()
+ .fireAfterRuleFlowProcessCompleted( this, workingMemory );
+
+ String type = "processInstanceCompleted:" + getId();
+ workingMemory.getSignalManager().signalEvent(type, this);
+ }
+ }
}
public void disconnect() {
@@ -207,9 +209,11 @@
}
public void start() {
- registerExternalEventNodeListeners();
- super.start();
- }
+ synchronized (this) {
+ registerExternalEventNodeListeners();
+ super.start();
+ }
+ }
private void registerExternalEventNodeListeners() {
for (Node node: getWorkflowProcess().getNodes()) {
@@ -228,31 +232,33 @@
}
public void signalEvent(String type, Object event) {
- List<EventListener> listeners = eventListeners.get(type);
- if (listeners != null) {
- for (EventListener listener: listeners) {
- listener.signalEvent(type, event);
- }
- }
- listeners = externalEventListeners.get(type);
- if (listeners != null) {
- for (EventListener listener: listeners) {
- listener.signalEvent(type, event);
- }
- }
- for (Node node: getWorkflowProcess().getNodes()) {
- if (node instanceof EventNodeInterface) {
- if (((EventNodeInterface) node).acceptsEvent(type, event)) {
- if (node instanceof EventNode) {
- EventNodeInstance eventNodeInstance = (EventNodeInstance) getNodeInstance(node);
- eventNodeInstance.signalEvent(type, event);
- } else {
- List<NodeInstance> nodeInstances = getNodeInstances(node.getId());
- if (nodeInstances != null && !nodeInstances.isEmpty()) {
- for (NodeInstance nodeInstance: nodeInstances) {
- ((EventNodeInstanceInterface) nodeInstance).signalEvent(type, event);
- }
- }
+ synchronized (this) {
+ List<EventListener> listeners = eventListeners.get(type);
+ if (listeners != null) {
+ for (EventListener listener: listeners) {
+ listener.signalEvent(type, event);
+ }
+ }
+ listeners = externalEventListeners.get(type);
+ if (listeners != null) {
+ for (EventListener listener: listeners) {
+ listener.signalEvent(type, event);
+ }
+ }
+ for (Node node: getWorkflowProcess().getNodes()) {
+ if (node instanceof EventNodeInterface) {
+ if (((EventNodeInterface) node).acceptsEvent(type, event)) {
+ if (node instanceof EventNode) {
+ EventNodeInstance eventNodeInstance = (EventNodeInstance) getNodeInstance(node);
+ eventNodeInstance.signalEvent(type, event);
+ } else {
+ List<NodeInstance> nodeInstances = getNodeInstances(node.getId());
+ if (nodeInstances != null && !nodeInstances.isEmpty()) {
+ for (NodeInstance nodeInstance: nodeInstances) {
+ ((EventNodeInstanceInterface) nodeInstance).signalEvent(type, event);
+ }
+ }
+ }
}
}
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/MilestoneNodeInstance.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/MilestoneNodeInstance.java 2008-10-27 23:41:19 UTC (rev 23599)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/MilestoneNodeInstance.java 2008-10-28 00:27:54 UTC (rev 23600)
@@ -87,8 +87,10 @@
String ruleName = event.getActivation().getRule().getName();
String milestoneName = "RuleFlow-Milestone-" + getProcessInstance().getProcess().getId() + "-" + getNodeId();
if (milestoneName.equals(ruleName)) {
- removeEventListeners();
- triggerCompleted();
+ synchronized(getProcessInstance()) {
+ removeEventListeners();
+ triggerCompleted();
+ }
}
}
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/RuleSetNodeInstance.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/RuleSetNodeInstance.java 2008-10-27 23:41:19 UTC (rev 23599)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/RuleSetNodeInstance.java 2008-10-28 00:27:54 UTC (rev 23600)
@@ -68,8 +68,10 @@
}
public void ruleFlowGroupDeactivated() {
- removeEventListeners();
- triggerCompleted();
+ synchronized (getProcessInstance()) {
+ removeEventListeners();
+ triggerCompleted();
+ }
}
}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/DroolsEclipsePlugin.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/DroolsEclipsePlugin.java 2008-10-27 23:41:19 UTC (rev 23599)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/DroolsEclipsePlugin.java 2008-10-28 00:27:54 UTC (rev 23600)
@@ -247,6 +247,8 @@
true );
store.setDefault( IDroolsConstants.SKIN,
"default" );
+ store.setDefault( IDroolsConstants.ALLOW_NODE_CUSTOMIZATION,
+ false );
}
public DRLInfo parseResource(IResource resource,
Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/DRLRuleEditor.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/DRLRuleEditor.java 2008-10-27 23:41:19 UTC (rev 23599)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/DRLRuleEditor.java 2008-10-28 00:27:54 UTC (rev 23600)
@@ -38,39 +38,39 @@
*/
public class DRLRuleEditor extends AbstractRuleEditor {
- protected List imports;
- protected List functions;
- protected Map templates;
+ protected List<String> imports;
+ protected List<String> functions;
+ protected Map<String, FactTemplateDescr> templates;
protected List<GlobalDescr> globals;
protected String packageName;
- protected List classesInPackage;
- protected Map attributes;
+ protected List<String> classesInPackage;
+ protected Map<String, String> attributes;
public DRLRuleEditor() {
}
- public List getImports() {
+ public List<String> getImports() {
if (imports == null || isDirty()) {
loadImportsAndFunctions();
}
return imports;
}
- public List getFunctions() {
+ public List<String> getFunctions() {
if (functions == null) {
loadImportsAndFunctions();
}
return functions;
}
- public Set getTemplates() {
+ public Set<String> getTemplates() {
if (templates == null) {
loadImportsAndFunctions();
}
return templates.keySet();
}
- public Map getAttributes() {
+ public Map<String, String> getAttributes() {
if ( attributes == null ) {
loadImportsAndFunctions();
}
@@ -81,7 +81,7 @@
if (templates == null) {
loadImportsAndFunctions();
}
- return (FactTemplateDescr) templates.get(name);
+ return templates.get(name);
}
public List<GlobalDescr> getGlobals() {
@@ -98,15 +98,15 @@
return packageName;
}
- public List getClassesInPackage() {
+ public List<String> getClassesInPackage() {
if (classesInPackage == null) {
classesInPackage = getAllClassesInPackage(getPackage());
}
return classesInPackage;
}
- protected List getAllClassesInPackage(String packageName) {
- List list = new ArrayList();
+ protected List<String> getAllClassesInPackage(String packageName) {
+ List<String> list = new ArrayList<String>();
if (packageName != null) {
IEditorInput input = getEditorInput();
if (input instanceof IFileEditorInput) {
@@ -118,8 +118,8 @@
return list;
}
- public static List getAllClassesInPackage(String packageName, IJavaProject javaProject) {
- final List list = new ArrayList();
+ public static List<String> getAllClassesInPackage(String packageName, IJavaProject javaProject) {
+ final List<String> list = new ArrayList<String>();
CompletionRequestor requestor = new CompletionRequestor() {
public void accept(org.eclipse.jdt.core.CompletionProposal proposal) {
String className = new String(proposal.getCompletion());
@@ -138,8 +138,8 @@
return list;
}
- protected List getAllStaticMethodsInClass(String className) {
- final List list = new ArrayList();
+ protected List<String> getAllStaticMethodsInClass(String className) {
+ final List<String> list = new ArrayList<String>();
if (className != null) {
IEditorInput input = getEditorInput();
if (input instanceof IFileEditorInput) {
@@ -173,14 +173,14 @@
// package
this.packageName = drlInfo.getPackageName();
// imports
- List allImports = descr.getImports();
- this.imports = new ArrayList();
+ List<ImportDescr> allImports = descr.getImports();
+ this.imports = new ArrayList<String>();
if (packageName != null) {
imports.addAll(getAllClassesInPackage(packageName));
}
- Iterator iterator = allImports.iterator();
+ Iterator<ImportDescr> iterator = allImports.iterator();
while (iterator.hasNext()) {
- String importName = ((ImportDescr) iterator.next()).getTarget();
+ String importName = iterator.next().getTarget();
if (importName.endsWith(".*")) {
String packageName = importName.substring(0, importName.length() - 2);
imports.addAll(getAllClassesInPackage(packageName));
@@ -189,16 +189,16 @@
}
}
// functions
- List functionDescrs = descr.getFunctions();
- List functionImports = descr.getFunctionImports();
- functions = new ArrayList(functionDescrs.size());
- iterator = functionDescrs.iterator();
- while (iterator.hasNext()) {
- functions.add(((FunctionDescr) iterator.next()).getName());
+ List<FunctionDescr> functionDescrs = descr.getFunctions();
+ List<FunctionImportDescr> functionImports = descr.getFunctionImports();
+ functions = new ArrayList<String>(functionDescrs.size());
+ Iterator<FunctionDescr> iterator2 = functionDescrs.iterator();
+ while (iterator2.hasNext()) {
+ functions.add(iterator2.next().getName());
}
- iterator = functionImports.iterator();
- while (iterator.hasNext()) {
- String functionImport = ((FunctionImportDescr) iterator.next()).getTarget();
+ Iterator<FunctionImportDescr> iterator3 = functionImports.iterator();
+ while (iterator3.hasNext()) {
+ String functionImport = iterator3.next().getTarget();
if (functionImport.endsWith(".*")) {
String className = functionImport.substring(0, functionImport.length() - 2);
functions.addAll(getAllStaticMethodsInClass(className));
@@ -210,26 +210,25 @@
}
}
// templates
- List templateDescrs = descr.getFactTemplates();
- templates = new HashMap(templateDescrs.size());
- iterator = templateDescrs.iterator();
- while (iterator.hasNext()) {
- FactTemplateDescr template = (FactTemplateDescr) iterator.next();
+ List<FactTemplateDescr> templateDescrs = descr.getFactTemplates();
+ templates = new HashMap<String, FactTemplateDescr>(templateDescrs.size());
+ Iterator<FactTemplateDescr> iterator4 = templateDescrs.iterator();
+ while (iterator4.hasNext()) {
+ FactTemplateDescr template = iterator4.next();
templates.put(template.getName(), template);
}
// globals
- List globalDescrs = descr.getGlobals();
+ List<GlobalDescr> globalDescrs = descr.getGlobals();
globals = new ArrayList<GlobalDescr>();
- iterator = globalDescrs.iterator();
- while (iterator.hasNext()) {
- GlobalDescr global = (GlobalDescr) iterator.next();
- globals.add(global);
+ Iterator<GlobalDescr> iterator5 = globalDescrs.iterator();
+ while (iterator5.hasNext()) {
+ globals.add(iterator5.next());
}
//attributes
- this.attributes = new HashMap();
- for (Iterator attrIter = descr.getAttributes().iterator(); attrIter.hasNext();) {
- AttributeDescr attribute = (AttributeDescr) attrIter.next();
+ this.attributes = new HashMap<String, String>();
+ for (Iterator<AttributeDescr> attrIter = descr.getAttributes().iterator(); attrIter.hasNext();) {
+ AttributeDescr attribute = attrIter.next();
if (attribute != null && attribute.getName() != null) {
attributes.put(attribute.getName(), attribute.getValue());
}
Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/CompletionContext.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/CompletionContext.java 2008-10-27 23:41:19 UTC (rev 23599)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/CompletionContext.java 2008-10-28 00:27:54 UTC (rev 23600)
@@ -300,10 +300,16 @@
case Location.LOCATION_RHS:
String rhs = "";
i = locationIndex + 1;
+ int endLocationOfLast = Integer.MAX_VALUE - 1;
while (i < parserList.size()) {
Object o = parserList.get(i++);
if (o instanceof DroolsToken) {
- rhs += ((DroolsToken) o).getText();
+ DroolsToken token = (DroolsToken) o;
+ if (endLocationOfLast + 1 < token.getStartIndex()) {
+ rhs += " ";
+ }
+ rhs += token.getText();
+ endLocationOfLast = token.getStopIndex();
}
}
location.setProperty(Location.LOCATION_RHS_CONTENT, rhs);
Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/DefaultCompletionProcessor.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/DefaultCompletionProcessor.java 2008-10-27 23:41:19 UTC (rev 23599)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/DefaultCompletionProcessor.java 2008-10-28 00:27:54 UTC (rev 23600)
@@ -105,7 +105,8 @@
functionText,
prefix,
params,
- false );
+ false,
+ false);
filterProposalsOnPrefix( prefix,
props );
} else {
@@ -193,11 +194,11 @@
return result;
}
- protected List getPossibleProposals(ITextViewer viewer,
+ protected List<RuleCompletionProposal> getPossibleProposals(ITextViewer viewer,
int documentOffset,
String backText,
final String prefix) {
- List list = new ArrayList();
+ List<RuleCompletionProposal> list = new ArrayList<RuleCompletionProposal>();
list.add( new RuleCompletionProposal( documentOffset - prefix.length(),
prefix.length(),
"rule",
@@ -246,25 +247,27 @@
return list;
}
- protected List getJavaCompletionProposals(final int documentOffset,
+ protected List<RuleCompletionProposal> getJavaCompletionProposals(final int documentOffset,
final String javaText,
final String prefix,
Map params) {
- return getJavaCompletionProposals(documentOffset, javaText, prefix, params, true);
+ return getJavaCompletionProposals(documentOffset, javaText, prefix, params, true, false);
}
- protected List getJavaCompletionProposals(final int documentOffset,
+ protected List<RuleCompletionProposal> getJavaCompletionProposals(final int documentOffset,
final String javaText,
final String prefix,
Map params,
- boolean useDrools) {
- final List list = new ArrayList();
+ boolean useDrools,
+ boolean useContext) {
+ final List<RuleCompletionProposal> list = new ArrayList<RuleCompletionProposal>();
requestJavaCompletionProposals( javaText,
prefix,
documentOffset,
params,
list,
- useDrools );
+ useDrools,
+ useContext);
return list;
}
@@ -297,7 +300,7 @@
final int documentOffset,
Map params,
Collection results) {
- requestJavaCompletionProposals(javaText, prefix, documentOffset, params, results, true);
+ requestJavaCompletionProposals(javaText, prefix, documentOffset, params, results, true, false);
}
protected void requestJavaCompletionProposals(final String javaText,
@@ -305,7 +308,8 @@
final int documentOffset,
Map params,
Collection results,
- boolean useDrools) {
+ boolean useDrools,
+ boolean useContext) {
String javaTextWithoutPrefix = CompletionUtil.getTextWithoutPrefix( javaText,
@@ -340,6 +344,9 @@
if (useDrools) {
javaTextWithParams.append( "org.drools.spi.KnowledgeHelper drools;" );
}
+ if (useContext) {
+ javaTextWithParams.append( "org.drools.spi.ProcessContext context;" );
+ }
javaTextWithParams.append( javaText );
String jtext = javaTextWithParams.toString();
String fixedText = new KnowledgeHelperFixer().fix( jtext );
@@ -378,7 +385,7 @@
return "";
}
- protected List getImports() {
+ protected List<String> getImports() {
if ( getEditor() instanceof DRLRuleEditor ) {
return ((DRLRuleEditor) getEditor()).getImports();
}
@@ -426,7 +433,7 @@
return Collections.EMPTY_LIST;
}
- protected List getClassesInPackage() {
+ protected List<String> getClassesInPackage() {
if ( getEditor() instanceof DRLRuleEditor ) {
return ((DRLRuleEditor) getEditor()).getClassesInPackage();
}
Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/RuleCompletionProcessor.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/RuleCompletionProcessor.java 2008-10-27 23:41:19 UTC (rev 23599)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/RuleCompletionProcessor.java 2008-10-28 00:27:54 UTC (rev 23600)
@@ -20,16 +20,9 @@
import org.drools.eclipse.editors.AbstractRuleEditor;
import org.drools.eclipse.util.ProjectClassLoader;
import org.drools.lang.Location;
-import org.drools.lang.descr.AndDescr;
-import org.drools.lang.descr.BaseDescr;
-import org.drools.lang.descr.ExistsDescr;
import org.drools.lang.descr.FactTemplateDescr;
-import org.drools.lang.descr.FieldBindingDescr;
import org.drools.lang.descr.FieldTemplateDescr;
import org.drools.lang.descr.GlobalDescr;
-import org.drools.lang.descr.NotDescr;
-import org.drools.lang.descr.OrDescr;
-import org.drools.lang.descr.PatternDescr;
import org.drools.rule.builder.dialect.mvel.MVELConsequenceBuilder;
import org.drools.rule.builder.dialect.mvel.MVELDialect;
import org.drools.spi.KnowledgeHelper;
@@ -139,7 +132,8 @@
}
boolean startOfDialectExpression = CompletionUtil.isStartOfDialectExpression( consequenceWithoutPrefix );
- if ( isJavaDialect() && startOfDialectExpression ) {
+ if ( //isJavaDialect() &&
+ startOfDialectExpression ) {
addRHSKeywordCompletionProposals( list,
documentOffset,
prefix );
@@ -196,7 +190,7 @@
return false;
}
- protected void addLHSCompletionProposals(List list,
+ protected void addLHSCompletionProposals(List<RuleCompletionProposal> list,
int documentOffset,
Location location,
String prefix,
@@ -261,9 +255,9 @@
case Location.LOCATION_LHS_FROM_COLLECT :
case Location.LOCATION_LHS_BEGIN_OF_CONDITION_EXISTS :
// and add imported classes
- Iterator iterator = getImports().iterator();
+ Iterator<String> iterator = getImports().iterator();
while ( iterator.hasNext() ) {
- String name = (String) iterator.next();
+ String name = iterator.next();
int index = name.lastIndexOf( "." );
if ( index != -1 ) {
String className = name.substring( index + 1 );
@@ -279,7 +273,7 @@
}
iterator = getClassesInPackage().iterator();
while ( iterator.hasNext() ) {
- String name = (String) iterator.next();
+ String name = iterator.next();
int index = name.lastIndexOf( "." );
if ( index != -1 ) {
String className = name.substring( index + 1 );
@@ -569,10 +563,9 @@
}
}
// add globals with possibly matching type
- List globals = getGlobals();
+ List<GlobalDescr> globals = getGlobals();
if ( globals != null ) {
- for ( iterator = globals.iterator(); iterator.hasNext(); ) {
- GlobalDescr global = (GlobalDescr) iterator.next();
+ for ( GlobalDescr global: globals ) {
if ( isSubtypeOf( global.getType(),
type ) ) {
RuleCompletionProposal proposal = new RuleCompletionProposal( documentOffset - prefix.length(),
Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/core/DefaultElementWrapper.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/core/DefaultElementWrapper.java 2008-10-27 23:41:19 UTC (rev 23599)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/core/DefaultElementWrapper.java 2008-10-28 00:27:54 UTC (rev 23600)
@@ -22,8 +22,13 @@
import java.util.Collections;
import java.util.List;
+import org.drools.eclipse.DroolsEclipsePlugin;
+import org.drools.eclipse.flow.ruleflow.view.property.color.ColorPropertyDescriptor;
+import org.drools.eclipse.preferences.IDroolsConstants;
import org.eclipse.draw2d.geometry.Rectangle;
import org.eclipse.jface.viewers.CellEditor;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.views.properties.IPropertyDescriptor;
import org.eclipse.ui.views.properties.IPropertySource;
@@ -36,19 +41,35 @@
*/
public abstract class DefaultElementWrapper implements ElementWrapper, IPropertySource, Serializable {
- protected static IPropertyDescriptor[] descriptors;
+ private static boolean allowNodeCustomization =
+ DroolsEclipsePlugin.getDefault().getPreferenceStore().getBoolean(IDroolsConstants.ALLOW_NODE_CUSTOMIZATION);
+ protected static IPropertyDescriptor[] descriptors;
+
public static final String NAME = "Name";
public static final String ID = "Id";
+ public static final String COLOR = "Color";
static {
- descriptors = new IPropertyDescriptor[] {
- new TextPropertyDescriptor(NAME, "Name"),
- new TextPropertyDescriptor(ID, "Id") {
- public CellEditor createPropertyEditor(Composite parent) {
- return null;
- }
- },
- };
+ if (allowNodeCustomization) {
+ descriptors = new IPropertyDescriptor[] {
+ new TextPropertyDescriptor(NAME, "Name"),
+ new TextPropertyDescriptor(ID, "Id") {
+ public CellEditor createPropertyEditor(Composite parent) {
+ return null;
+ }
+ },
+ new ColorPropertyDescriptor(COLOR, "Color"),
+ };
+ } else {
+ descriptors = new IPropertyDescriptor[] {
+ new TextPropertyDescriptor(NAME, "Name"),
+ new TextPropertyDescriptor(ID, "Id") {
+ public CellEditor createPropertyEditor(Composite parent) {
+ return null;
+ }
+ },
+ };
+ }
}
private Object element;
@@ -57,6 +78,7 @@
private List<ElementConnection> incomingConnections = new ArrayList<ElementConnection>();
private List<ElementConnection> outgoingConnections = new ArrayList<ElementConnection>();
private transient List<ModelListener> listeners = new ArrayList<ModelListener>();
+ protected Color color;
protected void setElement(Object element) {
this.element = element;
@@ -150,7 +172,27 @@
protected void internalSetName(String name) {
}
+
+ public Color getColor() {
+ if (color == null) {
+ color = internalGetColor();
+ }
+ return color;
+ }
+
+ protected Color internalGetColor() {
+ return null;
+ }
+
+ public void setColor(Color color) {
+ this.color = color;
+ internalSetColor(color == null ? null : RGBToInteger(color.getRGB()));
+ notifyListeners(CHANGE_NAME);
+ }
+ protected void internalSetColor(Integer color) {
+ }
+
public void addListener(ModelListener listener) {
listeners.add(listener);
}
@@ -191,6 +233,9 @@
if (ID.equals(id)) {
return getId();
}
+ if (COLOR.equals(id)) {
+ return getColor();
+ }
return null;
}
@@ -198,11 +243,29 @@
if (NAME.equals(id)) {
setName("");
}
+ if (COLOR.equals(id)) {
+ setColor(null);
+ }
}
public void setPropertyValue(Object id, Object value) {
if (NAME.equals(id)) {
setName((String) value);
}
+ if (COLOR.equals(id)) {
+ setColor((Color) value);
+ }
}
+
+ public static Integer RGBToInteger(RGB rgb) {
+ return new Integer((rgb.blue << 16) | (rgb.green << 8) | rgb.red);
+ }
+
+ public static RGB integerToRGB(Integer color) {
+ int n = color.intValue();
+ return new RGB(
+ (n & 0x000000FF),
+ (n & 0x0000FF00) >> 8,
+ (n & 0x00FF0000) >> 16);
+ }
}
Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/editpart/figure/AbstractElementFigure.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/editpart/figure/AbstractElementFigure.java 2008-10-27 23:41:19 UTC (rev 23599)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/editpart/figure/AbstractElementFigure.java 2008-10-28 00:27:54 UTC (rev 23600)
@@ -18,6 +18,7 @@
import org.eclipse.draw2d.Label;
import org.eclipse.draw2d.Panel;
import org.eclipse.draw2d.geometry.Rectangle;
+import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Image;
/**
@@ -66,4 +67,8 @@
public void setFocus(boolean b) {
repaint();
}
+
+ public void setColor(Color newColor) {
+ }
+
}
Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/editpart/figure/ElementContainerFigure.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/editpart/figure/ElementContainerFigure.java 2008-10-27 23:41:19 UTC (rev 23599)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/editpart/figure/ElementContainerFigure.java 2008-10-28 00:27:54 UTC (rev 23600)
@@ -11,6 +11,7 @@
import org.eclipse.draw2d.LineBorder;
import org.eclipse.draw2d.ScrollPane;
import org.eclipse.draw2d.StackLayout;
+import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Image;
public class ElementContainerFigure extends Figure implements ElementFigure {
@@ -62,4 +63,7 @@
return pane;
}
+ public void setColor(Color newColor) {
+ }
+
}
Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/editpart/figure/ElementFigure.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/editpart/figure/ElementFigure.java 2008-10-27 23:41:19 UTC (rev 23599)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/editpart/figure/ElementFigure.java 2008-10-28 00:27:54 UTC (rev 23600)
@@ -17,6 +17,7 @@
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.Label;
+import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Image;
/**
@@ -35,5 +36,7 @@
boolean isSelected();
Label getLabel();
+
+ void setColor(Color color);
}
Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/AbstractNodeWrapper.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/AbstractNodeWrapper.java 2008-10-27 23:41:19 UTC (rev 23599)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/AbstractNodeWrapper.java 2008-10-28 00:27:54 UTC (rev 23600)
@@ -20,6 +20,8 @@
import org.drools.eclipse.flow.common.editor.core.ElementWrapper;
import org.drools.workflow.core.Node;
import org.eclipse.draw2d.geometry.Rectangle;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.widgets.Display;
/**
* Wrapper for a node.
@@ -52,6 +54,18 @@
notifyListeners(CHANGE_NAME);
}
+ public Color internalGetColor() {
+ Integer rgb = (Integer) getNode().getMetaData("color");
+ if (rgb != null) {
+ return new Color(Display.getCurrent(), integerToRGB(rgb));
+ }
+ return null;
+ }
+
+ protected void internalSetColor(Integer color) {
+ getNode().setMetaData("color", color);
+ }
+
protected void internalSetConstraint(Rectangle constraint) {
Node node = getNode();
node.setMetaData("x", constraint.x);
Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/HumanTaskNodeWrapper.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/HumanTaskNodeWrapper.java 2008-10-27 23:41:19 UTC (rev 23599)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/HumanTaskNodeWrapper.java 2008-10-28 00:27:54 UTC (rev 23600)
@@ -50,6 +50,7 @@
parameterDefinitions.add(new ParameterDefinitionImpl("Priority", new StringDataType()));
parameterDefinitions.add(new ParameterDefinitionImpl("Comment", new StringDataType()));
parameterDefinitions.add(new ParameterDefinitionImpl("Skippable", new StringDataType()));
+ parameterDefinitions.add(new ParameterDefinitionImpl("Content", new StringDataType()));
((WorkDefinitionExtensionImpl) WORK_DEFINITION).setParameters(parameterDefinitions);
((WorkDefinitionExtensionImpl) WORK_DEFINITION).setIcon("icons/human_task.gif");
}
Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/ActionEditPart.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/ActionEditPart.java 2008-10-27 23:41:19 UTC (rev 23599)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/ActionEditPart.java 2008-10-28 00:27:54 UTC (rev 23600)
@@ -18,6 +18,7 @@
import org.drools.eclipse.DroolsEclipsePlugin;
import org.drools.eclipse.flow.common.editor.editpart.ElementEditPart;
import org.drools.eclipse.flow.common.editor.editpart.figure.AbstractElementFigure;
+import org.drools.eclipse.flow.ruleflow.core.AbstractNodeWrapper;
import org.drools.eclipse.flow.ruleflow.skin.SkinManager;
import org.drools.eclipse.flow.ruleflow.skin.SkinProvider;
import org.drools.eclipse.preferences.IDroolsConstants;
@@ -47,6 +48,12 @@
return skinProvider.createActionNodeFigure();
}
+ public void refreshVisuals() {
+ super.refreshVisuals();
+ ((AbstractElementFigure) getFigure()).setColor(
+ ((AbstractNodeWrapper) getElementWrapper()).getColor());
+ }
+
public static class ActionNodeFigure extends AbstractElementFigure {
private static final Image ICON = ImageDescriptor.createFromURL(
@@ -74,6 +81,10 @@
rectangle.setLineWidth(b ? 3 : 1);
repaint();
}
+
+ public void setColor(Color newColor) {
+ rectangle.setBackgroundColor(newColor == null ? color : newColor );
+ }
}
}
Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/action/ActionCompletionProcessor.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/action/ActionCompletionProcessor.java 2008-10-27 23:41:19 UTC (rev 23599)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/action/ActionCompletionProcessor.java 2008-10-28 00:27:54 UTC (rev 23600)
@@ -17,7 +17,6 @@
*/
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
@@ -49,9 +48,10 @@
public class ActionCompletionProcessor extends RuleCompletionProcessor {
private WorkflowProcess process;
- private List imports;
+ private List<String> imports;
+ private List<String> functions;
private List<GlobalDescr> globals;
- private Map attributes;
+ private Map<String, String> attributes;
private String dialect;
public ActionCompletionProcessor(WorkflowProcess process) {
@@ -83,10 +83,10 @@
String prefix = doc.get(startPart, documentOffset - startPart);
return "rule dummy "
+ (dialect == null ? "" : " dialect \"" + dialect + "\" ")
- + "\n when \n then \n org.drools.workflow.instance.NodeInstance nodeInstance; \n " + prefix;
+ + "\n when \n then \n org.drools.spi.ProcessContext context = null; \n " + prefix;
}
- public List getImports() {
+ public List<String> getImports() {
if (imports == null) {
loadImports();
}
@@ -94,12 +94,12 @@
}
private void loadImports() {
- this.imports = new ArrayList();
- List imports = process.getImports();
+ this.imports = new ArrayList<String>();
+ List<String> imports = process.getImports();
if (imports != null) {
- Iterator iterator = imports.iterator();
+ Iterator<String> iterator = imports.iterator();
while (iterator.hasNext()) {
- String importName = (String) iterator.next();
+ String importName = iterator.next();
if (importName.endsWith(".*")) {
IJavaProject javaProject = getJavaProject();
if (javaProject != null) {
@@ -128,17 +128,37 @@
}
}
+ protected List<String> getFunctions() {
+ if (functions == null) {
+ loadFunctions();
+ }
+ return functions;
+ }
+
+ private void loadFunctions() {
+ this.functions = new ArrayList<String>();
+ List<String> imports = process.getFunctionImports();
+ if (imports != null) {
+ for (String functionImport: imports) {
+ int index = functionImport.lastIndexOf('.');
+ if (index != -1) {
+ functions.add(functionImport.substring(index + 1));
+ }
+ }
+ }
+ }
+
private void loadAttributes() {
if (this.dialect == null) {
attributes = Collections.EMPTY_MAP;
} else {
- Map result = new HashMap();
+ Map<String, String> result = new HashMap<String, String>();
result.put("dialect", dialect);
attributes = result;
}
}
- protected Map getAttributes() {
+ protected Map<String, String> getAttributes() {
if (attributes == null) {
loadAttributes();
}
Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/action/ActionDialog.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/action/ActionDialog.java 2008-10-27 23:41:19 UTC (rev 23599)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/action/ActionDialog.java 2008-10-28 00:27:54 UTC (rev 23600)
@@ -224,6 +224,8 @@
if (code != CANCEL) {
List imports = dialog.getImports();
process.setImports(imports);
+ List functionImports = dialog.getFunctionImports();
+ process.setFunctionImports(functionImports);
completionProcessor.reset();
}
}
Added: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/color/ColorCellEditor.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/color/ColorCellEditor.java (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/color/ColorCellEditor.java 2008-10-28 00:27:54 UTC (rev 23600)
@@ -0,0 +1,27 @@
+package org.drools.eclipse.flow.ruleflow.view.property.color;
+
+import org.eclipse.jface.viewers.DialogCellEditor;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.RGB;
+import org.eclipse.swt.widgets.ColorDialog;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+
+public class ColorCellEditor extends DialogCellEditor {
+
+ public ColorCellEditor(Composite parent) {
+ super(parent);
+ }
+
+ protected Object openDialogBox(Control cellEditorWindow) {
+ ColorDialog dialog = new ColorDialog(Display.getCurrent().getActiveShell());
+ Color color = (Color) getValue();
+ if (color != null) {
+ dialog.setRGB(color.getRGB());
+ }
+ RGB result = (RGB) dialog.open();
+ return result == null ? null : new Color(Display.getCurrent(), result);
+ }
+
+}
Added: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/color/ColorPropertyDescriptor.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/color/ColorPropertyDescriptor.java (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/color/ColorPropertyDescriptor.java 2008-10-28 00:27:54 UTC (rev 23600)
@@ -0,0 +1,26 @@
+package org.drools.eclipse.flow.ruleflow.view.property.color;
+
+import java.lang.reflect.InvocationTargetException;
+
+import org.drools.eclipse.flow.ruleflow.view.property.action.ActionCellEditor;
+import org.drools.workflow.core.WorkflowProcess;
+import org.drools.workflow.core.node.ActionNode;
+import org.eclipse.jface.viewers.CellEditor;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.views.properties.PropertyDescriptor;
+
+public class ColorPropertyDescriptor extends PropertyDescriptor {
+
+ public ColorPropertyDescriptor(Object id, String displayName) {
+ super(id, displayName);
+ }
+
+ public CellEditor createPropertyEditor(Composite parent) {
+ ColorCellEditor editor = new ColorCellEditor(parent);
+ if (getValidator() != null) {
+ editor.setValidator(getValidator());
+ }
+ return editor;
+ }
+
+}
Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/constraint/ConstraintCompletionProcessor.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/constraint/ConstraintCompletionProcessor.java 2008-10-27 23:41:19 UTC (rev 23599)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/constraint/ConstraintCompletionProcessor.java 2008-10-28 00:27:54 UTC (rev 23600)
@@ -17,13 +17,16 @@
*/
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import org.drools.eclipse.editors.DRLRuleEditor;
import org.drools.eclipse.editors.completion.RuleCompletionProcessor;
import org.drools.lang.descr.GlobalDescr;
+import org.drools.process.core.context.variable.Variable;
+import org.drools.process.core.context.variable.VariableScope;
+import org.drools.process.core.datatype.DataType;
+import org.drools.process.core.datatype.impl.type.ObjectDataType;
import org.drools.workflow.core.WorkflowProcess;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.CoreException;
@@ -48,6 +51,7 @@
private WorkflowProcess process;
private List<String> imports;
private List<GlobalDescr> globals;
+ private String type;
public ConstraintCompletionProcessor(WorkflowProcess process) {
super(null);
@@ -67,11 +71,30 @@
}
return null;
}
+
+ public void setType(String type) {
+ this.type = type;
+ }
protected String readBackwards(int documentOffset, IDocument doc) throws BadLocationException {
- int startPart = doc.getPartition(documentOffset).getOffset();
+ int startPart = doc.getPartition(documentOffset).getOffset();
String prefix = doc.get(startPart, documentOffset - startPart);
- return "rule dummy \n when \n" + prefix;
+ if ("code".equals(type)) {
+ if (prefix.startsWith("return ")) {
+ prefix = prefix.substring(7);
+ }
+ String result = "rule dummy when eval( ";
+ VariableScope variableScope = (VariableScope) process.getDefaultContext(VariableScope.VARIABLE_SCOPE);
+ if (variableScope != null) {
+ for (Variable variable: variableScope.getVariables()) {
+ DataType type = variable.getType();
+ result += type.getStringType() + " " + variable.getName() + "; ";
+ }
+ }
+ return result + prefix;
+ } else {
+ return "rule dummy \n when \n" + prefix;
+ }
}
public List getImports() {
Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/constraint/RuleFlowConstraintDialog.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/constraint/RuleFlowConstraintDialog.java 2008-10-27 23:41:19 UTC (rev 23599)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/constraint/RuleFlowConstraintDialog.java 2008-10-28 00:27:54 UTC (rev 23600)
@@ -208,9 +208,18 @@
l3.setText("Type:");
typeCombo = new Combo(top, SWT.DROP_DOWN | SWT.READ_ONLY);
typeCombo.setItems(TYPES);
- typeCombo.select(0);
gd = new GridData();
typeCombo.setLayoutData(gd);
+ typeCombo.addSelectionListener(new SelectionListener() {
+ public void widgetDefaultSelected(SelectionEvent e) {
+ }
+ public void widgetSelected(SelectionEvent e) {
+ if (completionProcessor != null) {
+ completionProcessor.setType(typeCombo.getText());
+ }
+ }
+ });
+ typeCombo.select(0);
Label l4 = new Label(top, SWT.NONE);
gd = new GridData();
@@ -357,6 +366,7 @@
index = found;
}
dialectCombo.select(index);
+ completionProcessor.setType(typeCombo.getText());
setConstraintText(constraint.getConstraint());
} else {
priorityText.setText("1");
Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/constraint/RuleFlowImportsDialog.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/constraint/RuleFlowImportsDialog.java 2008-10-27 23:41:19 UTC (rev 23599)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/constraint/RuleFlowImportsDialog.java 2008-10-28 00:27:54 UTC (rev 23600)
@@ -55,12 +55,15 @@
private static final Pattern IMPORT_PATTERN = Pattern.compile(
"\\n\\s*import\\s+([^\\s;#]+);?", Pattern.DOTALL);
+ private static final Pattern FUNCTION_IMPORT_PATTERN = Pattern.compile(
+ "\\n\\s*import\\s+function\\s+([^\\s;#]+);?", Pattern.DOTALL);
private WorkflowProcess process;
private boolean success;
private TabFolder tabFolder;
private SourceViewer importsViewer;
private List<String> imports;
+ private List<String> functionImports;
public RuleFlowImportsDialog(Shell parentShell, WorkflowProcess process) {
super(parentShell);
@@ -120,6 +123,12 @@
result += "import " + importString + "\n";
}
}
+ imports = process.getFunctionImports();
+ if (imports != null) {
+ for (String importString: imports) {
+ result += "import function " + importString + "\n";
+ }
+ }
return result;
}
@@ -154,11 +163,23 @@
return imports;
}
+ public List<String> getFunctionImports() {
+ return functionImports;
+ }
+
private void updateImports() {
this.imports = new ArrayList<String>();
Matcher matcher = IMPORT_PATTERN.matcher(importsViewer.getDocument().get());
while (matcher.find()) {
- this.imports.add(matcher.group(1));
+ String importString = matcher.group(1);
+ if (!"function".equals(importString)) {
+ this.imports.add(importString);
+ }
}
+ this.functionImports = new ArrayList<String>();
+ matcher = FUNCTION_IMPORT_PATTERN.matcher(importsViewer.getDocument().get());
+ while (matcher.find()) {
+ this.functionImports.add(matcher.group(1));
+ }
}
}
Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/preferences/DroolsPreferencePage.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/preferences/DroolsPreferencePage.java 2008-10-27 23:41:19 UTC (rev 23599)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/preferences/DroolsPreferencePage.java 2008-10-28 00:27:54 UTC (rev 23600)
@@ -20,6 +20,7 @@
private Button collapseEditorCheckBox;
private Button cacheParsedRulesCheckBox;
private Combo processSkinCombo;
+ private Button allowNodeCustomizationCheckBox;
protected Control createContents(Composite parent) {
final Composite composite = new Composite(parent, SWT.NONE);
@@ -38,6 +39,8 @@
processSkinCombo = new Combo(composite, SWT.LEFT);
processSkinCombo.add("default");
processSkinCombo.add("BPMN");
+ allowNodeCustomizationCheckBox = createCheckBox(composite,
+ "Allow the customization of process nodes.");
initializeValues();
@@ -68,7 +71,8 @@
index = 1;
}
processSkinCombo.select(index);
- }
+ allowNodeCustomizationCheckBox.setSelection(store.getDefaultBoolean(IDroolsConstants.ALLOW_NODE_CUSTOMIZATION));
+ }
private void initializeValues() {
IPreferenceStore store = getPreferenceStore();
@@ -81,6 +85,7 @@
index = 1;
}
processSkinCombo.select(index);
+ allowNodeCustomizationCheckBox.setSelection(store.getBoolean(IDroolsConstants.ALLOW_NODE_CUSTOMIZATION));
}
protected void performDefaults() {
@@ -101,6 +106,7 @@
store.setValue(IDroolsConstants.CACHE_PARSED_RULES, cacheParsedRulesCheckBox.getSelection());
store.setValue(IDroolsConstants.SKIN,
(String) processSkinCombo.getItem(processSkinCombo.getSelectionIndex()));
+ store.setValue(IDroolsConstants.ALLOW_NODE_CUSTOMIZATION, allowNodeCustomizationCheckBox.getSelection());
}
public void init(IWorkbench workbench) {
Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/preferences/IDroolsConstants.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/preferences/IDroolsConstants.java 2008-10-27 23:41:19 UTC (rev 23599)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/preferences/IDroolsConstants.java 2008-10-28 00:27:54 UTC (rev 23600)
@@ -9,5 +9,6 @@
String DRL_EDITOR_MATCHING_BRACKETS_COLOR = "Drools.DRLMatchingBracketsColor";
String DSL_RULE_EDITOR_COMPLETION_FULL_SENTENCES = "Drools.DSLRuleEditorCompletionFullSentences";
String SKIN = "Drools.Flow.Skin";
+ String ALLOW_NODE_CUSTOMIZATION = "Drools.Flow.AllowNodeCustomization";
}
Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-test/src/test/java/org/drools/eclipse/editors/completion/CompletionContextTest.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-test/src/test/java/org/drools/eclipse/editors/completion/CompletionContextTest.java 2008-10-27 23:41:19 UTC (rev 23599)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-test/src/test/java/org/drools/eclipse/editors/completion/CompletionContextTest.java 2008-10-28 00:27:54 UTC (rev 23600)
@@ -1811,6 +1811,18 @@
assertEquals("meth", location.getProperty(Location.LOCATION_RHS_CONTENT));
}
+ public void testCheckRHSLocationDetermination4() {
+ String input =
+ "rule MyRule \n" +
+ " when\n" +
+ " Class ( )\n" +
+ " then\n" +
+ " String s = ";
+ Location location = new CompletionContext(input).getLocation();
+ assertEquals(Location.LOCATION_RHS, location.getType());
+ assertEquals("String s =", location.getProperty(Location.LOCATION_RHS_CONTENT));
+ }
+
public void testCheckRuleHeaderLocationDetermination() {
String input =
"rule MyRule ";
More information about the jboss-svn-commits
mailing list