[jboss-svn-commits] JBL Code SVN: r12756 - in labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main: java/org/drools/eclipse/editors/completion and 5 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Thu Jun 21 17:43:46 EDT 2007
Author: KrisVerlaenen
Date: 2007-06-21 17:43:46 -0400 (Thu, 21 Jun 2007)
New Revision: 12756
Added:
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/RuleFlowImportsDialog.java
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/completion/AbstractCompletionProcessor.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/ruleflow/view/property/constraint/ConstraintListDialog.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/util/ProjectClassLoader.java
labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/wizard/rule/NewRulePackagePage.java
labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/resources/org/drools/eclipse/wizard/dsl/template.dsl
labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/resources/org/drools/eclipse/wizard/project/DecisionTableLauncherSample.java.template
labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/resources/org/drools/eclipse/wizard/project/RuleLauncherSample.java.template
labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/resources/org/drools/eclipse/wizard/project/Sample.xls.template
Log:
JBRULES-940: Apply v4.0 API changes to IDE example code
JBRULES-939: globals should show up in code completion of drl editor
JBRULES-618: Ruleflow IDE integration
- Added code completion to constraint editor
- Added imports to constraint editor
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 2007-06-21 21:43:34 UTC (rev 12755)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/DRLRuleEditor.java 2007-06-21 21:43:46 UTC (rev 12756)
@@ -15,6 +15,7 @@
import org.drools.lang.descr.FactTemplateDescr;
import org.drools.lang.descr.FunctionDescr;
import org.drools.lang.descr.FunctionImportDescr;
+import org.drools.lang.descr.GlobalDescr;
import org.drools.lang.descr.ImportDescr;
import org.drools.lang.descr.PackageDescr;
import org.eclipse.core.resources.IMarker;
@@ -39,6 +40,7 @@
protected List imports;
protected List functions;
protected Map templates;
+ protected List globals;
protected String packageName;
protected List classesInPackage;
@@ -73,6 +75,13 @@
return (FactTemplateDescr) templates.get(name);
}
+ public List getGlobals() {
+ if (globals == null) {
+ loadImportsAndFunctions();
+ }
+ return globals;
+ }
+
public String getPackage() {
if (packageName == null) {
loadImportsAndFunctions();
@@ -88,29 +97,34 @@
}
protected List getAllClassesInPackage(String packageName) {
- final List list = new ArrayList();
+ List list = new ArrayList();
if (packageName != null) {
IEditorInput input = getEditorInput();
if (input instanceof IFileEditorInput) {
IProject project = ((IFileEditorInput) input).getFile().getProject();
IJavaProject javaProject = JavaCore.create(project);
-
- CompletionRequestor requestor = new CompletionRequestor() {
- public void accept(org.eclipse.jdt.core.CompletionProposal proposal) {
- String className = new String(proposal.getCompletion());
- if (proposal.getKind() == org.eclipse.jdt.core.CompletionProposal.TYPE_REF) {
- list.add(className);
- }
- // ignore all other proposals
- }
- };
+ list = getAllClassesInPackage(packageName, javaProject);
+ }
+ }
+ return list;
+ }
- try {
- javaProject.newEvaluationContext().codeComplete(packageName + ".", packageName.length() + 1, requestor);
- } catch (Throwable t) {
- DroolsEclipsePlugin.log(t);
+ public static List getAllClassesInPackage(String packageName, IJavaProject javaProject) {
+ final List list = new ArrayList();
+ CompletionRequestor requestor = new CompletionRequestor() {
+ public void accept(org.eclipse.jdt.core.CompletionProposal proposal) {
+ String className = new String(proposal.getCompletion());
+ if (proposal.getKind() == org.eclipse.jdt.core.CompletionProposal.TYPE_REF) {
+ list.add(className);
}
+ // ignore all other proposals
}
+ };
+
+ try {
+ javaProject.newEvaluationContext().codeComplete(packageName + ".", packageName.length() + 1, requestor);
+ } catch (Throwable t) {
+ DroolsEclipsePlugin.log(t);
}
return list;
}
@@ -191,6 +205,14 @@
FactTemplateDescr template = (FactTemplateDescr) iterator.next();
templates.put(template.getName(), template);
}
+ // globals
+ List globalDescrs = descr.getGlobals();
+ globals = new ArrayList();
+ iterator = globalDescrs.iterator();
+ while (iterator.hasNext()) {
+ GlobalDescr global = (GlobalDescr) iterator.next();
+ globals.add(global);
+ }
} catch (DroolsParserException e) {
DroolsEclipsePlugin.log(e);
}
@@ -213,6 +235,7 @@
imports = null;
functions = null;
templates = null;
+ globals = null;
packageName = null;
classesInPackage = null;
}
Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/AbstractCompletionProcessor.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/AbstractCompletionProcessor.java 2007-06-21 21:43:34 UTC (rev 12755)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/AbstractCompletionProcessor.java 2007-06-21 21:43:46 UTC (rev 12756)
@@ -12,7 +12,7 @@
import org.eclipse.jface.text.contentassist.IContentAssistProcessor;
import org.eclipse.jface.text.contentassist.IContextInformation;
import org.eclipse.jface.text.contentassist.IContextInformationValidator;
-import org.eclipse.ui.part.EditorPart;
+import org.eclipse.ui.IEditorPart;
/**
*
@@ -20,13 +20,13 @@
*/
public abstract class AbstractCompletionProcessor implements IContentAssistProcessor {
- private EditorPart editor;
+ private IEditorPart editor;
- public AbstractCompletionProcessor(EditorPart editor) {
+ public AbstractCompletionProcessor(IEditorPart editor) {
this.editor = editor;
}
- protected EditorPart getEditor() {
+ protected IEditorPart getEditor() {
return editor;
}
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 2007-06-21 21:43:34 UTC (rev 12755)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/DefaultCompletionProcessor.java 2007-06-21 21:43:46 UTC (rev 12756)
@@ -1,10 +1,12 @@
package org.drools.eclipse.editors.completion;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -12,6 +14,8 @@
import org.drools.eclipse.DroolsPluginImages;
import org.drools.eclipse.editors.AbstractRuleEditor;
import org.drools.eclipse.editors.DRLRuleEditor;
+import org.drools.lang.descr.FactTemplateDescr;
+import org.drools.lang.descr.GlobalDescr;
import org.drools.util.StringUtils;
import org.eclipse.core.resources.IProject;
import org.eclipse.jdt.core.CompletionProposal;
@@ -34,7 +38,7 @@
* This processor will also read behind the current editing position, to provide some context to
* help provide the pop up list.
*
- * @author Michael Neale
+ * @author Michael Neale, Kris Verlaenen
*/
public class DefaultCompletionProcessor extends AbstractCompletionProcessor {
@@ -53,17 +57,12 @@
super(editor);
}
- protected DRLRuleEditor getDRLEditor() {
- return (DRLRuleEditor) getEditor();
- }
-
protected List getCompletionProposals(ITextViewer viewer, int documentOffset) {
try {
IDocument doc = viewer.getDocument();
String backText = readBackwards( documentOffset, doc );
- String prefix = "";
- prefix = CompletionUtil.stripLastWord(backText);
+ String prefix = CompletionUtil.stripLastWord(backText);
List props = null;
Matcher matcher = IMPORT_PATTERN.matcher(backText);
@@ -73,7 +72,16 @@
} else {
matcher = FUNCTION_PATTERN.matcher(backText);
if (matcher.matches()) {
+ // extract function parameters
Map params = extractParams(matcher.group(3));
+ // add global parameters
+ List globals = getGlobals();
+ if (globals != null) {
+ for (Iterator iterator = globals.iterator(); iterator.hasNext(); ) {
+ GlobalDescr global = (GlobalDescr) iterator.next();
+ params.put(global.getIdentifier(), global.getType());
+ }
+ }
String functionText = matcher.group(4);
props = getJavaCompletionProposals(functionText, prefix, params);
filterProposalsOnPrefix(prefix, props);
@@ -178,7 +186,7 @@
try {
IEvaluationContext evalContext = javaProject.newEvaluationContext();
- List imports = getDRLEditor().getImports();
+ List imports = getImports();
if (imports != null && imports.size() > 0) {
evalContext.setImports((String[]) imports.toArray(new String[imports.size()]));
}
@@ -200,6 +208,48 @@
return list;
}
+ protected List getImports() {
+ if (getEditor() instanceof DRLRuleEditor) {
+ return ((DRLRuleEditor) getEditor()).getImports();
+ }
+ return Collections.EMPTY_LIST;
+ }
+
+ protected List getFunctions() {
+ if (getEditor() instanceof DRLRuleEditor) {
+ return ((DRLRuleEditor) getEditor()).getFunctions();
+ }
+ return Collections.EMPTY_LIST;
+ }
+
+ protected Set getTemplates() {
+ if (getEditor() instanceof DRLRuleEditor) {
+ return ((DRLRuleEditor) getEditor()).getTemplates();
+ }
+ return Collections.emptySet();
+ }
+
+ protected FactTemplateDescr getTemplate(String name) {
+ if (getEditor() instanceof DRLRuleEditor) {
+ return ((DRLRuleEditor) getEditor()).getTemplate(name);
+ }
+ return null;
+ }
+
+ protected List getGlobals() {
+ if (getEditor() instanceof DRLRuleEditor) {
+ return ((DRLRuleEditor) getEditor()).getGlobals();
+ }
+ return Collections.EMPTY_LIST;
+ }
+
+ protected List getClassesInPackage() {
+ if (getEditor() instanceof DRLRuleEditor) {
+ return ((DRLRuleEditor) getEditor()).getClassesInPackage();
+ }
+ return Collections.EMPTY_LIST;
+ }
+
protected boolean isStartOfJavaExpression(String text) {
return "".equals(text.trim()) || START_OF_NEW_JAVA_STATEMENT.matcher(text).matches();
}
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 2007-06-21 21:43:34 UTC (rev 12755)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/RuleCompletionProcessor.java 2007-06-21 21:43:46 UTC (rev 12756)
@@ -6,7 +6,6 @@
import java.util.Iterator;
import java.util.List;
import java.util.Map;
-import java.util.Set;
import org.drools.base.ClassTypeResolver;
import org.drools.compiler.DrlParser;
@@ -24,6 +23,7 @@
import org.drools.lang.descr.FieldBindingDescr;
import org.drools.lang.descr.FieldTemplateDescr;
import org.drools.lang.descr.FromDescr;
+import org.drools.lang.descr.GlobalDescr;
import org.drools.lang.descr.NotDescr;
import org.drools.lang.descr.OrDescr;
import org.drools.lang.descr.PackageDescr;
@@ -131,8 +131,7 @@
case Location.LOCATION_LHS_FROM_COLLECT:
case Location.LOCATION_LHS_BEGIN_OF_CONDITION_EXISTS:
// and add imported classes
- List imports = getDRLEditor().getImports();
- Iterator iterator = imports.iterator();
+ Iterator iterator = getImports().iterator();
while (iterator.hasNext()) {
String name = (String) iterator.next();
int index = name.lastIndexOf(".");
@@ -146,8 +145,7 @@
list.add(p);
}
}
- List classesInPackage = getDRLEditor().getClassesInPackage();
- iterator = classesInPackage.iterator();
+ iterator = getClassesInPackage().iterator();
while (iterator.hasNext()) {
String name = (String) iterator.next();
int index = name.lastIndexOf(".");
@@ -161,8 +159,7 @@
list.add(p);
}
}
- Set templates = getDRLEditor().getTemplates();
- iterator = templates.iterator();
+ iterator = getTemplates().iterator();
while (iterator.hasNext()) {
String name = (String) iterator.next();
RuleCompletionProposal p = new RuleCompletionProposal(
@@ -181,7 +178,7 @@
prefix, className, list);
if (!isTemplate) {
ClassTypeResolver resolver = new ClassTypeResolver(
- getDRLEditor().getImports(), ProjectClassLoader
+ getImports(), ProjectClassLoader
.getProjectClassLoader(getEditor()));
try {
Class clazz = resolver.resolveType(className);
@@ -299,6 +296,7 @@
}
list.add(new RuleCompletionProposal(prefix.length(), "()",
"( )", 2, DROOLS_ICON));
+ // add parameters with possibly matching type
DrlParser parser = new DrlParser();
try {
PackageDescr descr = parser.parse(backText);
@@ -316,7 +314,7 @@
RuleCompletionProposal proposal = new RuleCompletionProposal(
prefix.length(), paramName);
proposal.setPriority(-1);
- proposal.setImage(METHOD_ICON);
+ proposal.setImage(VARIABLE_ICON);
list.add(proposal);
}
}
@@ -324,6 +322,20 @@
} catch (DroolsParserException exc) {
// do nothing
}
+ // add globals with possibly matching type
+ List globals = getGlobals();
+ if (globals != null) {
+ for (iterator = globals.iterator(); iterator.hasNext(); ) {
+ GlobalDescr global = (GlobalDescr) iterator.next();
+ if (isSubtypeOf(global.getType(), type)) {
+ RuleCompletionProposal proposal = new RuleCompletionProposal(
+ prefix.length(), global.getIdentifier());
+ proposal.setPriority(-1);
+ proposal.setImage(VARIABLE_ICON);
+ list.add(proposal);
+ }
+ }
+ }
break;
case Location.LOCATION_LHS_INSIDE_EVAL:
String content = (String) location
@@ -355,7 +367,7 @@
"collect", "collect ( )", 10, DROOLS_ICON));
// add all functions
if ("".equals(fromText)) {
- List functions = getDRLEditor().getFunctions();
+ List functions = getFunctions();
iterator = functions.iterator();
while (iterator.hasNext()) {
String name = (String) iterator.next() + "()";
@@ -399,7 +411,7 @@
private String getPropertyClass(String className, String propertyName) {
if (className != null && propertyName != null) {
- FactTemplateDescr template = getDRLEditor().getTemplate(className);
+ FactTemplateDescr template = getTemplate(className);
if (template != null) {
Iterator iterator = template.getFields().iterator();
while (iterator.hasNext()) {
@@ -411,7 +423,7 @@
return type;
}
ClassTypeResolver resolver = new ClassTypeResolver(
- getDRLEditor().getImports(), ProjectClassLoader
+ getImports(), ProjectClassLoader
.getProjectClassLoader(getEditor()));
try {
Class clazz = resolver.resolveType(type);
@@ -427,7 +439,7 @@
// if not found, return null
} else {
ClassTypeResolver resolver = new ClassTypeResolver(
- getDRLEditor().getImports(), ProjectClassLoader
+ getImports(), ProjectClassLoader
.getProjectClassLoader(getEditor()));
try {
Class clazz = resolver.resolveType(className);
@@ -450,6 +462,15 @@
private Map getRuleParameters(String backText) {
Map result = new HashMap();
+ // add globals
+ List globals = getGlobals();
+ if (globals != null) {
+ for (Iterator iterator = globals.iterator(); iterator.hasNext(); ) {
+ GlobalDescr global = (GlobalDescr) iterator.next();
+ result.put(global.getIdentifier(), global.getType());
+ }
+ }
+ // add parameters defined in conditions
try {
DrlParser parser = new DrlParser();
PackageDescr descr = parser.parse(backText);
@@ -515,8 +536,7 @@
class1 = convertToNonPrimitiveClass(class1);
class2 = convertToNonPrimitiveClass(class2);
// TODO add code to take primitive types into account
- ClassTypeResolver resolver = new ClassTypeResolver(getDRLEditor()
- .getImports(), ProjectClassLoader
+ ClassTypeResolver resolver = new ClassTypeResolver(getImports(), ProjectClassLoader
.getProjectClassLoader(getEditor()));
try {
Class clazz1 = resolver.resolveType(class1);
@@ -558,7 +578,7 @@
private void addRHSFunctionCompletionProposals(List list, String prefix) {
Iterator iterator;
RuleCompletionProposal prop;
- List functions = getDRLEditor().getFunctions();
+ List functions = getFunctions();
iterator = functions.iterator();
while (iterator.hasNext()) {
String name = (String) iterator.next() + "()";
@@ -686,7 +706,7 @@
private boolean addFactTemplatePropertyProposals(String prefix,
String templateName, List list) {
- FactTemplateDescr descr = getDRLEditor().getTemplate(templateName);
+ FactTemplateDescr descr = getTemplate(templateName);
if (descr == null) {
return false;
}
Added: 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 (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/constraint/ConstraintCompletionProcessor.java 2007-06-21 21:43:46 UTC (rev 12756)
@@ -0,0 +1,119 @@
+package org.drools.eclipse.flow.ruleflow.view.property.constraint;
+
+/*
+ * 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.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.drools.eclipse.editors.DRLRuleEditor;
+import org.drools.eclipse.editors.completion.RuleCompletionProcessor;
+import org.drools.ruleflow.core.RuleFlowProcess;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jface.text.BadLocationException;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IFileEditorInput;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * Completion for ruleflow constraints.
+ *
+ * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
+ */
+public class ConstraintCompletionProcessor extends RuleCompletionProcessor {
+
+ private RuleFlowProcess process;
+ private List imports;
+
+ public ConstraintCompletionProcessor(RuleFlowProcess process) {
+ super(null);
+ this.process = process;
+ }
+
+ public IEditorPart getEditor() {
+ IWorkbench workbench = PlatformUI.getWorkbench();
+ if (workbench != null) {
+ IWorkbenchWindow workbenchWindow = workbench.getActiveWorkbenchWindow();
+ if (workbenchWindow != null) {
+ IWorkbenchPage workbenchPage = workbenchWindow.getActivePage();
+ if (workbenchPage != null) {
+ return workbenchPage.getActiveEditor();
+ }
+ }
+ }
+ return null;
+ }
+
+ protected String readBackwards(int documentOffset, IDocument doc) throws BadLocationException {
+ int startPart = doc.getPartition(documentOffset).getOffset();
+ String prefix = doc.get(startPart, documentOffset - startPart);
+ return "rule dummy \n when \n" + prefix;
+ }
+
+ public List getImports() {
+ if (imports == null) {
+ loadImports();
+ }
+ return imports;
+ }
+
+ private void loadImports() {
+ this.imports = new ArrayList();
+ List imports = process.getImports();
+ if (imports != null) {
+ Iterator iterator = imports.iterator();
+ while (iterator.hasNext()) {
+ String importName = (String) iterator.next();
+ if (importName.endsWith(".*")) {
+ IJavaProject javaProject = getJavaProject();
+ if (javaProject != null) {
+ String packageName = importName.substring(0, importName.length() - 2);
+ this.imports.addAll(DRLRuleEditor.getAllClassesInPackage(packageName, javaProject));
+ }
+ } else {
+ this.imports.add(importName);
+ }
+ }
+ }
+ }
+
+ private IJavaProject getJavaProject() {
+ IEditorPart editor = getEditor();
+ if (editor != null && editor.getEditorInput() instanceof IFileEditorInput) {
+ IFile file = ((IFileEditorInput) editor.getEditorInput()).getFile();
+ try {
+ if (file.getProject().getNature("org.eclipse.jdt.core.javanature") != null) {
+ return JavaCore.create(file.getProject());
+ }
+ } catch (CoreException e) {
+ // do nothing
+ }
+ }
+ return null;
+ }
+
+ public void reset() {
+ this.imports = null;
+ }
+}
Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/constraint/ConstraintListDialog.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/constraint/ConstraintListDialog.java 2007-06-21 21:43:34 UTC (rev 12755)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/constraint/ConstraintListDialog.java 2007-06-21 21:43:46 UTC (rev 12756)
@@ -103,8 +103,6 @@
final Runnable r = new Runnable() {
public void run() {
-
- // swt version
RuleFlowConstraintDialog dialog = new RuleFlowConstraintDialog(
getShell(), process);
dialog.create();
@@ -120,7 +118,6 @@
}
};
-
r.run();
}
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 2007-06-21 21:43:34 UTC (rev 12755)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/constraint/RuleFlowConstraintDialog.java 2007-06-21 21:43:46 UTC (rev 12756)
@@ -15,11 +15,28 @@
* limitations under the License.
*/
+import java.util.List;
+
+import org.drools.eclipse.editors.DRLSourceViewerConfig;
+import org.drools.eclipse.editors.scanners.DRLPartionScanner;
import org.drools.ruleflow.core.Constraint;
import org.drools.ruleflow.core.RuleFlowProcess;
import org.drools.ruleflow.core.impl.ConstraintImpl;
import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.jface.text.Document;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.IDocumentPartitioner;
+import org.eclipse.jface.text.contentassist.ContentAssistant;
+import org.eclipse.jface.text.contentassist.IContentAssistant;
+import org.eclipse.jface.text.reconciler.IReconciler;
+import org.eclipse.jface.text.rules.FastPartitioner;
+import org.eclipse.jface.text.source.ISourceViewer;
+import org.eclipse.jface.text.source.SourceViewer;
import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.KeyEvent;
+import org.eclipse.swt.events.KeyListener;
+import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Point;
@@ -42,15 +59,18 @@
public class RuleFlowConstraintDialog extends Dialog {
private Constraint constraint;
+ private RuleFlowProcess process;
private boolean success;
private Button alwaysTrue;
private Text nameText;
private Text priorityText;
private TabFolder tabFolder;
- private Text translation;
+ private SourceViewer constraintViewer;
+ private ConstraintCompletionProcessor completionProcessor;
public RuleFlowConstraintDialog(Shell parentShell, RuleFlowProcess process) {
super(parentShell);
+ this.process = process;
setShellStyle(getShellStyle() | SWT.RESIZE);
}
@@ -64,9 +84,47 @@
}
private Control createTextualEditor(Composite parent) {
- translation = new Text(parent, SWT.BORDER);
- return translation;
+ constraintViewer = new SourceViewer(parent, null, SWT.BORDER);
+ constraintViewer.configure(new DRLSourceViewerConfig(null) {
+ public IReconciler getReconciler(ISourceViewer sourceViewer) {
+ return null;
+ }
+ public IContentAssistant getContentAssistant(ISourceViewer sourceViewer) {
+ ContentAssistant assistant = new ContentAssistant();
+ completionProcessor = new ConstraintCompletionProcessor(process);
+ assistant.setContentAssistProcessor(
+ completionProcessor, IDocument.DEFAULT_CONTENT_TYPE);
+ assistant.setProposalPopupOrientation(IContentAssistant.PROPOSAL_OVERLAY);
+ return assistant;
+ }
+ });
+ IDocument document = new Document();
+ constraintViewer.setDocument(document);
+ IDocumentPartitioner partitioner =
+ new FastPartitioner(
+ new DRLPartionScanner(),
+ DRLPartionScanner.LEGAL_CONTENT_TYPES);
+ partitioner.connect(document);
+ document.setDocumentPartitioner(partitioner);
+ constraintViewer.getControl().addKeyListener(new KeyListener() {
+ public void keyPressed(KeyEvent e) {
+ if (e.character == ' ' && e.stateMask == SWT.CTRL) {
+ constraintViewer.doOperation(ISourceViewer.CONTENTASSIST_PROPOSALS);
+ }
+ }
+ public void keyReleased(KeyEvent e) {
+ }
+ });
+ return constraintViewer.getControl();
}
+
+ private String getConstraintText() {
+ return constraintViewer.getDocument().get();
+ }
+
+ private void setConstraintText(String text) {
+ constraintViewer.getDocument().set(text);
+ }
public Control createDialogArea(Composite parent) {
@@ -81,7 +139,7 @@
top.setLayoutData(gd);
layout = new GridLayout();
- layout.numColumns = 2;
+ layout.numColumns = 3;
top.setLayout(layout);
Label l1 = new Label(top, SWT.None);
@@ -92,6 +150,7 @@
gd = new GridData();
gd.horizontalAlignment = GridData.FILL;
gd.widthHint = 200;
+ gd.horizontalSpan = 2;
nameText.setLayoutData(gd);
Label l2 = new Label(top, SWT.NONE);
@@ -101,6 +160,7 @@
priorityText = new Text(top, SWT.BORDER);
gd = new GridData();
gd.widthHint = 200;
+ gd.horizontalSpan = 2;
priorityText.setLayoutData(gd);
alwaysTrue = new Button(top, SWT.CHECK);
@@ -108,10 +168,22 @@
gd = new GridData();
gd.horizontalSpan = 2;
alwaysTrue.setLayoutData(gd);
+
+ Button importButton = new Button(top, SWT.PUSH);
+ importButton.setText("Imports ...");
+ importButton.setFont(JFaceResources.getDialogFont());
+ importButton.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent event) {
+ importButtonPressed();
+ }
+ });
+ gd = new GridData();
+ gd.horizontalAlignment = GridData.END;
+ importButton.setLayoutData(gd);
tabFolder = new TabFolder(parent, SWT.NONE);
gd = new GridData();
- gd.horizontalSpan = 2;
+ gd.horizontalSpan = 3;
gd.grabExcessHorizontalSpace = true;
gd.grabExcessVerticalSpace = true;
gd.verticalAlignment = GridData.FILL;
@@ -134,6 +206,23 @@
return tabFolder;
}
+
+ private void importButtonPressed() {
+ final Runnable r = new Runnable() {
+ public void run() {
+ RuleFlowImportsDialog dialog =
+ new RuleFlowImportsDialog(getShell(), process);
+ dialog.create();
+ int code = dialog.open();
+ if (code != CANCEL) {
+ List imports = dialog.getImports();
+ process.setImports(imports);
+ completionProcessor.reset();
+ }
+ }
+ };
+ r.run();
+ }
protected void okPressed() {
int selectionIndex = tabFolder.getSelectionIndex();
@@ -150,7 +239,7 @@
success = true;
constraint = new ConstraintImpl();
constraint.setConstraint(null);
- constraint.setConstraint(translation.getText());
+ constraint.setConstraint(getConstraintText());
constraint.setName(nameText.getText());
try {
constraint.setPriority(Integer.parseInt(priorityText.getText()));
@@ -166,7 +255,7 @@
public void updateConstraint() {
constraint = new ConstraintImpl();
if (!alwaysTrue.getSelection()) {
- constraint.setConstraint(translation.getText());
+ constraint.setConstraint(getConstraintText());
} else {
constraint.setConstraint("eval(true)");
}
@@ -188,13 +277,13 @@
if ("eval(true)".equals(constraint.getConstraint())) {
alwaysTrue.setSelection(true);
} else {
- translation.setText(constraint.getConstraint().toString());
+ setConstraintText(constraint.getConstraint().toString());
}
tabFolder.setVisible(!alwaysTrue.getSelection());
nameText.setText(constraint.getName() == null ? "" : constraint
.getName());
priorityText.setText(constraint.getPriority() + "");
- translation.setText(constraint.getConstraint());
+ setConstraintText(constraint.getConstraint());
} else {
priorityText.setText("1");
nameText.setText("constraint");
Added: 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 (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/constraint/RuleFlowImportsDialog.java 2007-06-21 21:43:46 UTC (rev 12756)
@@ -0,0 +1,138 @@
+package org.drools.eclipse.flow.ruleflow.view.property.constraint;
+/*
+ * 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.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.drools.eclipse.editors.DRLSourceViewerConfig;
+import org.drools.ruleflow.core.RuleFlowProcess;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.text.Document;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.contentassist.IContentAssistant;
+import org.eclipse.jface.text.reconciler.IReconciler;
+import org.eclipse.jface.text.source.ISourceViewer;
+import org.eclipse.jface.text.source.SourceViewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Point;
+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.Shell;
+import org.eclipse.swt.widgets.TabFolder;
+import org.eclipse.swt.widgets.TabItem;
+
+/**
+ * Dialog for editing imports.
+ *
+ * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
+ */
+public class RuleFlowImportsDialog extends Dialog {
+
+ private static final Pattern IMPORT_PATTERN = Pattern.compile(
+ "\\n\\s*import\\s+([^\\s;#]+);?", Pattern.DOTALL);
+
+ private RuleFlowProcess process;
+ private boolean success;
+ private TabFolder tabFolder;
+ private SourceViewer importsViewer;
+ private List imports;
+
+ public RuleFlowImportsDialog(Shell parentShell, RuleFlowProcess process) {
+ super(parentShell);
+ this.process = process;
+ setShellStyle(getShellStyle() | SWT.RESIZE);
+ }
+
+ protected void configureShell(Shell newShell) {
+ super.configureShell(newShell);
+ newShell.setText("Imports editor");
+ }
+
+ protected Point getInitialSize() {
+ return new Point(600, 450);
+ }
+
+ private Control createTextualEditor(Composite parent) {
+ importsViewer = new SourceViewer(parent, null, SWT.BORDER);
+ importsViewer.configure(new DRLSourceViewerConfig(null) {
+ public IReconciler getReconciler(ISourceViewer sourceViewer) {
+ return null;
+ }
+ public IContentAssistant getContentAssistant(ISourceViewer sourceViewer) {
+ return null;
+ }
+ });
+ IDocument document = new Document(getProcessImports());
+ importsViewer.setDocument(document);
+ return importsViewer.getControl();
+ }
+
+ private String getProcessImports() {
+ String result = "# define your imports here: e.g. import com.sample.MyClass\n";
+ List imports = process.getImports();
+ if (imports != null) {
+ for (Iterator iterator = imports.iterator(); iterator.hasNext(); ) {
+ result += "import " + (String) iterator.next() + "\n";
+ }
+ }
+ return result;
+ }
+
+ public Control createDialogArea(Composite parent) {
+ GridLayout layout = new GridLayout();
+ parent.setLayout(layout);
+ layout.numColumns = 1;
+ tabFolder = new TabFolder(parent, SWT.NONE);
+ GridData gd = new GridData();
+ gd.grabExcessHorizontalSpace = true;
+ gd.grabExcessVerticalSpace = true;
+ gd.verticalAlignment = GridData.FILL;
+ gd.horizontalAlignment = GridData.FILL;
+ tabFolder.setLayoutData(gd);
+ TabItem textEditorTab = new TabItem(tabFolder, SWT.NONE);
+ textEditorTab.setText("Textual Editor");
+ textEditorTab.setControl(createTextualEditor(tabFolder));
+ return tabFolder;
+ }
+
+ protected void okPressed() {
+ success = true;
+ updateImports();
+ super.okPressed();
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public List getImports() {
+ return imports;
+ }
+
+ private void updateImports() {
+ this.imports = new ArrayList();
+ Matcher matcher = IMPORT_PATTERN.matcher(importsViewer.getDocument().get());
+ while (matcher.find()) {
+ this.imports.add(matcher.group(1));
+ }
+ }
+}
Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/util/ProjectClassLoader.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/util/ProjectClassLoader.java 2007-06-21 21:43:34 UTC (rev 12755)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/util/ProjectClassLoader.java 2007-06-21 21:43:46 UTC (rev 12756)
@@ -8,6 +8,7 @@
import java.util.List;
import org.drools.eclipse.DroolsEclipsePlugin;
+import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.ResourcesPlugin;
@@ -25,13 +26,17 @@
public static URLClassLoader getProjectClassLoader(IEditorPart editor) {
IEditorInput input = editor.getEditorInput();
if (input instanceof IFileEditorInput) {
- IProject project = ((IFileEditorInput) input).getFile().getProject();
- IJavaProject javaProject = JavaCore.create(project);
- return getProjectClassLoader(javaProject);
+ return getProjectClassLoader(((IFileEditorInput) input).getFile());
}
return null;
}
+ public static URLClassLoader getProjectClassLoader(IFile file) {
+ IProject project = file.getProject();
+ IJavaProject javaProject = JavaCore.create(project);
+ return getProjectClassLoader(javaProject);
+ }
+
public static URLClassLoader getProjectClassLoader(IJavaProject project) {
List pathElements = getProjectClassPathURLs(project);
URL urlPaths[] = (URL[]) pathElements.toArray(new URL[pathElements.size()]);
Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/wizard/rule/NewRulePackagePage.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/wizard/rule/NewRulePackagePage.java 2007-06-21 21:43:34 UTC (rev 12755)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/wizard/rule/NewRulePackagePage.java 2007-06-21 21:43:46 UTC (rev 12756)
@@ -131,8 +131,9 @@
return false;
}
String fileName = getFileName();
- if (!fileName.endsWith(".drl")) {
- setFileName(fileName + ".drl");
+ String extension = expander.getSelection() ? ".dslr" : ".drl";
+ if (!fileName.endsWith(extension)) {
+ setFileName(fileName + extension);
}
org.eclipse.core.resources.IFile newFile = createNewFile();
if (newFile == null)
Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/resources/org/drools/eclipse/wizard/dsl/template.dsl
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/resources/org/drools/eclipse/wizard/dsl/template.dsl 2007-06-21 21:43:34 UTC (rev 12755)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/resources/org/drools/eclipse/wizard/dsl/template.dsl 2007-06-21 21:43:46 UTC (rev 12756)
@@ -3,7 +3,7 @@
[when]Instance is at least {number} and field is "{value}"=i: Instance(number > {number}, location=="{value}")
[then]Log : "{message}"=System.out.println("{message}");
[then]Set field of instance to "{value}"=i.setField("{value}");
-[then]Create instance : "{value}"=assert(new Instance("{value}"));
+[then]Create instance : "{value}"=insert(new Instance("{value}"));
[when]There is no current Instance with field : "{value}"=not Instance(field == "{value}")
[then]Report error : "{error}"=System.err.println("{error}");
[then]Retract the fact : '{variable}'=retract({variable}); //this would retract bound variable {variable}
Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/resources/org/drools/eclipse/wizard/project/DecisionTableLauncherSample.java.template
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/resources/org/drools/eclipse/wizard/project/DecisionTableLauncherSample.java.template 2007-06-21 21:43:34 UTC (rev 12755)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/resources/org/drools/eclipse/wizard/project/DecisionTableLauncherSample.java.template 2007-06-21 21:43:46 UTC (rev 12756)
@@ -39,7 +39,7 @@
Message message = new Message();
message.setMessage( "Hello World" );
message.setStatus( Message.HELLO );
- workingMemory.assertObject( message );
+ workingMemory.insert( message );
workingMemory.fireAllRules();
Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/resources/org/drools/eclipse/wizard/project/RuleLauncherSample.java.template
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/resources/org/drools/eclipse/wizard/project/RuleLauncherSample.java.template 2007-06-21 21:43:34 UTC (rev 12755)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/resources/org/drools/eclipse/wizard/project/RuleLauncherSample.java.template 2007-06-21 21:43:46 UTC (rev 12756)
@@ -25,7 +25,7 @@
Message message = new Message();
message.setMessage( "Hello World" );
message.setStatus( Message.HELLO );
- workingMemory.assertObject( message );
+ workingMemory.insert( message );
workingMemory.fireAllRules();
Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/resources/org/drools/eclipse/wizard/project/Sample.xls.template
===================================================================
(Binary files differ)
More information about the jboss-svn-commits
mailing list