Fixing the Bugzilla Issue – Bug 196173

Axis2: Cannot install Axis2 facet to a dynamic web project
diff --git a/bundles/org.eclipse.jst.ws.axis2.consumption.core/src/org/eclipse/jst/ws/axis2/consumption/core/command/Axis2ClientCodegenCommand.java b/bundles/org.eclipse.jst.ws.axis2.consumption.core/src/org/eclipse/jst/ws/axis2/consumption/core/command/Axis2ClientCodegenCommand.java
index 1997e6d..1d9a890 100644
--- a/bundles/org.eclipse.jst.ws.axis2.consumption.core/src/org/eclipse/jst/ws/axis2/consumption/core/command/Axis2ClientCodegenCommand.java
+++ b/bundles/org.eclipse.jst.ws.axis2.consumption.core/src/org/eclipse/jst/ws/axis2/consumption/core/command/Axis2ClientCodegenCommand.java
@@ -34,6 +34,7 @@
 import org.eclipse.jst.ws.axis2.consumption.core.utils.WSDL2JavaGenerator;
 import org.eclipse.jst.ws.axis2.consumption.core.utils.WSDLPropertyReader;
 import org.eclipse.jst.ws.axis2.core.utils.ClassLoadingUtil;
+import org.eclipse.jst.ws.axis2.core.utils.FacetContainerUtils;
 import org.eclipse.jst.ws.axis2.core.utils.FileUtils;
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.wst.command.internal.env.core.common.StatusUtils;
@@ -57,9 +58,8 @@
 		
 		String workspaceDirectory = ResourcesPlugin.getWorkspace().getRoot().
 													getLocation().toOSString();
-		String currentDynamicWebProjectDir = FileUtils.addAnotherNodeToPath(
-														workspaceDirectory,
-														model.getWebProjectName());
+		String currentDynamicWebProjectDir = FacetContainerUtils.getProjectRoot(
+				                                  model.getWebProjectName()).toOSString();
 		String matadataDir = FileUtils.addAnotherNodeToPath(
 										workspaceDirectory,
 										Axis2ConsumptionUIMessages.DIR_DOT_METADATA);
