[104051] Cache components rather than component name in j2ee export dm's
diff --git a/plugins/org.eclipse.jst.j2ee/archiveops/org/eclipse/jst/j2ee/datamodel/properties/IJ2EEComponentExportDataModelProperties.java b/plugins/org.eclipse.jst.j2ee/archiveops/org/eclipse/jst/j2ee/datamodel/properties/IJ2EEComponentExportDataModelProperties.java
index 1b55237..d9d5940 100644
--- a/plugins/org.eclipse.jst.j2ee/archiveops/org/eclipse/jst/j2ee/datamodel/properties/IJ2EEComponentExportDataModelProperties.java
+++ b/plugins/org.eclipse.jst.j2ee/archiveops/org/eclipse/jst/j2ee/datamodel/properties/IJ2EEComponentExportDataModelProperties.java
@@ -59,4 +59,6 @@
      * and archived.  However, if <code>Boolean.FALSE</code> the component is archived as is.
      */
     public static final String RUN_BUILD = "IJ2EEComponentExportDataModelProperties.RUN_BUILD"; //$NON-NLS-1$}
+    
+    public static final String COMPONENT = "IJ2EEComponentExportDataModelProperties.COMPONENT"; //$NON-NLS-1$
 }
diff --git a/plugins/org.eclipse.jst.j2ee/archiveops/org/eclipse/jst/j2ee/internal/archive/operations/J2EEArtifactExportOperation.java b/plugins/org.eclipse.jst.j2ee/archiveops/org/eclipse/jst/j2ee/internal/archive/operations/J2EEArtifactExportOperation.java
index 24621e6..2027269 100644
--- a/plugins/org.eclipse.jst.j2ee/archiveops/org/eclipse/jst/j2ee/internal/archive/operations/J2EEArtifactExportOperation.java
+++ b/plugins/org.eclipse.jst.j2ee/archiveops/org/eclipse/jst/j2ee/internal/archive/operations/J2EEArtifactExportOperation.java
@@ -32,13 +32,10 @@
 import org.eclipse.core.runtime.jobs.ISchedulingRule;
 import org.eclipse.core.runtime.jobs.MultiRule;
 import org.eclipse.jdt.core.JavaCore;
-import org.eclipse.jem.util.emf.workbench.ProjectUtilities;
 import org.eclipse.jst.j2ee.commonarchivecore.internal.ModuleFile;
 import org.eclipse.jst.j2ee.commonarchivecore.internal.exception.SaveFailureException;
 import org.eclipse.jst.j2ee.datamodel.properties.IJ2EEComponentExportDataModelProperties;
 import org.eclipse.jst.j2ee.internal.plugin.LibCopyBuilder;
-import org.eclipse.wst.common.componentcore.ComponentCore;
-import org.eclipse.wst.common.componentcore.resources.IFlexibleProject;
 import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
 import org.eclipse.wst.common.componentcore.resources.IVirtualReference;
 import org.eclipse.wst.common.frameworks.datamodel.AbstractDataModelOperation;
