[jboss-svn-commits] JBL Code SVN: r25354 - in labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse: schema and 3 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Feb 19 20:57:33 EST 2009


Author: KrisVerlaenen
Date: 2009-02-19 20:57:33 -0500 (Thu, 19 Feb 2009)
New Revision: 25354

Added:
   labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/schema/runtimeRecognizer.exsd
   labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/util/DefaultDroolsRuntimeRecognizer.java
   labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/util/DroolsRuntime.java
   labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/util/DroolsRuntimeRecognizer.java
   labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/util/SOAPlatform4RuntimeRecognizer.java
Modified:
   labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/plugin.xml
   labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/preferences/DroolsProjectPreferencePage.java
   labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/preferences/DroolsRuntimeDialog.java
   labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/preferences/DroolsRuntimesBlock.java
   labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/preferences/DroolsRuntimesPreferencePage.java
   labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/util/DroolsClasspathContainer.java
   labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/util/DroolsRuntimeManager.java
   labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/wizard/project/NewDroolsProjectRuntimeWizardPage.java
   labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/wizard/project/NewDroolsProjectWizard.java
Log:
JBIDE-3670: Drools Runtime unclear how to correctly define
 - Drools runtimes now store a list of jars that it consists of
 - added DroolsRuntimeRecognizer extension point to auto-detect these jars based on the selected path

Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/plugin.xml
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/plugin.xml	2009-02-19 20:09:07 UTC (rev 25353)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/plugin.xml	2009-02-20 01:57:33 UTC (rev 25354)
@@ -531,6 +531,7 @@
    </extension>
 
    <extension-point id="processExtension" name="Process Extension" schema="schema/processExtension.exsd"/>
+   <extension-point id="runtimeRecognizer" name="Drools Runtime Recognizer" schema="schema/runtimeRecognizer.exsd"/>
 
    <extension
          point="org.drools.eclipse.processExtension">
@@ -561,6 +562,12 @@
             id="org.drools.eclipse.rulebuilder.wizards.NewGuidedRuleFileWizard"
             name="Guided Rule"/>
    </extension>
+   <extension
+         point="org.drools.eclipse.runtimeRecognizer">
+      <recognizer
+            class="org.drools.eclipse.util.SOAPlatform4RuntimeRecognizer">
+      </recognizer>
+   </extension>
    
    <!-- tabbed properties
    <extension point="org.eclipse.ui.views.properties.tabbed.propertyContributor">

