[jboss-svn-commits] JBL Code SVN: r7820 - in labs/jbossrules/trunk/drools-ide: . icons src/main/java/org/drools/ide src/main/java/org/drools/ide/core src/main/java/org/drools/ide/core/ui src/main/java/org/drools/ide/editors/outline src/main/java/org/drools/ide/view src/main/java/org/drools/ide/view/rules

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Nov 24 18:22:03 EST 2006


Author: KrisVerlaenen
Date: 2006-11-24 18:21:52 -0500 (Fri, 24 Nov 2006)
New Revision: 7820

Added:
   labs/jbossrules/trunk/drools-ide/icons/drools-query.GIF
   labs/jbossrules/trunk/drools-ide/icons/drools-rule.GIF
   labs/jbossrules/trunk/drools-ide/icons/field_public_obj.gif
   labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/core/
   labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/core/DroolsElement.java
   labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/core/DroolsModelBuilder.java
   labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/core/Expander.java
   labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/core/Function.java
   labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/core/Global.java
   labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/core/Import.java
   labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/core/Package.java
   labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/core/Query.java
   labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/core/Rule.java
   labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/core/RuleAttribute.java
   labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/core/RuleSet.java
   labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/core/Template.java
   labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/core/ui/
   labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/core/ui/DroolsContentProvider.java
   labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/core/ui/DroolsFilter.java
   labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/core/ui/DroolsLabelProvider.java
   labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/core/ui/DroolsTreeSorter.java
   labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/core/ui/FilterAction.java
   labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/core/ui/FilterActionGroup.java
   labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/view/
   labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/view/rules/
   labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/view/rules/RulesView.java
Removed:
   labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/outline/ExpanderTreeNode.java
   labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/outline/FunctionTreeNode.java
   labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/outline/GlobalTreeNode.java
   labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/outline/ImportTreeNode.java
   labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/outline/OutlineNode.java
   labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/outline/PackageTreeNode.java
   labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/outline/QueryTreeNode.java
   labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/outline/RuleAttributeTreeNode.java
   labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/outline/RuleFileTreeNode.java
   labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/outline/RuleTreeNode.java
   labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/outline/TemplateTreeNode.java
Modified:
   labs/jbossrules/trunk/drools-ide/.classpath
   labs/jbossrules/trunk/drools-ide/plugin.xml
   labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/DroolsPerspective.java
   labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/DroolsPluginImages.java
   labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/IDroolsConstants.java
   labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/outline/RuleContentOutlinePage.java
Log:
JBRULES-567: Rules View
 - created a rules view that contains all rules in the workspace
 - created core rule model that is now used in rules view and outline view
 - created rule model ui tools like sorter, filters, etc.

Modified: labs/jbossrules/trunk/drools-ide/.classpath
===================================================================
--- labs/jbossrules/trunk/drools-ide/.classpath	2006-11-24 23:20:19 UTC (rev 7819)
+++ labs/jbossrules/trunk/drools-ide/.classpath	2006-11-24 23:21:52 UTC (rev 7820)
@@ -1,24 +1,24 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="src/main/java"/>
-	<classpathentry exported="true" kind="lib" path="lib/antlr-2.7.6.jar"/>
-	<classpathentry exported="true" kind="lib" path="lib/antlr-3.0ea8.jar"/>
-	<classpathentry exported="true" kind="lib" path="lib/commons-lang-2.1.jar"/>
-	<classpathentry exported="true" kind="lib" path="lib/commons-logging-api-1.0.4.jar"/>
-	<classpathentry exported="true" kind="lib" path="lib/xml-apis-1.0.b2.jar"/>
-	<classpathentry exported="true" kind="lib" path="lib/xpp3-1.1.3.4.O.jar"/>
-	<classpathentry exported="true" kind="lib" path="lib/xstream-1.1.3.jar"/>
-	<classpathentry exported="true" kind="lib" path="lib/jsr94-1.1.jar"/>
-	<classpathentry exported="true" kind="lib" path="lib/commons-jci-core-1.0-406301.jar"/>
-	<classpathentry exported="true" kind="lib" path="lib/commons-jci-eclipse-3.2.0.666.jar"/>
-	<classpathentry exported="true" kind="lib" path="lib/commons-jci-janino-2.4.3.jar"/>
-	<classpathentry exported="true" kind="lib" path="lib/janino-2.4.3.jar"/>
-	<classpathentry exported="true" kind="lib" path="lib/drools-compiler.jar"/>
-	<classpathentry exported="true" kind="lib" path="lib/drools-core.jar"/>
-	<classpathentry exported="true" kind="lib" path="lib/drools-decisiontables.jar"/>
-	<classpathentry exported="true" kind="lib" path="lib/drools-jsr94.jar"/>
-	<classpathentry exported="true" kind="lib" path="lib/stringtemplate-2.3b6.jar"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.4"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src/main/java"/>
+	<classpathentry exported="true" kind="lib" path="lib/antlr-2.7.6.jar"/>
+	<classpathentry exported="true" kind="lib" path="lib/antlr-3.0ea8.jar"/>
+	<classpathentry exported="true" kind="lib" path="lib/commons-lang-2.1.jar"/>
+	<classpathentry exported="true" kind="lib" path="lib/commons-logging-api-1.0.4.jar"/>
+	<classpathentry exported="true" kind="lib" path="lib/xml-apis-1.0.b2.jar"/>
+	<classpathentry exported="true" kind="lib" path="lib/xpp3-1.1.3.4.O.jar"/>
+	<classpathentry exported="true" kind="lib" path="lib/xstream-1.1.3.jar"/>
+	<classpathentry exported="true" kind="lib" path="lib/jsr94-1.1.jar"/>
+	<classpathentry exported="true" kind="lib" path="lib/commons-jci-core-1.0-406301.jar"/>
+	<classpathentry exported="true" kind="lib" path="lib/commons-jci-eclipse-3.2.0.666.jar"/>
+	<classpathentry exported="true" kind="lib" path="lib/commons-jci-janino-2.4.3.jar"/>
+	<classpathentry exported="true" kind="lib" path="lib/janino-2.4.3.jar"/>
+	<classpathentry exported="true" kind="lib" path="lib/drools-compiler.jar"/>
+	<classpathentry exported="true" kind="lib" path="lib/drools-core.jar"/>
+	<classpathentry exported="true" kind="lib" path="lib/drools-decisiontables.jar"/>
+	<classpathentry exported="true" kind="lib" path="lib/drools-jsr94.jar"/>
+	<classpathentry exported="true" kind="lib" path="lib/stringtemplate-2.3b6.jar"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>

Added: labs/jbossrules/trunk/drools-ide/icons/drools-query.GIF
===================================================================
(Binary files differ)


Property changes on: labs/jbossrules/trunk/drools-ide/icons/drools-query.GIF
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: labs/jbossrules/trunk/drools-ide/icons/drools-rule.GIF
===================================================================
(Binary files differ)


Property changes on: labs/jbossrules/trunk/drools-ide/icons/drools-rule.GIF
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: labs/jbossrules/trunk/drools-ide/icons/field_public_obj.gif
===================================================================
(Binary files differ)


Property changes on: labs/jbossrules/trunk/drools-ide/icons/field_public_obj.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Modified: labs/jbossrules/trunk/drools-ide/plugin.xml
===================================================================
--- labs/jbossrules/trunk/drools-ide/plugin.xml	2006-11-24 23:20:19 UTC (rev 7819)
+++ labs/jbossrules/trunk/drools-ide/plugin.xml	2006-11-24 23:21:52 UTC (rev 7820)
@@ -34,6 +34,13 @@
          class="org.drools.ide.debug.AuditView"
          id="org.drools.ide.debug.AuditView">
       </view>
+      <view
+         name="Rules View"
+         icon="icons/drools.gif"
+         category="org.drools.ide.views"
+         class="org.drools.ide.view.rules.RulesView"
+         id="org.drools.ide.view.rules.RulesView">
+      </view>
    </extension>
    
    <extension
@@ -54,7 +61,15 @@
             icon="icons/drools.gif"
             id="org.drools.ide.editors.DRLRuleEditor"
             name="Rule Editor"/>
+      <!--
       <editor
+            class="org.drools.ide.editors.dsl.DSLRuleEditor2"
+            contributorClass="org.drools.ide.editors.DRLRuleEditorActionContributor"
+            extensions="dslr,dslrule"
+            icon="icons/drools.gif"
+            id="org.drools.ide.editors.dsl.DSLRuleEditor"
+            name="DSL Rule Editor"/> -->
+      <editor
             class="org.drools.ide.dsl.editor.DSLEditor"
             contributorClass="org.eclipse.ui.editors.text.TextEditorActionContributor"
             default="false"

Modified: labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/DroolsPerspective.java
===================================================================
--- labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/DroolsPerspective.java	2006-11-24 23:20:19 UTC (rev 7819)
+++ labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/DroolsPerspective.java	2006-11-24 23:21:52 UTC (rev 7820)
@@ -18,8 +18,12 @@
 		folder.addPlaceholder(JavaUI.ID_TYPE_HIERARCHY);
 		folder.addView(IPageLayout.ID_RES_NAV);
 		
+		IFolderLayout rulesfolder= layout.createFolder("leftbottom", IPageLayout.BOTTOM, (float)0.5, "left"); //$NON-NLS-1$
+		rulesfolder.addView(IDroolsConstants.RULES_VIEW);
+		
 		IFolderLayout outputfolder= layout.createFolder("bottom", IPageLayout.BOTTOM, (float)0.75, editorArea); //$NON-NLS-1$
 		outputfolder.addView(IPageLayout.ID_PROBLEM_VIEW);
+		outputfolder.addView(IPageLayout.ID_PROP_SHEET);
 		outputfolder.addPlaceholder(JavaUI.ID_JAVADOC_VIEW);
 		outputfolder.addPlaceholder(JavaUI.ID_SOURCE_VIEW);
 		outputfolder.addPlaceholder(IConsoleConstants.ID_CONSOLE_VIEW);

Modified: labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/DroolsPluginImages.java
===================================================================
--- labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/DroolsPluginImages.java	2006-11-24 23:20:19 UTC (rev 7819)
+++ labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/DroolsPluginImages.java	2006-11-24 23:21:52 UTC (rev 7820)
@@ -47,7 +47,12 @@
     public static final String METHOD = "Method";
     public static final String VARIABLE = "Variable";
     public static final String DROOLS = "Drools";
+    public static final String RULE = "DroolsRule";
+    public static final String QUERY = "DroolsQuery";
     public static final String DSL_EXPRESSION = "DslExpression";
+    public static final String IMPORT = "Import";
+    public static final String DSL = "DSL";
+    public static final String GLOBAL = "Global";
     
     private static ImageRegistry imageRegistry;
     private static final String PATH_SUFFIX = "/icons/";
@@ -73,7 +78,12 @@
         declareRegistryImage(METHOD, "methpub_obj.gif");
         declareRegistryImage(VARIABLE, "field_private_obj.gif");
         declareRegistryImage(DROOLS, "drools.gif");