@@ -61,13 +58,13 @@
 	}
 
 	public IStatus execute(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
-
+		setComponent((IVirtualComponent)model.getProperty(IJ2EEComponentExportDataModelProperties.COMPONENT));
 		setDestinationPath(new Path(model.getStringProperty(IJ2EEComponentExportDataModelProperties.ARCHIVE_DESTINATION)));
 		setExportSource(model.getBooleanProperty(IJ2EEComponentExportDataModelProperties.EXPORT_SOURCE_FILES));
 		try {
 			setProgressMonitor(monitor);
 			// defect 240999
-			getComponent().getProject().refreshLocal(IResource.DEPTH_INFINITE, null);
+			component.getProject().refreshLocal(IResource.DEPTH_INFINITE, null);
 			if (model.getBooleanProperty(IJ2EEComponentExportDataModelProperties.RUN_BUILD)) {
 				runNecessaryBuilders(component, monitor);
 			}
@@ -95,17 +92,9 @@
 	}
 
 	protected IVirtualComponent getComponent() {
-		if (component == null) {
-			component = getComponent(model.getStringProperty(IJ2EEComponentExportDataModelProperties.COMPONENT_NAME),model.getStringProperty(IJ2EEComponentExportDataModelProperties.PROJECT_NAME));
-		}
-			return component;
-	}
-
-	private IVirtualComponent getComponent(String compName, String projName) {
-		IProject proj = ProjectUtilities.getProject(projName);
-		IFlexibleProject flexProj = ComponentCore.createFlexibleProject(proj);
-		IVirtualComponent comp = flexProj.getComponent(compName);
-		return comp;
+		if (component == null)
+			component = (IVirtualComponent) model.getProperty(IJ2EEComponentExportDataModelProperties.COMPONENT);
+		return component;
 	}
 
 	protected IPath getDestinationPath() {
diff --git a/plugins/org.eclipse.jst.j2ee/common/org/eclipse/jst/j2ee/internal/common/operations/NewJavaClassOperation.java b/plugins/org.eclipse.jst.j2ee/common/org/eclipse/jst/j2ee/internal/common/operations/NewJavaClassOperation.java
index 93c5ead..2966c37 100644
--- a/plugins/org.eclipse.jst.j2ee/common/org/eclipse/jst/j2ee/internal/common/operations/NewJavaClassOperation.java
+++ b/plugins/org.eclipse.jst.j2ee/common/org/eclipse/jst/j2ee/internal/common/operations/NewJavaClassOperation.java
@@ -448,11 +448,13 @@
 		if (model.getBooleanProperty(NewJavaClassDataModel.CONSTRUCTOR)) {
 			// Implement constructors from superclass
 			try {
-				IMethod[] methods = superClassType.getMethods();
-				for (int j = 0; j < methods.length; j++) {
-					if (methods[j].isConstructor() && !Flags.isPrivate(methods[j].getFlags())) {
-						String methodStub = getMethodStub(methods[j], superclassName, className);
-						sb.append(methodStub);
+				if (superClassType != null) {
+					IMethod[] methods = superClassType.getMethods();
+					for (int j = 0; j < methods.length; j++) {
+						if (methods[j].isConstructor() && !Flags.isPrivate(methods[j].getFlags())) {
+							String methodStub = getMethodStub(methods[j], superclassName, className);
+							sb.append(methodStub);
+						}
 					}
 				}
 			} catch (JavaModelException e) {
diff --git a/plugins/org.eclipse.jst.j2ee/earproject/org/eclipse/jst/j2ee/application/internal/operations/J2EEArtifactExportDataModelProvider.java b/plugins/org.eclipse.jst.j2ee/earproject/org/eclipse/jst/j2ee/application/internal/operations/J2EEArtifactExportDataModelProvider.java
index 82d6d17..26bd067 100644
--- a/plugins/org.eclipse.jst.j2ee/earproject/org/eclipse/jst/j2ee/application/internal/operations/J2EEArtifactExportDataModelProvider.java
+++ b/plugins/org.eclipse.jst.j2ee/earproject/org/eclipse/jst/j2ee/application/internal/operations/J2EEArtifactExportDataModelProvider.java
@@ -11,6 +11,7 @@
 package org.eclipse.jst.j2ee.application.internal.operations;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 
 import org.eclipse.core.resources.IResource;
@@ -28,13 +29,15 @@
 import org.eclipse.wst.common.frameworks.internal.plugin.WTPCommonPlugin;
 
 public abstract class J2EEArtifactExportDataModelProvider extends AbstractDataModelProvider implements IJ2EEComponentExportDataModelProperties {
+	
+	public HashMap componentMap;
 
     public J2EEArtifactExportDataModelProvider() {
         super();
     }
 
     public String[] getPropertyNames() {
-        return new String[] { COMPONENT_NAME, PROJECT_NAME,  ARCHIVE_DESTINATION, EXPORT_SOURCE_FILES, OVERWRITE_EXISTING, RUN_BUILD };
+        return new String[] { COMPONENT_NAME, PROJECT_NAME,  ARCHIVE_DESTINATION, EXPORT_SOURCE_FILES, OVERWRITE_EXISTING, RUN_BUILD, COMPONENT };
     }
 
     protected abstract String getComponentID();
@@ -58,20 +61,32 @@
     public boolean propertySet(String propertyName, Object propertyValue) {
 		boolean set = super.propertySet(propertyName, propertyValue);
 		if (propertyName.equals(COMPONENT_NAME)) {
-			IVirtualComponent[] comps = ComponentUtilities.getAllWorkbenchComponents();
-			for (int i = 0; i < comps.length; i++) {
-				IVirtualComponent component = comps[i];
+				if(getComponentMap().isEmpty())
+					intializeComponentMap();
+				IVirtualComponent component = (IVirtualComponent)getComponentMap().get(propertyValue);
 				if (component.getName().equals(propertyValue)) {
+					setProperty(COMPONENT,component);
 					setProperty(PROJECT_NAME,component.getProject().getName());
-					break;
 				}
 			}
-		}
 		return set;
     }
+    
+    public HashMap getComponentMap() {
+    	if(componentMap == null) 
+    		componentMap = new HashMap();
+    	return componentMap;
+    }
+    
+    public void intializeComponentMap() {
+    	IVirtualComponent[] comps = ComponentUtilities.getAllWorkbenchComponents();
+		for(int i = 0; i < comps.length; i++) {
+			getComponentMap().put(comps[i].getName(),comps[i]);
+		}
+    }
 
     /**
-     * Populate the resource name combo with connector projects that are not encrypted.
+     * Populate the resource name combo with  projects that are not encrypted.
      */
     public DataModelPropertyDescriptor[] getValidPropertyDescriptors(String propertyName) {
         //TODO: populate valid components
@@ -81,8 +96,10 @@
 
             List relevantComponents = new ArrayList();
             for (int i = 0; i < wbComps.length; i++) {
-                if (wbComps[i].getComponentTypeId().equals(getComponentID()))
+                if (wbComps[i].getComponentTypeId().equals(getComponentID())) {
                     relevantComponents.add(wbComps[i]);
+                	getComponentMap().put(wbComps[i].getName(),wbComps[i]);
+                }
             }
 
             if (relevantComponents == null || relevantComponents.size() == 0)
@@ -110,11 +127,11 @@
             String componentName = (String) model.getProperty(COMPONENT_NAME);
             if (componentName == null || componentName.equals(""))
                 return WTPCommonPlugin.createErrorStatus(WTPCommonPlugin.getResourceString(WTPCommonMessages.MODULE_EXISTS_ERROR));
-            IVirtualComponent[] component = ComponentUtilities.getComponent(componentName);
-            if (component.length == 0 || component[0] == null) {
+            IVirtualComponent component = (IVirtualComponent)componentMap.get(componentName);
+            if (component == null) {
                 return WTPCommonPlugin.createErrorStatus(WTPCommonPlugin.getResourceString(WTPCommonMessages.MODULE_EXISTS_ERROR));
             }
-            if (!component[0].getComponentTypeId().equals(getComponentID())) {
+            if (!component.getComponentTypeId().equals(getComponentID())) {
                 return WTPCommonPlugin.createErrorStatus(getWrongComponentTypeString(componentName));
             }
         }