[349039] Deployment Assembly doesn't handle deleted entries
diff --git a/plugins/org.eclipse.wst.common.modulecore.ui/src/org/eclipse/wst/common/componentcore/ui/Messages.java b/plugins/org.eclipse.wst.common.modulecore.ui/src/org/eclipse/wst/common/componentcore/ui/Messages.java
index 11d72c7..7281d5c 100644
--- a/plugins/org.eclipse.wst.common.modulecore.ui/src/org/eclipse/wst/common/componentcore/ui/Messages.java
+++ b/plugins/org.eclipse.wst.common.modulecore.ui/src/org/eclipse/wst/common/componentcore/ui/Messages.java
@@ -45,6 +45,7 @@
 	public static String ProjectConversionError;
 	public static String ExistingFolderError;
 	public static String Revert;
+	public static String ErrorEntryNotFound;
 	
 	static {
 		// initialize resource bundle
diff --git a/plugins/org.eclipse.wst.common.modulecore.ui/src/org/eclipse/wst/common/componentcore/ui/internal/propertypage/ComponentDependencyContentProvider.java b/plugins/org.eclipse.wst.common.modulecore.ui/src/org/eclipse/wst/common/componentcore/ui/internal/propertypage/ComponentDependencyContentProvider.java
index 7d88506..d262603 100644
--- a/plugins/org.eclipse.wst.common.modulecore.ui/src/org/eclipse/wst/common/componentcore/ui/internal/propertypage/ComponentDependencyContentProvider.java
+++ b/plugins/org.eclipse.wst.common.modulecore.ui/src/org/eclipse/wst/common/componentcore/ui/internal/propertypage/ComponentDependencyContentProvider.java
@@ -123,8 +123,8 @@
 		
 		// default impl
 		if( component.isBinary() ) {
-			IPath p = (IPath)component.getAdapter(IPath.class);
-			return p == null ? null : p.toString();
+			IPath p = (IPath)component.getAdapter(IPath.class);			
+			return p == null ? component.getName() : p.toString();
 		}
 		return component.getProject().getName();
 	}
