[jboss-svn-commits] JBL Code SVN: r13829 - in labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin: src/main/java/org/drools/eclipse and 8 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Sun Jul 29 19:24:33 EDT 2007
Author: KrisVerlaenen
Date: 2007-07-29 19:24:33 -0400 (Sun, 29 Jul 2007)
New Revision: 13829
Added:
labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/icons/question.gif
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/editpart/SubFlowEditPart.java
labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/constraint/MilestoneConstraintCellEditor.java
labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/constraint/MilestoneConstraintDialog.java
labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/constraint/MilestoneConstraintPropertyDescriptor.java
Removed:
labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/JavaCompletionRequestor.java
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/builder/DroolsBuilder.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/dsl/editor/completion/DSLRuleCompletionProcessor.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/MvelCompletionRequestor.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/editors/completion/RuleCompletionProposal.java
labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/MilestoneWrapper.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/EndNodeEditPart.java
labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/MilestoneEditPart.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/editor/editpart/StartNodeEditPart.java
Log:
JBRULES-1043: Enhanced Java completion proposals
- reuse of standard Java completion proposals
JBRULES-981: Milestone
- end of impl. in core + integrated into Eclipse IDE
JBRULES-1041: Subflow
- impl. in core + eclipse IDE
JBRULES-1038: addRuleFlow throws Exceptions
- ruleflows are checking before parsing
JBRULES-1042: Integrate ruleflows in drools build
Added: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/icons/question.gif
===================================================================
(Binary files differ)
Property changes on: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/icons/question.gif
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
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-07-29 23:24:18 UTC (rev 13828)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/DroolsEclipsePlugin.java 2007-07-29 23:24:33 UTC (rev 13829)
@@ -268,7 +268,7 @@
return generateParsedResource(content, resource, false, true);
}
-public void invalidateResource(IResource resource) {
+ public void invalidateResource(IResource resource) {
DRLInfo cached = (DRLInfo) compiledRules.remove(resource);
if (cached != null) {
RuleInfo[] ruleInfos = cached.getRuleInfos();
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-07-29 23:24:18 UTC (rev 13828)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/builder/DroolsBuilder.java 2007-07-29 23:24:33 UTC (rev 13829)
@@ -20,12 +20,15 @@
import org.drools.compiler.FieldTemplateError;
import org.drools.compiler.FunctionError;
import org.drools.compiler.GlobalError;
+import org.drools.compiler.PackageBuilder;
import org.drools.compiler.ParserError;
+import org.drools.compiler.ProcessBuilder;
import org.drools.compiler.RuleError;
import org.drools.decisiontable.InputType;
import org.drools.decisiontable.SpreadsheetCompiler;
import org.drools.eclipse.DRLInfo;
import org.drools.eclipse.DroolsEclipsePlugin;
+import org.drools.eclipse.flow.ruleflow.core.RuleFlowProcessWrapper;
import org.drools.eclipse.preferences.IDroolsConstants;
import org.drools.lang.ExpanderException;
import org.eclipse.core.resources.IFile;
@@ -46,6 +49,8 @@
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jdt.core.JavaModelException;
+import com.thoughtworks.xstream.XStream;
+
/**
* Automatically syntax checks .drl files and adds possible
* errors or warnings to the problem list. Nominally is triggerd on save.
@@ -86,7 +91,6 @@
protected void fullBuild(IProgressMonitor monitor)
throws CoreException {
- DroolsEclipsePlugin.getDefault().clearCache();
getProject().accept(new DroolsBuildVisitor());
}
@@ -103,17 +107,17 @@
private class DroolsBuildVisitor implements IResourceVisitor {
public boolean visit(IResource res) {
- return parseResource(res);
+ return parseResource(res, true);
}
}
private class DroolsBuildDeltaVisitor implements IResourceDeltaVisitor {
public boolean visit(IResourceDelta delta) throws CoreException {
- return parseResource(delta.getResource());
+ return parseResource(delta.getResource(), false);
}
}
- private boolean parseResource(IResource res) {
+ private boolean parseResource(IResource res, boolean clean) {
try {
IJavaProject project = JavaCore.create(res.getProject());
// exclude files that are located in the output directory,
@@ -132,6 +136,9 @@
|| ".package".equals(res.getName()))) {
removeProblemsFor(res);
try {
+ if (clean) {
+ DroolsEclipsePlugin.getDefault().invalidateResource(res);
+ }
DroolsBuildMarker[] markers = parseDRLFile((IFile) res, new String(Util.getResourceContentsAsCharArray((IFile) res)));
for (int i = 0; i < markers.length; i++) {
createMarker(res, markers[i].getText(), markers[i].getLine());
@@ -143,6 +150,9 @@
} else if (res instanceof IFile && "xls".equals(res.getFileExtension())) {
removeProblemsFor(res);
try {
+ if (clean) {
+ DroolsEclipsePlugin.getDefault().invalidateResource(res);
+ }
DroolsBuildMarker[] markers = parseXLSFile((IFile) res);
for (int i = 0; i < markers.length; i++) {
createMarker(res, markers[i].getText(), markers[i].getLine());
@@ -154,6 +164,9 @@
} else if (res instanceof IFile && "brl".equals(res.getFileExtension())) {
removeProblemsFor(res);
try {
+ if (clean) {
+ DroolsEclipsePlugin.getDefault().invalidateResource(res);
+ }
DroolsBuildMarker[] markers = parseBRLFile((IFile) res);
for (int i = 0; i < markers.length; i++) {
createMarker(res, markers[i].getText(), markers[i].getLine());
@@ -162,6 +175,20 @@
createMarker(res, t.getMessage(), -1);
}
return false;
+ } else if (res instanceof IFile && "rf".equals(res.getFileExtension())) {
+ removeProblemsFor(res);
+ try {
+ if (clean) {
+ DroolsEclipsePlugin.getDefault().invalidateResource(res);
+ }
+ DroolsBuildMarker[] markers = parseRuleFlowFile((IFile) res);
+ for (int i = 0; i < markers.length; i++) {
+ createMarker(res, markers[i].getText(), markers[i].getLine());
+ }
+ } catch (Throwable t) {
+ createMarker(res, t.getMessage(), -1);
+ }
+ return false;
}
return true;
@@ -250,6 +277,36 @@
return (DroolsBuildMarker[]) markers.toArray(new DroolsBuildMarker[markers.size()]);
}
+ private DroolsBuildMarker[] parseRuleFlowFile(IFile file) {
+ List markers = new ArrayList();
+ try {
+ String ruleflow = 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(ruleflow);
+ if (o instanceof RuleFlowProcessWrapper) {
+ ProcessBuilder processBuilder = new ProcessBuilder(new PackageBuilder());
+ processBuilder.addProcess(((RuleFlowProcessWrapper) o).getRuleFlowProcess());
+ markParseErrors(markers, processBuilder.getErrors());
+ }
+ } finally {
+ Thread.currentThread().setContextClassLoader(oldLoader);
+ }
+ } catch (Exception t) {
+ String message = t.getMessage();
+ if (message == null || message.trim().equals( "" )) {
+ message = "Error: " + t.getClass().getName();
+ }
+ markers.add(new DroolsBuildMarker(message));
+ }
+ return (DroolsBuildMarker[]) markers.toArray(new DroolsBuildMarker[markers.size()]);
+ }
+
private static String convertToString(final InputStream inputStream) throws IOException {
Reader reader = new InputStreamReader(inputStream);
final StringBuffer text = new StringBuffer();
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-07-29 23:24:18 UTC (rev 13828)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/debug/core/DroolsLineBreakpoint.java 2007-07-29 23:24:33 UTC (rev 13829)
@@ -13,7 +13,6 @@
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
-import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.internal.debug.core.breakpoints.JavaLineBreakpoint;
public class DroolsLineBreakpoint extends JavaLineBreakpoint {
Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/dsl/editor/completion/DSLRuleCompletionProcessor.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/dsl/editor/completion/DSLRuleCompletionProcessor.java 2007-07-29 23:24:18 UTC (rev 13828)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/dsl/editor/completion/DSLRuleCompletionProcessor.java 2007-07-29 23:24:33 UTC (rev 13829)
@@ -33,19 +33,19 @@
return (DSLRuleEditor) getEditor();
}
- protected void addRHSCompletionProposals(List list, String prefix, String backText,
+ protected void addRHSCompletionProposals(List list, int documentOffset, String prefix, String backText,
String conditions, String consequence) {
- super.addRHSCompletionProposals(list, prefix, backText, conditions, consequence);
+ super.addRHSCompletionProposals(list, documentOffset, prefix, backText, conditions, consequence);
DSLAdapter adapter = getDSLRuleEditor().getDSLAdapter();
if (adapter != null) {
List dslConsequences = adapter.getDSLTree().getConsequenceChildrenList(prefix, true);
- addDSLProposals(list, prefix, dslConsequences);
+ addDSLProposals(list, documentOffset, prefix, dslConsequences);
}
}
- protected void addLHSCompletionProposals(List list,
+ protected void addLHSCompletionProposals(List list, int documentOffset,
Location location, String prefix, String backText) {
- super.addLHSCompletionProposals(list, location, prefix, backText);
+ super.addLHSCompletionProposals(list, documentOffset, location, prefix, backText);
DSLAdapter adapter = getDSLRuleEditor().getDSLAdapter();
if (adapter != null) {
String lastobj = this.getLastNonDashLine(backText);
@@ -63,16 +63,16 @@
if (dslConditions.size() == 0) {
dslConditions.addAll(adapter.listConditionItems());
}
- addDSLProposals(list, prefix, dslConditions);
+ addDSLProposals(list, documentOffset, prefix, dslConditions);
}
}
- private void addDSLProposals(final List list, final String prefix, List dslItems) {
+ private void addDSLProposals(final List list, int documentOffset, final String prefix, List dslItems) {
Iterator iterator = dslItems.iterator();
while (iterator.hasNext()) {
String consequence = (String) iterator.next();
RuleCompletionProposal p = new RuleCompletionProposal(
- prefix.length(), consequence);
+ documentOffset - prefix.length(), prefix.length(), consequence);
p.setImage(DSL_ICON);
list.add(p);
}
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-07-29 23:24:18 UTC (rev 13828)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/AbstractCompletionProcessor.java 2007-07-29 23:24:33 UTC (rev 13829)
@@ -7,7 +7,6 @@
import org.eclipse.jface.text.BadLocationException;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.ITextViewer;
-import org.eclipse.jface.text.contentassist.CompletionProposal;
import org.eclipse.jface.text.contentassist.ICompletionProposal;
import org.eclipse.jface.text.contentassist.IContentAssistProcessor;
import org.eclipse.jface.text.contentassist.IContextInformation;
@@ -36,8 +35,7 @@
return new ICompletionProposal[0];
}
Collections.sort(proposals, new RuleCompletionProposal.RuleCompletionProposalComparator());
- ICompletionProposal[] result = makeProposals(proposals, documentOffset);
- return result;
+ return (ICompletionProposal[]) proposals.toArray(new ICompletionProposal[proposals.size()]);
}
/**
@@ -49,19 +47,6 @@
*/
protected abstract List getCompletionProposals(ITextViewer viewer, int documentOffset);
- protected ICompletionProposal[] makeProposals(List props, int documentOffset) {
- ICompletionProposal[] result = new ICompletionProposal[props.size()];
- Iterator iterator = props.iterator();
- int i = 0;
- while (iterator.hasNext()) {
- RuleCompletionProposal proposal = (RuleCompletionProposal) iterator.next();
- result[i++] = new CompletionProposal(proposal.getContent(),
- documentOffset - proposal.getReplacementLength(), proposal.getReplacementLength(),
- proposal.getCursorPosition(), proposal.getImage(), proposal.getDisplay(), null, null);
- }
- return result;
- }
-
/**
* Filter out the proposals whose content does not start with the given prefix.
*/
@@ -69,9 +54,11 @@
if (prefix != null) {
Iterator iterator = props.iterator();
while ( iterator.hasNext() ) {
- RuleCompletionProposal item = (RuleCompletionProposal) iterator.next();
- if (!item.getContent().startsWith(prefix)) {
- iterator.remove();
+ ICompletionProposal item = (ICompletionProposal) iterator.next();
+ if (item instanceof RuleCompletionProposal) {
+ if (!((RuleCompletionProposal) item).getContent().startsWith(prefix)) {
+ iterator.remove();
+ }
}
}
}
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-07-29 23:24:18 UTC (rev 13828)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/DefaultCompletionProcessor.java 2007-07-29 23:24:33 UTC (rev 13829)
@@ -20,10 +20,16 @@
import org.drools.lang.descr.GlobalDescr;
import org.drools.util.StringUtils;
import org.eclipse.core.resources.IProject;
+import org.eclipse.jdt.core.CompletionContext;
+import org.eclipse.jdt.core.CompletionProposal;
import org.eclipse.jdt.core.CompletionRequestor;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jdt.core.eval.IEvaluationContext;
+import org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal;
+import org.eclipse.jdt.internal.ui.text.java.JavaMethodCompletionProposal;
+import org.eclipse.jdt.ui.text.java.CompletionProposalCollector;
+import org.eclipse.jdt.ui.text.java.IJavaCompletionProposal;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.ITextViewer;
import org.eclipse.swt.graphics.Image;
@@ -66,48 +72,39 @@
protected List getCompletionProposals(ITextViewer viewer,
int documentOffset) {
try {
- IDocument doc = viewer.getDocument();
- String backText = readBackwards( documentOffset,
- doc );
-
- String prefix = CompletionUtil.stripLastWord( backText );
-
- List props = null;
- Matcher matcher = IMPORT_PATTERN.matcher( backText );
- if ( matcher.matches() ) {
- String classNameStart = backText.substring( backText.lastIndexOf( "import" ) + 7 );
- props = getAllClassProposals( classNameStart,
- documentOffset );
- } 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 );
- } else {
- props = getPossibleProposals( viewer,
- documentOffset,
- backText,
- prefix );
- }
- }
- return props;
- } catch ( Throwable t ) {
- DroolsEclipsePlugin.log( t );
+ IDocument doc = viewer.getDocument();
+ String backText = readBackwards( documentOffset, doc );
+
+ String prefix = CompletionUtil.stripLastWord(backText);
+
+ List props = null;
+ Matcher matcher = IMPORT_PATTERN.matcher(backText);
+ if (matcher.matches()) {
+ String classNameStart = backText.substring(backText.lastIndexOf("import") + 7);
+ props = getAllClassProposals(classNameStart, documentOffset, prefix);
+ } 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(documentOffset, functionText, prefix, params);
+ filterProposalsOnPrefix(prefix, props);
+ } else {
+ props = getPossibleProposals(viewer, documentOffset, backText, prefix);
+ }
+ }
+ return props;
+ } catch (Throwable t) {
+ DroolsEclipsePlugin.log(t);
}
return null;
}
@@ -125,35 +122,30 @@
}
return result;
}
+
+ private List getAllClassProposals(final String classNameStart, final int documentOffset, final String prefix) {
+ final List list = new ArrayList();
+ IEditorInput input = getEditor().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.PACKAGE_REF) {
+ RuleCompletionProposal prop = new RuleCompletionProposal(documentOffset - prefix.length(), classNameStart.length(), className, className + ".");
+ prop.setImage(DroolsPluginImages.getImage(DroolsPluginImages.PACKAGE));
+ list.add(prop);
+ } else if (proposal.getKind() == org.eclipse.jdt.core.CompletionProposal.TYPE_REF) {
+ RuleCompletionProposal prop = new RuleCompletionProposal(documentOffset - prefix.length(), classNameStart.length() - proposal.getReplaceStart(), className, className + ";");
+ prop.setImage(DroolsPluginImages.getImage(DroolsPluginImages.CLASS));
+ list.add(prop);
+ }
+ // ignore all other proposals
+ }
+ };
- private List getAllClassProposals(final String classNameStart,
- final int documentOffset) {
- final List list = new ArrayList();
- IEditorInput input = getEditor().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.PACKAGE_REF ) {
- RuleCompletionProposal prop = new RuleCompletionProposal( classNameStart.length(),
- className,
- className + "." );
- prop.setImage( DroolsPluginImages.getImage( DroolsPluginImages.PACKAGE ) );
- list.add( prop );
- } else if ( proposal.getKind() == org.eclipse.jdt.core.CompletionProposal.TYPE_REF ) {
- RuleCompletionProposal prop = new RuleCompletionProposal( classNameStart.length() - proposal.getReplaceStart(),
- className,
- className + ";" );
- prop.setImage( DroolsPluginImages.getImage( DroolsPluginImages.CLASS ) );
- list.add( prop );
- }
- // ignore all other proposals
- }
- };
-
try {
javaProject.newEvaluationContext().codeComplete( classNameStart,
classNameStart.length(),
@@ -170,82 +162,63 @@
String backText,
final String prefix) {
List list = new ArrayList();
- list.add( new RuleCompletionProposal( prefix.length(),
- "rule",
- NEW_RULE_TEMPLATE,
- 6 ) );
- list.add( new RuleCompletionProposal( prefix.length(),
- "import",
- "import " ) );
- list.add( new RuleCompletionProposal( prefix.length(),
- "expander",
- "expander " ) );
- list.add( new RuleCompletionProposal( prefix.length(),
- "global",
- "global " ) );
- list.add( new RuleCompletionProposal( prefix.length(),
- "package",
- "package " ) );
- list.add( new RuleCompletionProposal( prefix.length(),
- "query",
- NEW_QUERY_TEMPLATE ) );
- list.add( new RuleCompletionProposal( prefix.length(),
- "function",
- NEW_FUNCTION_TEMPLATE,
- 14 ) );
- list.add( new RuleCompletionProposal( prefix.length(),
- "template",
- NEW_TEMPLATE_TEMPLATE,
- 9 ) );
- filterProposalsOnPrefix( prefix,
- list );
+ list.add(new RuleCompletionProposal(documentOffset - prefix.length(), prefix.length(), "rule", NEW_RULE_TEMPLATE, 6));
+ list.add(new RuleCompletionProposal(documentOffset - prefix.length(), prefix.length(), "import", "import "));
+ list.add(new RuleCompletionProposal(documentOffset - prefix.length(), prefix.length(), "expander", "expander "));
+ list.add(new RuleCompletionProposal(documentOffset - prefix.length(), prefix.length(), "global", "global "));
+ list.add(new RuleCompletionProposal(documentOffset - prefix.length(), prefix.length(), "package", "package "));
+ list.add(new RuleCompletionProposal(documentOffset - prefix.length(), prefix.length(), "query", NEW_QUERY_TEMPLATE));
+ list.add(new RuleCompletionProposal(documentOffset - prefix.length(), prefix.length(), "function", NEW_FUNCTION_TEMPLATE, 14));
+ list.add(new RuleCompletionProposal(documentOffset - prefix.length(), prefix.length(), "template", NEW_TEMPLATE_TEMPLATE, 9));
+ list.add(new RuleCompletionProposal(documentOffset - prefix.length(), prefix.length(), "dialect \"java\"", "dialect \"java\" "));
+ list.add(new RuleCompletionProposal(documentOffset - prefix.length(), prefix.length(), "dialect \"mvel\"", "dialect \"mvel\" "));
+ filterProposalsOnPrefix(prefix, list);
return list;
}
- /**
- * @return a list of regular Java'ish RuleCompletionProposal
- */
- protected List getJavaCompletionProposals(final String javaText,
- final String prefix,
- Map params) {
- final List list = new ArrayList();
- CompletionRequestor requestor = new JavaCompletionRequestor( prefix,
- javaText,
- list );
+ protected List getJavaCompletionProposals(final int documentOffset, final String javaText, final String prefix, Map params) {
+ final List list = new ArrayList();
+ requestJavaCompletionProposals(javaText, prefix, documentOffset, params, list);
+ return list;
+ }
- requestJavaCompletionProposals( javaText,
- prefix,
- params,
- requestor );
- return list;
- }
-
/**
* @return a list of "MVELified" RuleCompletionProposal. Thta list contains only unqiue proposal based on
* the overrriden equals in {@link RuleCompletionProposal} to avoid the situation when several
* accessors can exist for one property. for that case we want to keep only one proposal.
*/
protected Collection getJavaMvelCompletionProposals(final String javaText,
- final String prefix,
+ final String prefix, int documentOffset,
Map params) {
- final Collection set = new HashSet();
- CompletionRequestor requestor = new MvelCompletionRequestor( prefix,
- javaText,
- set );
-// System.out.println("MVEL: java text sent to JDT is:"+javaText);
+ final Collection javaCompletionProposals = new HashSet();
requestJavaCompletionProposals( javaText,
prefix,
+ documentOffset,
params,
- requestor );
- return set;
+ javaCompletionProposals );
+ final Collection result = new HashSet();
+ CompletionRequestor requestor = new MvelCompletionRequestor( prefix,
+ documentOffset,
+ javaText,
+ result );
+ for (Iterator iterator = javaCompletionProposals.iterator(); iterator.hasNext(); ) {
+ requestor.accept((CompletionProposal) iterator.next());
+ }
+ return result;
}
protected void requestJavaCompletionProposals(final String javaText,
final String prefix,
+ final int documentOffset,
Map params,
- CompletionRequestor requestor) {
-// System.out.println("MVEL: java text sent to JDT is:"+javaText);
+ Collection results) {
+ String javaTextWithoutPrefix = javaText.substring(0, javaText.length() - prefix.length());
+ // boolean to filter default Object methods produced by code completion when in the beginning of a statement
+ boolean filterObjectMethods = false;
+ if ("".equals(javaTextWithoutPrefix.trim()) || START_OF_NEW_JAVA_STATEMENT.matcher(javaTextWithoutPrefix).matches()) {
+ filterObjectMethods = true;
+ }
IEditorInput input = getEditor().getEditorInput();
if ( !(input instanceof IFileEditorInput) ) {
return;
@@ -253,6 +226,9 @@
IProject project = ((IFileEditorInput) input).getFile().getProject();
IJavaProject javaProject = JavaCore.create( project );
+ CompletionProposalCollector collector = new CompletionProposalCollector(javaProject);
+ collector.acceptContext(new CompletionContext());
+
try {
IEvaluationContext evalContext = javaProject.newEvaluationContext();
List imports = getImports();
@@ -270,11 +246,19 @@
javaTextWithParams.append( "org.drools.spi.KnowledgeHelper drools;" );
javaTextWithParams.append( javaText );
String text = javaTextWithParams.toString();
-// System.out.println( "" );
-// System.out.println( "MVEL: synthetic Java text:" + text );
evalContext.codeComplete( text,
text.length(),
- requestor );
+ collector );
+ IJavaCompletionProposal[] proposals = collector.getJavaCompletionProposals();
+ int replacementOffset = documentOffset - prefix.length();
+ for (int i = 0; i < proposals.length; i++) {
+ if (proposals[i] instanceof AbstractJavaCompletionProposal) {
+ ((AbstractJavaCompletionProposal) proposals[i]).setReplacementOffset(replacementOffset);
+ if (!filterObjectMethods || !(proposals[i] instanceof JavaMethodCompletionProposal)) {
+ results.add(proposals[i]);
+ }
+ }
+ }
} catch ( Throwable t ) {
DroolsEclipsePlugin.log( t );
}
Deleted: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/JavaCompletionRequestor.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/JavaCompletionRequestor.java 2007-07-29 23:24:18 UTC (rev 13828)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/JavaCompletionRequestor.java 2007-07-29 23:24:33 UTC (rev 13829)
@@ -1,43 +0,0 @@
-package org.drools.eclipse.editors.completion;
-
-import java.util.Collection;
-
-import org.eclipse.jdt.core.CompletionProposal;
-import org.eclipse.jdt.core.CompletionRequestor;
-
-public class JavaCompletionRequestor extends CompletionRequestor {
- private final String prefix;
- private final String text;
- private final Collection list;
-
- public JavaCompletionRequestor(String prefix,
- String text,
- Collection list) {
- this.prefix = prefix;
- this.text = text;
- this.list = list;
- }
-
- public void accept(CompletionProposal proposal) {
- // TODO set other proposal properties too (display name, icon, ...)
- String completion = new String( proposal.getCompletion() );
- RuleCompletionProposal prop = new RuleCompletionProposal( prefix.length(),
- completion );
-
- switch ( proposal.getKind() ) {
- case CompletionProposal.LOCAL_VARIABLE_REF :
- prop.setImage( DefaultCompletionProcessor.VARIABLE_ICON );
- break;
- case CompletionProposal.METHOD_REF :
- // TODO: Object methods are proposed when in the start of a line
- if ( CompletionUtil.isStartOfNewStatement( text,
- prefix ) ) {
- return;
- }
- prop.setImage( DefaultCompletionProcessor.METHOD_ICON );
- break;
- default :
- }
- list.add( prop );
- }
-}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/MvelCompletionRequestor.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/MvelCompletionRequestor.java 2007-07-29 23:24:18 UTC (rev 13828)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/MvelCompletionRequestor.java 2007-07-29 23:24:33 UTC (rev 13829)
@@ -9,20 +9,23 @@
private final String prefix;
private final String text;
private final Collection list;
+ private final int documentOffset;
public MvelCompletionRequestor(String prefix,
+ int documentOffset,
String text,
Collection list) {
this.prefix = prefix;
this.text = text;
this.list = list;
+ this.documentOffset = documentOffset;
}
public void accept(CompletionProposal proposal) {
// TODO set other proposal properties too (display name, icon, ...)
String completion = new String( proposal.getCompletion() );
- RuleCompletionProposal prop = new RuleCompletionProposal( prefix.length(),
- completion );;
+ RuleCompletionProposal prop = new RuleCompletionProposal(
+ documentOffset - prefix.length(), prefix.length(), completion );;
switch ( proposal.getKind() ) {
case CompletionProposal.LOCAL_VARIABLE_REF :
@@ -38,8 +41,8 @@
//is the completion for a bean accessor?
boolean isAccessor = completion.equals( propertyOrMethodName );
- prop = new RuleCompletionProposal( prefix.length(),
- propertyOrMethodName );
+ prop = new RuleCompletionProposal(
+ documentOffset - prefix.length(), prefix.length(), propertyOrMethodName );
boolean startOfNewStatement = CompletionUtil.isStartOfNewStatement( text,
prefix );
if ( startOfNewStatement ) {
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-07-29 23:24:18 UTC (rev 13828)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/RuleCompletionProcessor.java 2007-07-29 23:24:33 UTC (rev 13829)
@@ -39,7 +39,6 @@
import org.mvel.CompiledExpression;
import org.mvel.ExpressionCompiler;
import org.mvel.ParserContext;
-import org.mvel.PropertyVerifier;
/**
* For handling within rules.
@@ -67,13 +66,12 @@
protected List getCompletionProposals(ITextViewer viewer, int documentOffset) {
try {
final List list = new ArrayList();
-
IDocument doc = viewer.getDocument();
-
+
String backText = readBackwards(documentOffset, doc);
final String prefix = CompletionUtil.stripLastWord(backText);
- // FIXME:where does the magic number 5 come from? "rule "?
+ // if inside the keyword "rule ", no code completion
if (backText.length() < 5) {
return list;
}
@@ -82,85 +80,90 @@
Location location = context.getLocation();
if (location.getType() == Location.LOCATION_RULE_HEADER) {
- addRuleHeaderProposals(list, prefix, backText);
+ addRuleHeaderProposals(list, documentOffset, prefix, backText);
} else if (location.getType() == Location.LOCATION_RHS) {
- addRHSCompletionProposals(list, prefix, backText,
- (String) location
- .getProperty(Location.LOCATION_LHS_CONTENT),
- (String) location
- .getProperty(Location.LOCATION_RHS_CONTENT));
+ addRHSCompletionProposals(list, documentOffset, prefix, backText,
+ (String) location.getProperty(Location.LOCATION_LHS_CONTENT),
+ (String) location.getProperty(Location.LOCATION_RHS_CONTENT));
} else {
- addLHSCompletionProposals(list, location, prefix, backText);
+ addLHSCompletionProposals(list, documentOffset, location, prefix, backText);
}
filterProposalsOnPrefix(prefix, list);
return list;
} catch (Throwable t) {
- t.printStackTrace();
DroolsEclipsePlugin.log(t);
}
return null;
}
- protected void addRHSCompletionProposals(List list, String prefix,
- String backText, String conditions, String consequence) {
+ protected void addRHSCompletionProposals(List list, int documentOffset, String prefix, String backText,
+ String conditions, String consequence) {
// only add functions and keywords if at the beginning of a
// new statement
- String consequenceWithoutPrefix = consequence.substring(0, consequence
- .length()
- - prefix.length());
- if (context == null) {
- context = new CompletionContext(backText);
+ if (consequence == null || consequence.length() < prefix.length()) {
+ // possible if doing code completion directly after "then"
+ return;
}
+ String consequenceWithoutPrefix =
+ consequence.substring(0,consequence.length() - prefix.length());
- boolean startOfDialectExpression = isStartOfDialectExpression(consequenceWithoutPrefix);
+ if ( context == null ) {
+ context = new CompletionContext( backText );
+ }
+
+ boolean startOfDialectExpression = isStartOfDialectExpression( consequenceWithoutPrefix );
if (startOfDialectExpression) {
- addRHSKeywordCompletionProposals(list, prefix);
- addRHSFunctionCompletionProposals(list, prefix);
+ addRHSKeywordCompletionProposals(list, documentOffset, prefix);
+ addRHSFunctionCompletionProposals(list, documentOffset, prefix);
}
-
- if (context.isJavaDialect()) {
- // System.out.println( "MVEL: Adding Java Dialect completions" );
- addRHSJavaCompletionProposals(list, prefix, backText, consequence);
- } else {
- // System.out.println( "MVEL: Adding MVEL Dialect completions" );
- addRHSMvelCompletionProposals(list, prefix, backText, consequence,
- startOfDialectExpression);
- }
+ if ( context.isJavaDialect() ) {
+ addRHSJavaCompletionProposals( list,
+ documentOffset,
+ prefix,
+ backText,
+ consequence );
+ } else {
+ addRHSMvelCompletionProposals( list,
+ documentOffset,
+ prefix,
+ backText,
+ consequence,
+ startOfDialectExpression );
+ }
}
- protected void addLHSCompletionProposals(List list, Location location,
- String prefix, String backText) {
+ protected void addLHSCompletionProposals(List list, int documentOffset,
+ Location location, String prefix, String backText) {
switch (location.getType()) {
case Location.LOCATION_LHS_BEGIN_OF_CONDITION:
// if we are at the beginning of a new condition
// add drools keywords
- list.add(new RuleCompletionProposal(prefix.length(), "and", "and ",
- DROOLS_ICON));
- list.add(new RuleCompletionProposal(prefix.length(), "or", "or ",
- DROOLS_ICON));
- list.add(new RuleCompletionProposal(prefix.length(), "from",
+ list.add(new RuleCompletionProposal(documentOffset - prefix.length(), prefix.length(), "and",
+ "and ", DROOLS_ICON));
+ list.add(new RuleCompletionProposal(documentOffset - prefix.length(), prefix.length(), "or",
+ "or ", DROOLS_ICON));
+ list.add(new RuleCompletionProposal(documentOffset - prefix.length(), prefix.length(), "from",
"from ", DROOLS_ICON));
- list.add(new RuleCompletionProposal(prefix.length(), "forall",
+ list.add(new RuleCompletionProposal(documentOffset - prefix.length(), prefix.length(), "forall",
"forall( )", 8, DROOLS_ICON));
-
- RuleCompletionProposal prop = new RuleCompletionProposal(prefix
+ RuleCompletionProposal prop = new RuleCompletionProposal(documentOffset - prefix.length(), prefix
.length(), "eval", "eval( )", 6);
prop.setImage(DROOLS_ICON);
list.add(prop);
- prop = new RuleCompletionProposal(prefix.length(), "then", "then"
- + System.getProperty("line.separator") + "\t");
+ prop = new RuleCompletionProposal(documentOffset - prefix.length(), prefix.length(), "then",
+ "then" + System.getProperty("line.separator") + "\t");
prop.setImage(DROOLS_ICON);
list.add(prop);
// we do not break but also add all elements that are needed for
// and/or
case Location.LOCATION_LHS_BEGIN_OF_CONDITION_AND_OR:
- list.add(new RuleCompletionProposal(prefix.length(), "not", "not ",
- DROOLS_ICON));
+ list.add(new RuleCompletionProposal(documentOffset - prefix.length(), prefix.length(), "not",
+ "not ", DROOLS_ICON));
// we do not break but also add all elements that are needed for
// not
case Location.LOCATION_LHS_BEGIN_OF_CONDITION_NOT:
- list.add(new RuleCompletionProposal(prefix.length(), "exists",
+ list.add(new RuleCompletionProposal(documentOffset - prefix.length(), prefix.length(), "exists",
"exists ", DROOLS_ICON));
// we do not break but also add all elements that are needed for
// exists
@@ -175,7 +178,7 @@
if (index != -1) {
String className = name.substring(index + 1);
RuleCompletionProposal p = new RuleCompletionProposal(
- prefix.length(), className, className + "( )",
+ documentOffset - prefix.length(), prefix.length(), className, className + "( )",
className.length() + 2);
p.setPriority(-1);
p.setImage(CLASS_ICON);
@@ -189,7 +192,7 @@
if (index != -1) {
String className = name.substring(index + 1);
RuleCompletionProposal p = new RuleCompletionProposal(
- prefix.length(), className, className + "( )",
+ documentOffset - prefix.length(), prefix.length(), className, className + "( )",
className.length() + 2);
p.setPriority(-1);
p.setImage(CLASS_ICON);
@@ -199,8 +202,9 @@
iterator = getTemplates().iterator();
while (iterator.hasNext()) {
String name = (String) iterator.next();
- RuleCompletionProposal p = new RuleCompletionProposal(prefix
- .length(), name, name + "( )", name.length() + 2);
+ RuleCompletionProposal p = new RuleCompletionProposal(
+ documentOffset - prefix.length(), prefix.length(), name, name + "( )",
+ name.length() + 2);
p.setPriority(-1);
p.setImage(CLASS_ICON);
list.add(p);
@@ -212,8 +216,8 @@
String propertyName = (String) location
.getProperty(Location.LOCATION_PROPERTY_PROPERTY_NAME);
if (className != null) {
- boolean isTemplate = addFactTemplatePropertyProposals(prefix,
- className, list);
+ boolean isTemplate = addFactTemplatePropertyProposals(
+ documentOffset, prefix, className, list);
if (!isTemplate) {
ClassTypeResolver resolver = new ClassTypeResolver(
getImports(), ProjectClassLoader
@@ -221,49 +225,42 @@
try {
String currentClass = className;
if (propertyName != null) {
- String[] nestedProperties = propertyName
- .split("\\.");
+ String[] nestedProperties = propertyName.split("\\.");
int nbSuperProperties = nestedProperties.length - 1;
if (propertyName.endsWith(".")) {
nbSuperProperties++;
}
for (int i = 0; i < nbSuperProperties; i++) {
String simplePropertyName = nestedProperties[i];
- currentClass = getSimplePropertyClass(
- currentClass, simplePropertyName);
+ currentClass = getSimplePropertyClass(currentClass, simplePropertyName);
currentClass = convertToNonPrimitiveClass(currentClass);
}
}
- RuleCompletionProposal p = new RuleCompletionProposal(
- prefix.length(), "this");
- p.setImage(METHOD_ICON);
- list.add(p);
+ RuleCompletionProposal p = new RuleCompletionProposal(documentOffset - prefix.length(), prefix.length(), "this");
+ p.setImage(METHOD_ICON);
+ list.add(p);
Class clazz = resolver.resolveType(currentClass);
if (clazz != null) {
if (Map.class.isAssignableFrom(clazz)) {
- p = new RuleCompletionProposal(prefix.length(),
- "this['']", "this['']", 6);
+ p = new RuleCompletionProposal(documentOffset - prefix.length(),
+ prefix.length(), "this['']", "this['']", 6);
p.setImage(METHOD_ICON);
list.add(p);
}
- ClassFieldInspector inspector = new ClassFieldInspector(
- clazz);
+ ClassFieldInspector inspector = new ClassFieldInspector(clazz);
Map types = inspector.getFieldTypes();
- Iterator iterator2 = inspector.getFieldNames()
- .keySet().iterator();
+ Iterator iterator2 = inspector.getFieldNames().keySet().iterator();
while (iterator2.hasNext()) {
String name = (String) iterator2.next();
- p = new RuleCompletionProposal(prefix.length(),
- name, name + " ");
+ p = new RuleCompletionProposal(documentOffset - prefix.length(),
+ prefix.length(), name, name + " ");
p.setImage(METHOD_ICON);
list.add(p);
Class type = (Class) types.get(name);
- if (type != null
- && Map.class.isAssignableFrom(type)) {
+ if (type != null && Map.class.isAssignableFrom(type)) {
name += "['']";
- p = new RuleCompletionProposal(prefix
- .length(), name, name, name
- .length() - 2);
+ p = new RuleCompletionProposal(documentOffset - prefix.length(),
+ prefix.length(), name, name, name.length() - 2);
p.setImage(METHOD_ICON);
list.add(p);
}
@@ -284,43 +281,43 @@
.getProperty(Location.LOCATION_PROPERTY_PROPERTY_NAME);
String type = getPropertyClass(className, property);
- list.add(new RuleCompletionProposal(prefix.length(), "==", "== ",
+ list.add(new RuleCompletionProposal(documentOffset - prefix.length(), prefix.length(), "==",
+ "== ", DROOLS_ICON));
+ list.add(new RuleCompletionProposal(documentOffset - prefix.length(), prefix.length(), "!=",
+ "!= ", DROOLS_ICON));
+ list.add(new RuleCompletionProposal(documentOffset - prefix.length(), prefix.length(), ":", ": ",
DROOLS_ICON));
- list.add(new RuleCompletionProposal(prefix.length(), "!=", "!= ",
- DROOLS_ICON));
- list.add(new RuleCompletionProposal(prefix.length(), ":", ": ",
- DROOLS_ICON));
- list.add(new RuleCompletionProposal(prefix.length(), "->",
+ list.add(new RuleCompletionProposal(documentOffset - prefix.length(), prefix.length(), "->",
"-> ( )", 5, DROOLS_ICON));
- list.add(new RuleCompletionProposal(prefix.length(), "memberOf",
+ list.add(new RuleCompletionProposal(documentOffset - prefix.length(), prefix.length(), "memberOf",
"memberOf ", DROOLS_ICON));
- list.add(new RuleCompletionProposal(prefix.length(),
- "not memberOf", "not memberOf ", DROOLS_ICON));
- list.add(new RuleCompletionProposal(prefix.length(), "in",
+ list.add(new RuleCompletionProposal(documentOffset - prefix.length(), prefix.length(), "not memberOf",
+ "not memberOf ", DROOLS_ICON));
+ list.add(new RuleCompletionProposal(documentOffset - prefix.length(), prefix.length(), "in",
"in ( )", 5, DROOLS_ICON));
- list.add(new RuleCompletionProposal(prefix.length(), "not in",
+ list.add(new RuleCompletionProposal(documentOffset - prefix.length(), prefix.length(), "not in",
"not in ( )", 9, DROOLS_ICON));
if (isComparable(type)) {
- list.add(new RuleCompletionProposal(prefix.length(), "<", "< ",
- DROOLS_ICON));
- list.add(new RuleCompletionProposal(prefix.length(), "<=",
+ list.add(new RuleCompletionProposal(documentOffset - prefix.length(), prefix.length(), "<",
+ "< ", DROOLS_ICON));
+ list.add(new RuleCompletionProposal(documentOffset - prefix.length(), prefix.length(), "<=",
"<= ", DROOLS_ICON));
- list.add(new RuleCompletionProposal(prefix.length(), ">", "> ",
- DROOLS_ICON));
- list.add(new RuleCompletionProposal(prefix.length(), ">=",
+ list.add(new RuleCompletionProposal(documentOffset - prefix.length(), prefix.length(), ">",
+ "> ", DROOLS_ICON));
+ list.add(new RuleCompletionProposal(documentOffset - prefix.length(), prefix.length(), ">=",
">= ", DROOLS_ICON));
}
if (type.equals("java.lang.String")) {
- list.add(new RuleCompletionProposal(prefix.length(), "matches",
+ list.add(new RuleCompletionProposal(documentOffset - prefix.length(), prefix.length(), "matches",
"matches \"\"", 9, DROOLS_ICON));
- list.add(new RuleCompletionProposal(prefix.length(),
+ list.add(new RuleCompletionProposal(documentOffset - prefix.length(), prefix.length(),
"not matches", "not matches \"\"", 13, DROOLS_ICON));
}
if (isSubtypeOf(type, "java.util.Collection")) {
- list.add(new RuleCompletionProposal(prefix.length(),
+ list.add(new RuleCompletionProposal(documentOffset - prefix.length(), prefix.length(),
"contains", "contains ", DROOLS_ICON));
- list.add(new RuleCompletionProposal(prefix.length(),
+ list.add(new RuleCompletionProposal(documentOffset - prefix.length(), prefix.length(),
"not contains", "not contains ", DROOLS_ICON));
}
break;
@@ -335,8 +332,8 @@
type = getPropertyClass(className, property);
if ("in".equals(operator)) {
- list.add(new RuleCompletionProposal(prefix.length(), "()",
- "( )", 2, DROOLS_ICON));
+ list.add(new RuleCompletionProposal(documentOffset - prefix.length(), prefix.length(), "()",
+ "( )", 2, DROOLS_ICON));
break;
}
@@ -353,24 +350,26 @@
isObject = true;
}
- list.add(new RuleCompletionProposal(prefix.length(), "null",
+ list.add(new RuleCompletionProposal(documentOffset - prefix.length(), prefix.length(), "null",
"null ", DROOLS_ICON));
if ("boolean".equals(type)) {
- list.add(new RuleCompletionProposal(prefix.length(), "true",
- "true ", DROOLS_ICON));
- list.add(new RuleCompletionProposal(prefix.length(), "false",
- "false ", DROOLS_ICON));
+ list.add(new RuleCompletionProposal(documentOffset - prefix.length(), prefix.length(),
+ "true", "true ", DROOLS_ICON));
+ list.add(new RuleCompletionProposal(documentOffset - prefix.length(), prefix.length(),
+ "false", "false ", DROOLS_ICON));
}
if (isObject || "java.lang.String".equals(type)) {
- list.add(new RuleCompletionProposal(prefix.length(), "\"\"",
- "\"\"", 1, DROOLS_ICON));
+ list.add(new RuleCompletionProposal(documentOffset - prefix.length(), prefix.length(),
+ "\"\"", "\"\"", 1, DROOLS_ICON));
}
if (isObject || "java.util.Date".equals(type)) {
- list.add(new RuleCompletionProposal(prefix.length(),
- "\"dd-mmm-yyyy\"", "\"dd-mmm-yyyy\"", 1, DROOLS_ICON));
+ list
+ .add(new RuleCompletionProposal(documentOffset - prefix.length(), prefix.length(),
+ "\"dd-mmm-yyyy\"", "\"dd-mmm-yyyy\"", 1,
+ DROOLS_ICON));
}
- list.add(new RuleCompletionProposal(prefix.length(), "()", "( )",
- 2, DROOLS_ICON));
+ list.add(new RuleCompletionProposal(documentOffset - prefix.length(), prefix.length(), "()",
+ "( )", 2, DROOLS_ICON));
// add parameters with possibly matching type
if (context == null) {
context = new CompletionContext(backText);
@@ -387,20 +386,21 @@
String paramType = (String) entry.getValue();
if (isSubtypeOf(paramType, type)) {
RuleCompletionProposal proposal = new RuleCompletionProposal(
- prefix.length(), paramName);
+ documentOffset - prefix.length(), prefix.length(), paramName);
proposal.setPriority(-1);
proposal.setImage(VARIABLE_ICON);
list.add(proposal);
}
}
- } // add globals with possibly matching type
+ }
+ // add globals with possibly matching type
List globals = getGlobals();
if (globals != null) {
- for (iterator = globals.iterator(); iterator.hasNext();) {
+ for (iterator = globals.iterator(); iterator.hasNext(); ) {
GlobalDescr global = (GlobalDescr) iterator.next();
if (isSubtypeOf(global.getType(), type)) {
RuleCompletionProposal proposal = new RuleCompletionProposal(
- prefix.length(), global.getIdentifier());
+ documentOffset - prefix.length(), prefix.length(), global.getIdentifier());
proposal.setPriority(-1);
proposal.setImage(VARIABLE_ICON);
list.add(proposal);
@@ -411,15 +411,15 @@
case Location.LOCATION_LHS_INSIDE_EVAL:
String content = (String) location
.getProperty(Location.LOCATION_EVAL_CONTENT);
- list.addAll(getJavaCompletionProposals(content, prefix,
+ list.addAll(getJavaCompletionProposals(documentOffset, content, prefix,
getRuleParameters(backText)));
break;
case Location.LOCATION_LHS_INSIDE_CONDITION_END:
- list.add(new RuleCompletionProposal(prefix.length(), "&&", "&& ",
+ list.add(new RuleCompletionProposal(documentOffset - prefix.length(), prefix.length(), "&&", "&& ",
DROOLS_ICON));
- list.add(new RuleCompletionProposal(prefix.length(), "||", "|| ",
+ list.add(new RuleCompletionProposal(documentOffset - prefix.length(), prefix.length(), "||", "|| ",
DROOLS_ICON));
- list.add(new RuleCompletionProposal(prefix.length(), ",", ", ",
+ list.add(new RuleCompletionProposal(documentOffset - prefix.length(), prefix.length(), ",", ", ",
DROOLS_ICON));
break;
case Location.LOCATION_LHS_FROM:
@@ -430,45 +430,44 @@
// add accumulate and collect keyword
list
.add(new RuleCompletionProposal(
- prefix.length(),
+ documentOffset - prefix.length(), prefix.length(),
"accumulate",
"accumulate ( , init ( ), action ( ), result ( ) )",
13, DROOLS_ICON));
PackageBuilderConfiguration config = new PackageBuilderConfiguration(
- ProjectClassLoader.getProjectClassLoader(getEditor()),
- null);
+ ProjectClassLoader.getProjectClassLoader(getEditor()), null);
Map accumulateFunctions = config.getAccumulateFunctionsMap();
- for (Iterator iterator2 = accumulateFunctions.keySet()
- .iterator(); iterator2.hasNext();) {
+ for (Iterator iterator2 = accumulateFunctions.keySet().iterator(); iterator2.hasNext(); ) {
String accumulateFunction = (String) iterator2.next();
- list.add(new RuleCompletionProposal(prefix.length(),
+ list.add(new RuleCompletionProposal(
+ documentOffset - prefix.length(), prefix.length(),
"accumulate " + accumulateFunction,
"accumulate ( , " + accumulateFunction + "( ) )",
13, DROOLS_ICON));
}
- list.add(new RuleCompletionProposal(prefix.length(), "collect",
- "collect ( )", 10, DROOLS_ICON));
+ list.add(new RuleCompletionProposal(documentOffset - prefix.length(), prefix.length(),
+ "collect", "collect ( )", 10, DROOLS_ICON));
// add all functions
if ("".equals(fromText)) {
List functions = getFunctions();
iterator = functions.iterator();
while (iterator.hasNext()) {
String name = (String) iterator.next() + "()";
- prop = new RuleCompletionProposal(prefix.length(),
+ prop = new RuleCompletionProposal(documentOffset - prefix.length(), prefix.length(),
name, name, name.length() - 1);
prop.setPriority(-1);
prop.setImage(METHOD_ICON);
list.add(prop);
}
}
- list.addAll(getJavaCompletionProposals(fromText, prefix,
+ list.addAll(getJavaCompletionProposals(documentOffset, fromText, prefix,
getRuleParameters(backText)));
}
break;
case Location.LOCATION_LHS_FROM_ACCUMULATE_INIT_INSIDE:
content = (String) location
.getProperty(Location.LOCATION_PROPERTY_FROM_ACCUMULATE_INIT_CONTENT);
- list.addAll(getJavaCompletionProposals(content, prefix,
+ list.addAll(getJavaCompletionProposals(documentOffset, content, prefix,
getRuleParameters(backText)));
break;
case Location.LOCATION_LHS_FROM_ACCUMULATE_ACTION_INSIDE:
@@ -476,7 +475,7 @@
.getProperty(Location.LOCATION_PROPERTY_FROM_ACCUMULATE_INIT_CONTENT);
content += (String) location
.getProperty(Location.LOCATION_PROPERTY_FROM_ACCUMULATE_ACTION_CONTENT);
- list.addAll(getJavaCompletionProposals(content, prefix,
+ list.addAll(getJavaCompletionProposals(documentOffset, content, prefix,
getRuleParameters(backText)));
break;
case Location.LOCATION_LHS_FROM_ACCUMULATE_RESULT_INSIDE:
@@ -486,7 +485,7 @@
.getProperty(Location.LOCATION_PROPERTY_FROM_ACCUMULATE_ACTION_CONTENT);
content += (String) location
.getProperty(Location.LOCATION_PROPERTY_FROM_ACCUMULATE_RESULT_CONTENT);
- list.addAll(getJavaCompletionProposals(content, prefix,
+ list.addAll(getJavaCompletionProposals(documentOffset, content, prefix,
getRuleParameters(backText)));
break;
}
@@ -525,8 +524,7 @@
String currentClass = className;
for (int i = 0; i < nestedProperties.length; i++) {
String simplePropertyName = nestedProperties[i];
- currentClass = getSimplePropertyClass(currentClass,
- simplePropertyName);
+ currentClass = getSimplePropertyClass(currentClass, simplePropertyName);
}
return currentClass;
}
@@ -542,8 +540,9 @@
// TODO can we take advantage of generics here?
return "java.lang.Object";
}
- ClassTypeResolver resolver = new ClassTypeResolver(getImports(),
- ProjectClassLoader.getProjectClassLoader(getEditor()));
+ ClassTypeResolver resolver = new ClassTypeResolver(
+ getImports(), ProjectClassLoader
+ .getProjectClassLoader(getEditor()));
try {
Class clazz = resolver.resolveType(className);
if (clazz != null) {
@@ -566,7 +565,7 @@
// add globals
List globals = getGlobals();
if (globals != null) {
- for (Iterator iterator = globals.iterator(); iterator.hasNext();) {
+ for (Iterator iterator = globals.iterator(); iterator.hasNext(); ) {
GlobalDescr global = (GlobalDescr) iterator.next();
result.put(global.getIdentifier(), global.getType());
}
@@ -578,7 +577,6 @@
if (context.getRule() == null) {
return result;
}
-
// add parameters defined in conditions
addRuleParameters(result, context.getRule().getLhs().getDescrs());
return result;
@@ -635,8 +633,8 @@
class1 = convertToNonPrimitiveClass(class1);
class2 = convertToNonPrimitiveClass(class2);
// TODO add code to take primitive types into account
- ClassTypeResolver resolver = new ClassTypeResolver(getImports(),
- ProjectClassLoader.getProjectClassLoader(getEditor()));
+ ClassTypeResolver resolver = new ClassTypeResolver(getImports(), ProjectClassLoader
+ .getProjectClassLoader(getEditor()));
try {
Class clazz1 = resolver.resolveType(class1);
Class clazz2 = resolver.resolveType(class2);
@@ -674,14 +672,14 @@
return null;
}
- private void addRHSFunctionCompletionProposals(List list, String prefix) {
+ private void addRHSFunctionCompletionProposals(List list, int documentOffset, String prefix) {
Iterator iterator;
RuleCompletionProposal prop;
List functions = getFunctions();
iterator = functions.iterator();
while (iterator.hasNext()) {
String name = (String) iterator.next() + "()";
- prop = new RuleCompletionProposal(prefix.length(), name,
+ prop = new RuleCompletionProposal(documentOffset - prefix.length(), prefix.length(), name,
name + ";", name.length() - 1);
prop.setPriority(-1);
prop.setImage(METHOD_ICON);
@@ -689,42 +687,43 @@
}
}
- private void addRHSKeywordCompletionProposals(List list, String prefix) {
- RuleCompletionProposal prop = new RuleCompletionProposal(prefix
+ private void addRHSKeywordCompletionProposals(
+ List list, int documentOffset, String prefix) {
+ RuleCompletionProposal prop = new RuleCompletionProposal(documentOffset - prefix.length(), prefix
.length(), "update", "update();", 7);
prop.setImage(DROOLS_ICON);
list.add(prop);
- prop = new RuleCompletionProposal(prefix.length(), "retract",
+ prop = new RuleCompletionProposal(documentOffset - prefix.length(), prefix.length(), "retract",
"retract();", 8);
prop.setImage(DROOLS_ICON);
list.add(prop);
- prop = new RuleCompletionProposal(prefix.length(), "insert",
+ prop = new RuleCompletionProposal(documentOffset - prefix.length(), prefix.length(), "insert",
"insert();", 7);
prop.setImage(DROOLS_ICON);
list.add(prop);
- prop = new RuleCompletionProposal(prefix.length(), "insertLogical",
+ prop = new RuleCompletionProposal(documentOffset - prefix.length(), prefix.length(), "insertLogical",
"insertLogical();", 14);
prop.setImage(DROOLS_ICON);
list.add(prop);
}
- private void addRHSJavaCompletionProposals(List list, String prefix,
- String backText, String consequence) {
- list.addAll(getJavaCompletionProposals(consequence, prefix,
+ private void addRHSJavaCompletionProposals(List list, int documentOffset, String prefix, String backText,
+ String consequence) {
+ list.addAll(getJavaCompletionProposals(documentOffset, consequence, prefix,
getRuleParameters(backText)));
}
- private void addRHSMvelCompletionProposals(List list, String prefix,
+ private void addRHSMvelCompletionProposals(List list, final int documentOffset, String prefix,
String backText, String consequence, boolean expressionStart) {
Collection mvelCompletionProposals = getMvelCompletionProposals(
- consequence, prefix, getRuleParameters(backText), backText,
+ consequence, documentOffset, prefix, getRuleParameters(backText), backText,
expressionStart);
list.addAll(mvelCompletionProposals);
}
private Collection getMvelCompletionProposals(final String consequence,
- final String prefix, Map params, String backText,
+ final int documentOffset, final String prefix, Map params, String backText,
boolean startOfExpression) {
final Set proposals = new HashSet();
@@ -749,11 +748,11 @@
if (startOfExpression) {
Collection jdtProps = getJavaMvelCompletionProposals("",
- prefix, params);
+ prefix, documentOffset, params);
proposals.addAll(jdtProps);
- addMvelVariables(proposals, compilationContext);
+ addMvelVariables(proposals, compilationContext, documentOffset, prefix);
- addMvelInputs(proposals, compilationContext);
+ addMvelInputs(proposals, compilationContext, documentOffset, prefix);
} else {
// we are completing the methods for an existing type or
@@ -773,7 +772,7 @@
String javaText = "\n" + lastType.getName() + " o = new "
+ lastType.getName() + "();\no.";
Collection jdtProps = getJavaMvelCompletionProposals(
- javaText, prefix, params);
+ javaText, prefix, documentOffset, params);
proposals.addAll(jdtProps);
}
}
@@ -822,28 +821,27 @@
} catch (Exception e) {
return initialContext;
}
-
}
private void addMvelInputs(final Collection proposals,
- ParserContext compilationContext) {
+ ParserContext compilationContext, int documentOffset, String prefix) {
Map inputs = compilationContext.getInputs();
for (Iterator iter = inputs.keySet().iterator(); iter.hasNext();) {
String prop = (String) iter.next();
- RuleCompletionProposal rcp = new RuleCompletionProposal(prop
- .length(), prop);
+ RuleCompletionProposal rcp = new RuleCompletionProposal(
+ documentOffset - prefix.length(), prefix.length(), prop);
rcp.setImage(DefaultCompletionProcessor.VARIABLE_ICON);
proposals.add(rcp);
}
}
private void addMvelVariables(final Collection proposals,
- ParserContext compilationContext) {
+ ParserContext compilationContext, int documentOffset, String prefix) {
Map variables = compilationContext.getVariables();
for (Iterator iter = variables.keySet().iterator(); iter.hasNext();) {
String prop = (String) iter.next();
- RuleCompletionProposal rcp = new RuleCompletionProposal(prop
- .length(), prop);
+ RuleCompletionProposal rcp = new RuleCompletionProposal(
+ documentOffset - prefix.length(), prefix.length(), prop);
rcp.setImage(DefaultCompletionProcessor.VARIABLE_ICON);
proposals.add(rcp);
}
@@ -901,39 +899,38 @@
}
}
- private void addRuleHeaderProposals(List list, String prefix,
- String backText) {
- list.add(new RuleCompletionProposal(prefix.length(), "salience",
+ private void addRuleHeaderProposals(List list, int documentOffset, String prefix, String backText) {
+ list.add(new RuleCompletionProposal(documentOffset - prefix.length(), prefix.length(), "salience",
"salience ", DROOLS_ICON));
- list.add(new RuleCompletionProposal(prefix.length(), "no-loop",
+ list.add(new RuleCompletionProposal(documentOffset - prefix.length(), prefix.length(), "no-loop",
"no-loop ", DROOLS_ICON));
- list.add(new RuleCompletionProposal(prefix.length(), "agenda-group",
+ list.add(new RuleCompletionProposal(documentOffset - prefix.length(), prefix.length(), "agenda-group",
"agenda-group ", DROOLS_ICON));
- list.add(new RuleCompletionProposal(prefix.length(), "duration",
+ list.add(new RuleCompletionProposal(documentOffset - prefix.length(), prefix.length(), "duration",
"duration ", DROOLS_ICON));
- list.add(new RuleCompletionProposal(prefix.length(), "auto-focus",
+ list.add(new RuleCompletionProposal(documentOffset - prefix.length(), prefix.length(), "auto-focus",
"auto-focus ", DROOLS_ICON));
- list.add(new RuleCompletionProposal(prefix.length(), "when", "when"
+ list.add(new RuleCompletionProposal(documentOffset - prefix.length(), prefix.length(), "when", "when"
+ System.getProperty("line.separator") + "\t ", DROOLS_ICON));
- list.add(new RuleCompletionProposal(prefix.length(),
+ list.add(new RuleCompletionProposal(documentOffset - prefix.length(), prefix.length(),
"activation-group", "activation-group ", DROOLS_ICON));
- list.add(new RuleCompletionProposal(prefix.length(), "date-effective",
+ list.add(new RuleCompletionProposal(documentOffset - prefix.length(), prefix.length(), "date-effective",
"date-effective \"dd-MMM-yyyy\"", 16, DROOLS_ICON));
- list.add(new RuleCompletionProposal(prefix.length(), "date-expires",
+ list.add(new RuleCompletionProposal(documentOffset - prefix.length(), prefix.length(), "date-expires",
"date-expires \"dd-MMM-yyyy\"", 14, DROOLS_ICON));
- list.add(new RuleCompletionProposal(prefix.length(), "enabled",
+ list.add(new RuleCompletionProposal(documentOffset - prefix.length(), prefix.length(), "enabled",
"enabled false", DROOLS_ICON));
- list.add(new RuleCompletionProposal(prefix.length(), "ruleflow-group",
+ list.add(new RuleCompletionProposal(documentOffset - prefix.length(), prefix.length(), "ruleflow-group",
"ruleflow-group \"\"", 16, DROOLS_ICON));
- list.add(new RuleCompletionProposal(prefix.length(), "lock-on-active",
- "lock-on-active ", DROOLS_ICON));
- list.add(new RuleCompletionProposal(prefix.length(),
- "dialect \"java\"", "dialect \"java\"", DROOLS_ICON));
- list.add(new RuleCompletionProposal(prefix.length(),
- "dialect \"mvel\"", "dialect \"mvel\"", DROOLS_ICON));
+ list.add(new RuleCompletionProposal(documentOffset - prefix.length(), prefix.length(), "lock-on-active",
+ "lock-on-active ", DROOLS_ICON));
+ list.add(new RuleCompletionProposal(documentOffset - prefix.length(), prefix.length(), "dialect \"java\"",
+ "dialect \"java\" ", DROOLS_ICON));
+ list.add(new RuleCompletionProposal(documentOffset - prefix.length(), prefix.length(), "dialect \"mvel\"",
+ "dialect \"mvel\" ", DROOLS_ICON));
}
- private boolean addFactTemplatePropertyProposals(String prefix,
+ private boolean addFactTemplatePropertyProposals(int documentOffset, String prefix,
String templateName, List list) {
FactTemplateDescr descr = getTemplate(templateName);
if (descr == null) {
@@ -943,7 +940,7 @@
while (iterator.hasNext()) {
FieldTemplateDescr field = (FieldTemplateDescr) iterator.next();
String fieldName = field.getName();
- RuleCompletionProposal p = new RuleCompletionProposal(prefix
+ RuleCompletionProposal p = new RuleCompletionProposal(documentOffset - prefix.length(), prefix
.length(), fieldName, fieldName + " ");
p.setImage(METHOD_ICON);
list.add(p);
Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/RuleCompletionProposal.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/RuleCompletionProposal.java 2007-07-29 23:24:18 UTC (rev 13828)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/RuleCompletionProposal.java 2007-07-29 23:24:33 UTC (rev 13829)
@@ -2,7 +2,12 @@
import java.util.Comparator;
+import org.eclipse.jface.text.BadLocationException;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.contentassist.ICompletionProposal;
+import org.eclipse.jface.text.contentassist.IContextInformation;
import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.Point;
/**
* Holds a completion proposal to be popped up.
@@ -10,73 +15,45 @@
* @author Michael Neale
*
*/
-public class RuleCompletionProposal {
+public class RuleCompletionProposal implements ICompletionProposal {
private String content;
private String display;
- private int replacementLength;
- private int cursorPosition;
- private Image image;
- private int priority;
-
+ private int replacementOffset;
+ private int replacementLength;
+ private int cursorPosition;
+ private Image image;
+ private int priority;
+
/** This is used when the stuff that is displayed, is the stuff that is used. */
- public RuleCompletionProposal(int replacementLength,
- String content) {
- this( replacementLength,
- content,
- content );
+ public RuleCompletionProposal(int replacementOffset, int replacementLength, String content) {
+ this(replacementOffset, replacementLength, content, content);
}
/** This is used when a different display value is shown to what is put in when selected. */
- public RuleCompletionProposal(int replacementLength,
- String display,
- String content) {
- this( replacementLength,
- display,
- content,
- content.length() );
+ public RuleCompletionProposal(int replacementOffset, int replacementLength, String display, String content) {
+ this(replacementOffset, replacementLength, display, content, content.length());
}
/** Also allows an icon to be used */
- public RuleCompletionProposal(int replacementLength,
- String display,
- String content,
- Image image) {
- this( replacementLength,
- display,
- content,
- content.length(),
- image );
+ public RuleCompletionProposal(int replacementOffset, int replacementLength, String display, String content, Image image) {
+ this(replacementOffset, replacementLength, display, content, content.length(), image);
}
- public RuleCompletionProposal(int replacementLength,
- String display,
- String content,
- int cursorPosition) {
- this( replacementLength,
- display,
- content,
- cursorPosition,
- null );
+ public RuleCompletionProposal(int replacementOffset, int replacementLength, String display, String content, int cursorPosition) {
+ this(replacementOffset, replacementLength, display, content, cursorPosition, null);
}
/** This is used when a different display value is shown to what is put in when selected. */
- public RuleCompletionProposal(int replacementLength,
- String display,
- String content,
- int cursorPosition,
- Image image) {
- this.replacementLength = replacementLength;
+ public RuleCompletionProposal(int replacementOffset, int replacementLength, String display, String content, int cursorPosition, Image image) {
+ this.replacementOffset = replacementOffset;
+ this.replacementLength = replacementLength;
this.content = content;
this.display = display;
this.cursorPosition = cursorPosition;
this.image = image;
}
- public String getContent() {
- return content;
- }
-
public String getDisplay() {
return display;
}
@@ -93,6 +70,10 @@
return image;
}
+ public String getContent() {
+ return content;
+ }
+
public void setImage(Image image) {
this.image = image;
}
@@ -108,24 +89,55 @@
public String toString() {
return content;
}
-
- public static class RuleCompletionProposalComparator
- implements
- Comparator {
- public int compare(Object arg0,
- Object arg1) {
- RuleCompletionProposal prop0 = (RuleCompletionProposal) arg0;
- RuleCompletionProposal prop1 = (RuleCompletionProposal) arg1;
- if ( prop0.getPriority() == prop1.getPriority() ) {
- return prop0.getDisplay().compareTo( prop1.getDisplay() );
- } else if ( prop0.getPriority() > prop1.getPriority() ) {
- return -1;
- } else {
- return 1;
- }
- }
+
+ public static class RuleCompletionProposalComparator implements Comparator {
+ public int compare(Object arg0, Object arg1) {
+ if (arg0 instanceof RuleCompletionProposal) {
+ if (arg1 instanceof RuleCompletionProposal) {
+ RuleCompletionProposal prop0 = (RuleCompletionProposal) arg0;
+ RuleCompletionProposal prop1 = (RuleCompletionProposal) arg1;
+ if (prop0.getPriority() == prop1.getPriority()) {
+ return prop0.display.compareTo(prop1.display);
+ } else if (prop0.getPriority() > prop1.getPriority()) {
+ return -1;
+ } else {
+ return 1;
+ }
+ } else {
+ return -1;
+ }
+ } else {
+ if (arg1 instanceof RuleCompletionProposal) {
+ return 1;
+ }
+ return 0;
+ }
+ }
}
+ public void apply(IDocument document) {
+ try {
+ document.replace(replacementOffset, replacementLength, content);
+ } catch (BadLocationException x) {
+ // ignore
+ }
+ }
+
+ public String getAdditionalProposalInfo() {
+ return null;
+ }
+
+ public IContextInformation getContextInformation() {
+ return null;
+ }
+
+ public String getDisplayString() {
+ if (display != null) {
+ return display;
+ }
+ return content;
+ }
+
public int hashCode() {
final int PRIME = 31;
int result = 1;
@@ -147,4 +159,8 @@
} else if ( !display.equals( other.display ) ) return false;
return true;
}
-}
\ No newline at end of file
+
+ public Point getSelection(IDocument document) {
+ return new Point(replacementOffset + cursorPosition, 0);
+ }
+}
Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/MilestoneWrapper.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/MilestoneWrapper.java 2007-07-29 23:24:18 UTC (rev 13828)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/MilestoneWrapper.java 2007-07-29 23:24:33 UTC (rev 13829)
@@ -17,10 +17,10 @@
import org.drools.eclipse.flow.common.editor.core.DefaultElementWrapper;
import org.drools.eclipse.flow.common.editor.core.ElementConnection;
+import org.drools.eclipse.flow.ruleflow.view.property.constraint.MilestoneConstraintPropertyDescriptor;
import org.drools.ruleflow.core.MilestoneNode;
import org.drools.ruleflow.core.impl.MilestoneNodeImpl;
import org.eclipse.ui.views.properties.IPropertyDescriptor;
-import org.eclipse.ui.views.properties.TextPropertyDescriptor;
/**
* Wrapper for a milestone node.
@@ -30,26 +30,30 @@
public class MilestoneWrapper extends NodeWrapper {
private static final long serialVersionUID = -5976489437109982927L;
- private static IPropertyDescriptor[] descriptors;
+ private IPropertyDescriptor[] descriptors;
public static final String CONSTRAINT = "Constraint";
- static {
- descriptors = new IPropertyDescriptor[DefaultElementWrapper.descriptors.length + 1];
- System.arraycopy(DefaultElementWrapper.descriptors, 0, descriptors, 0, DefaultElementWrapper.descriptors.length);
- descriptors[descriptors.length - 1] =
- new TextPropertyDescriptor(CONSTRAINT, "Constraint");
- }
public MilestoneWrapper() {
setNode(new MilestoneNodeImpl());
getMilestoneNode().setName("Milestone");
}
+ private void setDescriptors() {
+ descriptors = new IPropertyDescriptor[DefaultElementWrapper.descriptors.length + 1];
+ System.arraycopy(DefaultElementWrapper.descriptors, 0, descriptors, 0, DefaultElementWrapper.descriptors.length);
+ descriptors[descriptors.length - 1] =
+ new MilestoneConstraintPropertyDescriptor(CONSTRAINT, "Constraint", getMilestoneNode(), ((RuleFlowProcessWrapper) getParent()).getRuleFlowProcess());
+ }
+
public MilestoneNode getMilestoneNode() {
return (MilestoneNode) getNode();
}
public IPropertyDescriptor[] getPropertyDescriptors() {
+ if (descriptors == null) {
+ setDescriptors();
+ }
return descriptors;
}
Added: 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 (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/core/SubFlowWrapper.java 2007-07-29 23:24:33 UTC (rev 13829)
@@ -0,0 +1,88 @@
+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 org.drools.eclipse.flow.common.editor.core.DefaultElementWrapper;
+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.IPropertyDescriptor;
+import org.eclipse.ui.views.properties.TextPropertyDescriptor;
+
+/**
+ * Wrapper for a SubFlow node.
+ *
+ * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
+ */
+public class SubFlowWrapper extends NodeWrapper {
+
+ private static final long serialVersionUID = 3668348577732020324L;
+ private static IPropertyDescriptor[] descriptors;
+
+ public static final String PROCESS_ID = "ProcessId";
+
+ static {
+ descriptors = new IPropertyDescriptor[DefaultElementWrapper.descriptors.length + 1];
+ System.arraycopy(DefaultElementWrapper.descriptors, 0, descriptors, 0, DefaultElementWrapper.descriptors.length);
+ descriptors[descriptors.length - 1] =
+ new TextPropertyDescriptor(PROCESS_ID, "ProcessId");
+ }
+
+ public SubFlowWrapper() {
+ setNode(new SubFlowNodeImpl());
+ getSubFlowNode().setName("SubFlow");
+ }
+
+ public SubFlowNode getSubFlowNode() {
+ return (SubFlowNode) getNode();
+ }
+
+ public IPropertyDescriptor[] getPropertyDescriptors() {
+ return descriptors;
+ }
+
+ public boolean acceptsIncomingConnection(ElementConnection connection) {
+ return getIncomingConnections().isEmpty();
+ }
+
+ public boolean acceptsOutgoingConnection(ElementConnection connection) {
+ return getOutgoingConnections().isEmpty();
+ }
+
+ public Object getPropertyValue(Object id) {
+ if (PROCESS_ID.equals(id)) {
+ String processId = getSubFlowNode().getProcessId();
+ return processId == null ? "" : processId;
+ }
+ return super.getPropertyValue(id);
+ }
+
+ public void resetPropertyValue(Object id) {
+ if (PROCESS_ID.equals(id)) {
+ getSubFlowNode().setProcessId("");
+ } else {
+ super.resetPropertyValue(id);
+ }
+ }
+
+ public void setPropertyValue(Object id, Object value) {
+ if (PROCESS_ID.equals(id)) {
+ getSubFlowNode().setProcessId((String) 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-07-29 23:24:18 UTC (rev 13828)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/RuleFlowPaletteFactory.java 2007-07-29 23:24:33 UTC (rev 13829)
@@ -28,6 +28,7 @@
import org.drools.eclipse.flow.ruleflow.core.RuleSetNodeWrapper;
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.ruleflow.core.Connection;
import org.eclipse.gef.palette.CombinedTemplateCreationEntry;
import org.eclipse.gef.palette.ConnectionCreationToolEntry;
@@ -118,16 +119,26 @@
);
entries.add(combined);
-// combined = new CombinedTemplateCreationEntry(
-// "Milestone",
-// "Create a new Milestone",
-// MilestoneWrapper.class,
-// new SimpleFactory(MilestoneWrapper.class),
-// ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/activity.gif")),
-// ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/activity.gif"))
-// );
-// entries.add(combined);
+ combined = new CombinedTemplateCreationEntry(
+ "Milestone",
+ "Create a new Milestone",
+ MilestoneWrapper.class,
+ new SimpleFactory(MilestoneWrapper.class),
+ ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/question.gif")),
+ ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/question.gif"))
+ );
+ entries.add(combined);
+ combined = new CombinedTemplateCreationEntry(
+ "SubFlow",
+ "Create a new SubFlow",
+ SubFlowWrapper.class,
+ new SimpleFactory(SubFlowWrapper.class),
+ ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/process.gif")),
+ ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/process.gif"))
+ );
+ entries.add(combined);
+
drawer.addAll(entries);
return drawer;
}
Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/EndNodeEditPart.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/EndNodeEditPart.java 2007-07-29 23:24:18 UTC (rev 13828)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/EndNodeEditPart.java 2007-07-29 23:24:33 UTC (rev 13829)
@@ -36,7 +36,7 @@
public static class EndNodeFigure extends ElementFigure {
- private static Image icon = ImageDescriptor.createFromURL(
+ private static final Image icon = ImageDescriptor.createFromURL(
DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/process_stop.gif")).createImage();
protected void customizeFigure() {
Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/MilestoneEditPart.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/MilestoneEditPart.java 2007-07-29 23:24:18 UTC (rev 13828)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/MilestoneEditPart.java 2007-07-29 23:24:33 UTC (rev 13829)
@@ -15,13 +15,16 @@
* limitations under the License.
*/
+import org.drools.eclipse.DroolsEclipsePlugin;
import org.drools.eclipse.flow.common.editor.editpart.ElementEditPart;
import org.drools.eclipse.flow.common.editor.editpart.figure.ElementFigure;
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.graphics.Image;
import org.eclipse.swt.widgets.Display;
/**
@@ -37,8 +40,11 @@
return new RuleSetNodeFigure();
}
- public class RuleSetNodeFigure extends ElementFigure {
+ public static class RuleSetNodeFigure extends ElementFigure {
+ private static final Image ICON = ImageDescriptor.createFromURL(
+ DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/question.gif")).createImage();
+
private RoundedRectangle rectangle;
protected void customizeFigure() {
@@ -48,6 +54,7 @@
rectangle.setBackgroundColor(color);
rectangle.setBounds(getBounds());
setSelected(false);
+ setIcon(ICON);
}
public void setBounds(Rectangle rectangle) {
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-07-29 23:24:18 UTC (rev 13828)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/RuleFlowEditPartFactory.java 2007-07-29 23:24:33 UTC (rev 13829)
@@ -24,6 +24,7 @@
import org.drools.eclipse.flow.ruleflow.core.RuleSetNodeWrapper;
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.eclipse.gef.EditPart;
import org.eclipse.gef.EditPartFactory;
@@ -52,6 +53,8 @@
result = new JoinEditPart();
} else if (model instanceof MilestoneWrapper) {
result = new MilestoneEditPart();
+ } else if (model instanceof SubFlowWrapper) {
+ result = new SubFlowEditPart();
} else {
throw new IllegalArgumentException(
"Unknown model object " + model);
Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/StartNodeEditPart.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/StartNodeEditPart.java 2007-07-29 23:24:18 UTC (rev 13828)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/StartNodeEditPart.java 2007-07-29 23:24:33 UTC (rev 13829)
@@ -36,7 +36,7 @@
public static class StartNodeFigure extends ElementFigure {
- private static Image icon = ImageDescriptor.createFromURL(
+ private static final Image icon = ImageDescriptor.createFromURL(
DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/process_start.gif")).createImage();
protected void customizeFigure() {
Added: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/SubFlowEditPart.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/SubFlowEditPart.java (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/SubFlowEditPart.java 2007-07-29 23:24:33 UTC (rev 13829)
@@ -0,0 +1,71 @@
+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.flow.common.editor.editpart.ElementEditPart;
+import org.drools.eclipse.flow.common.editor.editpart.figure.ElementFigure;
+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.graphics.Image;
+import org.eclipse.swt.widgets.Display;
+
+/**
+ * EditPart for a SubFlow node.
+ *
+ * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
+ */
+public class SubFlowEditPart extends ElementEditPart {
+
+ private static final Color color = new Color(Display.getCurrent(), 255, 250, 205);
+
+ protected IFigure createFigure() {
+ return new SubFlowNodeFigure();
+ }
+
+ public static class SubFlowNodeFigure extends ElementFigure {
+
+ private static final Image ICON = ImageDescriptor.createFromURL(
+ DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/process.gif")).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);
+ setIcon(ICON);
+ }
+
+ 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();
+ }
+ }
+}
Added: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/constraint/MilestoneConstraintCellEditor.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/constraint/MilestoneConstraintCellEditor.java (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/constraint/MilestoneConstraintCellEditor.java 2007-07-29 23:24:33 UTC (rev 13829)
@@ -0,0 +1,51 @@
+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 org.drools.eclipse.flow.common.view.property.BeanDialogCellEditor;
+import org.drools.eclipse.flow.common.view.property.EditBeanDialog;
+import org.drools.ruleflow.core.MilestoneNode;
+import org.drools.ruleflow.core.RuleFlowProcess;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Shell;
+
+/**
+ * Cell editor for milestone constraints.
+ *
+ * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
+ */
+public class MilestoneConstraintCellEditor extends BeanDialogCellEditor {
+
+ private RuleFlowProcess process;
+ private MilestoneNode milestone;
+
+ public MilestoneConstraintCellEditor(Composite parent, RuleFlowProcess process, MilestoneNode milestone) {
+ super(parent);
+ this.process = process;
+ this.milestone = milestone;
+ }
+
+ protected EditBeanDialog createDialog(Shell shell) {
+ return new MilestoneConstraintDialog(shell, process, milestone);
+ }
+
+ protected String getLabelText(Object value) {
+ if (milestone == null || milestone.getConstraint() == null) {
+ return "";
+ }
+ return milestone.getConstraint();
+ }
+}
\ 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/constraint/MilestoneConstraintDialog.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/constraint/MilestoneConstraintDialog.java (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/constraint/MilestoneConstraintDialog.java 2007-07-29 23:24:33 UTC (rev 13829)
@@ -0,0 +1,180 @@
+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.List;
+
+import org.drools.eclipse.editors.DRLSourceViewerConfig;
+import org.drools.eclipse.editors.scanners.DRLPartionScanner;
+import org.drools.eclipse.flow.common.view.property.EditBeanDialog;
+import org.drools.ruleflow.core.MilestoneNode;
+import org.drools.ruleflow.core.RuleFlowProcess;
+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.graphics.Point;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+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 constraints.
+ *
+ * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
+ */
+public class MilestoneConstraintDialog extends EditBeanDialog {
+
+ private RuleFlowProcess process;
+ private TabFolder tabFolder;
+ private SourceViewer constraintViewer;
+ private ConstraintCompletionProcessor completionProcessor;
+
+ public MilestoneConstraintDialog(Shell parentShell, RuleFlowProcess process, MilestoneNode milestone) {
+ super(parentShell, "Constraint editor");
+ this.process = process;
+ setValue(milestone.getConstraint());
+ }
+
+ protected Object updateValue(Object value) {
+ if (tabFolder.getSelectionIndex() == 0) {
+ return getConstraintText();
+ }
+ return null;
+ }
+
+ protected Point getInitialSize() {
+ return new Point(600, 450);
+ }
+
+ private Control createTextualEditor(Composite parent) {
+ 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;
+ }
+ });
+ String value = (String) getValue();
+ if (value == null) {
+ value = "";
+ }
+ IDocument document = new Document(value);
+ 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();
+ }
+
+ public Control createDialogArea(Composite parent) {
+ GridLayout layout = new GridLayout();
+ parent.setLayout(layout);
+ layout.numColumns = 2;
+
+ Composite top = new Composite(parent, SWT.NONE);
+ GridData gd = new GridData();
+ gd.horizontalSpan = 2;
+ gd.grabExcessHorizontalSpace = true;
+ top.setLayoutData(gd);
+
+ layout = new GridLayout();
+ layout.numColumns = 3;
+ top.setLayout(layout);
+
+ 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 = 3;
+ 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;
+ }
+
+ 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();
+ }
+}
Added: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/constraint/MilestoneConstraintPropertyDescriptor.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/constraint/MilestoneConstraintPropertyDescriptor.java (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/constraint/MilestoneConstraintPropertyDescriptor.java 2007-07-29 23:24:33 UTC (rev 13829)
@@ -0,0 +1,51 @@
+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 org.drools.ruleflow.core.MilestoneNode;
+import org.drools.ruleflow.core.RuleFlowProcess;
+import org.eclipse.jface.viewers.CellEditor;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.views.properties.PropertyDescriptor;
+
+/**
+ * Property descriptor for a milestone constraint.
+ *
+ * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
+ */
+public class MilestoneConstraintPropertyDescriptor extends PropertyDescriptor {
+
+ private RuleFlowProcess process;
+ private MilestoneNode milestone;
+
+ public MilestoneConstraintPropertyDescriptor(Object id, String displayName, MilestoneNode milestone, RuleFlowProcess process) {
+ super(id, displayName);
+ this.milestone = milestone;
+ this.process = process;
+ }
+
+ public RuleFlowProcess getProcess() {
+ return process;
+ }
+
+ public CellEditor createPropertyEditor(Composite parent) {
+ MilestoneConstraintCellEditor editor = new MilestoneConstraintCellEditor(parent, process, milestone);
+ if (getValidator() != null) {
+ editor.setValidator(getValidator());
+ }
+ return editor;
+ }
+}
More information about the jboss-svn-commits
mailing list