+        declareRegistryImage(RULE, "drools-rule.gif");
+        declareRegistryImage(QUERY, "drools-query.gif");
         declareRegistryImage(DSL_EXPRESSION, "dsl_expression.gif");
+        declareRegistryImage(IMPORT, "import.gif");
+        declareRegistryImage(DSL, "dsl.GIF");
+        declareRegistryImage(GLOBAL, "field_public_obj.gif");
     }
 
     /**

Modified: labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/IDroolsConstants.java
===================================================================
--- labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/IDroolsConstants.java	2006-11-24 23:20:19 UTC (rev 7819)
+++ labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/IDroolsConstants.java	2006-11-24 23:21:52 UTC (rev 7820)
@@ -3,5 +3,6 @@
 public interface IDroolsConstants {
 	
 	final String AUDIT_VIEW = "org.drools.ide.debug.AuditView";
+	final String RULES_VIEW = "org.drools.ide.view.rules.RulesView";
 
 }

Added: labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/core/DroolsElement.java
===================================================================
--- labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/core/DroolsElement.java	2006-11-24 23:20:19 UTC (rev 7819)
+++ labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/core/DroolsElement.java	2006-11-24 23:21:52 UTC (rev 7820)
@@ -0,0 +1,66 @@
+package org.drools.ide.core;
+
+import org.eclipse.core.resources.IFile;
+
+/**
+ * This represents a drools model element.  It is linked to its direct
+ * parents and its children. If relevant, Drools model elements refer
+ * to the file they are defined in and the offset and length of that
+ * element in the file. 
+ * 
+ * @author <a href="mailto:kris_verlaenen at hotmail.com">kris verlaenen </a>
+ */
+public abstract class DroolsElement {
+
+	public static final int RULESET = 0;
+	public static final int PACKAGE = 1;
+	public static final int RULE = 2;
+	public static final int QUERY = 3;
+	public static final int FUNCTION = 4;
+	public static final int TEMPLATE = 5;
+	public static final int EXPANDER = 6;
+	public static final int GLOBAL = 7;
+	public static final int IMPORT = 8;
+	public static final int RULE_ATTRIBUTE = 9;
+	
+	protected static final DroolsElement[] NO_ELEMENTS = new DroolsElement[0];
+	
+	private DroolsElement parent;
+	private IFile file;
+	private int offset;
+	private int length;
+	
+	protected DroolsElement(DroolsElement parent) {
+		this.parent = parent;
+	}
+	
+	public abstract int getType();
+	
+	public DroolsElement getParent() {
+		return parent;
+	}
+	
+	public abstract DroolsElement[] getChildren();
+
+	public IFile getFile() {
+		return file;
+	}
+	
+	public int getOffset() {
+		return offset;
+	}
+
+	public int getLength() {
+		return length;
+	}
+
+	// These are helper methods for creating the model and should not
+	// be used directly.  Use DroolsModelBuilder instead.
+
+	void setFile(IFile file, int offset, int length) {
+		this.file = file;
+		this.offset = offset;
+		this.length = length;
+	}
+
+}

Added: labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/core/DroolsModelBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/core/DroolsModelBuilder.java	2006-11-24 23:20:19 UTC (rev 7819)
+++ labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/core/DroolsModelBuilder.java	2006-11-24 23:21:52 UTC (rev 7820)
@@ -0,0 +1,174 @@
+package org.drools.ide.core;
+
+import java.util.Iterator;
+import java.util.Map;
+
+import org.eclipse.core.resources.IFile;
+
+public class DroolsModelBuilder {
+	
+	public static RuleSet createRuleSet() {
+		return new RuleSet();
+	}
+
+	public static Package createPackage(String packageName, int offset, int length) {
+		Package pkg = new Package(null, packageName);
+		pkg.setFile(null, offset, length);
+		return pkg;
+	}
+	
+	public static Package addPackage(RuleSet ruleSet, String packageName, int offset, int length) {
+		Package pkg = new Package(ruleSet, packageName);
+		pkg.setFile(null, offset, length);
+		ruleSet.addPackage(pkg);
+		return pkg;
+	}
+	
+	public static void removePackage(Package pkg) {
+		RuleSet ruleSet = pkg.getParentRuleSet();
+		if (ruleSet != null) {
+			ruleSet.removePackage(pkg.getPackageName());
+		}
+	}
+	
+	public static void clearRuleSet(RuleSet ruleSet) {
+		ruleSet.clear();
+	}
+	
+	public static Rule addRule(Package pkg, String ruleName, IFile file, int offset, int length, Map attributes) {
+		Rule rule = new Rule(pkg, ruleName);
+		rule.setFile(file, offset, length);
+		if (attributes != null) {
+			for (Iterator iterator = attributes.entrySet().iterator(); iterator.hasNext();) {
+				Map.Entry entry = (Map.Entry) iterator.next();
+				RuleAttribute attribute = new RuleAttribute(rule, (String) entry.getKey(), entry.getValue());
+				attribute.setFile(file, offset, length);
+				rule.addAttribute(attribute);
+			}
+		}
+		pkg.addRule(rule);
+		return rule;
+	}
+	
+	public static void removeRule(Rule rule) {
+		Package pkg = rule.getParentPackage();
+		if (pkg != null) {
+			pkg.removeRule(rule);
+			if (pkg.getChildren().length == 0) {
+				removePackage(pkg);
+			}
+		}
+	}
+
+	public static Function addFunction(Package pkg, String functionName, IFile file, int offset, int length) {
+		Function function = new Function(pkg, functionName);
+		function.setFile(file, offset, length);
+		pkg.addFunction(function);
+		return function;
+	}
+
+	public static void removeFunction(Function function) {
+		Package pkg = function.getParentPackage();
+		if (pkg != null) {
+			pkg.removeFunction(function);
+		}
+	}
+
+	public static void addExpander(Package pkg, String expanderName, IFile file, int offset, int length) {
+		Expander expander = new Expander(pkg, expanderName);
+		expander.setFile(file, offset, length);
+		pkg.addExpander(expander);
+	}
+
+	public static void removeExpander(Expander expander) {
+		Package pkg = expander.getParentPackage();
+		if (pkg != null) {
+			pkg.removeExpander(expander);
+		}
+	}
+
+	public static void addImport(Package pkg, String importClass, IFile file, int offset, int length) {
+		Import imp = new Import(pkg, importClass);
+		imp.setFile(file, offset, length);
+		pkg.addImport(imp);
+	}
+
+	public static void removeImport(Import imp) {
+		Package pkg = imp.getParentPackage();
+		if (pkg != null) {
+			pkg.removeImport(imp);
+		}
+	}
+
+	public static Global addGlobal(Package pkg, String globalName, IFile file, int offset, int length) {
+		Global global = new Global(pkg, globalName);
+		global.setFile(file, offset, length);
+		pkg.addGlobal(global);
+		return global;
+	}
+
+	public static void removeGlobal(Global global) {
+		Package pkg = global.getParentPackage();
+		if (pkg != null) {
+			pkg.removeGlobal(global);
+		}
+	}
+
+	public static Query addQuery(Package pkg, String queryName, IFile file, int offset, int length) {
+		Query query = new Query(pkg, queryName);
+		query.setFile(file, offset, length);
+		pkg.addQuery(query);
+		return query;
+	}
+
+	public static void removeQuery(Query query) {
+		Package pkg = query.getParentPackage();
+		if (pkg != null) {
+			pkg.removeQuery(query);
+		}
+	}
+
+	public static Template addTemplate(Package pkg, String templateName, IFile file, int offset, int length) {
+		Template template = new Template(pkg, templateName);
+		template.setFile(file, offset, length);
+		pkg.addTemplate(template);
+		return template;
+	}
+
+	public static void removeTemplate(Template template) {
+		Package pkg = template.getParentPackage();
+		if (pkg != null) {
+			pkg.removeTemplate(template);
+		}
+	}
+	
+	public static void removeElement(DroolsElement element) {
+		switch (element.getType()) {
+			case DroolsElement.RULESET:
+				clearRuleSet((RuleSet) element);
+				break;
+			case DroolsElement.PACKAGE:
+				removePackage((Package) element);
+				break;
+			case DroolsElement.RULE:
+				removeRule((Rule) element);
+				break;
+			case DroolsElement.QUERY:
+				removeQuery((Query) element);
+				break;
+			case DroolsElement.FUNCTION:
+				removeFunction((Function) element);
+				break;
+			case DroolsElement.TEMPLATE:
+				removeTemplate((Template) element);
+				break;
+			case DroolsElement.EXPANDER:
+				removeExpander((Expander) element);
+				break;
+			case DroolsElement.GLOBAL:
+				removeGlobal((Global) element);
+				break;
+		}
+	}
+
+}

Added: labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/core/Expander.java
===================================================================
--- labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/core/Expander.java	2006-11-24 23:20:19 UTC (rev 7819)
+++ labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/core/Expander.java	2006-11-24 23:21:52 UTC (rev 7820)
@@ -0,0 +1,37 @@
+package org.drools.ide.core;
+
+/**
+ * This represents an expander. 
+ * 
+ * @author <a href="mailto:kris_verlaenen at hotmail.com">kris verlaenen </a>
+ */
+public class Expander extends DroolsElement {
+
+	private final String expander;
+
+	Expander(Package parent, String expander) {
+		super(parent);
+		this.expander = expander;
+	}
+	
+	public Package getParentPackage() {
+		return (Package) getParent();
+	}
+	
+	public String getExpander() {
+		return expander;
+	}
+
+	public int getType() {
+		return EXPANDER;
+	}
+	
+	public DroolsElement[] getChildren() {
+		return NO_ELEMENTS;
+	}
+
+	public String toString() {
+		return expander;
+	}
+
+}

Added: labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/core/Function.java
===================================================================
--- labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/core/Function.java	2006-11-24 23:20:19 UTC (rev 7819)
+++ labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/core/Function.java	2006-11-24 23:21:52 UTC (rev 7820)
@@ -0,0 +1,37 @@
+package org.drools.ide.core;
+
+/**
+ * This represents a function. 
+ * 
+ * @author <a href="mailto:kris_verlaenen at hotmail.com">kris verlaenen </a>
+ */
+public class Function extends DroolsElement {
+
+    private final String functionName;
+
+    Function(Package parent, String functionName) {
+        super(parent);
+        this.functionName = functionName;
+    }
+    
+	public Package getParentPackage() {
+		return (Package) getParent();
+	}
+	
+    public String getFunctionName() {
+    	return functionName;
+    }
+
+	public int getType() {
+		return FUNCTION;
+	}
+	
+	public DroolsElement[] getChildren() {
+		return NO_ELEMENTS;
+	}
+
+	public String toString() {
+		return functionName;
+	}
+
+}

Added: labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/core/Global.java
===================================================================
--- labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/core/Global.java	2006-11-24 23:20:19 UTC (rev 7819)
+++ labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/core/Global.java	2006-11-24 23:21:52 UTC (rev 7820)
@@ -0,0 +1,37 @@
+package org.drools.ide.core;
+
+/**
+ * This represents a global. 
+ * 
+ * @author <a href="mailto:kris_verlaenen at hotmail.com">kris verlaenen </a>
+ */
+public class Global extends DroolsElement {
+
+    private final String globalName;
+
+    Global(Package parent, String globalName) {
+        super(parent);
+        this.globalName = globalName;
+    }
+    
+	public Package getParentPackage() {
+		return (Package) getParent();
+	}
+	
+    public String getGlobalName() {
+    	return globalName;
+    }
+
+	public int getType() {
+		return GLOBAL;
+	}
+	
+	public DroolsElement[] getChildren() {
+		return NO_ELEMENTS;
+	}
+
+	public String toString() {
+		return globalName;
+	}
+
+}

