[136464] JS Web Lib imports
diff --git a/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/j2ee/internal/wizard/EARImportListContentProvider.java b/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/j2ee/internal/wizard/EARImportListContentProvider.java
index 02e3da8..31474d9 100644
--- a/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/j2ee/internal/wizard/EARImportListContentProvider.java
+++ b/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/j2ee/internal/wizard/EARImportListContentProvider.java
@@ -18,6 +18,8 @@
 import org.eclipse.jface.viewers.LabelProvider;
 import org.eclipse.jface.viewers.Viewer;
 import org.eclipse.jst.j2ee.commonarchivecore.internal.Archive;
+import org.eclipse.jst.j2ee.commonarchivecore.internal.WARFile;
+import org.eclipse.jst.j2ee.commonarchivecore.internal.helpers.ArchiveConstants;
 import org.eclipse.jst.j2ee.datamodel.properties.IJ2EEComponentImportDataModelProperties;
 import org.eclipse.wst.common.componentcore.datamodel.properties.IFacetProjectCreationDataModelProperties;
 import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
@@ -84,7 +86,12 @@
 	public String getColumnText(Object element, int columnIndex) {
 		IDataModel dataModel = (IDataModel) element;
 		if (columnIndex == 0) {
-			return ((Archive) dataModel.getProperty(IJ2EEComponentImportDataModelProperties.FILE)).getURI();
+			Archive archive = (Archive) dataModel.getProperty(IJ2EEComponentImportDataModelProperties.FILE);
+			if (archive.getURI().startsWith(ArchiveConstants.WEBAPP_LIB_URI)) {
+				String parentWarFileName = ((WARFile) archive.eContainer()).getName();
+				return parentWarFileName + "#" + archive.getURI(); //$NON-NLS-1$
+			}
+			return archive.getURI();
 		} else if (columnIndex == 1) {
 			return dataModel.getStringProperty(IFacetProjectCreationDataModelProperties.FACET_PROJECT_NAME);
 		}
diff --git a/plugins/org.eclipse.jst.j2ee.web/webproject/org/eclipse/jst/j2ee/internal/web/archive/operations/WebComponentLoadStrategyImpl.java b/plugins/org.eclipse.jst.j2ee.web/webproject/org/eclipse/jst/j2ee/internal/web/archive/operations/WebComponentLoadStrategyImpl.java
index 261230f..b77d273 100644
--- a/plugins/org.eclipse.jst.j2ee.web/webproject/org/eclipse/jst/j2ee/internal/web/archive/operations/WebComponentLoadStrategyImpl.java
+++ b/plugins/org.eclipse.jst.j2ee.web/webproject/org/eclipse/jst/j2ee/internal/web/archive/operations/WebComponentLoadStrategyImpl.java
@@ -60,15 +60,19 @@
 				String uri = iLibModule.getRuntimePath().makeRelative().toString() + "/" + diskFile.getName(); //$NON-NLS-1$
 				addExternalFile(uri, diskFile);
 			} else {
-				String name = ""; //$NON-NLS-1$
+				String name = null;
 				String archiveName = iLibModule.getArchiveName();
-				if( archiveName != null && archiveName != "" )  //$NON-NLS-1$
+				if (archiveName != null && archiveName.length() > 0) {
 					name = archiveName;
-				
-				else
-					name = looseComponent.getName() + ".jar" ;  //$NON-NLS-1$
-					
-				String uri = iLibModule.getRuntimePath().makeRelative().toString() + "/" + name;  //$NON-NLS-1$
+				} else {
+					name = looseComponent.getName() + ".jar"; //$NON-NLS-1$
+				}
+				String prefix = iLibModule.getRuntimePath().makeRelative().toString();
+				if (prefix.length() > 0 && prefix.charAt(prefix.length() - 1)!= '/') {
+					prefix += "/"; //$NON-NLS-1$
+				}
+
+				String uri = prefix + name;
 				try {
 					Archive utilJAR = J2EEProjectUtilities.asArchive(uri, looseComponent.getProject(), isExportSource());
 					if (utilJAR == null)
diff --git a/plugins/org.eclipse.jst.j2ee/archiveops/org/eclipse/jst/j2ee/internal/archive/operations/EARComponentImportOperation.java b/plugins/org.eclipse.jst.j2ee/archiveops/org/eclipse/jst/j2ee/internal/archive/operations/EARComponentImportOperation.java
index d4788df..45c812a 100644
--- a/plugins/org.eclipse.jst.j2ee/archiveops/org/eclipse/jst/j2ee/internal/archive/operations/EARComponentImportOperation.java
+++ b/plugins/org.eclipse.jst.j2ee/archiveops/org/eclipse/jst/j2ee/internal/archive/operations/EARComponentImportOperation.java
@@ -12,6 +12,7 @@
 
 import java.io.FileNotFoundException;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -27,6 +28,8 @@
 import org.eclipse.jst.j2ee.application.internal.operations.IAddComponentToEnterpriseApplicationDataModelProperties;
 import org.eclipse.jst.j2ee.commonarchivecore.internal.Archive;
 import org.eclipse.jst.j2ee.commonarchivecore.internal.EARFile;
+import org.eclipse.jst.j2ee.commonarchivecore.internal.WARFile;
+import org.eclipse.jst.j2ee.commonarchivecore.internal.helpers.ArchiveConstants;
 import org.eclipse.jst.j2ee.commonarchivecore.internal.strategy.SaveStrategy;
 import org.eclipse.jst.j2ee.commonarchivecore.internal.util.ArchiveUtil;
 import org.eclipse.jst.j2ee.componentcore.util.EARArtifactEdit;
@@ -60,27 +63,45 @@
 		List modelsToImport = (List) model.getProperty(IEARComponentImportDataModelProperties.HANDLED_PROJECT_MODELS_LIST);
 		try {
 			IDataModel importModel = null;
-			List allModels = (List) model.getProperty(IEARComponentImportDataModelProperties.ALL_PROJECT_MODELS_LIST);
+			for (int i = modelsToImport.size() - 1; i > 0; i--) {
+				importModel = (IDataModel) modelsToImport.get(i);
+				Archive nestedArchive = (Archive) importModel.getProperty(IEARComponentImportDataModelProperties.FILE);
+				if (nestedArchive.getURI().startsWith(ArchiveConstants.WEBAPP_LIB_URI)) {
+					WARFile owningWar = (WARFile) nestedArchive.eContainer();
+					modelsToImport.remove(importModel);
+					for (int j = 0; j < modelsToImport.size(); j++) {
+						IDataModel warModel = (IDataModel) modelsToImport.get(j);
+						if (warModel.getProperty(IEARComponentImportDataModelProperties.FILE) == owningWar) {
+							//TODO this is bad, but don't have access to the plugin where this constant is defined.
+							String propertyName = "WARImportDataModel.WEB_LIB_ARCHIVES_SELECTED";
+							List list = (List) warModel.getProperty(propertyName);
+							if (list == Collections.EMPTY_LIST) {
+								list = new ArrayList();
+								warModel.setProperty(propertyName, list);
+							}
+							list.add(nestedArchive);
+						}
+					}
+				}
+			}
+
 			List componentToAdd = new ArrayList();
 			Map componentToURIMap = new HashMap();
-			for (int i = 0; i < allModels.size(); i++) {
-				importModel = (IDataModel) allModels.get(i);
-				if (modelsToImport.contains(importModel)) {
-					String archiveUri = ((Archive) importModel.getProperty(IEARComponentImportDataModelProperties.FILE)).getURI();
-					importModel.setProperty(IJ2EEComponentImportDataModelProperties.CLOSE_ARCHIVE_ON_DISPOSE, Boolean.FALSE);
-					IDataModel compCreationModel = importModel.getNestedModel(IJ2EEComponentImportDataModelProperties.NESTED_MODEL_J2EE_COMPONENT_CREATION);
-					if (compCreationModel.isProperty(IJ2EEFacetProjectCreationDataModelProperties.MODULE_URI))
-						compCreationModel.setProperty(IJ2EEFacetProjectCreationDataModelProperties.MODULE_URI, archiveUri);
-					try {
-						importModel.getDefaultOperation().execute(monitor, info);
-					} catch (ExecutionException e) {
-						Logger.getLogger().logError(e);
-					}
-					IVirtualComponent component = (IVirtualComponent) importModel.getProperty(IJ2EEComponentImportDataModelProperties.COMPONENT);
-					componentToAdd.add(component);
-					componentToURIMap.put(component, archiveUri);
-
+			for (int i = 0; i < modelsToImport.size(); i++) {
+				importModel = (IDataModel) modelsToImport.get(i);
+				Archive nestedArchive = (Archive) importModel.getProperty(IEARComponentImportDataModelProperties.FILE);
+				importModel.setProperty(IJ2EEComponentImportDataModelProperties.CLOSE_ARCHIVE_ON_DISPOSE, Boolean.FALSE);
+				IDataModel compCreationModel = importModel.getNestedModel(IJ2EEComponentImportDataModelProperties.NESTED_MODEL_J2EE_COMPONENT_CREATION);
+				if (compCreationModel.isProperty(IJ2EEFacetProjectCreationDataModelProperties.MODULE_URI))
+					compCreationModel.setProperty(IJ2EEFacetProjectCreationDataModelProperties.MODULE_URI, nestedArchive.getURI());
+				try {
+					importModel.getDefaultOperation().execute(monitor, info);
+				} catch (ExecutionException e) {
+					Logger.getLogger().logError(e);
 				}
+				IVirtualComponent component = (IVirtualComponent) importModel.getProperty(IJ2EEComponentImportDataModelProperties.COMPONENT);
+				componentToAdd.add(component);
+				componentToURIMap.put(component, nestedArchive.getURI());
 			}
 			if (componentToAdd.size() > 0) {
 				IDataModel addComponentsDM = DataModelFactory.createDataModel(new AddComponentToEnterpriseApplicationDataModelProvider());
@@ -171,17 +192,17 @@
 					} else {
 						String compSearchName = manifestURI.substring(0, manifestURI.length() - 4);
 						IVirtualReference vRef = earComponent.getReference(compSearchName);
-						if(vRef == null){
-							IVirtualReference [] refs = earComponent.getReferences();
+						if (vRef == null) {
+							IVirtualReference[] refs = earComponent.getReferences();
 							String archiveName = null;
-							for(int refCount = 0; vRef == null && refCount < refs.length; refCount++){
-								archiveName = refs[refCount].getArchiveName(); 
-								if(null != archiveName && archiveName.equals(manifestURI)){
+							for (int refCount = 0; vRef == null && refCount < refs.length; refCount++) {
+								archiveName = refs[refCount].getArchiveName();
+								if (null != archiveName && archiveName.equals(manifestURI)) {
 									vRef = refs[refCount];
 								}
 							}
 						}
-						
+
 						if (null != vRef && nestedComponent.getProject() != vRef.getReferencedComponent().getProject()) {
 							IProject project = vRef.getReferencedComponent().getProject();
 							extraEntries.add(JavaCore.newProjectEntry(project.getFullPath(), true));