[338281] Provide an error message when entering an invalid auto activation delay
diff --git a/bundles/org.eclipse.wst.html.ui/src/org/eclipse/wst/html/ui/internal/preferences/ui/HTMLContentAssistPreferencePage.java b/bundles/org.eclipse.wst.html.ui/src/org/eclipse/wst/html/ui/internal/preferences/ui/HTMLContentAssistPreferencePage.java
index efe3540..2477721 100644
--- a/bundles/org.eclipse.wst.html.ui/src/org/eclipse/wst/html/ui/internal/preferences/ui/HTMLContentAssistPreferencePage.java
+++ b/bundles/org.eclipse.wst.html.ui/src/org/eclipse/wst/html/ui/internal/preferences/ui/HTMLContentAssistPreferencePage.java
@@ -10,12 +10,10 @@
  *******************************************************************************/
 package org.eclipse.wst.html.ui.internal.preferences.ui;
 
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
 import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.swt.events.VerifyEvent;
-import org.eclipse.swt.events.VerifyListener;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.widgets.Button;
 import org.eclipse.swt.widgets.Composite;
@@ -32,6 +30,7 @@
 import org.eclipse.wst.sse.ui.internal.preferences.ui.AbstractPreferencePage;
 import org.eclipse.wst.sse.ui.preferences.CodeAssistCyclingConfigurationBlock;
 import org.eclipse.wst.sse.ui.preferences.ICompletionProposalCategoriesConfigurationWriter;
+import org.eclipse.wst.xml.ui.internal.XMLUIMessages;
 
 /**
  * <p>Defines the preference page for allowing the user to change the content
@@ -48,7 +47,6 @@
 	private Text fAutoProposeDelay;
 	private Label fAutoProposeLabel;
 	private Text fAutoProposeText;
-	private final Pattern delayPattern = Pattern.compile("\\d{0,4}"); //$NON-NLS-1$
 	
 	/** configuration block for changing preference having to do with the content assist categories */
 	private CodeAssistCyclingConfigurationBlock fConfigurationBlock;
@@ -138,42 +136,43 @@
 
 		fAutoProposeDelayLabel = createLabel(contentAssistGroup, HTMLUIMessages.Auto_Activation_Delay);
 		fAutoProposeDelay = createTextField(contentAssistGroup);