Added: labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/core/Import.java
===================================================================
--- labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/core/Import.java	2006-11-24 23:20:19 UTC (rev 7819)
+++ labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/core/Import.java	2006-11-24 23:21:52 UTC (rev 7820)
@@ -0,0 +1,37 @@
+package org.drools.ide.core;
+
+/**
+ * This represents an import. 
+ * 
+ * @author <a href="mailto:kris_verlaenen at hotmail.com">kris verlaenen </a>
+ */
+public class Import extends DroolsElement {
+
+    private final String importClass;
+
+    Import(Package parent, String importClass) {
+        super(parent);
+        this.importClass = importClass;
+    }
+    
+	public Package getParentPackage() {
+		return (Package) getParent();
+	}
+	
+    public String getImportClass() {
+    	return importClass;
+    }
+
+	public int getType() {
+		return IMPORT;
+	}
+	
+	public DroolsElement[] getChildren() {
+		return NO_ELEMENTS;
+	}
+
+	public String toString() {
+		return importClass;
+	}
+
+}

Added: labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/core/Package.java
===================================================================
--- labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/core/Package.java	2006-11-24 23:20:19 UTC (rev 7819)
+++ labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/core/Package.java	2006-11-24 23:21:52 UTC (rev 7820)
@@ -0,0 +1,117 @@
+package org.drools.ide.core;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * This represents a package. 
+ *
+ * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
+ */
+public class Package extends DroolsElement {
+
+	private String packageName;
+	private List rules = new ArrayList();
+	private List functions = new ArrayList();
+	private List expanders = new ArrayList();
+	private List imports = new ArrayList();
+	private List globals = new ArrayList();
+	private List queries = new ArrayList();
+	private List templates = new ArrayList();
+
+	Package(RuleSet parent, String packageName) {
+		super(parent);
+		this.packageName =
+			packageName == null ? "(default package)" : packageName;
+	}
+
+	public RuleSet getParentRuleSet() {
+		return (RuleSet) getParent();
+	}
+	
+	public String getPackageName() {
+		return packageName;
+	}
+
+	public int getType() {
+		return PACKAGE;
+	}
+	
+	public DroolsElement[] getChildren() {
+		List children = new ArrayList();
+		children.addAll(rules);
+		children.addAll(queries);
+		children.addAll(globals);
+		children.addAll(functions);
+		children.addAll(expanders);
+		children.addAll(imports);
+		children.addAll(templates);
+		return (DroolsElement[]) children.toArray(new DroolsElement[0]);
+	}
+
+	public String toString() {
+		return packageName;
+	}
+
+	// These are helper methods for creating the model and should not
+	// be used directly.  Use DroolsModelBuilder instead.
+
+	void addRule(Rule rule) {
+		rules.add(rule);
+	}
+	
+	void removeRule(Rule rule) {
+		rules.remove(rule);
+	}
+	
+	void addFunction(Function function) {
+		functions.add(function);
+	}
+	
+	void removeFunction(Function function) {
+		functions.remove(function);
+	}
+	
+	void addExpander(Expander expander) {
+		expanders.add(expander);
+	}
+	
+	void removeExpander(Expander expander) {
+		expanders.remove(expander);
+	}
+	
+	void addImport(Import imp) {
+		imports.add(imp);
+	}
+	
+	void removeImport(Import imp) {
+		imports.remove(imp);
+	}
+	
+	void addGlobal(Global global) {
+		globals.add(global);
+	}
+	
+	void removeGlobal(Global global) {
+		globals.remove(global);
+	}
+	
+	void addQuery(Query query) {
+		queries.add(query);
+	}
+	
+	void removeQuery(Query query) {
+		queries.remove(query);
+	}
+	
+	void addTemplate(Template template) {
+		templates.add(template);
+	}
+	
+	void removeTemplate(Template template) {
+		templates.remove(template);
+	}
+	
+}

Added: labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/core/Query.java
===================================================================
--- labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/core/Query.java	2006-11-24 23:20:19 UTC (rev 7819)
+++ labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/core/Query.java	2006-11-24 23:21:52 UTC (rev 7820)
@@ -0,0 +1,37 @@
+package org.drools.ide.core;
+
+/**
+ * This represents a query. 
+ * 
+ * @author <a href="mailto:kris_verlaenen at hotmail.com">kris verlaenen </a>
+ */
+public class Query extends DroolsElement {
+
+    private final String query;
+
+    Query(Package parent, String query) {
+        super(parent);
+        this.query = query;
+    }
+
+	public Package getParentPackage() {
+		return (Package) getParent();
+	}
+	
+	public String getQueryName() {
+		return query;
+	}
+	
+	public int getType() {
+		return QUERY;
+	}
+	
+	public DroolsElement[] getChildren() {
+		return NO_ELEMENTS;
+	}
+
+	public String toString() {
+		return query;
+	}
+
+}

Added: labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/core/Rule.java
===================================================================
--- labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/core/Rule.java	2006-11-24 23:20:19 UTC (rev 7819)
+++ labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/core/Rule.java	2006-11-24 23:21:52 UTC (rev 7820)
@@ -0,0 +1,52 @@
+package org.drools.ide.core;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * This represents a rule. 
+ * 
+ * @author <a href="mailto:kris_verlaenen at hotmail.com">kris verlaenen </a>
+ */
+public class Rule extends DroolsElement {
+
+    private final String ruleName;
+    private Map attributes = new HashMap();
+
+    Rule(Package parent, String ruleName) {
+    	super(parent);
+        this.ruleName = ruleName;
+    }
+
+	public Package getParentPackage() {
+		return (Package) getParent();
+	}
+	
+	public String getRuleName() {
+		return ruleName;
+	}
+	
+	public RuleAttribute getAttribute(String attributeName) {
+		return (RuleAttribute) attributes.get(attributeName);
+	}
+	
+	public int getType() {
+		return RULE;
+	}
+	
+	public DroolsElement[] getChildren() {
+		return NO_ELEMENTS;
+	}
+
+	public String toString() {
+		return ruleName;
+	}
+
+	// These are helper methods for creating the model and should not
+	// be used directly.  Use DroolsModelBuilder instead.
+
+    void addAttribute(RuleAttribute attribute) {
+		attributes.put(attribute.getAttributeName(), attribute);
+	}
+
+}

Added: labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/core/RuleAttribute.java
===================================================================
--- labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/core/RuleAttribute.java	2006-11-24 23:20:19 UTC (rev 7819)
+++ labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/core/RuleAttribute.java	2006-11-24 23:21:52 UTC (rev 7820)
@@ -0,0 +1,39 @@
+package org.drools.ide.core;
+
+/**
+ * This represents a rule attribute. 
+ * 
+ * @author <a href="mailto:kris_verlaenen at hotmail.com">kris verlaenen </a>
+ */
+public class RuleAttribute extends DroolsElement {
+
+    private final String attributeName;
+    private final Object attributeValue;
+
+    RuleAttribute(Rule parent, String attributeName, Object attributeValue) {
+    	super(parent);
+        this.attributeName = attributeName;
+        this.attributeValue = attributeValue;
+    }
+
+	public Rule getParentRule() {
+		return (Rule) getParent();
+	}
+	
+	public String getAttributeName() {
+		return attributeName;
+	}
+	
+	public int getType() {
+		return RULE_ATTRIBUTE;
+	}
+	
+	public DroolsElement[] getChildren() {
+		return NO_ELEMENTS;
+	}
+
+	public String toString() {
+		return attributeName + " = " + attributeValue;
+	}
+
+}

Added: labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/core/RuleSet.java
===================================================================
--- labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/core/RuleSet.java	2006-11-24 23:20:19 UTC (rev 7819)
+++ labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/core/RuleSet.java	2006-11-24 23:21:52 UTC (rev 7820)
@@ -0,0 +1,47 @@
+package org.drools.ide.core;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * This represents a rule set. 
+ *
+ * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
+ */
+public class RuleSet extends DroolsElement {
+	
+	private Map packages = new HashMap();
+	
+	RuleSet() {
+		super(null);
+	}
+	
+	public Package getPackage(String packageName) {
+		return (Package) packages.get(packageName);
+	}
+	
+	public int getType() {
+		return RULESET;
+	}
+	
+	public DroolsElement[] getChildren() {
+		return (DroolsElement[]) packages.values().toArray(
+			new DroolsElement[packages.size()]);
+	}
+
+	// These are helper methods for creating the model and should not
+	// be used directly.  Use DroolsModelBuilder instead.
+
+	void addPackage(Package pkg) {
+		packages.put(pkg.getPackageName(), pkg);
+	}
+	
+	void removePackage(String packageName) {
+		packages.remove(packageName);
+	}
+	
+	void clear() {
+		packages.clear();
+	}
+
+}

Added: labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/core/Template.java
===================================================================
--- labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/core/Template.java	2006-11-24 23:20:19 UTC (rev 7819)
+++ labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/core/Template.java	2006-11-24 23:21:52 UTC (rev 7820)
@@ -0,0 +1,37 @@
+package org.drools.ide.core;
+
+/**
+ * This represents a template. 
+ *
+ * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
+ */
+public class Template extends DroolsElement {
+
+    private final String templateName;
+
+    Template(Package parent, String templateName) {
+        super(parent);
+        this.templateName = templateName;
+    }
+
+	public Package getParentPackage() {
+		return (Package) getParent();
+	}
+	
+	public String getTemplateName() {
+		return templateName;
+	}
+	
+	public int getType() {
+		return TEMPLATE;
+	}
+	
+	public DroolsElement[] getChildren() {
+		return NO_ELEMENTS;
+	}
+
+	public String toString() {
+		return templateName;
+	}
+
+}

Added: labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/core/ui/DroolsContentProvider.java
===================================================================
--- labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/core/ui/DroolsContentProvider.java	2006-11-24 23:20:19 UTC (rev 7819)
+++ labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/core/ui/DroolsContentProvider.java	2006-11-24 23:21:52 UTC (rev 7820)
@@ -0,0 +1,44 @@
+package org.drools.ide.core.ui;
+
+import org.drools.ide.core.DroolsElement;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.Viewer;
+
+/**
+ * Content provider for Drools model elements. 
+ * 
+ * @author <a href="mailto:kris_verlaenen at hotmail.com">kris verlaenen </a>
+ */
+public class DroolsContentProvider implements ITreeContentProvider {
+
+	public Object[] getChildren(Object parentElement) {
+		if (parentElement instanceof DroolsElement) {
+			return ((DroolsElement) parentElement).getChildren();
+		}
+		return new Object[0];
+	}
+
+	public Object getParent(Object element) {
+		if (element instanceof DroolsElement) {
+			return ((DroolsElement) element).getParent();
+		}
+		return null;
+	}
+
+	public boolean hasChildren(Object element) {
+        return getChildren(element).length > 0;
+	}
+
+	public Object[] getElements(Object inputElement) {
+        return getChildren(inputElement);
+	}
+
+	public void dispose() {
+        // do nothing
+	}
+
+	public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+        // do nothing
+	}
+
+}

