Allow AutoSuggest customization by extending AutoSuggestClientListener

This allows ClientScripting to discontinue the Script class
diff --git a/bundles/org.eclipse.rap.addons.autosuggest/META-INF/MANIFEST.MF b/bundles/org.eclipse.rap.addons.autosuggest/META-INF/MANIFEST.MF
index 385a380..c462895 100644
--- a/bundles/org.eclipse.rap.addons.autosuggest/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.rap.addons.autosuggest/META-INF/MANIFEST.MF
@@ -5,8 +5,7 @@
 Bundle-Version: 0.1.0.qualifier
 Bundle-Vendor: Eclipse.org - RAP Incubator
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
-Export-Package: org.eclipse.rap.addons.autosuggest;version="0.1.0",
- org.eclipse.rap.addons.autosuggest.internal;version="0.1.0";x-internal:=true
+Export-Package: org.eclipse.rap.addons.autosuggest;version="0.1.0"
 Require-Bundle: org.eclipse.rap.rwt;bundle-version="2.1.0"
 Import-Package: org.eclipse.rap.addons.dropdown;version="0.1.0",
  org.eclipse.rap.clientscripting;version="0.2.0",
diff --git a/bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/AutoSuggest.java b/bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/AutoSuggest.java
index 3b446c6..60fb407 100644
--- a/bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/AutoSuggest.java
+++ b/bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/AutoSuggest.java
@@ -15,13 +15,11 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import org.eclipse.rap.addons.autosuggest.internal.AutoSuggestClientListener;
-import org.eclipse.rap.addons.autosuggest.internal.resources.AutoSuggestScript;
-import org.eclipse.rap.addons.autosuggest.internal.resources.EventDelegatorScript;
+import org.eclipse.rap.addons.autosuggest.internal.resources.AutoSuggestListener;
+import org.eclipse.rap.addons.autosuggest.internal.resources.EventDelegatorListener;
 import org.eclipse.rap.addons.autosuggest.internal.resources.ModelResources;
 import org.eclipse.rap.addons.dropdown.DropDown;
 import org.eclipse.rap.clientscripting.ClientListener;
-import org.eclipse.rap.clientscripting.Script;
 import org.eclipse.rap.clientscripting.WidgetDataWhiteList;
 import org.eclipse.rap.json.JsonObject;
 import org.eclipse.rap.rwt.RWT;
@@ -155,33 +153,31 @@
 
   private void attachClientListeners() {
     int[] dropDownEventTypes = new int[] { SWT.Show, SWT.Hide, SWT.Selection, SWT.DefaultSelection };
-    attachClientListenerToDropDown( EventDelegatorScript.getInstance(), dropDownEventTypes );
-    attachClientListenerToText( EventDelegatorScript.getInstance(), SWT.Modify, SWT.Verify );
-    attachClientListenerToModel( getAutoSuggestScript(), "change", "accept" );
+    attachClientListenerToDropDown( EventDelegatorListener.getInstance(), dropDownEventTypes );
+    attachClientListenerToText( EventDelegatorListener.getInstance(), SWT.Modify, SWT.Verify );
+    attachClientListenerToModel( getAutoSuggestListener(), "change", "accept" );
   }
 