diff --git a/plugins/org.eclipse.wst.common.modulecore.ui/src/org/eclipse/wst/common/componentcore/ui/internal/propertypage/verifier/DefaultDeploymentAssemblyVerifier.java b/plugins/org.eclipse.wst.common.modulecore.ui/src/org/eclipse/wst/common/componentcore/ui/internal/propertypage/verifier/DefaultDeploymentAssemblyVerifier.java
new file mode 100644
index 0000000..1a158ee
--- /dev/null
+++ b/plugins/org.eclipse.wst.common.modulecore.ui/src/org/eclipse/wst/common/componentcore/ui/internal/propertypage/verifier/DefaultDeploymentAssemblyVerifier.java
@@ -0,0 +1,111 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+
+package org.eclipse.wst.common.componentcore.ui.internal.propertypage.verifier;
+
+import java.util.ArrayList;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.MultiStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.wst.common.componentcore.ui.Messages;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
+import org.eclipse.wst.common.componentcore.resources.IVirtualReference;
+import org.eclipse.wst.common.componentcore.ui.ModuleCoreUIPlugin;
+import org.eclipse.wst.common.componentcore.ui.internal.propertypage.ResourceMappingFilterExtensionRegistry;
+import org.eclipse.wst.common.componentcore.ui.propertypage.AddModuleDependenciesPropertiesPage.ComponentResourceProxy;
+
+/**
+ * This class does basic validation of the deployment assembly. It validates that 
+ * references to other components like projects and archives exists. It also validates that
+ * folder mappings exists in the project.  
+ * 
+ */
+
+public class DefaultDeploymentAssemblyVerifier extends AbstractDeploymentAssemblyVerifier {
+
+	@Override
+	public IStatus verify(DeploymentAssemblyVerifierData data) {
+		IStatus status = validateResourceMappings(data, null);
+		return validateMissingReferences(data, status);
+	}
+	
+	
+	protected IStatus validateResourceMappings(DeploymentAssemblyVerifierData data, IStatus existingStatus){
+		IStatus status = existingStatus!=null?existingStatus:Status.OK_STATUS;
+		ArrayList<ComponentResourceProxy> mappings = data.getResourceMappings();
+		if (mappings == null)
+			return status;		
+		int severity = Status.ERROR;
+		String msg = null;
+		IProject project = data.getComponent().getProject();
+		for (ComponentResourceProxy mapping:mappings){
+			if (ResourceMappingFilterExtensionRegistry.shouldFilter(mapping.source))
+				continue;  // Do not validate filtered entries
+			if (!project.exists(mapping.source)){
+				msg = NLS.bind(Messages.ErrorEntryNotFound, mapping.source); 
+				status = appendStatusMessage(status, msg, severity);
+			}
+		}
+		return status;
+		
+	}
+	
+	protected IStatus validateMissingReferences(DeploymentAssemblyVerifierData data, IStatus existingStatus) {
+		IStatus status = existingStatus!=null?existingStatus:Status.OK_STATUS;
+		ArrayList<IVirtualReference> references = data.getCurrentReferences();
+		if (references == null){
+			return status;
+		}
+		int severity = Status.ERROR;
+		String msg = null;
+		for (IVirtualReference reference:references){
+			if (!reference.getReferencedComponent().exists()){
+				String name;
+				if( reference.getReferencedComponent().isBinary() ) {
+					IVirtualComponent vc = reference.getReferencedComponent();
+					IPath p = (IPath)vc.getAdapter(IPath.class);
+					name= p == null ? vc.getName() : p.toString();
+				}
+				else {
+					name = reference.getReferencedComponent().getProject().getName();
+				}
+				msg = NLS.bind(Messages.ErrorEntryNotFound, name); 
+				status = appendStatusMessage(status, msg, severity);
+			}
+		}
+		return status;		
+	}
+	
+	private IStatus appendStatusMessage(IStatus existingStatus, String message, int severity) {
+        MultiStatus multiStatus;
+        IStatus newStatus = new Status(severity, ModuleCoreUIPlugin.PLUGIN_ID, message);
+		int newSeverity = severity;
+		if(existingStatus.getSeverity() > severity)
+			newSeverity = existingStatus.getSeverity();
+        if(existingStatus instanceof MultiStatus){
+            multiStatus = (MultiStatus)existingStatus;
+            multiStatus.merge(newStatus);
+        } else {
+        	if(!existingStatus.isMultiStatus() && existingStatus.isOK()) {
+        		return newStatus;
+        	}
+            IStatus [] children = new IStatus [] {existingStatus, newStatus};
+            multiStatus = new MultiStatus(ModuleCoreUIPlugin.PLUGIN_ID, newSeverity, children, null, null);
+        }
+        return multiStatus;
+    }
+
+}
diff --git a/plugins/org.eclipse.wst.common.modulecore.ui/src/org/eclipse/wst/common/componentcore/ui/internal/propertypage/verifier/VerifierRegistry.java b/plugins/org.eclipse.wst.common.modulecore.ui/src/org/eclipse/wst/common/componentcore/ui/internal/propertypage/verifier/VerifierRegistry.java
index 0af3524..ba74ba0 100644
--- a/plugins/org.eclipse.wst.common.modulecore.ui/src/org/eclipse/wst/common/componentcore/ui/internal/propertypage/verifier/VerifierRegistry.java
+++ b/plugins/org.eclipse.wst.common.modulecore.ui/src/org/eclipse/wst/common/componentcore/ui/internal/propertypage/verifier/VerifierRegistry.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2010 IBM Corporation and others.
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -102,16 +102,25 @@
 	 * @return List of IConfigurationElements representing instances of IDeploymentAssemblyVerifier
 	 */
 	public List getVerifierExtensions(String facetTypeID, IRuntime runtime) {
-		
+		// Identifier used by verifiers that will run for any runtime
+		String allRuntimes = "org.eclipse.wst.common.modulecore.ui.deploymentAssemblyVerifier.anyruntime"; //$NON-NLS-1$
 		String runtimeID = null;
 		if (runtime == null)
 			runtimeID = "None"; //$NON-NLS-1$
 		else
 			runtimeID = runtime.getRuntimeType().getId();
-		List verifiers = getVerifiers(facetTypeID, runtimeID);
+		// Get the verifiers specific for the target runtime
+		List verifiers = getVerifiers(facetTypeID, runtimeID);		
 		if (verifiers == null)
-			return Collections.EMPTY_LIST;
-		return verifiers;
+			verifiers = Collections.EMPTY_LIST;
+		// Get the verifiers for any runtime
+		List genericVerifiers = getVerifiers(facetTypeID, allRuntimes);
+		if (genericVerifiers == null)
+			genericVerifiers = Collections.EMPTY_LIST;
+		// Merge both verifiers into one list and return
+		List result = new ArrayList(verifiers);
+		result.addAll(genericVerifiers);
+		return result;
 	}
 
 