Added: labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/core/ui/DroolsFilter.java
===================================================================
--- labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/core/ui/DroolsFilter.java	2006-11-24 23:20:19 UTC (rev 7819)
+++ labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/core/ui/DroolsFilter.java	2006-11-24 23:21:52 UTC (rev 7820)
@@ -0,0 +1,59 @@
+package org.drools.ide.core.ui;
+
+import org.drools.ide.core.DroolsElement;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerFilter;
+
+/**
+ * Filter for the rules viewer.
+ */
+public class DroolsFilter extends ViewerFilter {
+
+	public static final int FILTER_RULES = 1;
+	public static final int FILTER_QUERIES = 2;
+	public static final int FILTER_FUNCTIONS = 4;
+	public static final int FILTER_TEMPLATES = 8;
+	public static final int FILTER_GLOBALS = 16;
+	
+	private int filterProperties;
+
+	public final void addFilter(int filter) {
+		filterProperties |= filter;
+	}
+
+	public final void removeFilter(int filter) {
+		filterProperties &= (-1 ^ filter);
+	}
+
+	public final boolean hasFilter(int filter) {
+		return (filterProperties & filter) != 0;
+	}
+	
+	public boolean isFilterProperty(Object element, Object property) {
+		return false;
+	}
+
+	public boolean select(Viewer viewer, Object parentElement, Object element) {
+		if (element instanceof DroolsElement) {
+			DroolsElement droolsElement = (DroolsElement) element;
+			int type = droolsElement.getType();
+			if (hasFilter(FILTER_RULES) && type == DroolsElement.RULE) {
+				return false;
+			}
+			if (hasFilter(FILTER_QUERIES) && type == DroolsElement.QUERY) {
+				return false;
+			}
+			if (hasFilter(FILTER_FUNCTIONS) && type == DroolsElement.FUNCTION) {
+				return false;
+			}
+			if (hasFilter(FILTER_TEMPLATES) && type == DroolsElement.TEMPLATE) {
+				return false;
+			}
+			if (hasFilter(FILTER_GLOBALS) && type == DroolsElement.GLOBAL) {
+				return false;
+			}
+		}			
+		return true;
+	}
+	
+}

Added: labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/core/ui/DroolsLabelProvider.java
===================================================================
--- labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/core/ui/DroolsLabelProvider.java	2006-11-24 23:20:19 UTC (rev 7819)
+++ labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/core/ui/DroolsLabelProvider.java	2006-11-24 23:21:52 UTC (rev 7820)
@@ -0,0 +1,31 @@
+package org.drools.ide.core.ui;
+
+import org.drools.ide.DroolsPluginImages;
+import org.drools.ide.core.DroolsElement;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.swt.graphics.Image;
+
+public class DroolsLabelProvider extends LabelProvider {
+
+	private static final String[] ICONS = new String[] {
+		DroolsPluginImages.PACKAGE,	// ruleset
+		DroolsPluginImages.PACKAGE,	// package
+		DroolsPluginImages.DROOLS, 	// rule
+		DroolsPluginImages.DROOLS, 	// query
+		DroolsPluginImages.METHOD, 	// function
+		DroolsPluginImages.CLASS, 	// template
+		DroolsPluginImages.DSL, 	// expander
+		DroolsPluginImages.GLOBAL, 	// global
+		DroolsPluginImages.IMPORT, 	// import
+		DroolsPluginImages.DROOLS, 	// rule attribute
+	};
+	
+    public Image getImage(Object element) {
+    	if (element instanceof DroolsElement) {
+    		String icon = ICONS[((DroolsElement) element).getType()];
+    		return DroolsPluginImages.getImageRegistry().get(icon);
+    	}
+        return null;
+    }
+    
+}

Added: labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/core/ui/DroolsTreeSorter.java
===================================================================
--- labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/core/ui/DroolsTreeSorter.java	2006-11-24 23:20:19 UTC (rev 7819)
+++ labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/core/ui/DroolsTreeSorter.java	2006-11-24 23:21:52 UTC (rev 7820)
@@ -0,0 +1,82 @@
+package org.drools.ide.core.ui;
+
+import org.drools.ide.core.DroolsElement;
+import org.drools.ide.core.Expander;
+import org.drools.ide.core.Function;
+import org.drools.ide.core.Global;
+import org.drools.ide.core.Import;
+import org.drools.ide.core.Package;
+import org.drools.ide.core.Query;
+import org.drools.ide.core.Rule;
+import org.drools.ide.core.RuleAttribute;
+import org.drools.ide.core.RuleSet;
+import org.drools.ide.core.Template;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerSorter;
+
+public class DroolsTreeSorter extends ViewerSorter {
+	
+	// level 0
+	private static final int RULESET = 0;
+	
+	// level 1
+	private static final int PACKAGE = 1;
+	
+	// level 2
+	private static final int RULE = 2;
+	private static final int QUERY = 3;
+	private static final int FUNCTION = 4;
+	private static final int TEMPLATE = 5;
+	private static final int EXPANDER = 6;
+	private static final int GLOBAL = 7;
+	private static final int IMPORT = 8;
+
+	// level 3
+	private static final int RULE_ATTRIBUTE = 9;
+	
+	private static final int UNKNOWN = 10;
+
+	private static DroolsLabelProvider labelProvider = new DroolsLabelProvider();
+
+	public int compare(Viewer viewer, Object e1, Object e2) {
+		DroolsElement node1 = (DroolsElement) e1;
+		DroolsElement node2 = (DroolsElement) e2;
+		int type1 = getElementType(node1);
+		int type2 = getElementType(node2);
+		if (type1 != type2) {
+			return type1 - type2;
+		}
+		String label1 = labelProvider.getText(node1); 
+		String label2 = labelProvider.getText(node2);
+		if (label1 == null) {
+			return (label2 == null ? 0 : -1);
+		}
+		return label1.compareTo(label2);
+	}
+	
+	private int getElementType(DroolsElement o) {
+		if (o instanceof RuleSet) {
+			return RULESET;
+		} else if (o instanceof Package) {
+			return PACKAGE;
+		} else if (o instanceof Rule) {
+			return RULE;
+		} else if (o instanceof Query) {
+			return QUERY;
+		} else if (o instanceof Function) {
+			return FUNCTION;
+		} else if (o instanceof Template) {
+			return TEMPLATE;
+		} else if (o instanceof Expander) {
+			return EXPANDER;
+		} else if (o instanceof Global) {
+			return GLOBAL;
+		} else if (o instanceof Import) {
+			return IMPORT;
+		} else if (o instanceof RuleAttribute) {
+			return RULE_ATTRIBUTE;
+		}
+		return UNKNOWN;
+	}
+	
+}

Added: labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/core/ui/FilterAction.java
===================================================================
--- labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/core/ui/FilterAction.java	2006-11-24 23:20:19 UTC (rev 7819)
+++ labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/core/ui/FilterAction.java	2006-11-24 23:21:52 UTC (rev 7820)
@@ -0,0 +1,34 @@
+package org.drools.ide.core.ui;
+
+import org.drools.ide.DroolsPluginImages;
+import org.eclipse.jface.action.Action;
+
+/**
+ * Action used to enable / disable filter properties
+ * 
+ * @author <a href="mailto:kris_verlaenen at hotmail.com">kris verlaenen </a>
+ */
+public class FilterAction extends Action {
+
+	private int filterType;
+
+	private FilterActionGroup filterActionGroup;
+
+	public FilterAction(FilterActionGroup actionGroup, String title,
+			int property, boolean initValue, String imageDescriptorKey) {
+		super(title);
+		filterActionGroup = actionGroup;
+		filterType = property;
+		setChecked(initValue);
+		setImageDescriptor(DroolsPluginImages.getImageDescriptor(imageDescriptorKey));
+	}
+
+	public int getFilterType() {
+		return filterType;
+	}
+
+	public void run() {
+		filterActionGroup.setFilter(filterType, isChecked());
+	}
+	
+}

Added: labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/core/ui/FilterActionGroup.java
===================================================================
--- labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/core/ui/FilterActionGroup.java	2006-11-24 23:20:19 UTC (rev 7819)
+++ labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/core/ui/FilterActionGroup.java	2006-11-24 23:21:52 UTC (rev 7820)
@@ -0,0 +1,112 @@
+package org.drools.ide.core.ui;
+
+import org.drools.ide.DroolsIDEPlugin;
+import org.drools.ide.DroolsPluginImages;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.util.Assert;
+import org.eclipse.jface.viewers.StructuredViewer;
+import org.eclipse.swt.custom.BusyIndicator;
+import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.actions.ActionGroup;
+
+/**
+ * Action Group that contributes filter buttons.
+ * 
+ * @author <a href="mailto:kris_verlaenen at hotmail.com">kris verlaenen </a>
+ */
+public class FilterActionGroup extends ActionGroup {
+
+	private FilterAction[] filterActions;
+	private DroolsFilter filter;
+	public int i;
+	
+	private StructuredViewer viewer;
+	private String viewerId;
+	
+	public FilterActionGroup(StructuredViewer viewer, String viewerId) {	
+		this.viewer = viewer;
+		this.viewerId = viewerId;
+		filter = new DroolsFilter();
+		filterActions = new FilterAction[] {
+			addFilterForType(DroolsFilter.FILTER_RULES, "Hide Rules", DroolsPluginImages.RULE),
+			addFilterForType(DroolsFilter.FILTER_QUERIES, "Hide Queries", DroolsPluginImages.QUERY),
+			addFilterForType(DroolsFilter.FILTER_FUNCTIONS, "Hide Functions", DroolsPluginImages.METHOD),
+			addFilterForType(DroolsFilter.FILTER_GLOBALS, "Hide Globals", DroolsPluginImages.GLOBAL),
+			addFilterForType(DroolsFilter.FILTER_TEMPLATES, "Hide Templates", DroolsPluginImages.CLASS),
+		};
+		viewer.addFilter(filter);
+	}
+	
+	private FilterAction addFilterForType(int filterType, String tooltip, String imageDescriptorKey) {
+		boolean filterEnabled = DroolsIDEPlugin.getDefault()
+			.getPreferenceStore().getBoolean(getPreferenceKey(filterType));
+		if (filterEnabled) {
+			filter.addFilter(filterType);
+		}
+		FilterAction hideAction = new FilterAction(this, tooltip, filterType, filterEnabled, imageDescriptorKey);
+		hideAction.setToolTipText(tooltip);
+		return hideAction;
+	}
+	
+	private String getPreferenceKey(int filterProperty) {
+		return "DroolsFilterActionGroup." + viewerId + '.' + String.valueOf(filterProperty);
+	}
+	
+	public void setFilter(int filterType, boolean set) {
+		setDroolsFilters(new int[] {filterType}, new boolean[] {set}, true);
+	}
+
+	private void setDroolsFilters(int[] propertyKeys, boolean[] propertyValues, boolean refresh) {
+		if (propertyKeys.length == 0)
+			return;
+		Assert.isTrue(propertyKeys.length == propertyValues.length);
+		
+		for (int i= 0; i < propertyKeys.length; i++) {
+			int filterProperty= propertyKeys[i];
+			boolean set= propertyValues[i];
+
+			IPreferenceStore store = DroolsIDEPlugin.getDefault().getPreferenceStore();
+			boolean found = false;
+			for (int j= 0; j < filterActions.length; j++) {
+				int currProperty= filterActions[j].getFilterType();
+				if (currProperty == filterProperty) {
+					filterActions[j].setChecked(set);
+					found= true;
+					store.setValue(getPreferenceKey(filterProperty), set);
+				}
+			}
+			if (found) {
+				if (set) {
+					filter.addFilter(filterProperty);
+				} else {
+					filter.removeFilter(filterProperty);
+				}
+			}
+		}
+		if (refresh) {
+			viewer.getControl().setRedraw(false);
+			BusyIndicator.showWhile(viewer.getControl().getDisplay(), new Runnable() {
+				public void run() {
+					viewer.refresh();
+				}
+			});
+			viewer.getControl().setRedraw(true);
+		}
+	}
+	
+	public boolean hasDroolsFilter(int filterType) {
+		return filter.hasFilter(filterType);
+	}
+	
+	public void fillActionBars(IActionBars actionBars) {
+		contributeToToolBar(actionBars.getToolBarManager());
+	}
+	
+	public void contributeToToolBar(IToolBarManager tbm) {
+		for (int i= 0; i < filterActions.length; i++) {
+			tbm.add(filterActions[i]);
+		}
+	}
+	
+}
\ No newline at end of file

