[jboss-svn-commits] JBL Code SVN: r16767 - in labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin: src/main/java/org/drools/eclipse and 13 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Fri Nov 23 20:26:01 EST 2007
Author: KrisVerlaenen
Date: 2007-11-23 20:26:01 -0500 (Fri, 23 Nov 2007)
New Revision: 16767
Added:
labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/icons/node-triggered.gif
labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/WorkItemDefinitions.java
labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/core/Process.java
labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/WorkItemWrapper.java
labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/WorkItemEditPart.java
labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/task/
labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/task/TaskCellEditor.java
labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/task/TaskDialog.java
labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/task/TaskPropertyDescriptor.java
Modified:
labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/DRLInfo.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/DroolsPluginImages.java
labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/builder/DroolsBuilder.java
labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/core/DroolsElement.java
labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/core/DroolsModelBuilder.java
labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/core/Package.java
labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/core/ui/DroolsLabelProvider.java
labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/debug/AuditView.java
labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/debug/core/DroolsLineBreakpoint.java
labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/JoinWrapper.java
labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/SubFlowWrapper.java
labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/RuleFlowPaletteFactory.java
labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/RuleFlowEditPartFactory.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/preferences/IDroolsConstants.java
labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/view/rules/RulesView.java
Log:
JBRULES-1342: Extend audit framework to support integrated rules and process logging
JBRULES-1343: WorkItems for communication between processes and outside world
JBRULES-1344: Discriminator join
JBRULES-1345: Subflow can specify whether this process should wait for its completion
JBRULES-1346: Extend Rules view with support for processes
Added: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/icons/node-triggered.gif
===================================================================
(Binary files differ)
Property changes on: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/icons/node-triggered.gif
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/DRLInfo.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/DRLInfo.java 2007-11-24 00:40:18 UTC (rev 16766)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/DRLInfo.java 2007-11-24 01:26:01 UTC (rev 16767)
@@ -6,7 +6,10 @@
import java.util.List;
import org.drools.compiler.Dialect;
+import org.drools.compiler.DialectRegistry;
import org.drools.compiler.DroolsError;
+import org.drools.compiler.PackageBuilder;
+import org.drools.lang.descr.AttributeDescr;
import org.drools.lang.descr.FunctionDescr;
import org.drools.lang.descr.PackageDescr;
import org.drools.lang.descr.RuleDescr;
@@ -27,8 +30,9 @@
// cached entry
private transient RuleInfo[] ruleInfos;
private transient FunctionInfo[] functionInfos;
+ private DialectRegistry dialectRegistry;
- public DRLInfo(String sourcePathName, PackageDescr packageDescr, List parserErrors) {
+ public DRLInfo(String sourcePathName, PackageDescr packageDescr, List parserErrors, DialectRegistry dialectRegistry) {
if (sourcePathName == null || "".equals(sourcePathName)) {
throw new IllegalArgumentException("Invalid sourcePathName " + sourcePathName);
}
@@ -40,10 +44,11 @@
this.parserErrors =
parserErrors == null ? EMPTY_LIST : Collections.unmodifiableList(parserErrors);
this.builderErrors = EMPTY_DROOLS_ERROR_ARRAY;
+ this.dialectRegistry = dialectRegistry;
}
- public DRLInfo(String pathName, PackageDescr packageDescr, List parserErrors, Package compiledPackage, DroolsError[] builderErrors) {
- this(pathName, packageDescr, parserErrors);
+ public DRLInfo(String pathName, PackageDescr packageDescr, List parserErrors, Package compiledPackage, DroolsError[] builderErrors, DialectRegistry dialectRegistry) {
+ this(pathName, packageDescr, parserErrors, dialectRegistry);
if (compiledPackage == null) {
throw new IllegalArgumentException("Null package");
}
@@ -123,8 +128,33 @@
this.ruleDescr = ruleDescr;
}
+ public String getDialectName() {
+ String dialectName = null;
+ for (Iterator iterator = ruleDescr.getAttributes().iterator(); iterator.hasNext(); ) {
+ AttributeDescr attribute = (AttributeDescr) iterator.next();
+ if ("dialect".equals(attribute.getName())) {
+ dialectName = (String) attribute.getValue();
+ break;
+ }
+ }
+ if (dialectName == null) {
+ for (Iterator iterator = DRLInfo.this.packageDescr.getAttributes().iterator(); iterator.hasNext(); ) {
+ AttributeDescr attribute = (AttributeDescr) iterator.next();
+ if ("dialect".equals(attribute.getName())) {
+ dialectName = (String) attribute.getValue();
+ break;
+ }
+ }
+ }
+ return dialectName;
+ }
+
public Dialect getDialect() {
- return ruleDescr.getDialect();
+ String dialectName = getDialectName();
+ if (dialectName == null) {
+ return null;
+ }
+ return DRLInfo.this.dialectRegistry.getDialect(dialectName);
}
public String getSourcePathName() {
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 2007-11-24 00:40:18 UTC (rev 16766)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/DroolsEclipsePlugin.java 2007-11-24 01:26:01 UTC (rev 16767)
@@ -221,6 +221,7 @@
store.setDefault(IDroolsConstants.BUILD_ALL, false);
store.setDefault(IDroolsConstants.EDITOR_FOLDING, true);
store.setDefault(IDroolsConstants.CACHE_PARSED_RULES, true);
+ store.setDefault(IDroolsConstants.DSL_RULE_EDITOR_COMPLETION_FULL_SENTENCES, true);
}
public DRLInfo parseResource(IResource resource, boolean compile) throws DroolsParserException {
@@ -334,12 +335,10 @@
}
parserErrors = parser.getErrors();
}
- PackageBuilder builder = null;
+ PackageBuilder builder = new PackageBuilder(builder_configuration);
DRLInfo result = null;
// compile parsed rules if necessary
if (compile && !parser.hasErrors()) {
- builder = new PackageBuilder(builder_configuration);
-
// check whether a .package file exists and add it
if (resource.getParent() != null) {
MyResourceVisitor visitor = new MyResourceVisitor();
@@ -354,11 +353,11 @@
result = new DRLInfo(
resource.getProjectRelativePath().toString(),
packageDescr, parserErrors,
- builder.getPackage(), builder.getErrors().getErrors());
+ builder.getPackage(), builder.getErrors().getErrors(), builder.getDialectRegistry());
} else {
result = new DRLInfo(
resource.getProjectRelativePath().toString(),
- packageDescr, parserErrors);
+ packageDescr, parserErrors, builder.getDialectRegistry());
}
// cache result
Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/DroolsPluginImages.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/DroolsPluginImages.java 2007-11-24 00:40:18 UTC (rev 16766)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/DroolsPluginImages.java 2007-11-24 01:26:01 UTC (rev 16767)
@@ -54,6 +54,8 @@
public static final String DSL = "DSL";
public static final String GLOBAL = "Global";
public static final String RULEFLOW = "RuleFlow";
+ public static final String RULEFLOW_GROUP = "RuleFlowGroup";
+ public static final String RULEFLOW_NODE_TRIGGERED = "RuleFlowNodeTriggered";
private static ImageRegistry imageRegistry;
private static final String PATH_SUFFIX = "/icons/";
@@ -86,6 +88,8 @@
declareRegistryImage(DSL, "dsl.GIF");
declareRegistryImage(GLOBAL, "field_public_obj.gif");
declareRegistryImage(RULEFLOW, "process.gif");
+ declareRegistryImage(RULEFLOW_GROUP, "activity.gif");
+ declareRegistryImage(RULEFLOW_NODE_TRIGGERED, "node-triggered.gif");
}
/**
Added: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/WorkItemDefinitions.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/WorkItemDefinitions.java (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/WorkItemDefinitions.java 2007-11-24 01:26:01 UTC (rev 16767)
@@ -0,0 +1,59 @@
+package org.drools.eclipse;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.drools.ruleflow.common.core.WorkDefinition;
+import org.drools.ruleflow.common.core.impl.ParameterDefinitionImpl;
+import org.drools.ruleflow.common.core.impl.WorkDefinitionExtensionImpl;
+import org.drools.ruleflow.common.datatype.impl.type.StringDataType;
+
+public final class WorkItemDefinitions {
+
+ private static Map workDefinitions = new HashMap();
+
+ static {
+ // Email
+ WorkDefinitionExtensionImpl emailDefinition = new WorkDefinitionExtensionImpl();
+ emailDefinition.setName("Email");
+ emailDefinition.addParameter(new ParameterDefinitionImpl("From", new StringDataType()));
+ emailDefinition.addParameter(new ParameterDefinitionImpl("To", new StringDataType()));
+ emailDefinition.addParameter(new ParameterDefinitionImpl("Subject", new StringDataType()));
+ emailDefinition.addParameter(new ParameterDefinitionImpl("Text", new StringDataType()));
+ emailDefinition.setDisplayName("Email");
+ emailDefinition.setIcon("icons/import_statement.gif");
+ addWorkDefinition(emailDefinition);
+ // Log
+ WorkDefinitionExtensionImpl logDefinition = new WorkDefinitionExtensionImpl();
+ logDefinition.setName("Log");
+ logDefinition.addParameter(new ParameterDefinitionImpl("Message", new StringDataType()));
+ logDefinition.setDisplayName("Log");
+ logDefinition.setIcon("icons/open.gif");
+ addWorkDefinition(logDefinition);
+ // Order
+ WorkDefinitionExtensionImpl orderDefinition = new WorkDefinitionExtensionImpl();
+ orderDefinition.setName("Order");
+ orderDefinition.addParameter(new ParameterDefinitionImpl("OrderId", new StringDataType()));
+ orderDefinition.setDisplayName("Order");
+ orderDefinition.setIcon("icons/open.gif");
+ addWorkDefinition(orderDefinition);
+
+ }
+
+ private WorkItemDefinitions() {
+ }
+
+ private static void addWorkDefinition(WorkDefinition workDefinition) {
+ workDefinitions.put(workDefinition.getName(), workDefinition);
+ }
+
+ public static Collection getWorkDefinitions() {
+ return workDefinitions.values();
+ }
+
+ public static WorkDefinition getWorkDefinition(String name) {
+ return (WorkDefinition) workDefinitions.get(name);
+ }
+
+}
Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/builder/DroolsBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/builder/DroolsBuilder.java 2007-11-24 00:40:18 UTC (rev 16766)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/builder/DroolsBuilder.java 2007-11-24 01:26:01 UTC (rev 16767)
@@ -24,7 +24,7 @@
import org.drools.compiler.PackageBuilder;
import org.drools.compiler.ParserError;
import org.drools.compiler.ProcessBuilder;
-import org.drools.compiler.RuleError;
+import org.drools.compiler.RuleBuildError;
import org.drools.decisiontable.InputType;
import org.drools.decisiontable.SpreadsheetCompiler;
import org.drools.eclipse.DRLInfo;
@@ -349,9 +349,9 @@
DroolsError error = buildErrors[i];
if (error instanceof GlobalError) {
GlobalError globalError = (GlobalError) error;
- markers.add(new DroolsBuildMarker(globalError.getGlobal(), -1));
- } else if (error instanceof RuleError) {
- RuleError ruleError = (RuleError) error;
+ markers.add(new DroolsBuildMarker("Global error: " + globalError.getGlobal(), -1));
+ } else if (error instanceof RuleBuildError) {
+ RuleBuildError ruleError = (RuleBuildError) error;
// TODO try to retrieve line number (or even character start-end)
// disabled for now because line number are those of the rule class,
// not the rule file itself
Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/core/DroolsElement.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/core/DroolsElement.java 2007-11-24 00:40:18 UTC (rev 16766)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/core/DroolsElement.java 2007-11-24 01:26:01 UTC (rev 16767)
@@ -22,6 +22,7 @@
public static final int GLOBAL = 7;
public static final int IMPORT = 8;
public static final int RULE_ATTRIBUTE = 9;
+ public static final int PROCESS = 10;
protected static final DroolsElement[] NO_ELEMENTS = new DroolsElement[0];
Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/core/DroolsModelBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/core/DroolsModelBuilder.java 2007-11-24 00:40:18 UTC (rev 16766)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/core/DroolsModelBuilder.java 2007-11-24 01:26:01 UTC (rev 16767)
@@ -142,6 +142,20 @@
}
}
+ public static Process addProcess(Package pkg, String processId, IFile file) {
+ Process process = new Process(pkg, processId);
+ process.setFile(file, -1, -1);
+ pkg.addProcess(process);
+ return process;
+ }
+
+ public static void removeProcess(Process process) {
+ Package pkg = process.getParentPackage();
+ if (pkg != null) {
+ pkg.removeProcess(process);
+ }
+ }
+
public static void removeElement(DroolsElement element) {
switch (element.getType()) {
case DroolsElement.RULESET:
@@ -152,23 +166,39 @@
break;
case DroolsElement.RULE:
removeRule((Rule) element);
+ removePackageIfEmpty(((Rule) element).getParentPackage());
break;
case DroolsElement.QUERY:
removeQuery((Query) element);
+ removePackageIfEmpty(((Query) element).getParentPackage());
break;
case DroolsElement.FUNCTION:
removeFunction((Function) element);
+ removePackageIfEmpty(((Function) element).getParentPackage());
break;
case DroolsElement.TEMPLATE:
removeTemplate((Template) element);
+ removePackageIfEmpty(((Template) element).getParentPackage());
break;
case DroolsElement.EXPANDER:
removeExpander((Expander) element);
+ removePackageIfEmpty(((Expander) element).getParentPackage());
break;
case DroolsElement.GLOBAL:
removeGlobal((Global) element);
+ removePackageIfEmpty(((Global) element).getParentPackage());
break;
+ case DroolsElement.PROCESS:
+ removeProcess((Process) element);
+ removePackageIfEmpty(((Process) element).getParentPackage());
+ break;
}
}
+
+ private static void removePackageIfEmpty(Package pkg) {
+ if (pkg.getChildren().length == 0) {
+ removePackage(pkg);
+ }
+ }
}
Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/core/Package.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/core/Package.java 2007-11-24 00:40:18 UTC (rev 16766)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/core/Package.java 2007-11-24 01:26:01 UTC (rev 16767)
@@ -18,6 +18,7 @@
private List globals = new ArrayList();
private List queries = new ArrayList();
private List templates = new ArrayList();
+ private List processes = new ArrayList();
Package(RuleSet parent, String packageName) {
super(parent);
@@ -46,6 +47,7 @@
children.addAll(expanders);
children.addAll(imports);
children.addAll(templates);
+ children.addAll(processes);
return (DroolsElement[]) children.toArray(new DroolsElement[0]);
}
@@ -112,4 +114,12 @@
templates.remove(template);
}
+ void addProcess(Process process) {
+ processes.add(process);
+ }
+
+ void removeProcess(Process process) {
+ processes.remove(process);
+ }
+
}
Added: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/core/Process.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/core/Process.java (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/core/Process.java 2007-11-24 01:26:01 UTC (rev 16767)
@@ -0,0 +1,37 @@
+package org.drools.eclipse.core;
+
+/**
+ * This represents a function.
+ *
+ * @author <a href="mailto:kris_verlaenen at hotmail.com">kris verlaenen </a>
+ */
+public class Process extends DroolsElement {
+
+ private final String processId;
+
+ Process(Package parent, String processId) {
+ super(parent);
+ this.processId = processId;
+ }
+
+ public Package getParentPackage() {
+ return (Package) getParent();
+ }
+
+ public String getProcessId() {
+ return processId;
+ }
+
+ public int getType() {
+ return PROCESS;
+ }
+
+ public DroolsElement[] getChildren() {
+ return NO_ELEMENTS;
+ }
+
+ public String toString() {
+ return processId;
+ }
+
+}
Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/core/ui/DroolsLabelProvider.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/core/ui/DroolsLabelProvider.java 2007-11-24 00:40:18 UTC (rev 16766)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/core/ui/DroolsLabelProvider.java 2007-11-24 01:26:01 UTC (rev 16767)
@@ -8,16 +8,17 @@
public class DroolsLabelProvider extends LabelProvider {
private static final String[] ICONS = new String[] {
- DroolsPluginImages.PACKAGE, // ruleset
- DroolsPluginImages.PACKAGE, // package
- DroolsPluginImages.DROOLS, // rule
- DroolsPluginImages.DROOLS, // query
- DroolsPluginImages.METHOD, // function
- DroolsPluginImages.CLASS, // template
- DroolsPluginImages.DSL, // expander
- DroolsPluginImages.GLOBAL, // global
- DroolsPluginImages.IMPORT, // import
- DroolsPluginImages.DROOLS, // rule attribute
+ DroolsPluginImages.PACKAGE, // ruleset
+ DroolsPluginImages.PACKAGE, // package
+ DroolsPluginImages.DROOLS, // rule
+ DroolsPluginImages.DROOLS, // query
+ DroolsPluginImages.METHOD, // function
+ DroolsPluginImages.CLASS, // template
+ DroolsPluginImages.DSL, // expander
+ DroolsPluginImages.GLOBAL, // global
+ DroolsPluginImages.IMPORT, // import
+ DroolsPluginImages.DROOLS, // rule attribute
+ DroolsPluginImages.RULEFLOW, // process
};
public Image getImage(Object element) {
Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/debug/AuditView.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/debug/AuditView.java 2007-11-24 00:40:18 UTC (rev 16766)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/debug/AuditView.java 2007-11-24 01:26:01 UTC (rev 16767)
@@ -10,6 +10,7 @@
import java.util.Iterator;
import java.util.List;
import java.util.Map;
+import java.util.Stack;
import org.drools.audit.event.ActivationLogEvent;
import org.drools.audit.event.LogEvent;
@@ -17,6 +18,7 @@
import org.drools.audit.event.RuleBaseLogEvent;
import org.drools.audit.event.RuleFlowGroupLogEvent;
import org.drools.audit.event.RuleFlowLogEvent;
+import org.drools.audit.event.RuleFlowNodeLogEvent;
import org.drools.eclipse.DroolsEclipsePlugin;
import org.drools.eclipse.DroolsPluginImages;
import org.drools.eclipse.debug.actions.DeleteLogAction;
@@ -100,8 +102,7 @@
protected List createEventList(List logEvents) {
Iterator iterator = logEvents.iterator();
List events = new ArrayList();
- Event currentBeforeActivationEvent = null;
- Event currentBeforePackageEvent = null;
+ Stack beforeEvents = new Stack();
List newActivations = new ArrayList();
Map activationMap = new HashMap();
Map objectMap = new HashMap();
@@ -112,8 +113,8 @@
case LogEvent.INSERTED:
ObjectLogEvent inObjectEvent = (ObjectLogEvent) inEvent;
event.setString("Object inserted (" + inObjectEvent.getFactId() + "): " + inObjectEvent.getObjectToString());
- if (currentBeforeActivationEvent != null) {
- currentBeforeActivationEvent.addSubEvent(event);
+ if (!beforeEvents.isEmpty()) {
+ ((Event) beforeEvents.peek()).addSubEvent(event);
} else {
events.add(event);
}
@@ -124,8 +125,8 @@
case LogEvent.UPDATED:
inObjectEvent = (ObjectLogEvent) inEvent;
event.setString("Object updated (" + inObjectEvent.getFactId() + "): " + inObjectEvent.getObjectToString());
- if (currentBeforeActivationEvent != null) {
- currentBeforeActivationEvent.addSubEvent(event);
+ if (!beforeEvents.isEmpty()) {
+ ((Event) beforeEvents.peek()).addSubEvent(event);
} else {
events.add(event);
}
@@ -139,8 +140,8 @@
case LogEvent.RETRACTED:
inObjectEvent = (ObjectLogEvent) inEvent;
event.setString("Object removed (" + inObjectEvent.getFactId() + "): " + inObjectEvent.getObjectToString());
- if (currentBeforeActivationEvent != null) {
- currentBeforeActivationEvent.addSubEvent(event);
+ if (!beforeEvents.isEmpty()) {
+ ((Event) beforeEvents.peek()).addSubEvent(event);
} else {
events.add(event);
}
@@ -167,99 +168,134 @@
inActivationEvent = (ActivationLogEvent) inEvent;
event.setString("Activation executed: Rule " + inActivationEvent.getRule() + " " + inActivationEvent.getDeclarations());
events.add(event);
- currentBeforeActivationEvent = event;
+ beforeEvents.push(event);
event.setCauseEvent((Event) activationMap.get(((ActivationLogEvent) inEvent).getActivationId()));
break;
case LogEvent.AFTER_ACTIVATION_FIRE:
- currentBeforeActivationEvent = null;
+ beforeEvents.pop();
break;
- case LogEvent.RULEFLOW_CREATED:
+ case LogEvent.BEFORE_RULEFLOW_CREATED:
RuleFlowLogEvent inRuleFlowEvent = (RuleFlowLogEvent) inEvent;
event.setString("RuleFlow started: " + inRuleFlowEvent.getProcessName() + "[" + inRuleFlowEvent.getProcessId() + "]");
- if (currentBeforeActivationEvent != null) {
- currentBeforeActivationEvent.addSubEvent(event);
+ if (!beforeEvents.isEmpty()) {
+ ((Event) beforeEvents.peek()).addSubEvent(event);
} else {
events.add(event);
}
+ beforeEvents.push(event);
break;
- case LogEvent.RULEFLOW_COMPLETED:
+ case LogEvent.AFTER_RULEFLOW_CREATED:
+ beforeEvents.pop();
+ break;
+ case LogEvent.BEFORE_RULEFLOW_COMPLETED:
inRuleFlowEvent = (RuleFlowLogEvent) inEvent;
event.setString("RuleFlow completed: " + inRuleFlowEvent.getProcessName() + "[" + inRuleFlowEvent.getProcessId() + "]");
- if (currentBeforeActivationEvent != null) {
- currentBeforeActivationEvent.addSubEvent(event);
+ if (!beforeEvents.isEmpty()) {
+ ((Event) beforeEvents.peek()).addSubEvent(event);
} else {
events.add(event);
}
+ beforeEvents.push(event);
break;
- case LogEvent.RULEFLOW_GROUP_ACTIVATED:
+ case LogEvent.AFTER_RULEFLOW_COMPLETED:
+ beforeEvents.pop();
+ break;
+ case LogEvent.BEFORE_RULEFLOW_NODE_TRIGGERED:
+ RuleFlowNodeLogEvent inRuleFlowNodeEvent = (RuleFlowNodeLogEvent) inEvent;
+ event.setString("RuleFlow node triggered: " + inRuleFlowNodeEvent.getNodeName() + " in process " + inRuleFlowNodeEvent.getProcessName() + "[" + inRuleFlowNodeEvent.getProcessId() + "]");
+ if (!beforeEvents.isEmpty()) {
+ ((Event) beforeEvents.peek()).addSubEvent(event);
+ } else {
+ events.add(event);
+ }
+ beforeEvents.push(event);
+ break;
+ case LogEvent.AFTER_RULEFLOW_NODE_TRIGGERED:
+ beforeEvents.pop();
+ break;
+ case LogEvent.BEFORE_RULEFLOW_GROUP_ACTIVATED:
RuleFlowGroupLogEvent inRuleFlowGroupEvent = (RuleFlowGroupLogEvent) inEvent;
event.setString("RuleFlowGroup activated: " + inRuleFlowGroupEvent.getGroupName() + "[size=" + inRuleFlowGroupEvent.getSize() + "]");
- if (currentBeforeActivationEvent != null) {
- currentBeforeActivationEvent.addSubEvent(event);
+ if (!beforeEvents.isEmpty()) {
+ ((Event) beforeEvents.peek()).addSubEvent(event);
} else {
events.add(event);
}
- break;
- case LogEvent.RULEFLOW_GROUP_DEACTIVATED:
+ beforeEvents.push(event);
+ break;
+ case LogEvent.AFTER_RULEFLOW_GROUP_ACTIVATED:
+ beforeEvents.pop();
+ break;
+ case LogEvent.BEFORE_RULEFLOW_GROUP_DEACTIVATED:
inRuleFlowGroupEvent = (RuleFlowGroupLogEvent) inEvent;
event.setString("RuleFlowGroup deactivated: " + inRuleFlowGroupEvent.getGroupName() + "[size=" + inRuleFlowGroupEvent.getSize() + "]");
- if (currentBeforeActivationEvent != null) {
- currentBeforeActivationEvent.addSubEvent(event);
+ if (!beforeEvents.isEmpty()) {
+ ((Event) beforeEvents.peek()).addSubEvent(event);
} else {
events.add(event);
}
- break;
+ beforeEvents.push(event);
+ break;
+ case LogEvent.AFTER_RULEFLOW_GROUP_DEACTIVATED:
+ beforeEvents.pop();
+ break;
case LogEvent.BEFORE_PACKAGE_ADDED:
RuleBaseLogEvent ruleBaseEvent = (RuleBaseLogEvent) inEvent;
event.setString("Package added: " + ruleBaseEvent.getPackageName());
- if (currentBeforeActivationEvent != null) {
- currentBeforeActivationEvent.addSubEvent(event);
+ if (!beforeEvents.isEmpty()) {
+ ((Event) beforeEvents.peek()).addSubEvent(event);
} else {
events.add(event);
}
- currentBeforePackageEvent = event;
+ beforeEvents.push(event);
break;
case LogEvent.AFTER_PACKAGE_ADDED:
- currentBeforePackageEvent = null;
+ beforeEvents.pop();
break;
case LogEvent.BEFORE_PACKAGE_REMOVED:
ruleBaseEvent = (RuleBaseLogEvent) inEvent;
event.setString("Package removed: " + ruleBaseEvent.getPackageName());
- if (currentBeforeActivationEvent != null) {
- currentBeforeActivationEvent.addSubEvent(event);
+ if (!beforeEvents.isEmpty()) {
+ ((Event) beforeEvents.peek()).addSubEvent(event);
} else {
events.add(event);
}
- currentBeforePackageEvent = event;
+ beforeEvents.push(event);
break;
case LogEvent.AFTER_PACKAGE_REMOVED:
- currentBeforePackageEvent = null;
+ beforeEvents.pop();
break;
- case LogEvent.AFTER_RULE_ADDED:
+ case LogEvent.BEFORE_RULE_ADDED:
ruleBaseEvent = (RuleBaseLogEvent) inEvent;
event.setString("Rule added: " + ruleBaseEvent.getRuleName());
- if (currentBeforePackageEvent != null) {
- currentBeforePackageEvent.addSubEvent(event);
- } else if (currentBeforeActivationEvent != null) {
- currentBeforeActivationEvent.addSubEvent(event);
+ if (!beforeEvents.isEmpty()) {
+ ((Event) beforeEvents.peek()).addSubEvent(event);
} else {
events.add(event);
}
- event.addSubEvents(newActivations);
- newActivations.clear();
break;
- case LogEvent.AFTER_RULE_REMOVED:
+ case LogEvent.AFTER_RULE_ADDED:
+ if (!beforeEvents.isEmpty()) {
+ Event beforeEvent = (Event) beforeEvents.pop();
+ beforeEvent.addSubEvents(newActivations);
+ newActivations.clear();
+ }
+ break;
+ case LogEvent.BEFORE_RULE_REMOVED:
ruleBaseEvent = (RuleBaseLogEvent) inEvent;
event.setString("Rule removed: " + ruleBaseEvent.getRuleName());
- if (currentBeforePackageEvent != null) {
- currentBeforePackageEvent.addSubEvent(event);
- } else if (currentBeforeActivationEvent != null) {
- currentBeforeActivationEvent.addSubEvent(event);
+ if (!beforeEvents.isEmpty()) {
+ ((Event) beforeEvents.peek()).addSubEvent(event);
} else {
events.add(event);
}
- event.addSubEvents(newActivations);
- newActivations.clear();
+ break;
+ case LogEvent.AFTER_RULE_REMOVED:
+ if (!beforeEvents.isEmpty()) {
+ Event beforeEvent = (Event) beforeEvents.pop();
+ beforeEvent.addSubEvents(newActivations);
+ newActivations.clear();
+ }
break;
}
}
@@ -424,14 +460,15 @@
case LogEvent.ACTIVATION_CREATED: return DroolsPluginImages.getImage(DroolsPluginImages.CREATE_ACTIVATION);
case LogEvent.ACTIVATION_CANCELLED: return DroolsPluginImages.getImage(DroolsPluginImages.CANCEL_ACTIVATION);
case LogEvent.BEFORE_ACTIVATION_FIRE: return DroolsPluginImages.getImage(DroolsPluginImages.EXECUTE_ACTIVATION);
- case LogEvent.RULEFLOW_CREATED: return DroolsPluginImages.getImage(DroolsPluginImages.RULEFLOW);
- case LogEvent.RULEFLOW_COMPLETED: return DroolsPluginImages.getImage(DroolsPluginImages.RULEFLOW);
- case LogEvent.RULEFLOW_GROUP_ACTIVATED: return DroolsPluginImages.getImage(DroolsPluginImages.RULEFLOW);
- case LogEvent.RULEFLOW_GROUP_DEACTIVATED: return DroolsPluginImages.getImage(DroolsPluginImages.RULEFLOW);
+ case LogEvent.BEFORE_RULEFLOW_CREATED: return DroolsPluginImages.getImage(DroolsPluginImages.RULEFLOW);
+ case LogEvent.BEFORE_RULEFLOW_COMPLETED: return DroolsPluginImages.getImage(DroolsPluginImages.RULEFLOW);
+ case LogEvent.BEFORE_RULEFLOW_NODE_TRIGGERED: return DroolsPluginImages.getImage(DroolsPluginImages.RULEFLOW_NODE_TRIGGERED);
+ case LogEvent.BEFORE_RULEFLOW_GROUP_ACTIVATED: return DroolsPluginImages.getImage(DroolsPluginImages.RULEFLOW_GROUP);
+ case LogEvent.BEFORE_RULEFLOW_GROUP_DEACTIVATED: return DroolsPluginImages.getImage(DroolsPluginImages.RULEFLOW_GROUP);
case LogEvent.BEFORE_PACKAGE_ADDED: return DroolsPluginImages.getImage(DroolsPluginImages.DROOLS);
case LogEvent.BEFORE_PACKAGE_REMOVED: return DroolsPluginImages.getImage(DroolsPluginImages.DROOLS);
- case LogEvent.AFTER_RULE_ADDED: return DroolsPluginImages.getImage(DroolsPluginImages.DROOLS);
- case LogEvent.AFTER_RULE_REMOVED: return DroolsPluginImages.getImage(DroolsPluginImages.DROOLS);
+ case LogEvent.BEFORE_RULE_ADDED: return DroolsPluginImages.getImage(DroolsPluginImages.DROOLS);
+ case LogEvent.BEFORE_RULE_REMOVED: return DroolsPluginImages.getImage(DroolsPluginImages.DROOLS);
}
return null;
}
Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/debug/core/DroolsLineBreakpoint.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/debug/core/DroolsLineBreakpoint.java 2007-11-24 00:40:18 UTC (rev 16766)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/debug/core/DroolsLineBreakpoint.java 2007-11-24 01:26:01 UTC (rev 16767)
@@ -102,7 +102,7 @@
private String getDialect(DRLInfo info, int drlLineNumber) {
if ( info != null ) {
- return info.getRuleInfo( drlLineNumber ).getDialect().getId();
+ return info.getRuleInfo( drlLineNumber ).getDialectName();
}
return null;
}
@@ -130,7 +130,7 @@
int line = ruleInfo.getConsequenceJavaLineNumber()
+ (lineNumber - ruleInfo.getConsequenceDrlLineNumber());
- if (ruleInfo.getDialect().getId().equals( MVELDialect.ID )) {
+ if (ruleInfo.getDialectName().equals( MVELDialect.ID )) {
return line;
}
return line+1;
Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/JoinWrapper.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/JoinWrapper.java 2007-11-24 00:40:18 UTC (rev 16766)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/JoinWrapper.java 2007-11-24 01:26:01 UTC (rev 16767)
@@ -38,7 +38,7 @@
descriptors = new IPropertyDescriptor[DefaultElementWrapper.descriptors.length + 1];
System.arraycopy(DefaultElementWrapper.descriptors, 0, descriptors, 0, DefaultElementWrapper.descriptors.length);
descriptors[descriptors.length - 1] =
- new ComboBoxPropertyDescriptor(TYPE, "Type", new String[] { "", "AND", "XOR" });
+ new ComboBoxPropertyDescriptor(TYPE, "Type", new String[] { "", "AND", "XOR", "Discriminator" });
}
public JoinWrapper() {
Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/SubFlowWrapper.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/SubFlowWrapper.java 2007-11-24 00:40:18 UTC (rev 16766)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/SubFlowWrapper.java 2007-11-24 01:26:01 UTC (rev 16767)
@@ -19,6 +19,7 @@
import org.drools.eclipse.flow.common.editor.core.ElementConnection;
import org.drools.ruleflow.core.SubFlowNode;
import org.drools.ruleflow.core.impl.SubFlowNodeImpl;
+import org.eclipse.ui.views.properties.ComboBoxPropertyDescriptor;
import org.eclipse.ui.views.properties.IPropertyDescriptor;
import org.eclipse.ui.views.properties.TextPropertyDescriptor;
@@ -33,12 +34,15 @@
private static IPropertyDescriptor[] descriptors;
public static final String PROCESS_ID = "ProcessId";
+ public static final String WAIT_FOR_COMPLETION = "WaitForCompletion";
static {
- descriptors = new IPropertyDescriptor[DefaultElementWrapper.descriptors.length + 1];
+ descriptors = new IPropertyDescriptor[DefaultElementWrapper.descriptors.length + 2];
System.arraycopy(DefaultElementWrapper.descriptors, 0, descriptors, 0, DefaultElementWrapper.descriptors.length);
+ descriptors[descriptors.length - 2] =
+ new TextPropertyDescriptor(PROCESS_ID, "ProcessId");
descriptors[descriptors.length - 1] =
- new TextPropertyDescriptor(PROCESS_ID, "ProcessId");
+ new ComboBoxPropertyDescriptor(WAIT_FOR_COMPLETION, "Wait for completion", new String[] {"true", "false"});
}
public SubFlowWrapper() {
@@ -67,12 +71,17 @@
String processId = getSubFlowNode().getProcessId();
return processId == null ? "" : processId;
}
+ if (WAIT_FOR_COMPLETION.equals(id)) {
+ return getSubFlowNode().isWaitForCompletion() ? new Integer(0) : new Integer(1);
+ }
return super.getPropertyValue(id);
}
public void resetPropertyValue(Object id) {
if (PROCESS_ID.equals(id)) {
getSubFlowNode().setProcessId("");
+ } else if (WAIT_FOR_COMPLETION.equals(id)) {
+ getSubFlowNode().setWaitForCompletion(true);
} else {
super.resetPropertyValue(id);
}
@@ -81,6 +90,8 @@
public void setPropertyValue(Object id, Object value) {
if (PROCESS_ID.equals(id)) {
getSubFlowNode().setProcessId((String) value);
+ } else if (WAIT_FOR_COMPLETION.equals(id)) {
+ getSubFlowNode().setWaitForCompletion(((Integer) value).intValue() == 0);
} else {
super.setPropertyValue(id, value);
}
Added: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/WorkItemWrapper.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/WorkItemWrapper.java (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/WorkItemWrapper.java 2007-11-24 01:26:01 UTC (rev 16767)
@@ -0,0 +1,131 @@
+package org.drools.eclipse.flow.ruleflow.core;
+/*
+ * Copyright 2005 JBoss Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import java.util.Iterator;
+import java.util.Set;
+
+import org.drools.eclipse.WorkItemDefinitions;
+import org.drools.eclipse.flow.common.editor.core.DefaultElementWrapper;
+import org.drools.eclipse.flow.common.editor.core.ElementConnection;
+import org.drools.ruleflow.common.core.ParameterDefinition;
+import org.drools.ruleflow.common.core.Work;
+import org.drools.ruleflow.common.core.WorkDefinition;
+import org.drools.ruleflow.core.WorkItemNode;
+import org.drools.ruleflow.core.impl.WorkItemNodeImpl;
+import org.eclipse.ui.views.properties.IPropertyDescriptor;
+import org.eclipse.ui.views.properties.TextPropertyDescriptor;
+
+/**
+ * Wrapper for a task node.
+ *
+ * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
+ */
+public class WorkItemWrapper extends NodeWrapper {
+
+ public static final String TASK = "Task";
+
+ private static final long serialVersionUID = -3618183280436588589L;
+
+ private IPropertyDescriptor[] descriptors;
+
+ public WorkItemWrapper() {
+ setNode(new WorkItemNodeImpl());
+ }
+
+ public WorkItemNode getWorkItemNode() {
+ return (WorkItemNode) getNode();
+ }
+
+ private WorkDefinition getWorkDefinition() {
+ Work work = getWorkItemNode().getWork();
+ if (work != null && work.getName() != null) {
+ return WorkItemDefinitions.getWorkDefinition(work.getName());
+ }
+ return null;
+ }
+
+ private boolean workParameterExists(String parameterName) {
+ WorkDefinition workDefinition = getWorkDefinition();
+ if (workDefinition != null) {
+ return workDefinition.getParameter(parameterName) != null;
+ }
+ return false;
+ }
+
+ private void setDescriptors() {
+ WorkDefinition workDefinition = getWorkDefinition();
+ if (workDefinition != null) {
+ Set parameters = workDefinition.getParameters();
+ descriptors = new IPropertyDescriptor[DefaultElementWrapper.descriptors.length + parameters.size()];
+ System.arraycopy(DefaultElementWrapper.descriptors, 0, descriptors, 0, DefaultElementWrapper.descriptors.length);
+ int i = 0;
+ for (Iterator iterator = parameters.iterator(); iterator.hasNext(); ) {
+ ParameterDefinition def = (ParameterDefinition) iterator.next();
+ descriptors[descriptors.length - parameters.size() + (i++)] =
+ new TextPropertyDescriptor(def.getName(), def.getName());
+ }
+ }
+ if (descriptors == null) {
+ descriptors = DefaultElementWrapper.descriptors;
+ }
+ }
+
+ public IPropertyDescriptor[] getPropertyDescriptors() {
+ if (descriptors == null) {
+ setDescriptors();
+ }
+ return descriptors;
+ }
+
+ public boolean acceptsIncomingConnection(ElementConnection connection) {
+ return getIncomingConnections().isEmpty();
+ }
+
+ public boolean acceptsOutgoingConnection(ElementConnection connection) {
+ return getOutgoingConnections().isEmpty();
+ }
+
+ public Object getPropertyValue(Object id) {
+ if (id instanceof String) {
+ String name = (String) id;
+ if (workParameterExists(name)) {
+ Object value = getWorkItemNode().getWork().getParameter(name);
+ if (value instanceof String) {
+ return value;
+ }
+ return "";
+ }
+ }
+ return super.getPropertyValue(id);
+ }
+
+ public void resetPropertyValue(Object id) {
+ if (id instanceof String && workParameterExists((String) id)) {
+ getWorkItemNode().getWork().setParameter((String) id, null);
+ } else {
+ super.resetPropertyValue(id);
+ }
+ }
+
+ public void setPropertyValue(Object id, Object value) {
+ if (id instanceof String && workParameterExists((String) id)) {
+ getWorkItemNode().getWork().setParameter((String) id, value);
+ } else {
+ super.setPropertyValue(id, value);
+ }
+ }
+}
Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/RuleFlowPaletteFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/RuleFlowPaletteFactory.java 2007-11-24 00:40:18 UTC (rev 16766)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/RuleFlowPaletteFactory.java 2007-11-24 01:26:01 UTC (rev 16767)
@@ -16,9 +16,11 @@
*/
import java.util.ArrayList;
+import java.util.Iterator;
import java.util.List;
import org.drools.eclipse.DroolsEclipsePlugin;
+import org.drools.eclipse.WorkItemDefinitions;
import org.drools.eclipse.flow.common.editor.core.ElementConnectionFactory;
import org.drools.eclipse.flow.ruleflow.core.ActionWrapper;
import org.drools.eclipse.flow.ruleflow.core.ConnectionWrapper;
@@ -30,6 +32,10 @@
import org.drools.eclipse.flow.ruleflow.core.SplitWrapper;
import org.drools.eclipse.flow.ruleflow.core.StartNodeWrapper;
import org.drools.eclipse.flow.ruleflow.core.SubFlowWrapper;
+import org.drools.eclipse.flow.ruleflow.core.WorkItemWrapper;
+import org.drools.ruleflow.common.core.WorkDefinition;
+import org.drools.ruleflow.common.core.WorkDefinitionExtension;
+import org.drools.ruleflow.common.core.impl.WorkImpl;
import org.drools.ruleflow.core.Connection;
import org.eclipse.gef.palette.CombinedTemplateCreationEntry;
import org.eclipse.gef.palette.ConnectionCreationToolEntry;
@@ -61,6 +67,7 @@
List categories = new ArrayList();
categories.add(createControlGroup(root));
categories.add(createComponentsDrawer());
+ categories.add(createTaskNodesDrawer());
return categories;
}
@@ -141,19 +148,63 @@
entries.add(combined);
combined = new CombinedTemplateCreationEntry(
- "Action",
- "Create a new Action",
- ActionWrapper.class,
- new SimpleFactory(ActionWrapper.class),
- ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/action.gif")),
- ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/action.gif"))
+ "Action",
+ "Create a new Action",
+ ActionWrapper.class,
+ new SimpleFactory(ActionWrapper.class),
+ ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/action.gif")),
+ ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/action.gif"))
+ );
+ entries.add(combined);
+
+ drawer.addAll(entries);
+ return drawer;
+ }
+
+ private static PaletteContainer createTaskNodesDrawer() {
+
+ PaletteDrawer drawer = new PaletteDrawer("Work Items", null);
+
+ List entries = new ArrayList();
+
+ for (Iterator iterator = WorkItemDefinitions.getWorkDefinitions().iterator(); iterator.hasNext(); ) {
+ final WorkDefinition workDefinition = (WorkDefinition) iterator.next();
+ final String label;
+ String description = workDefinition.getName();
+ String icon = null;
+ if (workDefinition instanceof WorkDefinitionExtension) {
+ WorkDefinitionExtension extension = (WorkDefinitionExtension) workDefinition;
+ label = extension.getDisplayName();
+ description = extension.getExplanationText();
+ icon = extension.getIcon();
+ } else {
+ label = workDefinition.getName();
+ }
+
+ CombinedTemplateCreationEntry combined = new CombinedTemplateCreationEntry(
+ label,
+ description,
+ WorkItemWrapper.class,
+ new SimpleFactory(WorkItemWrapper.class) {
+ public Object getNewObject() {
+ WorkItemWrapper taskWrapper = (WorkItemWrapper) super.getNewObject();
+ taskWrapper.setName(label);
+ taskWrapper.getWorkItemNode().setName(label);
+ taskWrapper.getWorkItemNode().setWork(new WorkImpl());
+ taskWrapper.getWorkItemNode().getWork().setName(workDefinition.getName());
+ return taskWrapper;
+ }
+ },
+ ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry(icon == null? "icons/action.gif" : icon)),
+ ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry(icon == null? "icons/action.gif" : icon))
);
entries.add(combined);
-
+ }
+
drawer.addAll(entries);
return drawer;
}
-
+
private static PaletteContainer createControlGroup(PaletteRoot root) {
PaletteGroup controlGroup = new PaletteGroup("Control Group");
Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/RuleFlowEditPartFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/RuleFlowEditPartFactory.java 2007-11-24 00:40:18 UTC (rev 16766)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/RuleFlowEditPartFactory.java 2007-11-24 01:26:01 UTC (rev 16767)
@@ -26,6 +26,7 @@
import org.drools.eclipse.flow.ruleflow.core.SplitWrapper;
import org.drools.eclipse.flow.ruleflow.core.StartNodeWrapper;
import org.drools.eclipse.flow.ruleflow.core.SubFlowWrapper;
+import org.drools.eclipse.flow.ruleflow.core.WorkItemWrapper;
import org.eclipse.gef.EditPart;
import org.eclipse.gef.EditPartFactory;
@@ -58,6 +59,8 @@
result = new SubFlowEditPart();
} else if (model instanceof ActionWrapper) {
result = new ActionEditPart();
+ } else if (model instanceof WorkItemWrapper) {
+ result = new WorkItemEditPart();
} else {
throw new IllegalArgumentException(
"Unknown model object " + model);
Added: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/WorkItemEditPart.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/WorkItemEditPart.java (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/WorkItemEditPart.java 2007-11-24 01:26:01 UTC (rev 16767)
@@ -0,0 +1,84 @@
+package org.drools.eclipse.flow.ruleflow.editor.editpart;
+/*
+ * Copyright 2005 JBoss Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import org.drools.eclipse.DroolsEclipsePlugin;
+import org.drools.eclipse.WorkItemDefinitions;
+import org.drools.eclipse.flow.common.editor.editpart.ElementEditPart;
+import org.drools.eclipse.flow.common.editor.editpart.figure.ElementFigure;
+import org.drools.eclipse.flow.ruleflow.core.WorkItemWrapper;
+import org.drools.ruleflow.common.core.WorkDefinition;
+import org.drools.ruleflow.common.core.WorkDefinitionExtension;
+import org.eclipse.draw2d.IFigure;
+import org.eclipse.draw2d.RoundedRectangle;
+import org.eclipse.draw2d.geometry.Dimension;
+import org.eclipse.draw2d.geometry.Rectangle;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.widgets.Display;
+
+/**
+ * EditPart for a Task node.
+ *
+ * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
+ */
+public class WorkItemEditPart extends ElementEditPart {
+
+ private static final Color color = new Color(Display.getCurrent(), 255, 250, 205);
+
+ protected IFigure createFigure() {
+ String icon = null;
+ String taskName = ((WorkItemWrapper) getElementWrapper()).getWorkItemNode().getWork().getName();
+ WorkDefinition workDefinition = WorkItemDefinitions.getWorkDefinition(taskName);
+ if (workDefinition instanceof WorkDefinitionExtension) {
+ icon = ((WorkDefinitionExtension) workDefinition).getIcon();
+ }
+ if (icon == null) {
+ icon = "icons/action.gif";
+ }
+ return new TaskNodeFigure(icon);
+ }
+
+ public static class TaskNodeFigure extends ElementFigure {
+
+ public TaskNodeFigure(String icon) {
+ setIcon(ImageDescriptor.createFromURL(
+ DroolsEclipsePlugin.getDefault().getBundle().getEntry(icon)).createImage());
+ }
+
+ private RoundedRectangle rectangle;
+
+ protected void customizeFigure() {
+ rectangle = new RoundedRectangle();
+ rectangle.setCornerDimensions(new Dimension(25, 25));
+ add(rectangle, 0);
+ rectangle.setBackgroundColor(color);
+ rectangle.setBounds(getBounds());
+ setSelected(false);
+ }
+
+ public void setBounds(Rectangle rectangle) {
+ super.setBounds(rectangle);
+ this.rectangle.setBounds(rectangle);
+ }
+
+ public void setSelected(boolean b) {
+ super.setSelected(b);
+ rectangle.setLineWidth(b ? 3 : 1);
+ repaint();
+ }
+ }
+}
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 2007-11-24 00:40:18 UTC (rev 16766)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/action/ActionDialog.java 2007-11-24 01:26:01 UTC (rev 16767)
@@ -25,6 +25,7 @@
import org.drools.ruleflow.core.ActionNode;
import org.drools.ruleflow.core.RuleFlowProcess;
import org.drools.ruleflow.core.impl.DroolsConsequenceAction;
+import org.drools.util.ArrayUtils;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.text.Document;
import org.eclipse.jface.text.IDocument;
@@ -41,8 +42,10 @@
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.TabFolder;
import org.eclipse.swt.widgets.TabItem;
@@ -54,9 +57,12 @@
*/
public class ActionDialog extends EditBeanDialog {
+ private static final String[] DIALECTS = new String[] { "mvel", "java" };
+
private RuleFlowProcess process;
private TabFolder tabFolder;
private SourceViewer actionViewer;
+ private Combo dialectCombo;
//private ActionCompletionProcessor completionProcessor;
public ActionDialog(Shell parentShell, RuleFlowProcess process, ActionNode actionNode) {
@@ -124,8 +130,26 @@
return actionViewer.getControl();
}
+ private Control createDialectCombo(Composite parent) {
+ dialectCombo = new Combo(parent, SWT.DROP_DOWN | SWT.READ_ONLY);
+ dialectCombo.setItems(DIALECTS);
+ Object action = getValue();
+ int index = 0;
+ if (action instanceof DroolsConsequenceAction) {
+ String dialect = ((DroolsConsequenceAction) action).getDialect();
+ int found = ArrayUtils.indexOf(DIALECTS, dialect);
+ if (found >= 0) {
+ index = found;
+ }
+ }
+ dialectCombo.select(index);
+ return dialectCombo;
+ }
+
private Object getAction() {
- return new DroolsConsequenceAction(actionViewer.getDocument().get());
+ return new DroolsConsequenceAction(
+ dialectCombo.getItem(dialectCombo.getSelectionIndex()),
+ actionViewer.getDocument().get());
}
public Control createDialogArea(Composite parent) {
@@ -140,9 +164,13 @@
top.setLayoutData(gd);
layout = new GridLayout();
- layout.numColumns = 3;
+ layout.numColumns = 4;
top.setLayout(layout);
-
+
+ Label label = new Label(top, SWT.NONE);
+ label.setText("Dialect:");
+ createDialectCombo(top);
+
Button importButton = new Button(top, SWT.PUSH);
importButton.setText("Imports ...");
importButton.setFont(JFaceResources.getDialogFont());
@@ -151,9 +179,7 @@
importButtonPressed();
}
});
- gd = new GridData();
- importButton.setLayoutData(gd);
-
+
Button globalButton = new Button(top, SWT.PUSH);
globalButton.setText("Globals ...");
globalButton.setFont(JFaceResources.getDialogFont());
@@ -162,9 +188,7 @@
globalButtonPressed();
}
});
- gd = new GridData();
- globalButton.setLayoutData(gd);
-
+
tabFolder = new TabFolder(parent, SWT.NONE);
gd = new GridData();
gd.horizontalSpan = 3;
Added: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/task/TaskCellEditor.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/task/TaskCellEditor.java (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/task/TaskCellEditor.java 2007-11-24 01:26:01 UTC (rev 16767)
@@ -0,0 +1,38 @@
+package org.drools.eclipse.flow.ruleflow.view.property.task;
+/*
+ * Copyright 2005 JBoss Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import org.drools.eclipse.flow.common.view.property.BeanDialogCellEditor;
+import org.drools.eclipse.flow.common.view.property.EditBeanDialog;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Shell;
+
+/**
+ * Cell editor for an action.
+ *
+ * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
+ */
+public class TaskCellEditor extends BeanDialogCellEditor {
+
+ public TaskCellEditor(Composite parent) {
+ super(parent);
+ }
+
+ protected EditBeanDialog createDialog(Shell shell) {
+ return new TaskDialog(shell);
+ }
+
+}
\ No newline at end of file
Added: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/task/TaskDialog.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/task/TaskDialog.java (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/task/TaskDialog.java 2007-11-24 01:26:01 UTC (rev 16767)
@@ -0,0 +1,99 @@
+package org.drools.eclipse.flow.ruleflow.view.property.task;
+/*
+ * Copyright 2005 JBoss Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import org.drools.eclipse.flow.common.view.property.EditBeanDialog;
+import org.drools.ruleflow.common.core.Work;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+
+/**
+ * Dialog for editing tasks.
+ *
+ * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
+ */
+public class TaskDialog extends EditBeanDialog {
+
+ private Text nameText;
+// private DataTypeCombo dataTypeCombo;
+// private EditorComposite editorComposite;
+
+ public TaskDialog(Shell parentShell) {
+ super(parentShell, "Task editor");
+ }
+
+ protected Control createDialogArea(Composite parent) {
+ final Composite composite = (Composite) super.createDialogArea(parent);
+ GridLayout gridLayout = new GridLayout();
+ gridLayout.numColumns = 2;
+ composite.setLayout(gridLayout);
+
+ Label nameLabel = new Label(composite, SWT.NONE);
+ nameLabel.setText("Name: ");
+ nameText = new Text(composite, SWT.NONE);
+ GridData gridData = new GridData();
+ gridData.grabExcessHorizontalSpace = true;
+ gridData.horizontalAlignment = GridData.FILL;
+ nameText.setLayoutData(gridData);
+ String name = ((Work) getValue()).getName();
+ nameText.setText(name == null ? "" : name);
+
+// Label typeLabel = new Label(composite, SWT.NONE);
+// typeLabel.setText("Type: ");
+//
+// dataTypeCombo = new DataTypeCombo(composite,
+// SWT.NONE, DefaultDataTypeRegistry.getInstance());
+// DataType dataType = ((Variable) getValue()).getType();
+// dataTypeCombo.setDataType(dataType);
+//
+// new Label(composite, SWT.NONE);
+//
+// Label valueLabel = new Label(composite, SWT.NONE);
+// valueLabel.setText("Value: ");
+// gridData = new GridData();
+// gridData.verticalAlignment = SWT.TOP;
+// valueLabel.setLayoutData(gridData);
+// editorComposite = new EditorComposite(composite,
+// SWT.NONE, DefaultDataTypeRegistry.getInstance());
+// gridData = new GridData();
+// gridData.horizontalAlignment = GridData.FILL;
+// gridData.grabExcessHorizontalSpace = true;
+// editorComposite.setLayoutData(gridData);
+// editorComposite.setDataType(dataType);
+// editorComposite.setValue(((Variable) getValue()).getValue());
+//
+// Composite bottom = new Composite(composite, SWT.NONE);
+// gridData = new GridData();
+// gridData.grabExcessVerticalSpace = true;
+// gridData.horizontalSpan = 2;
+// bottom.setLayoutData(gridData);
+
+ return composite;
+ }
+
+ protected Object updateValue(Object value) {
+ Work task = (Work) getValue();
+ task.setName(nameText.getText());
+ return task;
+ }
+
+}
\ No newline at end of file
Added: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/task/TaskPropertyDescriptor.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/task/TaskPropertyDescriptor.java (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/task/TaskPropertyDescriptor.java 2007-11-24 01:26:01 UTC (rev 16767)
@@ -0,0 +1,40 @@
+package org.drools.eclipse.flow.ruleflow.view.property.task;
+/*
+ * Copyright 2005 JBoss Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import org.eclipse.jface.viewers.CellEditor;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.views.properties.PropertyDescriptor;
+
+/**
+ * Property descriptor for a task.
+ *
+ * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
+ */
+public class TaskPropertyDescriptor extends PropertyDescriptor {
+
+ public TaskPropertyDescriptor(Object id, String displayName) {
+ super(id, displayName);
+ }
+
+ public CellEditor createPropertyEditor(Composite parent) {
+ TaskCellEditor editor = new TaskCellEditor(parent);
+ if (getValidator() != null) {
+ editor.setValidator(getValidator());
+ }
+ return editor;
+ }
+}
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 2007-11-24 00:40:18 UTC (rev 16766)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/preferences/IDroolsConstants.java 2007-11-24 01:26:01 UTC (rev 16767)
@@ -7,5 +7,6 @@
String CACHE_PARSED_RULES = "Drools.CacheParsedRules";
String DRL_EDITOR_MATCHING_BRACKETS = "Drools.DRLMatchingBrackets";
String DRL_EDITOR_MATCHING_BRACKETS_COLOR = "Drools.DRLMatchingBracketsColor";
+ String DSL_RULE_EDITOR_COMPLETION_FULL_SENTENCES = "Drools.DSLRuleEditorCompletionFullSentences";
}
Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/view/rules/RulesView.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/view/rules/RulesView.java 2007-11-24 00:40:18 UTC (rev 16766)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/view/rules/RulesView.java 2007-11-24 01:26:01 UTC (rev 16767)
@@ -1,11 +1,17 @@
package org.drools.eclipse.view.rules;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
+import org.drools.compiler.PackageBuilder;
+import org.drools.compiler.ProcessBuilder;
import org.drools.eclipse.DRLInfo;
import org.drools.eclipse.DroolsEclipsePlugin;
import org.drools.eclipse.core.DroolsElement;
@@ -14,6 +20,7 @@
import org.drools.eclipse.core.Global;
import org.drools.eclipse.core.Package;
import org.drools.eclipse.core.Query;
+import org.drools.eclipse.core.Process;
import org.drools.eclipse.core.Rule;
import org.drools.eclipse.core.RuleSet;
import org.drools.eclipse.core.Template;
@@ -21,6 +28,8 @@
import org.drools.eclipse.core.ui.DroolsLabelProvider;
import org.drools.eclipse.core.ui.DroolsTreeSorter;
import org.drools.eclipse.core.ui.FilterActionGroup;
+import org.drools.eclipse.flow.common.editor.core.ProcessWrapper;
+import org.drools.eclipse.flow.ruleflow.core.RuleFlowProcessWrapper;
import org.drools.lang.descr.FactTemplateDescr;
import org.drools.lang.descr.FunctionDescr;
import org.drools.lang.descr.GlobalDescr;
@@ -55,6 +64,8 @@
import org.eclipse.ui.part.ViewPart;
import org.eclipse.ui.texteditor.ITextEditor;
+import com.thoughtworks.xstream.XStream;
+
public class RulesView extends ViewPart implements IDoubleClickListener, IResourceVisitor, IResourceChangeListener {
private final RuleSet ruleSet = DroolsModelBuilder.createRuleSet();
@@ -105,96 +116,130 @@
return false;
}
if (resource instanceof IFile
- && "drl".equals(resource.getFileExtension())
- && javaProject.isOnClasspath(resource)) {
- try {
- IFile file = (IFile) resource;
- DRLInfo drlInfo = DroolsEclipsePlugin.getDefault().parseResource(resource, false);
- String packageName = drlInfo.getPackageName();
- Package pkg = ruleSet.getPackage(packageName);
- if (pkg == null) {
- pkg = DroolsModelBuilder.addPackage(ruleSet, packageName, 0, 0);
- }
- // add rules
- List rules = drlInfo.getPackageDescr().getRules();
- for (Iterator iterator = rules.iterator(); iterator.hasNext();) {
- RuleDescr ruleDescr = (RuleDescr) iterator.next();
- boolean isQuery = ruleDescr instanceof QueryDescr;
- String ruleName = ruleDescr.getName();
- if (!isQuery) {
- Rule rule = DroolsModelBuilder.addRule(
- pkg, ruleName, file, ruleDescr.getStartCharacter(),
- ruleDescr.getEndCharacter() - ruleDescr.getStartCharacter() + 1, null);
- // create link between resource and created rule nodes
- List droolsElements = (List) resourcesMap.get(file);
- if (droolsElements == null) {
- droolsElements = new ArrayList();
- resourcesMap.put(file, droolsElements);
- }
- droolsElements.add(rule);
- } else {
- Query query = DroolsModelBuilder.addQuery(
- pkg, ruleName, file, ruleDescr.getStartCharacter(),
- ruleDescr.getEndCharacter() - ruleDescr.getStartCharacter() + 1);
- // create link between resource and created rule nodes
- List droolsElements = (List) resourcesMap.get(file);
- if (droolsElements == null) {
- droolsElements = new ArrayList();
- resourcesMap.put(file, droolsElements);
- }
- droolsElements.add(query);
- }
- }
- // add templates
- List templates = drlInfo.getPackageDescr().getFactTemplates();
- for (Iterator iterator = templates.iterator(); iterator.hasNext();) {
- FactTemplateDescr templateDescr = (FactTemplateDescr) iterator.next();
- Template template = DroolsModelBuilder.addTemplate(
- pkg, templateDescr.getName(), file, templateDescr.getStartCharacter(),
- templateDescr.getEndCharacter() - templateDescr.getStartCharacter() + 1);
- // create link between resource and created rule nodes
- List droolsElements = (List) resourcesMap.get(file);
- if (droolsElements == null) {
- droolsElements = new ArrayList();
- resourcesMap.put(file, droolsElements);
- }
- droolsElements.add(template);
- }
- // add globals
- List globals = drlInfo.getPackageDescr().getGlobals();
- for (Iterator iterator = globals.iterator(); iterator.hasNext();) {
- GlobalDescr globalDescr = (GlobalDescr) iterator.next();
- Global global = DroolsModelBuilder.addGlobal(
- pkg, globalDescr.getIdentifier(), file, globalDescr.getStartCharacter(),
- globalDescr.getEndCharacter() - globalDescr.getStartCharacter() + 1);
- // create link between resource and created rule nodes
- List droolsElements = (List) resourcesMap.get(file);
- if (droolsElements == null) {
- droolsElements = new ArrayList();
- resourcesMap.put(file, droolsElements);
- }
- droolsElements.add(global);
- }
- // add functions
- List functions = drlInfo.getPackageDescr().getFunctions();
- for (Iterator iterator = functions.iterator(); iterator.hasNext();) {
- FunctionDescr functionDescr = (FunctionDescr) iterator.next();
- String functionName = functionDescr.getName();
- Function function = DroolsModelBuilder.addFunction(
- pkg, functionName, file, functionDescr.getStartCharacter(),
- functionDescr.getEndCharacter() - functionDescr.getStartCharacter() + 1);
- // create link between resource and created rule nodes
- List droolsElements = (List) resourcesMap.get(file);
- if (droolsElements == null) {
- droolsElements = new ArrayList();
- resourcesMap.put(file, droolsElements);
- }
- droolsElements.add(function);
- }
- } catch (Throwable t) {
- DroolsEclipsePlugin.log(t);
- }
- return false;
+ && javaProject.isOnClasspath(resource)) {
+ IFile file = (IFile) resource;
+ if ("drl".equals(resource.getFileExtension())
+ || "dslr".equals(resource.getFileExtension())) {
+ try {
+ DRLInfo drlInfo = DroolsEclipsePlugin.getDefault().parseResource(resource, false);
+ String packageName = drlInfo.getPackageName();
+ Package pkg = ruleSet.getPackage(packageName);
+ if (pkg == null) {
+ pkg = DroolsModelBuilder.addPackage(ruleSet, packageName, 0, 0);
+ }
+ // add rules
+ List rules = drlInfo.getPackageDescr().getRules();
+ for (Iterator iterator = rules.iterator(); iterator.hasNext();) {
+ RuleDescr ruleDescr = (RuleDescr) iterator.next();
+ boolean isQuery = ruleDescr instanceof QueryDescr;
+ String ruleName = ruleDescr.getName();
+ if (!isQuery) {
+ Rule rule = DroolsModelBuilder.addRule(
+ pkg, ruleName, file, ruleDescr.getStartCharacter(),
+ ruleDescr.getEndCharacter() - ruleDescr.getStartCharacter() + 1, null);
+ // create link between resource and created rule nodes
+ List droolsElements = (List) resourcesMap.get(file);
+ if (droolsElements == null) {
+ droolsElements = new ArrayList();
+ resourcesMap.put(file, droolsElements);
+ }
+ droolsElements.add(rule);
+ } else {
+ Query query = DroolsModelBuilder.addQuery(
+ pkg, ruleName, file, ruleDescr.getStartCharacter(),
+ ruleDescr.getEndCharacter() - ruleDescr.getStartCharacter() + 1);
+ // create link between resource and created rule nodes
+ List droolsElements = (List) resourcesMap.get(file);
+ if (droolsElements == null) {
+ droolsElements = new ArrayList();
+ resourcesMap.put(file, droolsElements);
+ }
+ droolsElements.add(query);
+ }
+ }
+ // add templates
+ List templates = drlInfo.getPackageDescr().getFactTemplates();
+ for (Iterator iterator = templates.iterator(); iterator.hasNext();) {
+ FactTemplateDescr templateDescr = (FactTemplateDescr) iterator.next();
+ Template template = DroolsModelBuilder.addTemplate(
+ pkg, templateDescr.getName(), file, templateDescr.getStartCharacter(),
+ templateDescr.getEndCharacter() - templateDescr.getStartCharacter() + 1);
+ // create link between resource and created rule nodes
+ List droolsElements = (List) resourcesMap.get(file);
+ if (droolsElements == null) {
+ droolsElements = new ArrayList();
+ resourcesMap.put(file, droolsElements);
+ }
+ droolsElements.add(template);
+ }
+ // add globals
+ List globals = drlInfo.getPackageDescr().getGlobals();
+ for (Iterator iterator = globals.iterator(); iterator.hasNext();) {
+ GlobalDescr globalDescr = (GlobalDescr) iterator.next();
+ Global global = DroolsModelBuilder.addGlobal(
+ pkg, globalDescr.getIdentifier(), file, globalDescr.getStartCharacter(),
+ globalDescr.getEndCharacter() - globalDescr.getStartCharacter() + 1);
+ // create link between resource and created rule nodes
+ List droolsElements = (List) resourcesMap.get(file);
+ if (droolsElements == null) {
+ droolsElements = new ArrayList();
+ resourcesMap.put(file, droolsElements);
+ }
+ droolsElements.add(global);
+ }
+ // add functions
+ List functions = drlInfo.getPackageDescr().getFunctions();
+ for (Iterator iterator = functions.iterator(); iterator.hasNext();) {
+ FunctionDescr functionDescr = (FunctionDescr) iterator.next();
+ String functionName = functionDescr.getName();
+ Function function = DroolsModelBuilder.addFunction(
+ pkg, functionName, file, functionDescr.getStartCharacter(),
+ functionDescr.getEndCharacter() - functionDescr.getStartCharacter() + 1);
+ // create link between resource and created rule nodes
+ List droolsElements = (List) resourcesMap.get(file);
+ if (droolsElements == null) {
+ droolsElements = new ArrayList();
+ resourcesMap.put(file, droolsElements);
+ }
+ droolsElements.add(function);
+ }
+ } catch (Throwable t) {
+ DroolsEclipsePlugin.log(t);
+ }
+ return false;
+ } else if ("rf".equals(resource.getFileExtension())) {
+ try {
+ String processString = convertToString(file.getContents());
+ XStream stream = new XStream();
+ stream.setMode(XStream.ID_REFERENCES);
+
+ ClassLoader oldLoader = Thread.currentThread().getContextClassLoader();
+ ClassLoader newLoader = this.getClass().getClassLoader();
+ try {
+ Thread.currentThread().setContextClassLoader(newLoader);
+ Object o = stream.fromXML(processString);
+ if (o instanceof ProcessWrapper) {
+ String packageName = ((ProcessWrapper) o).getProcess().getPackageName();
+ Package pkg = ruleSet.getPackage(packageName);
+ if (pkg == null) {
+ pkg = DroolsModelBuilder.addPackage(ruleSet, packageName, 0, 0);
+ }
+ Process process = DroolsModelBuilder.addProcess(pkg, ((ProcessWrapper) o).getProcess().getId(), file);
+ List droolsElements = (List) resourcesMap.get(file);
+ if (droolsElements == null) {
+ droolsElements = new ArrayList();
+ resourcesMap.put(file, droolsElements);
+ }
+ droolsElements.add(process);
+ }
+ } finally {
+ Thread.currentThread().setContextClassLoader(oldLoader);
+ }
+ } catch (Throwable t) {
+ DroolsEclipsePlugin.log(t);
+ }
+ return false;
+ }
}
}
return true;
@@ -285,4 +330,14 @@
}
}
+ private static String convertToString(final InputStream inputStream) throws IOException {
+ Reader reader = new InputStreamReader(inputStream);
+ final StringBuffer text = new StringBuffer();
+ final char[] buf = new char[1024];
+ int len = 0;
+ while ((len = reader.read(buf)) >= 0) {
+ text.append(buf, 0, len);
+ }
+ return text.toString();
+ }
}
More information about the jboss-svn-commits
mailing list