diff --git a/plugins/org.eclipse.wst.common.modulecore.ui/src/org/eclipse/wst/common/componentcore/ui/messages.properties b/plugins/org.eclipse.wst.common.modulecore.ui/src/org/eclipse/wst/common/componentcore/ui/messages.properties
index 3e5bfc2..5083668 100644
--- a/plugins/org.eclipse.wst.common.modulecore.ui/src/org/eclipse/wst/common/componentcore/ui/messages.properties
+++ b/plugins/org.eclipse.wst.common.modulecore.ui/src/org/eclipse/wst/common/componentcore/ui/messages.properties
@@ -26,4 +26,5 @@
 WizardError=Wizard Error
 ProjectConversionError=Error converting project {0} into a flexible project
 ExistingFolderError= Folder "{0}" already exists.
-Revert=Re&vert
\ No newline at end of file
+Revert=Re&vert
+ErrorEntryNotFound=Cannot find entry: "{0}".
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.modulecore.ui/src/org/eclipse/wst/common/componentcore/ui/propertypage/AddModuleDependenciesPropertiesPage.java b/plugins/org.eclipse.wst.common.modulecore.ui/src/org/eclipse/wst/common/componentcore/ui/propertypage/AddModuleDependenciesPropertiesPage.java
index bff1e3b..7730f01 100644
--- a/plugins/org.eclipse.wst.common.modulecore.ui/src/org/eclipse/wst/common/componentcore/ui/propertypage/AddModuleDependenciesPropertiesPage.java
+++ b/plugins/org.eclipse.wst.common.modulecore.ui/src/org/eclipse/wst/common/componentcore/ui/propertypage/AddModuleDependenciesPropertiesPage.java
@@ -902,7 +902,7 @@
 
 	protected void initialize() {
 		Map<String, Object> options = new HashMap<String, Object>();
-		options.put(IVirtualComponent.REQUESTED_REFERENCE_TYPE, IVirtualComponent.DISPLAYABLE_REFERENCES);
+		options.put(IVirtualComponent.REQUESTED_REFERENCE_TYPE, IVirtualComponent.DISPLAYABLE_REFERENCES_ALL);
 		IVirtualReference[] refs = rootComponent.getReferences(options);
 		IVirtualComponent comp;
 		originalReferences.addAll(Arrays.asList(refs));
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/StructureEdit.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/StructureEdit.java
index 4bcf5a8..2719613 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/StructureEdit.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/StructureEdit.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -193,6 +193,44 @@
 		return null;
 	}
 	