Deleted: labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/outline/ExpanderTreeNode.java
===================================================================
--- labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/outline/ExpanderTreeNode.java	2006-11-24 23:20:19 UTC (rev 7819)
+++ labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/outline/ExpanderTreeNode.java	2006-11-24 23:21:52 UTC (rev 7820)
@@ -1,44 +0,0 @@
-package org.drools.ide.editors.outline;
-
-import org.drools.ide.DroolsIDEPlugin;
-import org.eclipse.jface.resource.ImageDescriptor;
-
-public class ExpanderTreeNode extends OutlineNode
-    implements
-    Comparable {
-
-    private final PackageTreeNode packageTreeNode;
-    private final String          expanderLabel;
-
-    public ExpanderTreeNode(PackageTreeNode parent,
-                            String importLabel) {
-        packageTreeNode = parent;
-        this.expanderLabel = importLabel;
-
-    }
-
-    public Object[] getChildren(Object o) {
-        return new Object[0];
-    }
-
-    public ImageDescriptor getImageDescriptor(Object object) {
-        return DroolsIDEPlugin.getImageDescriptor( "icons/dsl.GIF" );
-    }
-
-    public String getLabel(Object o) {
-        return expanderLabel;
-    }
-
-    public Object getParent(Object o) {
-        return packageTreeNode;
-    }
-
-    public int compareTo(Object obj) {
-        if ( obj instanceof ExpanderTreeNode ) {
-            ExpanderTreeNode other = (ExpanderTreeNode) obj;
-            return this.expanderLabel.compareTo( other.expanderLabel );
-        } else {
-            return 0;
-        }
-    }
-}

Deleted: labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/outline/FunctionTreeNode.java
===================================================================
--- labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/outline/FunctionTreeNode.java	2006-11-24 23:20:19 UTC (rev 7819)
+++ labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/outline/FunctionTreeNode.java	2006-11-24 23:21:52 UTC (rev 7820)
@@ -1,44 +0,0 @@
-package org.drools.ide.editors.outline;
-
-import org.drools.ide.DroolsIDEPlugin;
-import org.eclipse.jface.resource.ImageDescriptor;
-
-public class FunctionTreeNode extends OutlineNode
-    implements
-    Comparable {
-
-    private final PackageTreeNode packageTreeNode;
-    private final String          functionLabel;
-
-    public FunctionTreeNode(PackageTreeNode parent,
-                            String functionLabel) {
-        packageTreeNode = parent;
-        this.functionLabel = functionLabel;
-
-    }
-
-    public Object[] getChildren(Object o) {
-        return new Object[0];
-    }
-
-    public ImageDescriptor getImageDescriptor(Object object) {
-        return DroolsIDEPlugin.getImageDescriptor( "icons/public_co.gif" );
-    }
-
-    public String getLabel(Object o) {
-        return functionLabel;
-    }
-
-    public Object getParent(Object o) {
-        return packageTreeNode;
-    }
-
-    public int compareTo(Object obj) {
-        if ( obj instanceof FunctionTreeNode ) {
-            FunctionTreeNode other = (FunctionTreeNode) obj;
-            return this.functionLabel.compareTo( other.functionLabel );
-        } else {
-            return 0;
-        }
-    }
-}

Deleted: labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/outline/GlobalTreeNode.java
===================================================================
--- labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/outline/GlobalTreeNode.java	2006-11-24 23:20:19 UTC (rev 7819)
+++ labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/outline/GlobalTreeNode.java	2006-11-24 23:21:52 UTC (rev 7820)
@@ -1,44 +0,0 @@
-package org.drools.ide.editors.outline;
-
-import org.drools.ide.DroolsIDEPlugin;
-import org.eclipse.jface.resource.ImageDescriptor;
-
-public class GlobalTreeNode extends OutlineNode
-    implements
-    Comparable {
-
-    private final PackageTreeNode packageTreeNode;
-    private final String          queryLabel;
-
-    public GlobalTreeNode(PackageTreeNode parent,
-                            String importLabel) {
-        packageTreeNode = parent;
-        this.queryLabel = importLabel;
-
-    }
-
-    public Object[] getChildren(Object o) {
-        return new Object[0];
-    }
-
-    public ImageDescriptor getImageDescriptor(Object object) {
-        return DroolsIDEPlugin.getImageDescriptor( "icons/public_co.gif" );
-    }
-
-    public String getLabel(Object o) {
-        return queryLabel;
-    }
-
-    public Object getParent(Object o) {
-        return packageTreeNode;
-    }
-
-    public int compareTo(Object obj) {
-        if ( obj instanceof GlobalTreeNode ) {
-            GlobalTreeNode other = (GlobalTreeNode) obj;
-            return this.queryLabel.compareTo( other.queryLabel );
-        } else {
-            return 0;
-        }
-    }
-}

Deleted: labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/outline/ImportTreeNode.java
===================================================================
--- labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/outline/ImportTreeNode.java	2006-11-24 23:20:19 UTC (rev 7819)
+++ labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/outline/ImportTreeNode.java	2006-11-24 23:21:52 UTC (rev 7820)
@@ -1,44 +0,0 @@
-package org.drools.ide.editors.outline;
-
-import org.drools.ide.DroolsIDEPlugin;
-import org.eclipse.jface.resource.ImageDescriptor;
-
-public class ImportTreeNode extends OutlineNode
-    implements
-    Comparable {
-
-    private final PackageTreeNode packageTreeNode;
-    private final String          importLabel;
-
-    public ImportTreeNode(PackageTreeNode parent,
-                            String importLabel) {
-        packageTreeNode = parent;
-        this.importLabel = importLabel;
-
-    }
-
-    public Object[] getChildren(Object o) {
-        return new Object[0];
-    }
-
-    public ImageDescriptor getImageDescriptor(Object object) {
-        return DroolsIDEPlugin.getImageDescriptor( "icons/import.gif" );
-    }
-
-    public String getLabel(Object o) {
-        return importLabel;
-    }
-
-    public Object getParent(Object o) {
-        return packageTreeNode;
-    }
-
-    public int compareTo(Object obj) {
-        if ( obj instanceof ImportTreeNode ) {
-            ImportTreeNode other = (ImportTreeNode) obj;
-            return this.importLabel.compareTo( other.importLabel );
-        } else {
-            return 0;
-        }
-    }
-}

Deleted: labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/outline/OutlineNode.java
===================================================================
--- labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/outline/OutlineNode.java	2006-11-24 23:20:19 UTC (rev 7819)
+++ labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/outline/OutlineNode.java	2006-11-24 23:21:52 UTC (rev 7820)
@@ -1,46 +0,0 @@
-package org.drools.ide.editors.outline;
-
-import org.eclipse.core.runtime.IAdaptable;
-import org.eclipse.ui.model.IWorkbenchAdapter;
-
-/**
- * This represents a node that is shown in the outline. 
- * 
- * @author Michael Neale
- */
-public abstract class OutlineNode implements
-    IWorkbenchAdapter,
-    IAdaptable {
-
-    private int offset;
-    private int length;
-    
-    /** The offset (in chars) to jump to */
-    public int getOffset() {
-        return offset;
-    }
-    
-
-    /** return the length of selection */
-    public int getLength() {
-        return length;
-    }
-
-
-    public void setLength(int length) {
-        this.length = length;
-    }
-
-
-    public void setOffset(int offset) {
-        this.offset = offset;
-    }
-
-
-    public Object getAdapter(Class adapter) {
-        if ( adapter == IWorkbenchAdapter.class ) {
-            return this;
-        }
-        return null;
-    }
-}

