[nobug] Various fixes
diff --git a/plugins/org.eclipse.jst.common.frameworks/src/org/eclipse/jst/common/jdt/internal/integration/JavaArtifactEditModel.java b/plugins/org.eclipse.jst.common.frameworks/src/org/eclipse/jst/common/jdt/internal/integration/JavaArtifactEditModel.java
index b3135da..b72bb74 100644
--- a/plugins/org.eclipse.jst.common.frameworks/src/org/eclipse/jst/common/jdt/internal/integration/JavaArtifactEditModel.java
+++ b/plugins/org.eclipse.jst.common.frameworks/src/org/eclipse/jst/common/jdt/internal/integration/JavaArtifactEditModel.java
@@ -2,12 +2,16 @@
 
 import java.util.Set;
 
+import org.eclipse.core.resources.IWorkspace;
+import org.eclipse.core.resources.IWorkspaceRunnable;
+import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.emf.common.util.URI;
 import org.eclipse.emf.ecore.resource.Resource;
 import org.eclipse.jdt.core.ICompilationUnit;
 import org.eclipse.wst.common.componentcore.internal.ArtifactEditModel;
+import org.eclipse.wst.common.frameworks.internal.SaveFailedException;
 import org.eclipse.wst.common.internal.emf.resource.CompatibilityXMIResource;
 import org.eclipse.wst.common.internal.emf.resource.ReferencedResource;
 import org.eclipse.wst.common.internal.emf.resource.TranslatorResource;
@@ -117,6 +121,13 @@
 		if (monitor == null || !monitor.isCanceled())
 			super.primSave(monitor);
 	}
