[328276] Attribute value proposals cannot filter qualified values
diff --git a/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/contentassist/CustomCompletionProposal.java b/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/contentassist/CustomCompletionProposal.java
index 3bf5bea..ba738a0 100644
--- a/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/contentassist/CustomCompletionProposal.java
+++ b/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/contentassist/CustomCompletionProposal.java
@@ -40,6 +40,8 @@
 
 	private String fDisplayString;
 
+	private String fAlternateMatch;
+
 	private Image fImage;
 
 	private int fRelevance = IRelevanceConstants.R_NONE;
@@ -71,22 +73,27 @@
 	 * 
 	 */
 	public CustomCompletionProposal(String replacementString, int replacementOffset, int replacementLength, int cursorPosition, Image image, String displayString, IContextInformation contextInformation, String additionalProposalInfo, int relevance, boolean updateReplacementLengthOnValidate) {
+		this(replacementString, replacementOffset, replacementLength, cursorPosition, image, displayString, null, contextInformation, additionalProposalInfo, relevance, updateReplacementLengthOnValidate);
+	}
+
+	public CustomCompletionProposal(String replacementString, int replacementOffset, int replacementLength, int cursorPosition, Image image, String displayString, IContextInformation contextInformation, String additionalProposalInfo, int relevance) {
+		this(replacementString, replacementOffset, replacementLength, cursorPosition, image, displayString, contextInformation, additionalProposalInfo, relevance, true);
+	}
+
+	public CustomCompletionProposal(String replacementString, int replacementOffset, int replacementLength, int cursorPosition, Image image, String displayString, String alternateMatch, IContextInformation contextInformation, String additionalProposalInfo, int relevance, boolean updateReplacementLengthOnValidate) {
 		fReplacementString = replacementString;
 		fReplacementOffset = replacementOffset;
 		fReplacementLength = replacementLength;
 		fCursorPosition = cursorPosition;
 		fImage = image;
 		fDisplayString = displayString;
+		fAlternateMatch = alternateMatch;
 		fContextInformation = contextInformation;
 		fAdditionalProposalInfo = additionalProposalInfo;
 		fRelevance = relevance;
 		fUpdateLengthOnValidate = updateReplacementLengthOnValidate;
 	}
 
-	public CustomCompletionProposal(String replacementString, int replacementOffset, int replacementLength, int cursorPosition, Image image, String displayString, IContextInformation contextInformation, String additionalProposalInfo, int relevance) {
-		this(replacementString, replacementOffset, replacementLength, cursorPosition, image, displayString, contextInformation, additionalProposalInfo, relevance, true);
-	}
-
 	public void apply(IDocument document) {
 		CompletionProposal proposal = new CompletionProposal(getReplacementString(), getReplacementOffset(), getReplacementLength(), getCursorPosition(), getImage(), getDisplayString(), getContextInformation(), getAdditionalProposalInfo());
 		proposal.apply(document);
@@ -278,9 +285,7 @@
 			int length = offset - fReplacementOffset;
 			String start = document.get(fReplacementOffset, length);
 
-			if(word != null) {
-				return word.substring(0, length).equalsIgnoreCase(start);
-			}
+			return (word != null && word.substring(0, length).equalsIgnoreCase(start)) || (fAlternateMatch != null && length <= fAlternateMatch.length() && fAlternateMatch.substring(0, length).equalsIgnoreCase(start));
 		}
 		catch (BadLocationException x) {
 		}
diff --git a/bundles/org.eclipse.wst.xml.ui/src/org/eclipse/wst/xml/ui/internal/contentassist/AbstractXMLModelQueryCompletionProposalComputer.java b/bundles/org.eclipse.wst.xml.ui/src/org/eclipse/wst/xml/ui/internal/contentassist/AbstractXMLModelQueryCompletionProposalComputer.java
index 55ab966..303104a 100644
--- a/bundles/org.eclipse.wst.xml.ui/src/org/eclipse/wst/xml/ui/internal/contentassist/AbstractXMLModelQueryCompletionProposalComputer.java
+++ b/bundles/org.eclipse.wst.xml.ui/src/org/eclipse/wst/xml/ui/internal/contentassist/AbstractXMLModelQueryCompletionProposalComputer.java
@@ -331,6 +331,7 @@
 				proposedInfo = getAdditionalInfo(elementDecl, attrDecl);
 				List possibleValues = getPossibleDataTypeValues(node, attrDecl);
 				String defaultValue = attrDecl.getAttrType().getImpliedValue();
+				String qualifiedDelimiter = (String) attrDecl.getProperty("qualified-delimiter"); //$NON-NLS-1$
 				if (possibleValues.size() > 0 || defaultValue != null) {
 					// ENUMERATED VALUES
 					String matchString = contentAssistRequest.getMatchString();
@@ -347,14 +348,22 @@
 					int rLength = contentAssistRequest.getReplacementLength();
 					for (Iterator j = possibleValues.iterator(); j.hasNext();) {
 						String possibleValue = (String) j.next();
+						String alternateMatch = null;
+						if (qualifiedDelimiter != null) {
+							int delimiter = possibleValue.lastIndexOf(qualifiedDelimiter);
+							if (delimiter >= 0 && delimiter < possibleValue.length() - 1) {
+								alternateMatch = possibleValue.substring(delimiter + 1);
+							}
+						}
 						if(!possibleValue.equals(defaultValue)) {
 							currentValid = currentValid || possibleValue.equals(currentValue);
 							if ((matchString.length() == 0) || possibleValue.startsWith(matchString)) {
 								String rString = "\"" + possibleValue + "\""; //$NON-NLS-1$ //$NON-NLS-2$
+								alternateMatch = "\"" + alternateMatch; //$NON-NLS-1$
 								CustomCompletionProposal proposal = new CustomCompletionProposal(
 										rString, rOffset, rLength, possibleValue.length() + 1,
 										XMLEditorPluginImageHelper.getInstance().getImage(XMLEditorPluginImages.IMG_OBJ_ENUM),
-										rString, null, proposedInfo, XMLRelevanceConstants.R_XML_ATTRIBUTE_VALUE);
+										rString, alternateMatch, null, proposedInfo, XMLRelevanceConstants.R_XML_ATTRIBUTE_VALUE, true);
 								contentAssistRequest.addProposal(proposal);
 							}
 						}