[354768] [UI] Deployment assembly page should not allow folders to be added if they have already been added
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 3d3c3c1..11d72c7 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
@@ -43,6 +43,7 @@
 	public static String VariableReferenceDescription;
 	public static String WizardError;
 	public static String ProjectConversionError;
+	public static String ExistingFolderError;
 	public static String Revert;
 	
 	static {
diff --git a/plugins/org.eclipse.wst.common.modulecore.ui/src/org/eclipse/wst/common/componentcore/ui/internal/propertypage/FolderMappingWizardFragment.java b/plugins/org.eclipse.wst.common.modulecore.ui/src/org/eclipse/wst/common/componentcore/ui/internal/propertypage/FolderMappingWizardFragment.java
index aedeb13..e9b1306 100644
--- a/plugins/org.eclipse.wst.common.modulecore.ui/src/org/eclipse/wst/common/componentcore/ui/internal/propertypage/FolderMappingWizardFragment.java
+++ b/plugins/org.eclipse.wst.common.modulecore.ui/src/org/eclipse/wst/common/componentcore/ui/internal/propertypage/FolderMappingWizardFragment.java
@@ -12,6 +12,9 @@
 
 package org.eclipse.wst.common.componentcore.ui.internal.propertypage;
 
+
+import java.util.ArrayList;
+
 import org.eclipse.core.resources.IContainer;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResource;
@@ -19,6 +22,7 @@
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.Path;
+import org.eclipse.jface.dialogs.IMessageProvider;
 import org.eclipse.jface.viewers.ISelectionChangedListener;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.ITreeContentProvider;
@@ -27,6 +31,7 @@
 import org.eclipse.jface.viewers.TreeViewer;
 import org.eclipse.jface.viewers.Viewer;
 import org.eclipse.jface.viewers.ViewerFilter;
+import org.eclipse.osgi.util.NLS;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.layout.GridData;
@@ -88,15 +93,38 @@
 				Object first = sel.getFirstElement();
 				if( first instanceof IContainer) {
 					selected = (IContainer)first;
-					if(!isComplete) {
-						isComplete = true;
-						handle.update();
-					}
+					String errorMessage=validateFolder();
+					if (errorMessage !=  null)
+						handle.setMessage(errorMessage,IMessageProvider.ERROR);
+					else
+						handle.setMessage(Messages.AddFolderMappings, IMessageProvider.NONE);
+					handle.update();
 				}
 			}
 		};
 	}
 	
+	protected String validateFolder() {
+		IContainer c = getSelected();
+		IPath p = c.getProjectRelativePath().makeAbsolute();					
+		ArrayList<Object> currentRefs = (ArrayList<Object>)getTaskModel().getObject(IReferenceWizardConstants.ALL_DIRECTIVES);
+		if (!currentRefs.isEmpty())
+			for (int j = 0; j < currentRefs.size(); j++) 
+			{
+				Object ref = currentRefs.get(j);
+				if (ref instanceof ComponentResourceProxy)
+				{					
+					ComponentResourceProxy folder = (ComponentResourceProxy) ref;
+					if (p.equals(folder.source)){						
+						isComplete=false;				
+						return NLS.bind(Messages.ExistingFolderError, folder.source); 						
+					}
+				}							
+			}	
+		isComplete = true;
+		return null;
+	}
+	
 	public IContainer getSelected() {
 		return selected;
 	}
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 5bac0b5..3e5bfc2 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
@@ -25,4 +25,5 @@
 VariableReferenceDescription="Here you can reference a variable which maps to a single jar.\nThis is not a suggested use-case, but is here for backwards compatability.
 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