-		fAutoProposeDelay.addVerifyListener(new VerifyListener() {
+		fAutoProposeDelay.setTextLimit(4);
+		fAutoProposeDelay.addModifyListener(new ModifyListener() {
 			
-			public void verifyText(VerifyEvent e) {
-					verifyDelay(e);
-				}
+			public void modifyText(ModifyEvent e) {
+				verifyDelay();
+			}
 		});
 		
 		fAutoProposeLabel = createLabel(contentAssistGroup, HTMLUIMessages.Prompt_when_these_characte_UI_);
 		fAutoProposeText = createTextField(contentAssistGroup);
 	}
 	
-	private void verifyDelay(VerifyEvent e) {
-		StringBuffer textToVerify = new StringBuffer();
-		textToVerify.append(fAutoProposeDelay.getText());
-		if (e.start == e.end) {
-		  textToVerify.insert(e.start, e.text);
-		} else {
-		  textToVerify.replace(e.start, e.end, e.text);	
+	private void verifyDelay() {
+		final String text = fAutoProposeDelay.getText();
+		boolean valid = true;
+		try {
+			final int delay = Integer.parseInt(text);
+			if (delay < 0) {
+				valid = false;
+			}
 		}
-		
-		Matcher m = delayPattern.matcher(textToVerify.toString());
-		if (m.matches()) {
-			e.doit = true;
-			if (textToVerify.toString().trim().length() == 0) {
-				setValid(false);
-			}
-			else {
-				setValid(true);
-			}
+		catch (NumberFormatException e) {
+			valid = false;
+		}
+		if (!valid) {
+			if (text.trim().length() > 0)
+				setErrorMessage(NLS.bind(XMLUIMessages.Not_an_integer, text));
+			else
+				setErrorMessage(XMLUIMessages.Missing_integer);
+			setValid(false);
 		}
 		else {
-			e.doit = false;
+			setErrorMessage(null);
+			setValid(true);
 		}
-		
 	}
-	
+
 	/**
 	 * <p>Create the contents for the content assist cycling preference group</p>
 	 * @param parent {@link Composite} parent of the group
diff --git a/bundles/org.eclipse.wst.xml.ui/src/org/eclipse/wst/xml/ui/internal/XMLUIMessages.java b/bundles/org.eclipse.wst.xml.ui/src/org/eclipse/wst/xml/ui/internal/XMLUIMessages.java
index 993b902..8c49190 100644
--- a/bundles/org.eclipse.wst.xml.ui/src/org/eclipse/wst/xml/ui/internal/XMLUIMessages.java
+++ b/bundles/org.eclipse.wst.xml.ui/src/org/eclipse/wst/xml/ui/internal/XMLUIMessages.java
@@ -227,6 +227,8 @@
 	public static String XMLContentAssistPreferencePage_Cycling_UI_;
 	public static String Automatically_make_suggest_UI_;
 	public static String Auto_Activation_Delay;
+	public static String Not_an_integer;
+	public static String Missing_integer;
 	public static String Prompt_when_these_characte_UI_;
 	public static String Formatting_UI_;
 	public static String Line_width__UI_;
diff --git a/bundles/org.eclipse.wst.xml.ui/src/org/eclipse/wst/xml/ui/internal/XMLUIPluginResources.properties b/bundles/org.eclipse.wst.xml.ui/src/org/eclipse/wst/xml/ui/internal/XMLUIPluginResources.properties
index ade148e..bf0a60c 100644
--- a/bundles/org.eclipse.wst.xml.ui/src/org/eclipse/wst/xml/ui/internal/XMLUIPluginResources.properties
+++ b/bundles/org.eclipse.wst.xml.ui/src/org/eclipse/wst/xml/ui/internal/XMLUIPluginResources.properties
@@ -258,6 +258,8 @@
 XMLContentAssistPreferencePage_Cycling_UI_=Cycling
 Automatically_make_suggest_UI_=Automatically ma&ke suggestions
 Auto_Activation_Delay=Auto activation dela&y (ms):
+Not_an_integer=''{0}'' is not a positive integer.
+Missing_integer=A positive integer must be specified.
 Prompt_when_these_characte_UI_=P&rompt when these characters are inserted:
 Formatting_UI_=Formatting
 Line_width__UI_=Line &width:
diff --git a/bundles/org.eclipse.wst.xml.ui/src/org/eclipse/wst/xml/ui/internal/preferences/XMLContentAssistPreferencePage.java b/bundles/org.eclipse.wst.xml.ui/src/org/eclipse/wst/xml/ui/internal/preferences/XMLContentAssistPreferencePage.java
index 2b7e3e4..b22f44e 100644
--- a/bundles/org.eclipse.wst.xml.ui/src/org/eclipse/wst/xml/ui/internal/preferences/XMLContentAssistPreferencePage.java
+++ b/bundles/org.eclipse.wst.xml.ui/src/org/eclipse/wst/xml/ui/internal/preferences/XMLContentAssistPreferencePage.java
@@ -11,13 +11,12 @@
 package org.eclipse.wst.xml.ui.internal.preferences;
 
 import java.util.Vector;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
 
 import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.osgi.util.NLS;
 import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.VerifyEvent;
-import org.eclipse.swt.events.VerifyListener;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.widgets.Button;
 import org.eclipse.swt.widgets.Combo;
@@ -52,7 +51,6 @@
 	private Text fAutoProposeText;
 	private Combo fSuggestionStrategyCombo;
 	private Vector fSuggestionStrategies = null;
-	private final Pattern delayPattern = Pattern.compile("\\d{0,4}"); //$NON-NLS-1$
 	
 	/** configuration block for changing preference having to do with the content assist categories */
 	private CodeAssistCyclingConfigurationBlock fConfigurationBlock;
@@ -142,11 +140,12 @@
 
 		fAutoProposeDelayLabel = createLabel(contentAssistGroup, XMLUIMessages.Auto_Activation_Delay);
 		fAutoProposeDelay = createTextField(contentAssistGroup);
-		fAutoProposeDelay.addVerifyListener(new VerifyListener() {
+		fAutoProposeDelay.setTextLimit(4);
+		fAutoProposeDelay.addModifyListener(new ModifyListener() {
 			
-			public void verifyText(VerifyEvent e) {
-				verifyDelay(e);
-				}
+			public void modifyText(ModifyEvent e) {
+				verifyDelay();
+			}
 		});
 		
 
@@ -163,28 +162,29 @@
 		fSuggestionStrategies.add(XMLUIPreferenceNames.SUGGESTION_STRATEGY_VALUE_STRICT);
 	}
 	
-	private void verifyDelay(VerifyEvent e) {
-		StringBuffer textToVerify = new StringBuffer();
-		textToVerify.append(fAutoProposeDelay.getText());
-		if (e.start == e.end) {
-		  textToVerify.insert(e.start, e.text);
-		} else {
-		  textToVerify.replace(e.start, e.end, e.text);	
+	private void verifyDelay() {
+		final String text = fAutoProposeDelay.getText();
+		boolean valid = true;
+		try {
+			final int delay = Integer.parseInt(text);
+			if (delay < 0) {
+				valid = false;
+			}
 		}
-		Matcher m = delayPattern.matcher(textToVerify.toString());
-		if (m.matches()) {
-			e.doit = true;
-			if (textToVerify.toString().trim().length() == 0) {
-				setValid(false);
-			}
-			else {
-				setValid(true);
-			}
+		catch (NumberFormatException e) {
+			valid = false;
+		}
+		if (!valid) {
+			if (text.trim().length() > 0)
+				setErrorMessage(NLS.bind(XMLUIMessages.Not_an_integer, text));
+			else
+				setErrorMessage(XMLUIMessages.Missing_integer);
+			setValid(false);
 		}
 		else {
-			e.doit = false;
+			setErrorMessage(null);
+			setValid(true);
 		}
-		
 	}
 	
 	/**