Deleted: labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/outline/PackageTreeNode.java
===================================================================
--- labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/outline/PackageTreeNode.java	2006-11-24 23:20:19 UTC (rev 7819)
+++ labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/outline/PackageTreeNode.java	2006-11-24 23:21:52 UTC (rev 7820)
@@ -1,176 +0,0 @@
-package org.drools.ide.editors.outline;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.Collections;
-import java.util.List;
-
-import org.drools.ide.DroolsIDEPlugin;
-import org.drools.lang.descr.AttributeDescr;
-import org.eclipse.jface.resource.ImageDescriptor;
-
-/**
- * This represents a package in the outline view. 
- * Each rule resource must have a package declaration.
- * 
- * @author Jeff Brown
- */
-public class PackageTreeNode extends OutlineNode {
-
-    private List   rules       = new ArrayList();
-
-    private List   functions   = new ArrayList();
-
-    private List   expanders   = new ArrayList();
-
-    private List   imports   = new ArrayList();
-
-    private List   globals   = new ArrayList();
-
-    private List   queries   = new ArrayList();
-
-    private String packageName = "<unknown package name>";
-
-    public String getPackageName() {
-        return packageName;
-    }
-
-    public void setPackageName(String packageName) {
-        this.packageName = packageName;
-    }
-
-    /** Add a rule node to the outline. Keeping track of where it was seen in the document (offset) */
-    public void addRule(String ruleName,
-                        int offset,
-                        int length) {
-    	addRule(ruleName, offset, length, null);
-    }
-
-    /** Add a rule node to the outline. Keeping track of where it was seen in the document (offset) */
-    public void addRule(String ruleName,
-                        int offset,
-                        int length,
-                        List attributes) {
-        RuleTreeNode node = new RuleTreeNode( this,
-                                              ruleName );
-        node.setOffset( offset );
-        node.setLength( length );
-        if (attributes != null) {
-        	Iterator iterator = attributes.iterator();
-        	while (iterator.hasNext()) {
-        		AttributeDescr descr = (AttributeDescr) iterator.next();
-        		if (descr != null) { // this is possible when attributes contain errors
-        			node.addAttribute(descr.getName(), descr.getValue(), offset, length);
-        		}
-        	}
-        }
-        rules.add( node );
-    }
-    
-    /** Add a function node to the outline. Keeping track of where it was seen in the document (offset) */
-    public void addFunction(String functionLabel,
-                            int offset,
-                            int length) {
-        FunctionTreeNode node = new FunctionTreeNode( this,
-                                                      functionLabel );
-        node.setOffset( offset );
-        node.setLength( length );
-        functions.add( node );
-    }
-
-    /** Add an expander node to the outline. Keeping track of where it was seen in the document (offset) */
-    public void addExpander(String expanderLabel,
-                            int offset,
-                            int length) {
-        ExpanderTreeNode node = new ExpanderTreeNode( this, expanderLabel );
-        node.setOffset( offset );
-        node.setLength( length );
-        expanders.add( node );
-    }
-
-    /** Add an import node to the outline. Keeping track of where it was seen in the document (offset) */
-    public void addImport(String importLabel,
-                          int offset,
-                          int length) {
-        ImportTreeNode node = new ImportTreeNode( this, importLabel );
-        node.setOffset( offset );
-        node.setLength( length );
-        imports.add( node );
-    }
-
-    /** Add a global node to the outline. Keeping track of where it was seen in the document (offset) */
-    public void addGlobal(String globalLabel,
-                          int offset,
-                          int length) {
-        GlobalTreeNode node = new GlobalTreeNode( this, globalLabel );
-        node.setOffset( offset );
-        node.setLength( length );
-        globals.add( node );
-    }
-
-    /** Add a query node to the outline. Keeping track of where it was seen in the document (offset) */
-    public void addQuery(String queryLabel,
-                          int offset,
-                          int length) {
-        QueryTreeNode node = new QueryTreeNode( this, queryLabel );
-        node.setOffset( offset );
-        node.setLength( length );
-        queries.add( node );
-    }
-
-    public void addTemplate(String templateLabel, int offset, int length) {
-		TemplateTreeNode node = new TemplateTreeNode( this, templateLabel );
-		node.setOffset( offset );
-		node.setLength( length );
-		queries.add( node );
-	}
-
-    /** 
-     * This will return the child nodes, as they are to be displayed on screen (sorted an all !) 
-     * Rules should appear at the top, sorted, as they are the most important assets.
-     * */
-    public Object[] getChildren(Object o) {
-        List children = new ArrayList();
-
-        //sort and add rules
-        Collections.sort( rules );
-        children.addAll( rules );
-
-        //sort and add queries
-        Collections.sort( queries );
-        children.addAll( queries );
-
-        // sort and add globals
-        Collections.sort( globals );
-        children.addAll( globals );
-
-        // sort and add functions
-        Collections.sort( functions );
-        children.addAll( functions );
-
-        // sort and add expanders
-        Collections.sort( expanders );
-        children.addAll( expanders );
-
-        // sort and add imports
-        Collections.sort( imports );
-        children.addAll( imports );
-
-        return children.toArray();
-    }
-
-    public ImageDescriptor getImageDescriptor(Object object) {
-        ImageDescriptor des = DroolsIDEPlugin.getImageDescriptor( "icons/package_obj.gif" );
-        return des;
-
-    }
-
-    public String getLabel(Object o) {
-        return packageName;
-    }
-
-    public Object getParent(Object o) {
-        return null;
-    }
-
-}

Deleted: labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/outline/QueryTreeNode.java
===================================================================
--- labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/outline/QueryTreeNode.java	2006-11-24 23:20:19 UTC (rev 7819)
+++ labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/outline/QueryTreeNode.java	2006-11-24 23:21:52 UTC (rev 7820)
@@ -1,44 +0,0 @@
-package org.drools.ide.editors.outline;
-
-import org.drools.ide.DroolsIDEPlugin;
-import org.eclipse.jface.resource.ImageDescriptor;
-
-public class QueryTreeNode extends OutlineNode
-    implements
-    Comparable {
-
-    private final PackageTreeNode packageTreeNode;
-    private final String          expanderLabel;
-
-    public QueryTreeNode(PackageTreeNode parent,
-                            String importLabel) {
-        packageTreeNode = parent;
-        this.expanderLabel = importLabel;
-
-    }
-
-    public Object[] getChildren(Object o) {
-        return new Object[0];
-    }
-
-    public ImageDescriptor getImageDescriptor(Object object) {
-        return DroolsIDEPlugin.getImageDescriptor( "icons/drools.gif" );
-    }
-
-    public String getLabel(Object o) {
-        return expanderLabel;
-    }
-
-    public Object getParent(Object o) {
-        return packageTreeNode;
-    }
-
-    public int compareTo(Object obj) {
-        if ( obj instanceof QueryTreeNode ) {
-            QueryTreeNode other = (QueryTreeNode) obj;
-            return this.expanderLabel.compareTo( other.expanderLabel );
-        } else {
-            return 0;
-        }
-    }
-}

Deleted: labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/outline/RuleAttributeTreeNode.java
===================================================================
--- labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/outline/RuleAttributeTreeNode.java	2006-11-24 23:20:19 UTC (rev 7819)
+++ labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/outline/RuleAttributeTreeNode.java	2006-11-24 23:21:52 UTC (rev 7820)
@@ -1,44 +0,0 @@
-package org.drools.ide.editors.outline;
-
-import org.drools.ide.DroolsIDEPlugin;
-import org.eclipse.jface.resource.ImageDescriptor;
-
-public class RuleAttributeTreeNode extends OutlineNode implements Comparable {
-
-    private final RuleTreeNode ruleTreeNode;
-    private final String attributeName;
-    private final Object attributeValue;
-
-    public RuleAttributeTreeNode(RuleTreeNode parent,
-                        String name, Object value) {
-    	ruleTreeNode = parent;
-        this.attributeName = name;
-        this.attributeValue = value;
-    }
-
-    public Object[] getChildren(Object o) {
-        return new Object[0];
-    }
-
-    public ImageDescriptor getImageDescriptor(Object object) {
-        return DroolsIDEPlugin.getImageDescriptor( "icons/drools.gif" );
-    }
-
-    public String getLabel(Object o) {
-        return attributeName + " = " + attributeValue;
-    }
-
-    public Object getParent(Object o) {
-        return ruleTreeNode;
-    }
-
-    public int compareTo(Object obj) {
-        if (obj instanceof RuleAttributeTreeNode) {
-            RuleAttributeTreeNode other = (RuleAttributeTreeNode) obj;
-            return this.attributeName.compareTo(other.attributeName);
-        } else {
-            return 0;
-        }
-    }
-
-}

Modified: labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/outline/RuleContentOutlinePage.java
===================================================================
--- labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/outline/RuleContentOutlinePage.java	2006-11-24 23:20:19 UTC (rev 7819)
+++ labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/outline/RuleContentOutlinePage.java	2006-11-24 23:21:52 UTC (rev 7820)
@@ -9,7 +9,16 @@
 import org.drools.compiler.DroolsParserException;
 import org.drools.ide.DRLInfo;
 import org.drools.ide.DroolsIDEPlugin;
+import org.drools.ide.core.DroolsElement;
+import org.drools.ide.core.DroolsModelBuilder;
+import org.drools.ide.core.Package;
+import org.drools.ide.core.RuleSet;
+import org.drools.ide.core.ui.DroolsContentProvider;
+import org.drools.ide.core.ui.DroolsLabelProvider;
+import org.drools.ide.core.ui.DroolsTreeSorter;
+import org.drools.ide.core.ui.FilterActionGroup;
 import org.drools.ide.editors.DRLRuleEditor;
+import org.drools.lang.descr.AttributeDescr;
 import org.drools.lang.descr.PackageDescr;
 import org.drools.lang.descr.RuleDescr;
 import org.eclipse.jface.viewers.ISelectionChangedListener;
@@ -18,8 +27,6 @@
 import org.eclipse.jface.viewers.TreeViewer;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
