[jboss-svn-commits] JBL Code SVN: r9504 - in labs/jbossrules/trunk/drools-testing-plugin/src/org/drools/testing/plugin: wizards and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Feb 14 20:46:57 EST 2007


Author: mshaw
Date: 2007-02-14 20:46:57 -0500 (Wed, 14 Feb 2007)
New Revision: 9504

Added:
   labs/jbossrules/trunk/drools-testing-plugin/src/org/drools/testing/plugin/utils/ProjectClassLoader.java
Modified:
   labs/jbossrules/trunk/drools-testing-plugin/src/org/drools/testing/plugin/wizards/GenerateRtlWizard.java
Log:


Added: labs/jbossrules/trunk/drools-testing-plugin/src/org/drools/testing/plugin/utils/ProjectClassLoader.java
===================================================================
--- labs/jbossrules/trunk/drools-testing-plugin/src/org/drools/testing/plugin/utils/ProjectClassLoader.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-testing-plugin/src/org/drools/testing/plugin/utils/ProjectClassLoader.java	2007-02-15 01:46:57 UTC (rev 9504)
@@ -0,0 +1,103 @@
+package org.drools.testing.plugin.utils;
+
+import java.io.File;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.jdt.core.IClasspathEntry;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IFileEditorInput;
+
+public class ProjectClassLoader {
+	
+	public static URLClassLoader getProjectClassLoader(IEditorPart editor) {
+		IEditorInput input = editor.getEditorInput();
+		if (input instanceof IFileEditorInput) {
+			IProject project = ((IFileEditorInput) input).getFile().getProject();
+			IJavaProject javaProject = JavaCore.create(project);
+			return getProjectClassLoader(javaProject);
+		}
+		return null;
+	}
+
+    public static URLClassLoader getProjectClassLoader(IJavaProject project) {
+        List pathElements = getProjectClassPathURLs(project);
+        URL urlPaths[] = (URL[]) pathElements.toArray(new URL[pathElements.size()]);
+        return new URLClassLoader(urlPaths, Thread.currentThread().getContextClassLoader());
+    }
+
+    private static URL getRawLocationURL(IPath simplePath)
+            throws MalformedURLException {
+        File file = getRawLocationFile(simplePath);
+        return file.toURL();
+    }
+
+    private static File getRawLocationFile(IPath simplePath) {
+        IResource resource = ResourcesPlugin.getWorkspace().getRoot().findMember(simplePath);
+        File file = null;
+        if (resource != null) {
+            file = ResourcesPlugin.getWorkspace().getRoot().findMember(
+                    simplePath).getRawLocation().toFile();
+        } else {
+            file = simplePath.toFile();
+        }
+        return file;
+    }
+
+    public static List getProjectClassPathURLs(IJavaProject project) {
+        List pathElements = new ArrayList();
+        try {
+            IClasspathEntry[] paths = project.getResolvedClasspath(true);
+            if (paths != null) {
+                
+                for ( int i = 0; i < paths.length; i++ ) {
+                    IClasspathEntry path = paths[i];
+                    if (path.getEntryKind() == IClasspathEntry.CPE_LIBRARY) {
+                        URL url = getRawLocationURL(path.getPath());
+                        pathElements.add(url);
+                    }
+                }
+            }
+            IPath location = getProjectLocation(project.getProject());
+            IPath outputPath = location.append(project.getOutputLocation()
+                    .removeFirstSegments(1));
+            pathElements.add(outputPath.toFile().toURL());
+            
+            // also add classpath of required projects
+            String[] names = project.getRequiredProjectNames();
+            for ( int i = 0; i < names.length; i++ ) {
+                String projectName = names[i];
+                IProject reqProject = project.getProject().getWorkspace()
+                    .getRoot().getProject(projectName);
+                if (reqProject != null) {
+                    IJavaProject reqJavaProject = JavaCore.create(reqProject);
+                    pathElements.addAll(getProjectClassPathURLs(reqJavaProject));
+                }
+            }
+        } catch (JavaModelException e) {
+            //DroolsIDEPlugin.log(e);
+        } catch (MalformedURLException e) {
+            //DroolsIDEPlugin.log(e);
+        }
+        return pathElements;
+    }
+    
+    public static IPath getProjectLocation(IProject project) {
+        if (project.getRawLocation() == null) {
+            return project.getLocation();
+        } else {
+            return project.getRawLocation();
+        }
+    }
+}