-  protected Script getAutoSuggestScript() {
-    return AutoSuggestScript.getInstance();
+  protected AutoSuggestClientListener getAutoSuggestListener() {
+    return AutoSuggestListener.getInstance();
   }
 
-  private void attachClientListenerToText( Script script, int... types ) {
+  private void attachClientListenerToText( ClientListener listener, int... types ) {
     textClientListenerTypes = types;
-    textClientListener = new ClientListener( script );
+    textClientListener = listener;
     for( int type : types ) {
-      text.addListener( type, textClientListener );
+      text.addListener( type, listener );
     }
   }
 
-  private void attachClientListenerToDropDown( Script script, int... types ) {
-    ClientListener clientListener = new ClientListener( script );
+  private void attachClientListenerToDropDown( ClientListener listener, int... types ) {
     for( int type : types ) {
-      dropDown.addListener( type, clientListener );
+      dropDown.addListener( type, listener );
     }
   }
 
-  private void attachClientListenerToModel( Script script, String... types ) {
-    AutoSuggestClientListener clientListener = new AutoSuggestClientListener( script );
-    String listenerId = clientListener.getId();
+  private void attachClientListenerToModel( AutoSuggestClientListener listener, String... types ) {
+    String listenerId = listener.getId();
     for( String type : types ) {
       remoteObject.call( "addListener",
                          new JsonObject().add( "listener", listenerId ).add( "type", type ) );
diff --git a/bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/internal/AutoSuggestClientListener.java b/bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/AutoSuggestClientListener.java
similarity index 75%
rename from bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/internal/AutoSuggestClientListener.java
rename to bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/AutoSuggestClientListener.java
index 6675748..b9a2f29 100644
--- a/bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/internal/AutoSuggestClientListener.java
+++ b/bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/AutoSuggestClientListener.java
@@ -8,23 +8,18 @@
  * Contributors:
  *    EclipseSource - initial API and implementation
  ******************************************************************************/
-package org.eclipse.rap.addons.autosuggest.internal;
+package org.eclipse.rap.addons.autosuggest;
 
-import org.eclipse.rap.clientscripting.Script;
 import org.eclipse.rap.clientscripting.internal.ClientFunction;
 
 
 @SuppressWarnings( "restriction" )
-public final class AutoSuggestClientListener extends ClientFunction {
+public class AutoSuggestClientListener extends ClientFunction {
 
   public AutoSuggestClientListener( String scriptCode ) {
     super( scriptCode );
   }
 
-  public AutoSuggestClientListener( Script script ) {
-    super( script );
-  }
-
   public String getId() {
     return getRemoteId();
   }
diff --git a/bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/internal/resources/AutoSuggestScript.java b/bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/internal/resources/AutoSuggestListener.java
similarity index 74%
rename from bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/internal/resources/AutoSuggestScript.java
rename to bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/internal/resources/AutoSuggestListener.java
index da77f34..4ae4f27 100644
--- a/bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/internal/resources/AutoSuggestScript.java
+++ b/bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/internal/resources/AutoSuggestListener.java
@@ -10,17 +10,17 @@
  ******************************************************************************/
 package org.eclipse.rap.addons.autosuggest.internal.resources;
 
-import org.eclipse.rap.clientscripting.Script;
+import org.eclipse.rap.addons.autosuggest.AutoSuggestClientListener;
 import org.eclipse.rap.rwt.SingletonUtil;
 
 
-public class AutoSuggestScript extends Script {
+public class AutoSuggestListener extends AutoSuggestClientListener {
 
-  public static AutoSuggestScript getInstance() {
-    return SingletonUtil.getSessionInstance( AutoSuggestScript.class );
+  public static AutoSuggestListener getInstance() {
+    return SingletonUtil.getSessionInstance( AutoSuggestListener.class );
   }
 
-  private AutoSuggestScript() {
+  private AutoSuggestListener() {
     super( getText() );
   }
 
diff --git a/bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/internal/resources/EventDelegatorScript.java b/bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/internal/resources/EventDelegatorListener.java
similarity index 63%
rename from bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/internal/resources/EventDelegatorScript.java
rename to bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/internal/resources/EventDelegatorListener.java
index 7267335..5a3ac77 100644
--- a/bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/internal/resources/EventDelegatorScript.java
+++ b/bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/internal/resources/EventDelegatorListener.java
@@ -10,18 +10,21 @@
  ******************************************************************************/
 package org.eclipse.rap.addons.autosuggest.internal.resources;
 
-import org.eclipse.rap.clientscripting.Script;
+import org.eclipse.rap.clientscripting.ClientListener;
 import org.eclipse.rap.rwt.SingletonUtil;
 
 
-public class EventDelegatorScript extends Script {
+public class EventDelegatorListener  {
 
-  public static EventDelegatorScript getInstance() {
-    return SingletonUtil.getSessionInstance( EventDelegatorScript.class );
+  private final ClientListener eventDeleatorListener;
+
+  // Can not extend ClientListener since Widget#addListner would not detect it
+  public static ClientListener getInstance() {
+    return SingletonUtil.getSessionInstance( EventDelegatorListener.class ).eventDeleatorListener;
   }
 
-  private EventDelegatorScript() {
-    super( getText() );
+  private EventDelegatorListener() {
+    eventDeleatorListener = new ClientListener( getText() );
   }
 
   private static String getText() {
diff --git a/examples/org.eclipse.rap.addons.dropdown.demo/DropDown Demo 9494_dropdown.launch b/examples/org.eclipse.rap.addons.dropdown.demo/DropDown Demo 9494_dropdown.launch
index 54fd9fe..c0c2877 100644
--- a/examples/org.eclipse.rap.addons.dropdown.demo/DropDown Demo 9494_dropdown.launch
+++ b/examples/org.eclipse.rap.addons.dropdown.demo/DropDown Demo 9494_dropdown.launch
@@ -39,10 +39,10 @@
 <booleanAttribute key="org.eclipse.rap.launch.useManualPort" value="true"/>

 <booleanAttribute key="org.eclipse.rap.launch.useSessionTimeout" value="false"/>

 <stringAttribute key="pde.version" value="3.3"/>

-<booleanAttribute key="show_selected_only" value="true"/>

+<booleanAttribute key="show_selected_only" value="false"/>

 <stringAttribute key="target_bundles" value="com.ibm.icu.base@default:default,javax.servlet@default:default,javax.xml@default:default,org.apache.felix.gogo.command@default:default,org.apache.felix.gogo.runtime@default:default,org.apache.felix.gogo.shell@default:default,org.eclipse.equinox.console@default:default,org.eclipse.equinox.ds@1:true,org.eclipse.equinox.http.jetty@default:default,org.eclipse.equinox.http.servlet@default:default,org.eclipse.equinox.util@default:default,org.eclipse.jetty.continuation@default:default,org.eclipse.jetty.http@default:default,org.eclipse.jetty.io@default:default,org.eclipse.jetty.security@default:default,org.eclipse.jetty.server@default:default,org.eclipse.jetty.servlet@default:default,org.eclipse.jetty.util@default:default,org.eclipse.osgi.services@default:default,org.eclipse.osgi@-1:true,org.eclipse.rap.rwt.osgi@default:default,org.eclipse.rap.rwt@default:default"/>

 <booleanAttribute key="tracing" value="false"/>

 <booleanAttribute key="useCustomFeatures" value="false"/>

 <booleanAttribute key="useDefaultConfigArea" value="true"/>

-<stringAttribute key="workspace_bundles" value="org.eclipse.rap.addons.dropdown.demo@default:default,org.eclipse.rap.addons.dropdown@default:default,org.eclipse.rap.clientscripting@default:default"/>

+<stringAttribute key="workspace_bundles" value="org.eclipse.rap.addons.autosuggest@default:default,org.eclipse.rap.addons.dropdown.demo@default:default,org.eclipse.rap.addons.dropdown@default:default,org.eclipse.rap.clientscripting@default:default"/>

 </launchConfiguration>

diff --git a/examples/org.eclipse.rap.addons.dropdown.demo/META-INF/MANIFEST.MF b/examples/org.eclipse.rap.addons.dropdown.demo/META-INF/MANIFEST.MF
index dea5eff..a3062b6 100644
--- a/examples/org.eclipse.rap.addons.dropdown.demo/META-INF/MANIFEST.MF
+++ b/examples/org.eclipse.rap.addons.dropdown.demo/META-INF/MANIFEST.MF
@@ -9,6 +9,5 @@
 Service-Component: OSGI-INF/*.xml
 Bundle-Vendor: Eclipse.org - RAP Incubator
 Import-Package: org.eclipse.rap.addons.autosuggest;version="0.1.0",
- org.eclipse.rap.addons.autosuggest.internal;version="0.1.0",
  org.eclipse.rap.addons.dropdown;version="0.1.0"
 Export-Package: org.eclipse.rap.addons.dropdown.demo;version="0.1.0"
diff --git a/examples/org.eclipse.rap.addons.dropdown.demo/src/org/eclipse/rap/addons/dropdown/demo/AutoSuggestDemo.java b/examples/org.eclipse.rap.addons.dropdown.demo/src/org/eclipse/rap/addons/dropdown/demo/AutoSuggestDemo.java
index e92674c..0e49ce6 100644
--- a/examples/org.eclipse.rap.addons.dropdown.demo/src/org/eclipse/rap/addons/dropdown/demo/AutoSuggestDemo.java
+++ b/examples/org.eclipse.rap.addons.dropdown.demo/src/org/eclipse/rap/addons/dropdown/demo/AutoSuggestDemo.java
@@ -13,12 +13,12 @@
 import java.util.Arrays;
 
 import org.eclipse.rap.addons.autosuggest.AutoSuggest;
+import org.eclipse.rap.addons.autosuggest.AutoSuggestClientListener;
 import org.eclipse.rap.addons.autosuggest.DataProvider;
 import org.eclipse.rap.addons.autosuggest.DataSource;
 import org.eclipse.rap.addons.autosuggest.SuggestionSelectedListener;
 import org.eclipse.rap.addons.dropdown.demo.data.KFZ;
-import org.eclipse.rap.addons.dropdown.demo.scripts.CustomAutoSuggestScript;
-import org.eclipse.rap.clientscripting.Script;
+import org.eclipse.rap.addons.dropdown.demo.scripts.CustomAutoSuggestClientListener;
 import org.eclipse.rap.rwt.RWT;
 import org.eclipse.rap.rwt.application.AbstractEntryPoint;
 import org.eclipse.rap.rwt.internal.client.WidgetDataWhiteList;
@@ -48,8 +48,8 @@
     }
 
     @Override
-    protected Script getAutoSuggestScript() {
-      return CustomAutoSuggestScript.getInstance();
+    protected AutoSuggestClientListener getAutoSuggestListener() {
+      return CustomAutoSuggestClientListener.getInstance();
     }
 
   }
diff --git a/examples/org.eclipse.rap.addons.dropdown.demo/src/org/eclipse/rap/addons/dropdown/demo/scripts/CustomAutoSuggestScript.java b/examples/org.eclipse.rap.addons.dropdown.demo/src/org/eclipse/rap/addons/dropdown/demo/scripts/CustomAutoSuggestClientListener.java
similarity index 70%
rename from examples/org.eclipse.rap.addons.dropdown.demo/src/org/eclipse/rap/addons/dropdown/demo/scripts/CustomAutoSuggestScript.java
rename to examples/org.eclipse.rap.addons.dropdown.demo/src/org/eclipse/rap/addons/dropdown/demo/scripts/CustomAutoSuggestClientListener.java
index cc028d4..1d24309 100644
--- a/examples/org.eclipse.rap.addons.dropdown.demo/src/org/eclipse/rap/addons/dropdown/demo/scripts/CustomAutoSuggestScript.java
+++ b/examples/org.eclipse.rap.addons.dropdown.demo/src/org/eclipse/rap/addons/dropdown/demo/scripts/CustomAutoSuggestClientListener.java
@@ -10,17 +10,17 @@
  ******************************************************************************/
 package org.eclipse.rap.addons.dropdown.demo.scripts;
 
-import org.eclipse.rap.clientscripting.Script;
+import org.eclipse.rap.addons.autosuggest.AutoSuggestClientListener;
 import org.eclipse.rap.rwt.SingletonUtil;
 
 
-public class CustomAutoSuggestScript extends Script {
+public class CustomAutoSuggestClientListener extends AutoSuggestClientListener {
 
-  public static CustomAutoSuggestScript getInstance() {
-    return SingletonUtil.getSessionInstance( CustomAutoSuggestScript.class );
+  public static CustomAutoSuggestClientListener getInstance() {
+    return SingletonUtil.getSessionInstance( CustomAutoSuggestClientListener.class );
   }
 
-  private CustomAutoSuggestScript() {
+  private CustomAutoSuggestClientListener() {
     super( getText() );
   }