+	protected void runSaveOperation(IWorkspaceRunnable runnable, IProgressMonitor monitor) throws SaveFailedException {
+		try {
+			ResourcesPlugin.getWorkspace().run(runnable, null,IWorkspace.AVOID_UPDATE,monitor);
+		} catch (CoreException e) {
+			throw new SaveFailedException(e);
+		}
+	}
 
 	/**
 	 * Insert the method's description here. Creation date: (4/11/2001 4:14:26 PM)
diff --git a/plugins/org.eclipse.jst.j2ee/build.properties b/plugins/org.eclipse.jst.j2ee/build.properties
index 29f13da..9290f8d 100644
--- a/plugins/org.eclipse.jst.j2ee/build.properties
+++ b/plugins/org.eclipse.jst.j2ee/build.properties
@@ -14,7 +14,7 @@
                plugin.properties,\
                prepareAllPII.xml,\
                plugin.xml,\
-               runtime/j2eeplugin.jar,\
+               .,\
                META-INF/,\
                about.html
 source.. = j2eeplugin/,\
diff --git a/plugins/org.eclipse.jst.j2ee/earproject/org/eclipse/jst/j2ee/application/internal/operations/AddComponentToEnterpriseApplicationOp.java b/plugins/org.eclipse.jst.j2ee/earproject/org/eclipse/jst/j2ee/application/internal/operations/AddComponentToEnterpriseApplicationOp.java
index df706e6..1498d91 100644
--- a/plugins/org.eclipse.jst.j2ee/earproject/org/eclipse/jst/j2ee/application/internal/operations/AddComponentToEnterpriseApplicationOp.java
+++ b/plugins/org.eclipse.jst.j2ee/earproject/org/eclipse/jst/j2ee/application/internal/operations/AddComponentToEnterpriseApplicationOp.java
@@ -17,6 +17,9 @@
 import org.eclipse.jst.j2ee.internal.J2EEConstants;
 import org.eclipse.wst.common.componentcore.ComponentCore;
 import org.eclipse.wst.common.componentcore.datamodel.properties.ICreateReferenceComponentsDataModelProperties;
+import org.eclipse.wst.common.componentcore.internal.ReferencedComponent;
+import org.eclipse.wst.common.componentcore.internal.StructureEdit;
+import org.eclipse.wst.common.componentcore.internal.WorkbenchComponent;
 import org.eclipse.wst.common.componentcore.internal.operation.CreateReferenceComponentsOp;
 import org.eclipse.wst.common.componentcore.internal.util.IModuleConstants;
 import org.eclipse.wst.common.componentcore.resources.ComponentHandle;
@@ -40,26 +43,42 @@
 	protected void updateEARDD(IProgressMonitor monitor) {
 
 		EARArtifactEdit earEdit = null;
+		StructureEdit se = null;
 		try {
 			ComponentHandle handle = (ComponentHandle) model.getProperty(ICreateReferenceComponentsDataModelProperties.SOURCE_COMPONENT_HANDLE);
 			earEdit = EARArtifactEdit.getEARArtifactEditForWrite(handle);
+			se = StructureEdit.getStructureEditForWrite(handle.getProject());
 			if (earEdit != null) {
 				Application application = earEdit.getApplication();
 				List list = (List) model.getProperty(ICreateReferenceComponentsDataModelProperties.TARGET_COMPONENTS_HANDLE_LIST);
 				if (list != null && list.size() > 0) {
 					for (int i = 0; i < list.size(); i++) {
+						StructureEdit compse = null;
 						ComponentHandle comphandle = (ComponentHandle) list.get(i);
 						IVirtualComponent wc = ComponentCore.createComponent(comphandle.getProject(), comphandle.getName());
-						addModule(application, wc);
+						WorkbenchComponent earwc = se.findComponentByName(handle.getName());
+						try {
+							compse = StructureEdit.getStructureEditForRead(comphandle.getProject());
+							WorkbenchComponent refwc = compse.findComponentByName(comphandle.getName());
+							ReferencedComponent ref = se.findReferencedComponent(earwc,refwc);
+							Module mod = addModule(application, wc);
+							ref.setDependentObject(mod);
+						} finally {
+							if (compse != null)
+								compse.dispose();
+						}
 					}
 				}
 			}
+			se.saveIfNecessary(monitor);
 			earEdit.saveIfNecessary(monitor);
 		} catch (Exception e) {
 			Logger.getLogger().logError(e);
 		} finally {
 			if (earEdit != null)
 				earEdit.dispose();
+			if (se != null)
+				se.dispose();
 		}
 	}
 
@@ -78,7 +97,7 @@
 		return null;
 	}
 
-	protected void addModule(Application application, IVirtualComponent wc) {
+	protected Module addModule(Application application, IVirtualComponent wc) {
 		Application dd = application;
 
 		String name = wc.getName();
@@ -96,22 +115,23 @@
 		Module existingModule = dd.getFirstModule(name);
 
 		if (existingModule == null) {
-			Module m = createNewModule(wc);
-			if (m != null) {
+			existingModule = createNewModule(wc);
+			if (existingModule != null) {
 
-				m.setUri(name);
-				if (m instanceof WebModule) {
+				existingModule.setUri(name);
+				if (existingModule instanceof WebModule) {
 
 
 					Properties props = wc.getMetaProperties();
 					String contextroot = ""; //$NON-NLS-1$
 					if ((props != null) && (props.containsKey(J2EEConstants.CONTEXTROOT)))
 						contextroot = props.getProperty(J2EEConstants.CONTEXTROOT);
-					((WebModule) m).setContextRoot(contextroot);
+					((WebModule) existingModule).setContextRoot(contextroot);
 				}
-				dd.getModules().add(m);
+				dd.getModules().add(existingModule);
 			}
 		}
+		return existingModule;
 	}
 
 	public IStatus redo(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
diff --git a/plugins/org.eclipse.jst.j2ee/earproject/org/eclipse/jst/j2ee/componentcore/util/EARArtifactEdit.java b/plugins/org.eclipse.jst.j2ee/earproject/org/eclipse/jst/j2ee/componentcore/util/EARArtifactEdit.java
index f4111b0..80aa7e5 100644
--- a/plugins/org.eclipse.jst.j2ee/earproject/org/eclipse/jst/j2ee/componentcore/util/EARArtifactEdit.java
+++ b/plugins/org.eclipse.jst.j2ee/earproject/org/eclipse/jst/j2ee/componentcore/util/EARArtifactEdit.java
@@ -468,6 +468,21 @@
 	public IVirtualReference[] getComponentReferences() {
 		return getComponentReferences(Collections.EMPTY_LIST);
 	}
+	/**
+	 * This method will return the IVirtualReference to the component of the given name
+	 * 
+	 * @return - IVirtualReference or null if not found
+	 */
+	public IVirtualReference getComponentReference(String componentName) {
+		IVirtualReference[] refs = getComponentReferences(Collections.EMPTY_LIST);
+		for (int i = 0; i < refs.length; i++) {
+			IVirtualReference reference = refs[i];
+			if (reference.getReferencedComponent().getName().equals(componentName))
+				return reference;
+			
+		}
+		return null;
+	}
 	
 	private IVirtualReference[] getComponentReferences(List componentTypes) {
 		List components = new ArrayList();