Added: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/schema/runtimeRecognizer.exsd
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/schema/runtimeRecognizer.exsd	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/schema/runtimeRecognizer.exsd	2009-02-20 01:57:33 UTC (rev 25354)
@@ -0,0 +1,102 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.drools.eclipse" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+      <appinfo>
+         <meta.schema plugin="org.drools.eclipse" id="runtimeRecognizer" name="Drools Runtime Recognizer"/>
+      </appinfo>
+      <documentation>
+         [Enter description of this extension point.]
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <annotation>
+         <appinfo>
+            <meta.element />
+         </appinfo>
+      </annotation>
+      <complexType>
+         <choice>
+            <element ref="recognizer"/>
+         </choice>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appinfo>
+                  <meta.attribute translatable="true"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="recognizer">
+      <complexType>
+         <attribute name="class" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appinfo>
+                  <meta.attribute kind="java" basedOn=":org.drools.eclipse.util.DroolsRuntimeRecognizer"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="since"/>
+      </appinfo>
+      <documentation>
+         [Enter the first release in which this extension point appears.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="examples"/>
+      </appinfo>
+      <documentation>
+         [Enter extension point usage example here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="apiinfo"/>
+      </appinfo>
+      <documentation>
+         [Enter API information here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="implementation"/>
+      </appinfo>
+      <documentation>
+         [Enter information about supplied implementation of this extension point.]
+      </documentation>
+   </annotation>
+
+
+</schema>

Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/preferences/DroolsProjectPreferencePage.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/preferences/DroolsProjectPreferencePage.java	2009-02-19 20:09:07 UTC (rev 25353)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/preferences/DroolsProjectPreferencePage.java	2009-02-20 01:57:33 UTC (rev 25354)
@@ -3,7 +3,7 @@
 import java.io.ByteArrayInputStream;
 
 import org.drools.eclipse.DroolsEclipsePlugin;
-import org.drools.eclipse.preferences.DroolsRuntimesBlock.DroolsRuntime;
+import org.drools.eclipse.util.DroolsRuntime;
 import org.drools.eclipse.util.DroolsRuntimeManager;
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IFolder;

Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/preferences/DroolsRuntimeDialog.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/preferences/DroolsRuntimeDialog.java	2009-02-19 20:09:07 UTC (rev 25353)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/preferences/DroolsRuntimeDialog.java	2009-02-20 01:57:33 UTC (rev 25354)
@@ -2,7 +2,7 @@
 
 import java.io.File;
 
-import org.drools.eclipse.preferences.DroolsRuntimesBlock.DroolsRuntime;
+import org.drools.eclipse.util.DroolsRuntime;
 import org.drools.eclipse.util.DroolsRuntimeManager;
 import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.jface.dialogs.IDialogConstants;

Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/preferences/DroolsRuntimesBlock.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/preferences/DroolsRuntimesBlock.java	2009-02-19 20:09:07 UTC (rev 25353)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/preferences/DroolsRuntimesBlock.java	2009-02-20 01:57:33 UTC (rev 25354)
@@ -4,6 +4,11 @@
 import java.util.Iterator;
 import java.util.List;
 
+import org.drools.eclipse.util.DefaultDroolsRuntimeRecognizer;
+import org.drools.eclipse.util.DroolsRuntime;
+import org.drools.eclipse.util.DroolsRuntimeManager;
+import org.drools.eclipse.util.DroolsRuntimeRecognizer;
+import org.drools.eclipse.util.SOAPlatform4RuntimeRecognizer;
 import org.eclipse.core.runtime.ListenerList;
 import org.eclipse.jdt.internal.debug.ui.SWTFactory;
 import org.eclipse.jface.viewers.CheckStateChangedEvent;
@@ -242,13 +247,14 @@
 		if (dialog.open() == Window.OK) {
 			DroolsRuntime result = dialog.getResult();
 			if (result != null) {
+				DroolsRuntimeManager.recognizeJars(result);
 				droolsRuntimes.add(result);
 				droolsRuntimesList.refresh();
 				droolsRuntimesList.setSelection(new StructuredSelection(result));
 			}
 		}
 	}
-
+	
 	private void editDroolsRuntime() {
 		IStructuredSelection selection= (IStructuredSelection) droolsRuntimesList.getSelection();
 		DroolsRuntime runtime = (DroolsRuntime) selection.getFirstElement();
@@ -260,6 +266,7 @@
 		if (dialog.open() == Window.OK) {
 			DroolsRuntime result = dialog.getResult();
 			if (result != null) {
+				DroolsRuntimeManager.recognizeJars(result);
 				// replace with the edited VM
 				int index = droolsRuntimes.indexOf(runtime);
 				droolsRuntimes.remove(index);
@@ -319,28 +326,4 @@
 		return (DroolsRuntime) objects[0];
 	}
 
-	public static class DroolsRuntime {
-		private String name;
-		private String path;
-		private boolean isDefault;
-		
-		public String getName() {
-			return name;
-		}
-		public void setName(String name) {
-			this.name = name;
-		}
-		public String getPath() {
-			return path;
-		}
-		public void setPath(String path) {
-			this.path = path;
-		}
-		public boolean isDefault() {
-			return isDefault;
-		}
-		public void setDefault(boolean isDefault) {
-			this.isDefault = isDefault;
-		}
-	}
 }

Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/preferences/DroolsRuntimesPreferencePage.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/preferences/DroolsRuntimesPreferencePage.java	2009-02-19 20:09:07 UTC (rev 25353)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/preferences/DroolsRuntimesPreferencePage.java	2009-02-20 01:57:33 UTC (rev 25354)
@@ -1,6 +1,6 @@
 package org.drools.eclipse.preferences;
 
-import org.drools.eclipse.preferences.DroolsRuntimesBlock.DroolsRuntime;
+import org.drools.eclipse.util.DroolsRuntime;
 import org.drools.eclipse.util.DroolsRuntimeManager;
 import org.eclipse.jface.dialogs.MessageDialog;
 import org.eclipse.jface.preference.PreferencePage;

Added: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/util/DefaultDroolsRuntimeRecognizer.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/util/DefaultDroolsRuntimeRecognizer.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/util/DefaultDroolsRuntimeRecognizer.java	2009-02-20 01:57:33 UTC (rev 25354)
@@ -0,0 +1,30 @@
+package org.drools.eclipse.util;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.runtime.Path;
+
+public class DefaultDroolsRuntimeRecognizer implements DroolsRuntimeRecognizer {
+
+	public String[] recognizeJars(String path) {
+		List<String> list = new ArrayList<String>();
+        if (path != null) {
+	        File file = (new Path(path)).toFile();
+	        addJarNames(file, list);
+        }
+        return list.toArray(new String[list.size()]);
+	}
+
+    private void addJarNames(File file, List<String> list) {
+        File[] files = file.listFiles();
+        for (int i = 0; i < files.length; i++) {
+        	if (files[i].isDirectory() && "lib".equals(files[i].getName())) {
+            	addJarNames(files[i], list);
+            } else if (files[i].getPath().endsWith(".jar")) {
+                list.add(files[i].getAbsolutePath());
+            }
+        }
+    }
+}

Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/util/DroolsClasspathContainer.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/util/DroolsClasspathContainer.java	2009-02-19 20:09:07 UTC (rev 25353)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/util/DroolsClasspathContainer.java	2009-02-20 01:57:33 UTC (rev 25354)
@@ -1,108 +1,74 @@
-package org.drools.eclipse.util;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.InputStreamReader;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.drools.eclipse.DroolsEclipsePlugin;
-import org.drools.eclipse.preferences.IDroolsConstants;
-import org.drools.eclipse.preferences.DroolsRuntimesBlock.DroolsRuntime;
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.jdt.core.IAccessRule;
-import org.eclipse.jdt.core.IClasspathContainer;
-import org.eclipse.jdt.core.IClasspathEntry;
-import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.JavaCore;
-import org.eclipse.jdt.internal.core.ClasspathAccessRule;
-import org.eclipse.jdt.internal.core.ClasspathEntry;
-
-public class DroolsClasspathContainer implements IClasspathContainer {
-
-    IClasspathEntry droolsLibraryEntries[];
-    IPath path;
-    IJavaProject javaProject;
-
-    public DroolsClasspathContainer(IJavaProject project, IPath path) {
-        javaProject = null;
-        javaProject = project;
-        this.path = path;
-    }
-
-    public IClasspathEntry[] getClasspathEntries() {
-        if (droolsLibraryEntries == null) {
-            droolsLibraryEntries = createDroolsLibraryEntries(javaProject);
-        }
-        return droolsLibraryEntries;
-    }
-
-    public String getDescription() {
-        return "Drools Library";
-    }
-
-    public int getKind() {
-        return 1;
-    }
-
-    public IPath getPath() {
-        return path;
-    }
-
-    private IClasspathEntry[] createDroolsLibraryEntries(IJavaProject project) {
-    	int internalAPI = DroolsEclipsePlugin.getDefault()
-    		.getPluginPreferences().getInt(IDroolsConstants.INTERNAL_API);
-        List jarNames = getJarNames(project);
-        List list = new ArrayList();
-        for (int i = 0; i < jarNames.size(); i++) {
-        	String jarName = (String) jarNames.get(i);
-        	Path path = new Path(jarName);
-        	if (internalAPI != 0) {
-		        if (jarName.contains("drools-api")) {
-		        	list.add(JavaCore.newLibraryEntry(path, path, null));
-		        } else {
-		        	IAccessRule[] accessRules = new IAccessRule[1];
-		            accessRules[0] = new ClasspathAccessRule(new Path("**"), internalAPI);
-		            list.add(JavaCore.newLibraryEntry(
-		                path, path, null, accessRules, ClasspathEntry.NO_EXTRA_ATTRIBUTES, false));
-		        }
-        	}
-        }
-        // also add jdt core jar from eclipse itself
-//        String pluginRootString = Platform.getInstallLocation().getURL().getPath() + "plugins/";
-//        File pluginRoot = new Path(pluginRootString).toFile();
-//        File[] files = pluginRoot.listFiles();
-//        for (int i = 0; i < files.length; i++) {
-//	        if (files[i].getAbsolutePath().indexOf("org.eclipse.jdt.core_3.4") > -1) {
-//	        	Path path = new Path(files[i].getAbsolutePath());
-//	        	list.add(JavaCore.newLibraryEntry(path, path, null));
-//	        	break;
-//	        }
-//        }
-        return (IClasspathEntry[]) list.toArray(new IClasspathEntry[list.size()]);
-    }
-
-    private List getJarNames(IJavaProject project) {
-        String s = DroolsRuntimeManager.getDroolsRuntimePath(project.getProject());
-        List list = new ArrayList();
-        if (s != null) {
-	        File file = (new Path(s)).toFile();
-	        addJarNames(file, list);
-        }
-        return list;
-    }
-
-    private void addJarNames(File file, List list) {
-        File[] files = file.listFiles();
-        for (int i = 0; i < files.length; i++) {
-        	if (files[i].isDirectory() && "lib".equals(files[i].getName())) {
-            	addJarNames(files[i], list);
-            } else if (files[i].getPath().endsWith(".jar")) {
-                list.add(files[i].getAbsolutePath());
-            }
-        }
-    }
-
+package org.drools.eclipse.util;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.drools.eclipse.DroolsEclipsePlugin;
+import org.drools.eclipse.preferences.IDroolsConstants;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.jdt.core.IAccessRule;
+import org.eclipse.jdt.core.IClasspathContainer;
+import org.eclipse.jdt.core.IClasspathEntry;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jdt.internal.core.ClasspathAccessRule;
+import org.eclipse.jdt.internal.core.ClasspathEntry;
+
+public class DroolsClasspathContainer implements IClasspathContainer {
+
+    IClasspathEntry droolsLibraryEntries[];
+    IPath path;
+    IJavaProject javaProject;
+
+    public DroolsClasspathContainer(IJavaProject project, IPath path) {
+        javaProject = null;
+        javaProject = project;
+        this.path = path;
+    }
+
+    public IClasspathEntry[] getClasspathEntries() {
+        if (droolsLibraryEntries == null) {
+            droolsLibraryEntries = createDroolsLibraryEntries(javaProject);
+        }
+        return droolsLibraryEntries;
+    }
+
+    public String getDescription() {
+        return "Drools Library";
+    }
+
+    public int getKind() {
+        return 1;
+    }
+
+    public IPath getPath() {
+        return path;
+    }
+
+    private IClasspathEntry[] createDroolsLibraryEntries(IJavaProject project) {
+    	int internalAPI = DroolsEclipsePlugin.getDefault()
+    		.getPluginPreferences().getInt(IDroolsConstants.INTERNAL_API);
+        String[] jarNames = getJarNames(project);
+        List<IClasspathEntry> list = new ArrayList<IClasspathEntry>();
+        for (int i = 0; i < jarNames.length; i++) {
+        	Path path = new Path(jarNames[i]);
+        	if (internalAPI != 0) {
+		        if (jarNames[i].contains("drools-api")) {
+		        	list.add(JavaCore.newLibraryEntry(path, path, null));
+		        } else {
+		        	IAccessRule[] accessRules = new IAccessRule[1];
+		            accessRules[0] = new ClasspathAccessRule(new Path("**"), internalAPI);
+		            list.add(JavaCore.newLibraryEntry(
+		                path, path, null, accessRules, ClasspathEntry.NO_EXTRA_ATTRIBUTES, false));
+		        }
+        	}
+        }
+        return (IClasspathEntry[]) list.toArray(new IClasspathEntry[list.size()]);
+    }
+
+    private String[] getJarNames(IJavaProject project) {
+    	return DroolsRuntimeManager.getDroolsRuntimeJars(project.getProject());
+    }
+
 }
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/util/DroolsRuntime.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/util/DroolsRuntime.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/util/DroolsRuntime.java	2009-02-20 01:57:33 UTC (rev 25354)
@@ -0,0 +1,41 @@
+package org.drools.eclipse.util;
+
+public class DroolsRuntime {
+	
+	private String name;
+	private String path;
+	private boolean isDefault;
+	private String[] jars;
+	
+	public String getName() {
+		return name;
+	}
+	
+	public void setName(String name) {
+		this.name = name;
+	}
+	
+	public String getPath() {
+		return path;
+	}
+	
+	public void setPath(String path) {
+		this.path = path;
+	}
+	
+	public boolean isDefault() {
+		return isDefault;
+	}
+	
+	public void setDefault(boolean isDefault) {
+		this.isDefault = isDefault;
+	}
+
+	public String[] getJars() {
+		return jars;
+	}
+
+	public void setJars(String[] jars) {
+		this.jars = jars;
+	}
+}
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/util/DroolsRuntimeManager.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/util/DroolsRuntimeManager.java	2009-02-19 20:09:07 UTC (rev 25353)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/util/DroolsRuntimeManager.java	2009-02-20 01:57:33 UTC (rev 25354)
@@ -12,17 +12,17 @@
 
 import org.drools.eclipse.DroolsEclipsePlugin;
 import org.drools.eclipse.preferences.IDroolsConstants;
-import org.drools.eclipse.preferences.DroolsRuntimesBlock.DroolsRuntime;
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.runtime.FileLocator;
+import org.eclipse.core.runtime.IConfigurationElement;
 import org.eclipse.core.runtime.Path;
 import org.eclipse.core.runtime.Platform;
 
-import sun.reflect.ReflectionFactory.GetReflectionFactoryAction;
-
 public class DroolsRuntimeManager {
 	
+	private static final String DROOLS_RUNTIME_RECOGNIZER = "org.drools.eclipse.runtimeRecognizer";
+
 	public static void createDefaultRuntime(String location) {
 		List<String> jars = new ArrayList<String>();
 		// get all drools jars from drools eclipse plugin
@@ -88,7 +88,13 @@
 	private static String generateString(DroolsRuntime[] droolsRuntimes) {
 		String result = "";
 		for (DroolsRuntime runtime: droolsRuntimes) {
-			result += runtime.getName() + "#" + runtime.getPath() + "#" + runtime.isDefault() + "###";
+			result += runtime.getName() + "#" + runtime.getPath() + "#" + runtime.isDefault() + "# ";
+			if (runtime.getJars() != null) {
+				for (String jar: runtime.getJars()) {
+					result += jar + ";";
+				}
+			}
+			result += "###";
 		}
 		return result;
 	}
@@ -103,6 +109,17 @@
 				runtime.setName(properties[0]);
 				runtime.setPath(properties[1]);
 				runtime.setDefault("true".equals(properties[2]));
+				if (properties.length > 3) {
+					List<String> list = new ArrayList<String>();
+					String[] jars = properties[3].split(";");
+					for (String jar: jars) {
+						jar = jar.trim();
+						if (jar.length() > 0) {
+							list.add(jar);
+						}
+					}
+					runtime.setJars(list.toArray(new String[list.size()]));
+				}
 				result.add(runtime);
 			}
 		}
@@ -159,14 +176,48 @@
         return null;
     }
     
-    public static String getDroolsRuntimePath(IProject project) {
+    public static String[] getDroolsRuntimeJars(IProject project) {
         String runtimeName = getDroolsRuntime(project);
+        DroolsRuntime runtime = null;
         if (runtimeName == null) {
-        	DroolsRuntime runtime = getDefaultDroolsRuntime();
-        	return runtime == null ? null : runtime.getPath();
+        	runtime = getDefaultDroolsRuntime();
+        } else {
+        	runtime = getDroolsRuntime(runtimeName);
         }
-        DroolsRuntime runtime = getDroolsRuntime(runtimeName);
-        return runtime == null ? null : runtime.getPath();
+        if (runtime.getJars() == null || runtime.getJars().length == 0) {
+    		recognizeJars(runtime);
+    	}
+        return runtime == null ? null : runtime.getJars();
     }
+    
+    public static void recognizeJars(DroolsRuntime runtime) {
+    	String path = runtime.getPath();
+		if (path != null) {
+			try {
+				IConfigurationElement[] config = Platform.getExtensionRegistry()
+						.getConfigurationElementsFor(DROOLS_RUNTIME_RECOGNIZER);
+				for (IConfigurationElement e : config) {
+					Object o = e.createExecutableExtension("class");
+					if (o instanceof DroolsRuntimeRecognizer) {
+						String[] jars = ((DroolsRuntimeRecognizer) o).recognizeJars(path);
+						if (jars != null && jars.length > 0) {
+							runtime.setJars(jars);
+							return;
+						}
+					}
+				}
+			} catch (Exception ex) {
+				System.out.println(ex.getMessage());
+			}
 
+			DroolsRuntimeRecognizer recognizer = new SOAPlatform4RuntimeRecognizer();
+			String[] jars = recognizer.recognizeJars(path);
+			if (jars != null && jars.length > 0) {
+				runtime.setJars(jars);
+				return;
+			}
+			runtime.setJars(new DefaultDroolsRuntimeRecognizer().recognizeJars(path));
+		}
+	}
+
 }

Added: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/util/DroolsRuntimeRecognizer.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/util/DroolsRuntimeRecognizer.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/util/DroolsRuntimeRecognizer.java	2009-02-20 01:57:33 UTC (rev 25354)
@@ -0,0 +1,7 @@
+package org.drools.eclipse.util;
+
+public interface DroolsRuntimeRecognizer {
+
+	String[] recognizeJars(String path);
+	
+}

Added: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/util/SOAPlatform4RuntimeRecognizer.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/util/SOAPlatform4RuntimeRecognizer.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/util/SOAPlatform4RuntimeRecognizer.java	2009-02-20 01:57:33 UTC (rev 25354)
@@ -0,0 +1,64 @@
+package org.drools.eclipse.util;
+
+import java.io.File;
+import java.io.FilenameFilter;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Platform;
+
+public class SOAPlatform4RuntimeRecognizer implements DroolsRuntimeRecognizer {
+
+	public String[] recognizeJars(String path) {
+        IPath jbossrulesesbPath = new Path(path).append("jboss-esb/server/default/deploy/jbrules.esb");
+        File jbossrulesesb = jbossrulesesbPath.toFile();
+        if (jbossrulesesb.isDirectory()) {
+        	List<String> list = new ArrayList<String>();
+        	// the SOA platform
+        	File[] files = jbossrulesesb.listFiles(new FilenameFilter() {
+
+				public boolean accept(File dir, String name) {
+					if (!name.endsWith(".jar")) {
+						return false;
+					}
+					if (name.startsWith("jbossesb")) {
+						return false;
+					}
+					return true;
+				}
+        		
+        	});
+        	for (int i = 0; i < files.length; i++) {
+				list.add(files[i].getAbsolutePath());
+			}
+        	IPath jbossesbsarPath = new Path(path).append("jboss-esb/server/default/deploy/jbossesb.sar/lib");
+	        File jbossesbsar=jbossesbsarPath.toFile();
+	        if (jbossesbsar.isDirectory()) {
+	        	files = jbossesbsar.listFiles(new FilenameFilter() {
+
+					public boolean accept(File dir, String name) {
+						if (!name.endsWith(".jar")) {
+							return false;
+						}
+						if (name.startsWith("mvel")) {
+							return true;
+						}
+						if (name.startsWith("xstream")) {
+							return true;
+						}
+						return false;
+					}
+	        		
+	        	});
+	        	for (int i = 0; i < files.length; i++) {
+					list.add(files[i].getAbsolutePath());
+				}
+	        }
+	        return list.toArray(new String[list.size()]);
+        }
+        return null;
+	}
+
+}

Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/wizard/project/NewDroolsProjectRuntimeWizardPage.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/wizard/project/NewDroolsProjectRuntimeWizardPage.java	2009-02-19 20:09:07 UTC (rev 25353)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/wizard/project/NewDroolsProjectRuntimeWizardPage.java	2009-02-20 01:57:33 UTC (rev 25354)
@@ -3,7 +3,7 @@
 import java.util.HashMap;
 
 import org.drools.eclipse.preferences.DroolsProjectPreferencePage;
-import org.drools.eclipse.preferences.DroolsRuntimesBlock.DroolsRuntime;
+import org.drools.eclipse.util.DroolsRuntime;
 import org.drools.eclipse.util.DroolsRuntimeManager;
 import org.eclipse.jface.wizard.WizardPage;
 import org.eclipse.swt.SWT;

Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/wizard/project/NewDroolsProjectWizard.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/wizard/project/NewDroolsProjectWizard.java	2009-02-19 20:09:07 UTC (rev 25353)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/wizard/project/NewDroolsProjectWizard.java	2009-02-20 01:57:33 UTC (rev 25354)
@@ -10,8 +10,8 @@
 
 import org.drools.eclipse.DroolsEclipsePlugin;
 import org.drools.eclipse.builder.DroolsBuilder;
-import org.drools.eclipse.preferences.DroolsRuntimesBlock.DroolsRuntime;
 import org.drools.eclipse.util.DroolsClasspathContainer;
+import org.drools.eclipse.util.DroolsRuntime;
 import org.eclipse.core.resources.ICommand;
 import org.eclipse.core.resources.IContainer;
 import org.eclipse.core.resources.IFile;




More information about the jboss-svn-commits mailing list