Modified: labs/jbossrules/trunk/drools-testing-plugin/src/org/drools/testing/plugin/wizards/GenerateRtlWizard.java
===================================================================
--- labs/jbossrules/trunk/drools-testing-plugin/src/org/drools/testing/plugin/wizards/GenerateRtlWizard.java	2007-02-14 23:55:56 UTC (rev 9503)
+++ labs/jbossrules/trunk/drools-testing-plugin/src/org/drools/testing/plugin/wizards/GenerateRtlWizard.java	2007-02-15 01:46:57 UTC (rev 9504)
@@ -7,7 +7,6 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.lang.reflect.InvocationTargetException;
-import java.net.URLClassLoader;
 
 import org.drools.lang.descr.RuleDescr;
 import org.drools.testing.core.beans.Scenario;
@@ -15,10 +14,9 @@
 import org.drools.testing.core.exception.RuleTestLanguageException;
 import org.drools.testing.core.main.Testing;
 import org.drools.testing.plugin.model.RtlModel;
-import org.drools.testing.plugin.utils.ClassPathUtils;
+import org.drools.testing.plugin.utils.ProjectClassLoader;
 import org.eclipse.core.resources.IContainer;
 import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.resources.IWorkspaceRoot;
 import org.eclipse.core.resources.ResourcesPlugin;
@@ -28,6 +26,7 @@
 import org.eclipse.core.runtime.Path;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.JavaCore;
 import org.eclipse.jface.dialogs.MessageDialog;
 import org.eclipse.jface.operation.IRunnableWithProgress;
 import org.eclipse.jface.viewers.ISelection;
@@ -141,45 +140,49 @@
 		IContainer container = (IContainer) resource;
 		final IFile file = container.getFile(new Path(fileName));
 		
+		ClassLoader oldLoader = Thread.currentThread().getContextClassLoader();
+		ClassLoader newLoader = GenerateRtlWizard.class.getClassLoader();
+		if (resource.getProject().getNature("org.eclipse.jdt.core.javanature") != null) {
+			IJavaProject project = JavaCore.create(resource.getProject());
+			newLoader = ProjectClassLoader.getProjectClassLoader(project);
+		}
 		try {
-			//URLClassLoader urClassLoader = new URLClassLoader(
-			//		ClassPathUtils.getClasspathAsURLArray(
-			//				ResourcesPlugin.getWorkspace().getRoot().getProject("test")));
-			
-			if (resource instanceof IProject)
-				System.out.println("fuck me");
-			IJavaProject proj = (IJavaProject) resource.getAdapter(IJavaProject.class);
+			Thread.currentThread().setContextClassLoader(newLoader);
 
-			Testing testing = new Testing("The Test Test Suite", rtlModel.getPackageDescr(),GenerateRtlWizard.class.getClassLoader());
-			Scenario scenario = testing.generateScenario("Scenario One",rtlModel.getPackageDescr().getRules());
+			Testing testing = new Testing("The Test Test Suite", rtlModel
+					.getPackageDescr(), newLoader);
+			Scenario scenario = testing.generateScenario("Scenario One",
+					rtlModel.getPackageDescr().getRules());
 			testing.addScenarioToSuite(scenario);
 			TestSuite testSuite = testing.getTestSuite();
 			FileWriter out = new FileWriter(fileName);
 			Marshaller marshaller = new Marshaller(out);
-        	marshaller.setSuppressXSIType(true);
-        	marshaller.setSupressXMLDeclaration(true);
-        	marshaller.marshal(testSuite);
-        	out.close();
-        	
-        	InputStream stream = openContentStream(fileName);
+			marshaller.setSuppressXSIType(true);
+			marshaller.setSupressXMLDeclaration(true);
+			marshaller.marshal(testSuite);
+			out.close();
+
+			InputStream stream = openContentStream(fileName);
 			if (file.exists()) {
 				file.setContents(stream, true, true, monitor);
 			} else {
 				file.create(stream, true, monitor);
 			}
 			stream.close();
-		}catch (RuleTestLanguageException e) {
+
+		} catch (RuleTestLanguageException e) {
 			throwCoreException(e.getMessage());
-			
 		} catch (IOException e) {
 			throwCoreException(e.toString());
-		}catch (MarshalException e) {
+		} catch (MarshalException e) {
 			throwCoreException(e.toString());
-		}catch (ValidationException e) {
+		} catch (ValidationException e) {
 			throwCoreException(e.toString());
-		}
+		} finally {
+			Thread.currentThread().setContextClassLoader(oldLoader);
+		}   
+
 		
-		
 		monitor.worked(1);
 		monitor.setTaskName("Opening file for editing...");
 		getShell().getDisplay().asyncExec(new Runnable() {




More information about the jboss-svn-commits mailing list