-import org.eclipse.ui.model.WorkbenchContentProvider;
-import org.eclipse.ui.model.WorkbenchLabelProvider;
 import org.eclipse.ui.views.contentoutline.ContentOutlinePage;
 
 /**
@@ -28,16 +35,13 @@
  * Should provide navigation assistance in large rule files.
  * 
  * @author "Jeff Brown" <brown_j at ociweb.com>
+ * @author <a href="mailto:kris_verlaenen at hotmail.com">kris verlaenen </a>
  */
 public class RuleContentOutlinePage extends ContentOutlinePage {
 
-    //the editor that this outline view is linked to.
-    private DRLRuleEditor       editor;
-
-    //the "root" node
-    private final RuleFileTreeNode ruleFileTreeNode    = new RuleFileTreeNode();
+    private DRLRuleEditor editor;
+    private RuleSet ruleSet = DroolsModelBuilder.createRuleSet();
     private Map rules;
-//    private Map lineToCharactersMapping;
 
     ///////////////////////////////////
     // Patterns that the parser uses
@@ -73,33 +77,35 @@
 			"\\n\\s*query\\s+([^\\s;#\"]+)", Pattern.DOTALL);
 
     public RuleContentOutlinePage(DRLRuleEditor editor) {
-        super();
         this.editor = editor;
     }
 
     public void createControl(Composite parent) {
-        super.createControl( parent );
+        super.createControl(parent);
         TreeViewer viewer = getTreeViewer();
-        viewer.setContentProvider( new WorkbenchContentProvider() );
-        viewer.setLabelProvider( new WorkbenchLabelProvider() );
-
-        viewer.setInput( ruleFileTreeNode );
+        viewer.setContentProvider(new DroolsContentProvider());
+        viewer.setLabelProvider(new DroolsLabelProvider());
+        viewer.setSorter(new DroolsTreeSorter());
+        viewer.setInput(ruleSet);
+        FilterActionGroup filterActionGroup = new FilterActionGroup(
+    		viewer, "org.drools.ide.editors.outline.RuleContentOutlinePage");
+		filterActionGroup.fillActionBars(getSite().getActionBars());
         update();
 
         // add the listener for navigation of the rule document.
-        super.addSelectionChangedListener( new ISelectionChangedListener() {
+        super.addSelectionChangedListener(new ISelectionChangedListener() {
             public void selectionChanged(SelectionChangedEvent event) {
                 Object selectionObj = event.getSelection();
-                if ( selectionObj != null && selectionObj instanceof StructuredSelection ) {
+                if (selectionObj != null && selectionObj instanceof StructuredSelection) {
                     StructuredSelection sel = (StructuredSelection) selectionObj;
-                    OutlineNode node = (OutlineNode) sel.getFirstElement();
-                    if ( node != null ) {
-                        editor.selectAndReveal( node.getOffset(),
-                                                node.getLength() );
+                    DroolsElement element = (DroolsElement) sel.getFirstElement();
+                    if (element != null) {
+                        editor.selectAndReveal(element.getOffset(),
+                                                element.getLength());
                     }
                 }
             }
-        } );
+        });
     }
 
     /**
@@ -107,111 +113,108 @@
      */
     public void update() {
         TreeViewer viewer = getTreeViewer();
-
-        if ( viewer != null ) {
+        if (viewer != null) {
             Control control = viewer.getControl();
-            if ( control != null && !control.isDisposed() ) {
-                PackageTreeNode packageTreeNode = createPackageTreeNode();
-                ruleFileTreeNode.setPackageTreeNode( packageTreeNode );
-                viewer.refresh();
-                control.setRedraw( false );
+            if (control != null && !control.isDisposed()) {
+            	initRules();
+            	populatePackageTreeNode();
+            	viewer.refresh();
+                control.setRedraw(false);
                 viewer.expandToLevel(2);
-                control.setRedraw( true );
+                control.setRedraw(true);
             }
         }
     }
 
     /**
-     * 
-     * @return a PackageTreeNode representing the current state of the 
-     * document, populated with all of the package's child elements
-     */
-    private PackageTreeNode createPackageTreeNode() {
-        PackageTreeNode packageTreeNode = new PackageTreeNode();
-        initRules();
-        populatePackageTreeNode(packageTreeNode);
-        return packageTreeNode;
-    }
-
-    /**
      * populates the PackageTreeNode with all of its child elements
      * 
      * @param packageTreeNode the node to populate
      */
-    public void populatePackageTreeNode(PackageTreeNode packageTreeNode) {
+    public void populatePackageTreeNode() {
+    	DroolsModelBuilder.clearRuleSet(ruleSet);
     	String ruleFileContents = editor.getContent();
-        Matcher matcher = RULE_PATTERN1.matcher(ruleFileContents);
+    	Matcher matcher = PACKAGE_PATTERN.matcher(ruleFileContents);
+    	String packageName = null;
+        if (matcher.find()) {
+            packageName = matcher.group(1);
+        }
+        Package pkg = DroolsModelBuilder.addPackage(ruleSet, packageName,
+    		matcher.start(1), matcher.end(1) - matcher.start(1));
+
+        matcher = RULE_PATTERN1.matcher(ruleFileContents);
         while (matcher.find()) {
             String ruleName = matcher.group(1);
-            RuleDescr ruleDescr = (RuleDescr) rules.get(ruleName);
-            if (ruleDescr == null) {
-                packageTreeNode.addRule(ruleName, matcher.start(1), matcher.end(1) - matcher.start(1));
-            } else {
-            	packageTreeNode.addRule(ruleName, matcher.start(1), matcher.end(1) - matcher.start(1), ruleDescr.getAttributes());
-            }
+            DroolsModelBuilder.addRule(pkg, ruleName, null,
+        		matcher.start(1), matcher.end(1) - matcher.start(1),
+        		extractAttributes((RuleDescr) rules.get(ruleName)));
         }
         matcher = RULE_PATTERN2.matcher(ruleFileContents);
         while (matcher.find()) {
             String ruleName = matcher.group(1);
-            RuleDescr ruleDescr = (RuleDescr) rules.get(ruleName);
-            if (ruleDescr == null) {
-                packageTreeNode.addRule(ruleName, matcher.start(1), matcher.end(1) - matcher.start(1));
-            } else {
-            	packageTreeNode.addRule(ruleName, matcher.start(1), matcher.end(1) - matcher.start(1), ruleDescr.getAttributes());
-            }
+            DroolsModelBuilder.addRule(pkg, ruleName, null,
+        		matcher.start(1), matcher.end(1) - matcher.start(1),
+        		extractAttributes((RuleDescr) rules.get(ruleName)));
          } 
-        matcher = PACKAGE_PATTERN.matcher(ruleFileContents);
-        if (matcher.find()) {
-            String packageName = matcher.group(1);
-            packageTreeNode.setPackageName(packageName);
-            packageTreeNode.setOffset(matcher.start(1));
-            packageTreeNode.setLength(matcher.end(1) - matcher.start(1));
-        }
         matcher = FUNCTION_PATTERN.matcher(ruleFileContents);
 		while (matcher.find()) {
 			String functionName = matcher.group(2);
-			packageTreeNode.addFunction(functionName + "()",
-					matcher.start(2), matcher.end(2) - matcher.start(2));
+			DroolsModelBuilder.addFunction(pkg, functionName + "()", null,
+				matcher.start(2), matcher.end(2) - matcher.start(2));
 		}
 		matcher = EXPANDER_PATTERN.matcher(ruleFileContents);
 		if (matcher.find()) {
 			String expanderName = matcher.group(1);
-			packageTreeNode.addExpander(expanderName, 
-					matcher.start(1), matcher.end(1) - matcher.start(1));
+			DroolsModelBuilder.addExpander(pkg, expanderName, null,
+				matcher.start(1), matcher.end(1) - matcher.start(1));
 		}
 		matcher = IMPORT_PATTERN.matcher(ruleFileContents);
 		while (matcher.find()) {
 			String importName = matcher.group(1);
-			packageTreeNode.addImport(importName, 
-					matcher.start(1), matcher.end(1) - matcher.start(1));
+			DroolsModelBuilder.addImport(pkg, importName, null,
+				matcher.start(1), matcher.end(1) - matcher.start(1));
 		}
 		matcher = GLOBAL_PATTERN.matcher(ruleFileContents);
 		while (matcher.find()) {
 			String globalType = matcher.group(1);
 			String globalName = matcher.group(2);
 			String name = globalName + " : " + globalType;
-			packageTreeNode.addGlobal(name, 
-					matcher.start(2), matcher.end(2) - matcher.start(2));
+			DroolsModelBuilder.addGlobal(pkg, name, null,
+				matcher.start(2), matcher.end(2) - matcher.start(2));
 		}
 		matcher = QUERY_PATTERN1.matcher(ruleFileContents);
 		while (matcher.find()) {
 			String queryName = matcher.group(1);
-			packageTreeNode.addQuery(queryName, 
+			DroolsModelBuilder.addQuery(pkg, queryName, null,
 					matcher.start(1), matcher.end(1) - matcher.start(1));
 		}
 		matcher = QUERY_PATTERN2.matcher(ruleFileContents);
 		while (matcher.find()) {
 			String queryName = matcher.group(1);
-			packageTreeNode.addQuery(queryName, 
-					matcher.start(1), matcher.end(1) - matcher.start(1));
+			DroolsModelBuilder.addQuery(pkg, queryName, null,
+				matcher.start(1), matcher.end(1) - matcher.start(1));
 		}
 		matcher = TEMPLATE_PATTERN.matcher(ruleFileContents);
 		while (matcher.find()) {
 			String templateName = matcher.group(1);
-			packageTreeNode.addTemplate(templateName, 
+			DroolsModelBuilder.addTemplate(pkg, templateName, null,
 					matcher.start(1), matcher.end(1) - matcher.start(1));
 		}
     }
+    
+    private Map extractAttributes(RuleDescr ruleDescr) {
+        Map attributes = null;
+        if (ruleDescr != null) {
+        	attributes = new HashMap();
+        	for (Iterator iterator = ruleDescr.getAttributes().iterator(); iterator.hasNext();) {
+        		AttributeDescr attribute = (AttributeDescr) iterator.next();
+        		if (attribute.getName() != null) {
+        			attributes.put(attribute.getName(), attribute.getValue());
+        		}
+        	}
+        }
+        return attributes;
+    }
 
     public void initRules() {
     	rules = new HashMap();

Deleted: labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/outline/RuleFileTreeNode.java
===================================================================
--- labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/outline/RuleFileTreeNode.java	2006-11-24 23:20:19 UTC (rev 7819)
+++ labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/outline/RuleFileTreeNode.java	2006-11-24 23:21:52 UTC (rev 7820)
@@ -1,38 +0,0 @@
-package org.drools.ide.editors.outline;
-
-import org.eclipse.jface.resource.ImageDescriptor;
-
-/**
- * This represents a rule file in the outline view. 
- * 
- * @author Jeff Brown
- */
-public class RuleFileTreeNode extends OutlineNode {
-
-    private PackageTreeNode packageTreeNode = null;
-
-    public Object[] getChildren(Object o) {
-        if(packageTreeNode == null) return new Object[0];
-        return new Object[]{packageTreeNode};
-    }
-
-    public ImageDescriptor getImageDescriptor(Object object) {
-        return null;
-    }
-
-    public String getLabel(Object o) {
-        return null;
-    }
-
-    public Object getParent(Object o) {
-        return null;
-    }
-
-    public PackageTreeNode getPackageTreeNode() {
-        return packageTreeNode;
-    }
-
-    public void setPackageTreeNode(PackageTreeNode packageTreeNode) {
-        this.packageTreeNode = packageTreeNode;
-    }
-}

Deleted: labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/outline/RuleTreeNode.java
===================================================================
--- labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/outline/RuleTreeNode.java	2006-11-24 23:20:19 UTC (rev 7819)
+++ labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/outline/RuleTreeNode.java	2006-11-24 23:21:52 UTC (rev 7820)
@@ -1,56 +0,0 @@
-package org.drools.ide.editors.outline;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-import org.drools.ide.DroolsIDEPlugin;
-import org.eclipse.jface.resource.ImageDescriptor;
-
-public class RuleTreeNode extends OutlineNode implements Comparable {
-
-    private final PackageTreeNode packageTreeNode;
-    private final String ruleName;
-    private List attributes = new ArrayList();
-
-    public RuleTreeNode(PackageTreeNode parent,
-                        String ruleName) {
-        packageTreeNode = parent;
-        this.ruleName = ruleName;
-
-    }
-
-    public void addAttribute(String name, Object value, int offset, int length) {
-		RuleAttributeTreeNode node = new RuleAttributeTreeNode(this, name, value);
-		node.setOffset(offset);
-		node.setLength(length);
-		attributes.add(node);
-	}
-
-    public Object[] getChildren(Object o) {
-        Collections.sort( attributes );
-        return attributes.toArray();
-    }
-
-    public ImageDescriptor getImageDescriptor(Object object) {
-        return DroolsIDEPlugin.getImageDescriptor( "icons/drools.gif" );
-    }
-
-    public String getLabel(Object o) {
-        return ruleName;
-    }
-
-    public Object getParent(Object o) {
-        return packageTreeNode;
-    }
-
-    public int compareTo(Object obj) {
-        if (obj instanceof RuleTreeNode) {
-            RuleTreeNode other = (RuleTreeNode) obj;
-            return this.ruleName.compareTo( other.ruleName );
-        } else {
-            return 0;
-        }
-    }
-
-}

Deleted: labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/outline/TemplateTreeNode.java
===================================================================
--- labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/outline/TemplateTreeNode.java	2006-11-24 23:20:19 UTC (rev 7819)
+++ labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/editors/outline/TemplateTreeNode.java	2006-11-24 23:21:52 UTC (rev 7820)
@@ -1,42 +0,0 @@
-package org.drools.ide.editors.outline;
-
-import org.drools.ide.DroolsIDEPlugin;
-import org.eclipse.jface.resource.ImageDescriptor;
-
-public class TemplateTreeNode extends OutlineNode implements Comparable {
-
-    private final PackageTreeNode packageTreeNode;
-    private final String          expanderLabel;
-
-    public TemplateTreeNode(PackageTreeNode parent,
-                            String importLabel) {
-        packageTreeNode = parent;
-        this.expanderLabel = importLabel;
-
-    }
-
-    public Object[] getChildren(Object o) {
-        return new Object[0];
-    }
-
-    public ImageDescriptor getImageDescriptor(Object object) {
-        return DroolsIDEPlugin.getImageDescriptor( "icons/class_obj.gif" );
-    }
-
-    public String getLabel(Object o) {
-        return expanderLabel;
-    }
-
-    public Object getParent(Object o) {
-        return packageTreeNode;
-    }
-
-    public int compareTo(Object obj) {
-        if ( obj instanceof TemplateTreeNode ) {
-            TemplateTreeNode other = (TemplateTreeNode) obj;
-            return this.expanderLabel.compareTo( other.expanderLabel );
-        } else {
-            return 0;
-        }
-    }
-}

Added: labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/view/rules/RulesView.java
===================================================================
--- labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/view/rules/RulesView.java	2006-11-24 23:20:19 UTC (rev 7819)
+++ labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/view/rules/RulesView.java	2006-11-24 23:21:52 UTC (rev 7820)
@@ -0,0 +1,272 @@
+package org.drools.ide.view.rules;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.drools.ide.DRLInfo;
+import org.drools.ide.DroolsIDEPlugin;
+import org.drools.ide.core.DroolsElement;
+import org.drools.ide.core.DroolsModelBuilder;
+import org.drools.ide.core.Function;
+import org.drools.ide.core.Global;
+import org.drools.ide.core.Package;
+import org.drools.ide.core.Query;
+import org.drools.ide.core.Rule;
+import org.drools.ide.core.RuleSet;
+import org.drools.ide.core.Template;
+import org.drools.ide.core.ui.DroolsContentProvider;
+import org.drools.ide.core.ui.DroolsLabelProvider;
+import org.drools.ide.core.ui.DroolsTreeSorter;
+import org.drools.ide.core.ui.FilterActionGroup;
+import org.drools.lang.descr.FactTemplateDescr;
+import org.drools.lang.descr.FunctionDescr;
+import org.drools.lang.descr.QueryDescr;
+import org.drools.lang.descr.RuleDescr;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceChangeEvent;
+import org.eclipse.core.resources.IResourceChangeListener;
+import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.core.resources.IResourceDeltaVisitor;
+import org.eclipse.core.resources.IResourceVisitor;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jface.viewers.DoubleClickEvent;
+import org.eclipse.jface.viewers.IDoubleClickListener;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IMemento;
+import org.eclipse.ui.IViewSite;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.forms.editor.FormEditor;
+import org.eclipse.ui.ide.IDE;
+import org.eclipse.ui.part.ViewPart;
+import org.eclipse.ui.texteditor.ITextEditor;
+
+public class RulesView extends ViewPart implements IDoubleClickListener, IResourceVisitor, IResourceChangeListener {
+
+	private final RuleSet ruleSet = DroolsModelBuilder.createRuleSet();
+
+	private Map resourcesMap = new HashMap();
+	private TreeViewer treeViewer;
+	
+	public void createPartControl(Composite parent) {
+		treeViewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
+		treeViewer.setContentProvider(new DroolsContentProvider());
+		treeViewer.setLabelProvider(new DroolsLabelProvider());
+		treeViewer.setSorter(new DroolsTreeSorter());
+		treeViewer.addDoubleClickListener(this);
+		treeViewer.setUseHashlookup(true);
+		treeViewer.setInput(ruleSet);
+		FilterActionGroup filterActionGroup = new FilterActionGroup(
+			treeViewer, "org.drools.ide.view.rules.RulesView");
+		filterActionGroup.fillActionBars(getViewSite().getActionBars());
+	}
+	
+	public void init(IViewSite site, IMemento memento) throws PartInitException {
+		super.init(site, memento);
+		try {
+			ResourcesPlugin.getWorkspace().getRoot().accept(this);
+		} catch (CoreException e) {
+			DroolsIDEPlugin.log(e);
+		}
+		ResourcesPlugin.getWorkspace().addResourceChangeListener(this);
+	}
+	
+	public void setFocus() {
+		treeViewer.getControl().setFocus();
+	}
+
+	public boolean visit(IResource resource) throws CoreException {
+		return updateResource(resource);
+	}
+	
+	private boolean updateResource(IResource resource) {
+    	IProject project = resource.getProject();
+    	if (project != null) {
+            IJavaProject javaProject = JavaCore.create(project);
+            if (!javaProject.exists()) {
+            	return false;
+            }
+    		if (resource instanceof IFile 
+    				&& "drl".equals(resource.getFileExtension())
+    				&& javaProject.isOnClasspath(resource)) {
+    			try {
+    				IFile file = (IFile) resource;
+    				DRLInfo drlInfo = DroolsIDEPlugin.getDefault().parseResource(resource, false);
+    				String packageName = drlInfo.getPackageName();
+    				Package pkg = ruleSet.getPackage(packageName);
+    				if (pkg == null) {
+    					pkg = DroolsModelBuilder.addPackage(ruleSet, packageName, 0, 0);
+    				}
+    				// add rules
+    				List rules = drlInfo.getPackageDescr().getRules();
+    				for (Iterator iterator = rules.iterator(); iterator.hasNext();) {
+    					RuleDescr ruleDescr = (RuleDescr) iterator.next();
+    					boolean isQuery = ruleDescr instanceof QueryDescr;
+    					String ruleName = ruleDescr.getName();
+    					if (!isQuery) {
+    						Rule rule = DroolsModelBuilder.addRule(pkg, ruleName, file, 0, 0, null);
+	    					// create link between resource and created rule nodes
+	    					List droolsElements = (List) resourcesMap.get(file);
+	    					if (droolsElements == null) {
+	    						droolsElements = new ArrayList();
+	    						resourcesMap.put(file, droolsElements);
+	    					}
+	    					droolsElements.add(rule);
+    					} else {
+    						Query query = DroolsModelBuilder.addQuery(pkg, ruleName, file, 0, 0);
+	    					// create link between resource and created rule nodes
+	    					List droolsElements = (List) resourcesMap.get(file);
+	    					if (droolsElements == null) {
+	    						droolsElements = new ArrayList();
+	    						resourcesMap.put(file, droolsElements);
+	    					}
+	    					droolsElements.add(query);
+    					}
+    				}
+    				// add templates
+    				List templates = drlInfo.getPackageDescr().getFactTemplates();
+    				for (Iterator iterator = templates.iterator(); iterator.hasNext();) {
+    					String templateName = ((FactTemplateDescr) iterator.next()).getName();
+						Template template = DroolsModelBuilder.addTemplate(pkg, templateName, file, 0, 0);
+    					// create link between resource and created rule nodes
+    					List droolsElements = (List) resourcesMap.get(file);
+    					if (droolsElements == null) {
+    						droolsElements = new ArrayList();
+    						resourcesMap.put(file, droolsElements);
+    					}
+    					droolsElements.add(template);
+    				}
+    				// add globals
+    				Map globals = drlInfo.getPackageDescr().getGlobals();
+    				for (Iterator iterator = globals.keySet().iterator(); iterator.hasNext();) {
+    					String globalName = (String) iterator.next();
+    					Global global = DroolsModelBuilder.addGlobal(pkg, globalName, file, 0, 0);
+    					// create link between resource and created rule nodes
+    					List droolsElements = (List) resourcesMap.get(file);
+    					if (droolsElements == null) {
+    						droolsElements = new ArrayList();
+    						resourcesMap.put(file, droolsElements);
+    					}
+    					droolsElements.add(global);
+    				}
+    				// add functions
+    				List functions = drlInfo.getPackageDescr().getFunctions();
+    				for (Iterator iterator = functions.iterator(); iterator.hasNext();) {
+    					String functionName = ((FunctionDescr) iterator.next()).getName();
+    					Function function = DroolsModelBuilder.addFunction(pkg, functionName, file, 0, 0);
+    					// create link between resource and created rule nodes
+    					List droolsElements = (List) resourcesMap.get(file);
+    					if (droolsElements == null) {
+    						droolsElements = new ArrayList();
+    						resourcesMap.put(file, droolsElements);
+    					}
+    					droolsElements.add(function);
+    				}
+    			} catch (Throwable t) {
+    				DroolsIDEPlugin.log(t);
+    			}
+    			return false;
+    		}
+        }
+        return true;
+	}
+
+	public void resourceChanged(final IResourceChangeEvent event) {
+		try {
+			if (event.getType() == IResourceChangeEvent.POST_CHANGE) {
+				IResourceDelta delta = event.getDelta();
+				if (delta != null) {
+					delta.accept(new IResourceDeltaVisitor() {
+						public boolean visit(IResourceDelta delta) throws CoreException {
+							IResource resource = delta.getResource();
+							removeElementsFromResource(resource);
+							boolean result = true;
+							if (delta.getKind() != IResourceDelta.REMOVED) {
+								result = updateResource(resource);
+							}
+							treeViewer.getControl().getDisplay().asyncExec(
+						        new Runnable() {
+									public void run() {
+										treeViewer.refresh();
+									}
+								}
+					        );
+							return result;
+						}
+					});
+				}
+			} else if (event.getType() == IResourceChangeEvent.PRE_DELETE) {
+				IResource resource = event.getResource();
+				if (resource != null) {
+					resource.accept(new IResourceVisitor() {
+						public boolean visit(IResource resource) throws CoreException {
+							removeElementsFromResource(resource);
+							return true;
+						}
+					});
+				}
+			} else if (event.getType() == IResourceChangeEvent.PRE_CLOSE) {
+				IResource resource = event.getResource();
+				if (resource != null) {
+					resource.accept(new IResourceVisitor() {
+						public boolean visit(IResource resource) throws CoreException {
+							removeElementsFromResource(resource);
+							return true;
+						}
+					});
+				}
+			}
+		} catch (Throwable t) {
+			DroolsIDEPlugin.log(t);
+		}
+	}
+	
+	private void removeElementsFromResource(IResource resource) {
+		List droolsElements = (List) resourcesMap.get(resource);
+		if (droolsElements != null) {
+			for (Iterator iterator = droolsElements.iterator(); iterator.hasNext();) {
+				DroolsModelBuilder.removeElement((DroolsElement) iterator.next());
+			}
+			resourcesMap.remove(resource);
+		}
+	}
+
+	public void doubleClick(DoubleClickEvent event) {
+		ISelection selection = event.getSelection();
+		if (selection instanceof IStructuredSelection) {
+			Object selected = ((StructuredSelection) selection).getFirstElement();
+			if (selected != null && selected instanceof DroolsElement) {
+				DroolsElement droolsSelected = (DroolsElement) selected;
+				IFile file = droolsSelected.getFile();
+				if (file != null) {
+					try {
+						IEditorPart editor = IDE.openEditor(getSite().getPage(), file);
+						if (editor instanceof FormEditor) {
+							editor = ((FormEditor) editor).getActiveEditor();
+						}
+						if (editor instanceof ITextEditor) {
+							((ITextEditor)editor).selectAndReveal(
+								droolsSelected.getOffset(), droolsSelected.getLength());
+						}
+					} catch (Throwable t) {
+						DroolsIDEPlugin.log(t);
+					}
+				}
+			}
+		}
+	}
+
+}




More information about the jboss-svn-commits mailing list