diff --git a/bundles/org.eclipse.jst.ws.axis2.core/src/org/eclipse/jst/ws/axis2/core/utils/FacetContainerUtils.java b/bundles/org.eclipse.jst.ws.axis2.core/src/org/eclipse/jst/ws/axis2/core/utils/FacetContainerUtils.java
index 2aa17b2..8307468 100644
--- a/bundles/org.eclipse.jst.ws.axis2.core/src/org/eclipse/jst/ws/axis2/core/utils/FacetContainerUtils.java
+++ b/bundles/org.eclipse.jst.ws.axis2.core/src/org/eclipse/jst/ws/axis2/core/utils/FacetContainerUtils.java
@@ -33,32 +33,52 @@
 import org.eclipse.wst.server.core.ServerCore;
 
 public class FacetContainerUtils {
+	
+	public static IPath getWorkspace(){
+		return ResourcesPlugin.getWorkspace().getRoot().getLocation();
+	}
+	
+	public static IProject getProjectName(String project){
+		String projectString = replaceEscapecharactors(project.toString());
+		return ResourcesPlugin.getWorkspace().getRoot().getProject(
+				getProjectNameFromFramewokNameString(projectString));
+	}
+	
+	public static IPath getProjectRoot(String project){
+		String projectString = replaceEscapecharactors(project.toString());
+		return ResourcesPlugin.getWorkspace().getRoot().getProject(
+				getProjectNameFromFramewokNameString(projectString)).getLocation();
+	}
 
 	public static String  pathToWebProjectContainer(String project) {
-
-		String workspaceDirectory = ResourcesPlugin.getWorkspace().getRoot()
-												   .getLocation().toOSString();
-		String projectString = replaceEscapecharactors(project.toString());
-
-		String currentDynamicWebProjectDir = J2EEUtils.getWebContentPath(
-				ResourcesPlugin.getWorkspace().getRoot().getProject(
-						getProjectNameFromFramewokNameString(projectString)
-						)).toOSString();
-
-		String webContainerDirString = Axis2CoreUtils.addAnotherNodeToPath(
-				workspaceDirectory,
-				currentDynamicWebProjectDir);
+		IPath projectRoot = getProjectRoot(project);
+		IPath currentDynamicWebProjectDir = J2EEUtils.getWebContentPath(
+				getProjectName(project));
+		IPath currentDynamicWebProjectDirWithoutProjectRoot = J2EEUtils.getWebContentPath(
+				getProjectName(project)).removeFirstSegments(1).makeAbsolute();
+		if(projectRoot.toOSString().contains(getWorkspace().toOSString())){
+			return getWorkspace()
+						.append(currentDynamicWebProjectDir).toOSString();
+		}else{
+			return projectRoot
+						.append(currentDynamicWebProjectDirWithoutProjectRoot).toOSString();
+		}
 		
-		return webContainerDirString;
 	}
 	
 	public static String  pathToWebProjectContainerWEBINF(String project) {
-		IPath workspaceDirectory = ResourcesPlugin.getWorkspace().getRoot().getLocation();
-		String projectString = replaceEscapecharactors(project.toString());
-		IPath webContainerWEBINF = J2EEUtils.getWebInfPath(
-					ResourcesPlugin.getWorkspace().getRoot().getProject(
-						getProjectNameFromFramewokNameString(projectString)));
-		return workspaceDirectory.append(webContainerWEBINF).toOSString();
+		IPath projectRoot = getProjectRoot(project);
+		IPath webContainerWEBINFDir = J2EEUtils.getWebInfPath(
+				getProjectName(project));
+		IPath webContainerWEBINFDirWithoutProjectRoot = J2EEUtils.getWebInfPath(
+				getProjectName(project)).removeFirstSegments(1).makeAbsolute();
+		if(projectRoot.toOSString().contains(getWorkspace().toOSString())){
+			return getWorkspace()
+						.append(webContainerWEBINFDir).toOSString();
+		}else{
+			return projectRoot
+						.append(webContainerWEBINFDirWithoutProjectRoot).toOSString();
+		}
 	}
 	
 	public static String  pathToWebProjectContainerMETAINF(String project) {
diff --git a/bundles/org.eclipse.jst.ws.axis2.creation.core/src/org/eclipse/jst/ws/axis2/creation/core/command/Axis2BUServiceCreationCommand.java b/bundles/org.eclipse.jst.ws.axis2.creation.core/src/org/eclipse/jst/ws/axis2/creation/core/command/Axis2BUServiceCreationCommand.java
index 810a2da..a714e62 100644
--- a/bundles/org.eclipse.jst.ws.axis2.creation.core/src/org/eclipse/jst/ws/axis2/creation/core/command/Axis2BUServiceCreationCommand.java
+++ b/bundles/org.eclipse.jst.ws.axis2.creation.core/src/org/eclipse/jst/ws/axis2/creation/core/command/Axis2BUServiceCreationCommand.java
@@ -27,11 +27,13 @@
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
+import org.eclipse.jst.ws.axis2.core.utils.FacetContainerUtils;
 import org.eclipse.jst.ws.axis2.core.utils.FileUtils;
 import org.eclipse.jst.ws.axis2.creation.core.data.DataModel;
 import org.eclipse.jst.ws.axis2.creation.core.messages.Axis2CreationUIMessages;
 import org.eclipse.jst.ws.axis2.creation.core.utils.CommonUtils;
 import org.eclipse.jst.ws.axis2.creation.core.utils.ServiceXMLCreator;
+import org.eclipse.jst.ws.internal.common.J2EEUtils;
 import org.eclipse.jst.ws.internal.common.ResourceUtils;
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.wst.command.internal.env.core.common.StatusUtils;
@@ -119,10 +121,26 @@
             }
 	        
             //Copy the classes directory to the sevices directory
-            IPath defaultClassesSubDirectory = ResourceUtils.getJavaOutputLocation(
+            String classesDirectory = null;
+    		IPath projectRoot = FacetContainerUtils.getProjectRoot(project);
+    		IPath defaultClassesSubDirectory = ResourceUtils.getJavaOutputLocation(
             		ResourcesPlugin.getWorkspace().getRoot().getProject(project));
-            String classesDirectory = FileUtils.addAnotherNodeToPath(workspaceDirectory,
-            									defaultClassesSubDirectory.toOSString());
+    		IPath defaultClassesSubDirectoryWithoutProjectRoot = ResourceUtils.getJavaOutputLocation(
+            		ResourcesPlugin.getWorkspace().getRoot().getProject(project))
+            		.removeFirstSegments(1).makeAbsolute();
+    		if(projectRoot.toOSString().contains(FacetContainerUtils.getWorkspace().toOSString())){
+    			classesDirectory = FacetContainerUtils.getWorkspace()
+    						.append(defaultClassesSubDirectory).toOSString();
+    		}else{
+    			classesDirectory = projectRoot
+    						.append(defaultClassesSubDirectoryWithoutProjectRoot).toOSString();
+    		}
+    		
+//            IPath defaultClassesSubDirectory = ResourceUtils.getJavaOutputLocation(
+//            		ResourcesPlugin.getWorkspace().getRoot().getProject(project));
+//            
+//            String classesDirectory = FileUtils.addAnotherNodeToPath(workspaceDirectory,
+//            									defaultClassesSubDirectory.toOSString());
             //TODO copy only the relevent .classes to the aar
 			FileUtils.copyDirectory(new File(classesDirectory),
 									new File(servicesDirectory));
diff --git a/bundles/org.eclipse.jst.ws.axis2.creation.core/src/org/eclipse/jst/ws/axis2/creation/core/command/Axis2TDServiceCreationCommand.java b/bundles/org.eclipse.jst.ws.axis2.creation.core/src/org/eclipse/jst/ws/axis2/creation/core/command/Axis2TDServiceCreationCommand.java
index 6987065..31b9603 100644
--- a/bundles/org.eclipse.jst.ws.axis2.creation.core/src/org/eclipse/jst/ws/axis2/creation/core/command/Axis2TDServiceCreationCommand.java
+++ b/bundles/org.eclipse.jst.ws.axis2.creation.core/src/org/eclipse/jst/ws/axis2/creation/core/command/Axis2TDServiceCreationCommand.java
@@ -25,6 +25,7 @@
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
+import org.eclipse.jst.ws.axis2.core.utils.FacetContainerUtils;
 import org.eclipse.jst.ws.axis2.core.utils.FileUtils;
 import org.eclipse.jst.ws.axis2.creation.core.data.DataModel;
 import org.eclipse.jst.ws.axis2.creation.core.messages.Axis2CreationUIMessages;
@@ -57,8 +58,10 @@
 //		String workspaceDirectory = ResourceUtils.getWorkspaceRoot().getLocation().toOSString();
 		String workspaceDirectory = ResourcesPlugin.getWorkspace()
 														.getRoot().getLocation().toOSString();
-		String currentDynamicWebProjectDir = FileUtils.addAnotherNodeToPath(workspaceDirectory, 
-														model.getWebProjectName());
+//		String currentDynamicWebProjectDir = FileUtils.addAnotherNodeToPath(workspaceDirectory, 
+//				model.getWebProjectName());
+		String currentDynamicWebProjectDir = FacetContainerUtils.getProjectRoot( 
+														model.getWebProjectName()).toOSString();
 		String matadataDir = FileUtils.addAnotherNodeToPath(workspaceDirectory,
 														Axis2CreationUIMessages.DIR_DOT_METADATA);
 	    String matadataPluginsDir = FileUtils.addAnotherNodeToPath(matadataDir,
@@ -94,10 +97,25 @@
 	    FileUtils.copyDirectory(currentProjectResourcesDir, new File(metaInfDirectory));
         
         //Copy the classes directory to the sevices directory
-        IPath defaultClassesSubDirectory = ResourceUtils.getJavaOutputLocation(
+        String classesDirectory = null;
+		IPath projectRoot = FacetContainerUtils.getProjectRoot(project);
+		IPath defaultClassesSubDirectory = ResourceUtils.getJavaOutputLocation(
         		ResourcesPlugin.getWorkspace().getRoot().getProject(project));
-        String classesDirectory = FileUtils.addAnotherNodeToPath(workspaceDirectory,
-        									defaultClassesSubDirectory.toOSString());
+		IPath defaultClassesSubDirectoryWithoutProjectRoot = ResourceUtils.getJavaOutputLocation(
+        		ResourcesPlugin.getWorkspace().getRoot().getProject(project))
+        		.removeFirstSegments(1).makeAbsolute();
+		if(projectRoot.toOSString().contains(FacetContainerUtils.getWorkspace().toOSString())){
+			classesDirectory = FacetContainerUtils.getWorkspace()
+						.append(defaultClassesSubDirectory).toOSString();
+		}else{
+			classesDirectory = projectRoot
+						.append(defaultClassesSubDirectoryWithoutProjectRoot).toOSString();
+		}
+		
+//        IPath defaultClassesSubDirectory = ResourceUtils.getJavaOutputLocation(
+//        		ResourcesPlugin.getWorkspace().getRoot().getProject(project));
+//        String classesDirectory = FileUtils.addAnotherNodeToPath(workspaceDirectory,
+//        									defaultClassesSubDirectory.toOSString());
         //TODO copy only the relevent .classes to the aar
 		FileUtils.copyDirectory(new File(classesDirectory),
 								new File(currentservicesDirectory));
diff --git a/bundles/org.eclipse.jst.ws.axis2.creation.core/src/org/eclipse/jst/ws/axis2/creation/core/command/Axis2WSDL2JavaCommand.java b/bundles/org.eclipse.jst.ws.axis2.creation.core/src/org/eclipse/jst/ws/axis2/creation/core/command/Axis2WSDL2JavaCommand.java
index 25f46f0..9a9d50c 100644
--- a/bundles/org.eclipse.jst.ws.axis2.creation.core/src/org/eclipse/jst/ws/axis2/creation/core/command/Axis2WSDL2JavaCommand.java
+++ b/bundles/org.eclipse.jst.ws.axis2.creation.core/src/org/eclipse/jst/ws/axis2/creation/core/command/Axis2WSDL2JavaCommand.java
@@ -31,6 +31,7 @@
 import org.eclipse.jst.ws.axis2.consumption.core.utils.WSDL2JavaGenerator;
 import org.eclipse.jst.ws.axis2.consumption.core.utils.WSDLPropertyReader;
 import org.eclipse.jst.ws.axis2.core.utils.ClassLoadingUtil;
+import org.eclipse.jst.ws.axis2.core.utils.FacetContainerUtils;
 import org.eclipse.jst.ws.axis2.core.utils.FileUtils;
 import org.eclipse.jst.ws.axis2.creation.core.data.DataModel;
 import org.eclipse.jst.ws.axis2.creation.core.messages.Axis2CreationUIMessages;
@@ -59,7 +60,9 @@
 		
 		PathLoadingUtil.init(model);
 		String tempCodegenOutputLocation =PathLoadingUtil.getTempCodegenOutputLocation();
-		String currentDynamicWebProjectDir = PathLoadingUtil.getCurrentDynamicWebProjectDir();
+//		String currentDynamicWebProjectDir = PathLoadingUtil.getCurrentDynamicWebProjectDir();
+		String currentDynamicWebProjectDir = FacetContainerUtils.getProjectRoot(
+				                                  model.getWebProjectName()).toOSString();
 		
 		File tempCodegenLocationFile = new File(tempCodegenOutputLocation);
 		if (tempCodegenLocationFile.exists())FileUtils.deleteDirectories(tempCodegenOutputLocation);
diff --git a/bundles/org.eclipse.jst.ws.axis2.creation.core/src/org/eclipse/jst/ws/axis2/creation/core/command/Axis2WebservicesServerCommand.java b/bundles/org.eclipse.jst.ws.axis2.creation.core/src/org/eclipse/jst/ws/axis2/creation/core/command/Axis2WebservicesServerCommand.java
index b0640e5..d52355f 100644
--- a/bundles/org.eclipse.jst.ws.axis2.creation.core/src/org/eclipse/jst/ws/axis2/creation/core/command/Axis2WebservicesServerCommand.java
+++ b/bundles/org.eclipse.jst.ws.axis2.creation.core/src/org/eclipse/jst/ws/axis2/creation/core/command/Axis2WebservicesServerCommand.java
@@ -24,6 +24,7 @@
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.jst.ws.axis2.consumption.core.utils.ContentCopyUtils;
+import org.eclipse.jst.ws.axis2.core.utils.FacetContainerUtils;
 import org.eclipse.jst.ws.axis2.core.utils.FileUtils;
 import org.eclipse.jst.ws.axis2.creation.core.data.DataModel;
 import org.eclipse.jst.ws.axis2.creation.core.messages.Axis2CreationUIMessages;
@@ -50,14 +51,17 @@
 		IEnvironment environment = getEnvironment();
 		IStatusHandler statusHandler = environment.getStatusHandler();	
 
-		 String currentDynamicWebProjectDir = J2EEUtils.getWebContentPath(
-				 				ResourcesPlugin.getWorkspace().getRoot().getProject(
-				 				model.getWebProjectName())
-						).toOSString();
-
-		String webContainerDirString = FileUtils.addAnotherNodeToPath(
-				ResourcesPlugin.getWorkspace().getRoot().getLocation().toOSString(),
-				currentDynamicWebProjectDir);
+//		 String currentDynamicWebProjectDir = J2EEUtils.getWebContentPath(
+//				 				ResourcesPlugin.getWorkspace().getRoot().getProject(
+//				 				model.getWebProjectName())
+//						).toOSString();
+//
+//		String webContainerDirString = FileUtils.addAnotherNodeToPath(
+//				ResourcesPlugin.getWorkspace().getRoot().getLocation().toOSString(),
+//				currentDynamicWebProjectDir);
+		
+		String webContainerDirString = FacetContainerUtils.pathToWebProjectContainer(
+				model.getWebProjectName());
 
 		ContentCopyUtils contentCopyUtils = new ContentCopyUtils();