+	
+	/**
+	 * <p>
+	 * For {@see WorkbenchComponent}s that are contained within a project, the containing project
+	 * can be determined with the {@see WorkbenchComponent}'s fully-qualified module URI.
+	 * </p>
+	 * <p>
+	 * The following method will return the corresponding project for the supplied module URI,
+	 * if it can be determined.
+	 * </p>
+	 * <p>
+	 * The method may return an inaccessible project.	
+	 * </p>
+	 * <p>
+	 * <b>This method may return null. </b>
+	 * </p>
+	 * 
+	 * @param aModuleURI
+	 *            A valid, fully-qualified module URI
+	 * @param onlyAccessibleProjects
+	 *            True if the method should return only accessible projects. 
+	 * @return The project that contains the module referenced by the module URI
+	 * @throws UnresolveableURIException
+	 *             If the supplied module URI is invalid or unresolveable.
+	 */
+	public static IProject getContainingProject(URI aModuleURI, boolean onlyAccessibleProjects) throws UnresolveableURIException {
+		ModuleURIUtil.ensureValidFullyQualifiedModuleURI(aModuleURI);
+		String projectName = aModuleURI.segment(ModuleURIUtil.ModuleURI.PROJECT_NAME_INDX);
+		if (projectName == null || projectName.length() == 0)
+			throw new UnresolveableURIException(aModuleURI);
+		IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName);
+		if (!onlyAccessibleProjects)
+			return project;
+		if (project.isAccessible())
+			return project;
+		return null;
+	}
+	
 	/**
 	 * <p>
 	 * For {@see WorkbenchComponent}s that are contained within a project, the containing project
@@ -216,14 +254,7 @@
 	 *             If the supplied module URI is invalid or unresolveable.
 	 */
 	public static IProject getContainingProject(URI aModuleURI) throws UnresolveableURIException {
-		ModuleURIUtil.ensureValidFullyQualifiedModuleURI(aModuleURI);
-		String projectName = aModuleURI.segment(ModuleURIUtil.ModuleURI.PROJECT_NAME_INDX);
-		if (projectName == null || projectName.length() == 0)
-			throw new UnresolveableURIException(aModuleURI);
-		IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName);
-		if (project.isAccessible())
-			return project;
-		return null;
+		return getContainingProject(aModuleURI, true);
 	}
 
 	/**
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/RemoveReferenceOperation.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/RemoveReferenceOperation.java
index fcc3b1a..cd085b3 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/RemoveReferenceOperation.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/operation/RemoveReferenceOperation.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2006 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,7 +12,9 @@
 
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 import org.eclipse.core.commands.ExecutionException;
 import org.eclipse.core.resources.IProject;
@@ -61,7 +63,9 @@
 		IVirtualComponent sourceComp = (IVirtualComponent) model.getProperty(IAddReferenceDataModelProperties.SOURCE_COMPONENT);
 		if (sourceComp == null || !sourceComp.getProject().isAccessible() || sourceComp.isBinary()) return;
 		
-		IVirtualReference [] existingReferencesArray = sourceComp.getReferences();
+		Map<String, Object> options = new HashMap<String, Object>();
+		options.put(IVirtualComponent.REQUESTED_REFERENCE_TYPE, IVirtualComponent.DISPLAYABLE_REFERENCES_ALL);
+		IVirtualReference [] existingReferencesArray = sourceComp.getReferences(options);
 		if(existingReferencesArray == null || existingReferencesArray.length == 0){
 			return;
 		}
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/NonResolvableVirtualComponent.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/NonResolvableVirtualComponent.java
new file mode 100644
index 0000000..e8ae753
--- /dev/null
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/NonResolvableVirtualComponent.java
@@ -0,0 +1,57 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.wst.common.componentcore.internal.resources;
+
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.wst.common.componentcore.ModuleCoreNature;
+import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
+
+/**
+ * This class is a stub for virtual components whose underlying project is not accessible (e.g the project 
+ * is closed, or was deleted). This class can be returned by virtual component methods to get references 
+ * if the underlying project of the referenced component is not accessible. 
+ */
+
+public class NonResolvableVirtualComponent extends AbstractResourceListVirtualComponent {
+
+	public NonResolvableVirtualComponent(IProject p, IVirtualComponent referencingComponent) {
+		super(p, referencingComponent);
+	}
+	
+	@Override
+	protected IContainer[] getUnderlyingContainers() {
+		return new IContainer[]{};
+	}
+
+	@Override
+	protected IResource[] getLooseResources() {
+		return new IResource[]{};
+	}
+	
+	@Override
+	public boolean exists() { 
+		IProject project = getProject();
+		return (project.isAccessible() && ModuleCoreNature.isFlexibleProject(project));
+	}
+
+	@Override
+	protected String getFirstIdSegment() {
+		return null;
+	}
+	
+	@Override
+	public String getName(){
+		return getProject().getName();
+	}
+}
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/VirtualComponent.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/VirtualComponent.java
index 9ca7ac4..6a3ea0f 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/VirtualComponent.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/VirtualComponent.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2006 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -33,6 +33,7 @@
 import org.eclipse.emf.ecore.resource.Resource;
 import org.eclipse.wst.common.componentcore.ComponentCore;
 import org.eclipse.wst.common.componentcore.ModuleCoreNature;
+import org.eclipse.wst.common.componentcore.UnresolveableURIException;
 import org.eclipse.wst.common.componentcore.internal.ComponentcoreFactory;
 import org.eclipse.wst.common.componentcore.internal.ComponentcorePackage;
 import org.eclipse.wst.common.componentcore.internal.ModulecorePlugin;
