[overlord-commits] Overlord SVN: r178 - cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model.

overlord-commits at lists.jboss.org overlord-commits at lists.jboss.org
Wed Jul 16 08:50:40 EDT 2008


Author: objectiser
Date: 2008-07-16 08:50:40 -0400 (Wed, 16 Jul 2008)
New Revision: 178

Modified:
   cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/DefaultESBService.java
Log:
Resolved classloader issue, where project is not contained within the Eclipse workspace, and also reporting 'First conversation based action must specify valid session' against first conversation based action, instead of complete service descriptor.

Modified: cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/DefaultESBService.java
===================================================================
--- cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/DefaultESBService.java	2008-07-16 10:54:13 UTC (rev 177)
+++ cdl/trunk/tools/plugins/org.jboss.tools.overlord.jbossesb/src/java/org/jboss/tools/overlord/jbossesb/model/DefaultESBService.java	2008-07-16 12:50:40 UTC (rev 178)
@@ -129,7 +129,17 @@
 		
 		// Check that the service specifies a session
 		if (isSessionBased() && getSessionClass() == null) {
-			l.error(this, org.scribble.util.MessageUtil.format(
+			
+			// Find first conversation based action to use as
+			// focus - if not found then use the service itself
+			ESBAction focus=getFirstSessionBasedAction();
+			ModelObject src=this;
+			
+			if (focus instanceof ModelObject) {
+				src = (ModelObject)focus;
+			}
+			
+			l.error(src, org.scribble.util.MessageUtil.format(
 					java.util.PropertyResourceBundle.getBundle(
 					"org.jboss.tools.overlord.jbossesb.model.Messages"),
 						"_NOT_SPECIFIED_SESSION_CLASS",
@@ -527,42 +537,53 @@
 		
 		if (file != null) {
 			IJavaProject javaProject=JavaCore.create(file.getProject());
-			IClasspathEntry[] entries = javaProject.getResolvedClasspath(true);
-			String wsPath = javaProject.getProject().getLocation().toPortableString();
-			String firstEntryLocation = javaProject.getPath().toPortableString();
-			int idx = wsPath.indexOf(firstEntryLocation);
-			wsPath = wsPath.substring(0,idx);
+			java.util.List<java.net.URL> urls=new java.util.Vector<java.net.URL>();
 			
-			String fullPath = null;
-
-			java.net.URL[] urls = new java.net.URL[entries.length+1];
-			int i = 0;
-			urls[i++] = new java.io.File(wsPath + 
-					javaProject.getOutputLocation().toPortableString()).toURL();
+			scanProjectForClasspath(javaProject, urls);
+			
+			java.net.URL[] urlarray=new java.net.URL[urls.size()];
+			urls.toArray(urlarray);
+			
+			classLoader = new java.net.URLClassLoader(urlarray,
+						String.class.getClassLoader());
+		}
+		
+		return(classLoader);
+	}
 	
-			for (IClasspathEntry entry : entries) {
-				if(entry.getEntryKind() == IClasspathEntry.CPE_PROJECT) {
-					IResource project = 
-						ResourcesPlugin.getWorkspace().getRoot().findMember(entry.getPath());
-					String projectPath = 
-						JavaCore.create(project.getProject()).getOutputLocation().toPortableString();
-					fullPath = wsPath + projectPath;
-				} else {
-					IResource res=ResourcesPlugin.getWorkspace().getRoot().findMember(entry.getPath());
-					if (res != null) {
-						fullPath = res.getLocation().toPortableString();
-					} else {
-						logger.severe("Failed to locate resource for '"+entry.getPath()+"'");
+	protected void scanProjectForClasspath(IJavaProject javaProject,
+					java.util.List<java.net.URL> urls) throws Exception {
+		IClasspathEntry[] entries = javaProject.getResolvedClasspath(true);
+		
+		IResource outres=ResourcesPlugin.getWorkspace().getRoot().findMember(javaProject.getOutputLocation());
+		if (outres != null) {
+			urls.add(new java.io.File(outres.getLocation().toPortableString()).toURL());
+		}
+		
+		for (IClasspathEntry entry : entries) {
+			if(entry.getEntryKind() == IClasspathEntry.CPE_PROJECT) {
+				IResource project = 
+					ResourcesPlugin.getWorkspace().getRoot().findMember(entry.getPath());
+				
+				if (project instanceof IProject) {
+					IJavaProject jproj=JavaCore.create((IProject)project);
+					
+					if (jproj != null) {
+						scanProjectForClasspath(jproj, urls);
 					}
 				}
-	
-				urls[i++] = new java.io.File(fullPath).toURL();
+				
+			} else {
+				
+				IResource res=ResourcesPlugin.getWorkspace().getRoot().findMember(entry.getPath());
+				if (res != null) {
+					urls.add(new java.io.File(res.getLocation().
+								toPortableString()).toURL());
+				} else {
+					logger.finest("Skipping external resource '"+entry.getPath()+"'");
+				}
 			}
-
-			classLoader = new java.net.URLClassLoader(urls,String.class.getClassLoader());
 		}
-		
-		return(classLoader);
 	}
 	
 	public int hashCode() {




More information about the overlord-commits mailing list