@@ -41,6 +42,7 @@
 import org.eclipse.wst.common.componentcore.internal.StructureEdit;
 import org.eclipse.wst.common.componentcore.internal.WorkbenchComponent;
 import org.eclipse.wst.common.componentcore.internal.builder.IDependencyGraph;
+import org.eclipse.wst.common.componentcore.internal.impl.ModuleURIUtil;
 import org.eclipse.wst.common.componentcore.resolvers.IReferenceResolver;
 import org.eclipse.wst.common.componentcore.resolvers.ReferenceResolverUtil;
 import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
@@ -656,11 +658,20 @@
 						if (referencedComponent==null) 
 							continue;
 						IVirtualReference vReference = StructureEdit.createVirtualReference(this, referencedComponent);
-						if( vReference != null ){
+						if (vReference != null && vReference.getReferencedComponent() != null){
 							vReference.setArchiveName( referencedComponent.getArchiveName() );
+							references.add(vReference);
 						}
-						if (vReference != null && vReference.getReferencedComponent() != null)
-							references.add(vReference); 
+						else {
+							if (vReference != null && vReference.getReferencedComponent() == null){
+								// If none of the resolvers used by StructureEdit.createVirtualReference could find a reference with 
+								// a non-null referenced component, try to find it ourselves.  
+								vReference = getReferenceForNonResolvableComponent(this, referencedComponent);
+							}
+							if (vReference != null && vReference.getReferencedComponent() != null){
+								references.add(vReference);
+							}
+						}
 					}
 				}
 			}
@@ -671,7 +682,33 @@
 				core.dispose();
 		}		
 	}
+		
 	
+	/*
+	 * Similar to org.eclipse.wst.common.componentcore.resolvers.DefaultReferenceResolver#resolve(IVirtualComponent context, ReferencedComponent referencedComponent)
+	 */
+	private IVirtualReference getReferenceForNonResolvableComponent(VirtualComponent context, ReferencedComponent referencedComponent) {
+		IVirtualComponent targetComponent = null;
+		IProject targetProject = null;
+		URI uri = referencedComponent.getHandle();
+		if (uri == null)
+			return null;
+		boolean isClassPathURI = ModuleURIUtil.isClassPathURI(uri);
+		if( !isClassPathURI ){
+			try { 
+				targetProject = StructureEdit.getContainingProject(uri, false);
+			} catch(UnresolveableURIException uurie) {
+				return null;
+			} 
+
+			targetComponent = new NonResolvableVirtualComponent(targetProject, null);
+			VirtualReference vRef = new VirtualReference(context, targetComponent, referencedComponent.getRuntimePath(), referencedComponent.getDependencyType().getValue());
+			vRef.setArchiveName(referencedComponent.getArchiveName());
+			return vRef;
+		}
+		return null;
+	}
+
 	/**
 	 * This is an internal method and should not be called except by the 
 	 * {@link org.eclipse.wst.common.component.internal.builder.DependencyGraphImpl}
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/resources/IVirtualComponent.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/resources/IVirtualComponent.java
index 69a1b5a..0df6a67 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/resources/IVirtualComponent.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/resources/IVirtualComponent.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2006 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -43,7 +43,19 @@
 	public static final String REQUESTED_REFERENCE_TYPE = "REQUESTED_REFERENCE_TYPE";
 	public static final String HARD_REFERENCES = "HARD_REFERENCES";
 	public static final String NON_DERIVED_REFERENCES = "NON_DERIVED_REFERENCES";
+	
+	/**
+	 * Retrieve all component references displayable to the user, excluding references to components that might not
+	 * exist (i.e. calls to these component's {@link IVirtualComponent#exists()} return false)
+	 */
 	public static final String DISPLAYABLE_REFERENCES = "DISPLAYABLE_REFERENCES";
+	
+	/**
+	 * Retrieve all component references displayable to the user, including references to components that might not
+	 * exist (i.e. calls to these component's {@link IVirtualComponent#exists()} return false)
+	 */
+	public static final String DISPLAYABLE_REFERENCES_ALL = "DISPLAYABLE_REFERENCES_ALL";
+
 	public static final String FLATTENABLE_REFERENCES = "FLATTENABLE_REFERENCES";
 		
 	/**