Use Script class to create AutoSuggest ClientListener

The scripts are thereby shared within the session while the
ClientListeners are not.
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 0bbab38..257e754 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
@@ -18,7 +18,8 @@
 import org.eclipse.rap.addons.autosuggest.internal.ClientModelListener;
 import org.eclipse.rap.addons.autosuggest.internal.Model;
 import org.eclipse.rap.addons.autosuggest.internal.ModelListener;
-import org.eclipse.rap.addons.autosuggest.internal.resources.ResourceLoaderUtil;
+import org.eclipse.rap.addons.autosuggest.internal.resources.AutoSuggestScript;
+import org.eclipse.rap.addons.autosuggest.internal.resources.DataBindingScript;
 import org.eclipse.rap.addons.dropdown.DropDown;
 import org.eclipse.rap.clientscripting.ClientListener;
 import org.eclipse.rap.clientscripting.WidgetDataWhiteList;
@@ -32,8 +33,6 @@
 public class AutoSuggest {
 
   private static final String EVENT_TYPE_SELECTION = "suggestionSelected";
-  private final static String LISTENER_PREFIX
-    = "org/eclipse/rap/addons/autosuggest/internal/resources/";
   private static final String MODEL_ID_KEY
     = "org.eclipse.rap.addons.autosuggest#Model";
 
@@ -149,16 +148,15 @@
   }
 
   private void attachClientListeners() {
-    // TODO [tb] : share listener within session
-    clientListener = createClientListener( "DataBinding.js" );
+    clientListener = new ClientListener( DataBindingScript.getInstance() );
     text.addListener( SWT.Modify, clientListener );
     text.addListener( SWT.Verify, clientListener );
     dropDown.addListener( SWT.Show, clientListener );
     dropDown.addListener( SWT.Hide, clientListener );
     dropDown.addListener( SWT.Selection, clientListener );
     dropDown.addListener( SWT.DefaultSelection, clientListener );
-    model.addListener( "change", createModelListener( "DataBinding.js" ) );
-    ClientModelListener modelListener = createModelListener( "AutoSuggest.js" );
+    model.addListener( "change", new ClientModelListener( DataBindingScript.getInstance() ) );
+    ClientModelListener modelListener = new ClientModelListener( AutoSuggestScript.getInstance() );
     model.addListener( "change", modelListener );
     model.addListener( "accept", modelListener );
   }
@@ -171,12 +169,4 @@
     text.setData( MODEL_ID_KEY, model.getId() );
   }
 
-  private static ClientListener createClientListener( String name ) {
-    return new ClientListener( ResourceLoaderUtil.readTextContent( LISTENER_PREFIX + name ) );
-  }
-
-  private static ClientModelListener createModelListener( String name ) {
-    return new ClientModelListener( ResourceLoaderUtil.readTextContent( LISTENER_PREFIX + name ) );
-  }
-
 }
diff --git a/bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/internal/ClientModelListener.java b/bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/internal/ClientModelListener.java
index ad739bf..84529b7 100644
--- a/bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/internal/ClientModelListener.java
+++ b/bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/internal/ClientModelListener.java
@@ -10,6 +10,7 @@
  ******************************************************************************/
 package org.eclipse.rap.addons.autosuggest.internal;
 
+import org.eclipse.rap.clientscripting.Script;
 import org.eclipse.rap.clientscripting.internal.ClientFunction;
 import org.eclipse.rap.clientscripting.internal.ClientListenerBinding;
 import org.eclipse.rap.json.JsonObject;
@@ -22,6 +23,10 @@
     super( scriptCode );
   }
 
+  public ClientModelListener( Script script ) {
+    super( script );
+  }
+
   public void handleEvent( JsonObject argument ) { }
 
   void addTo( Model model, String eventType ) {
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/AutoSuggestScript.java
new file mode 100644
index 0000000..da77f34
--- /dev/null
+++ b/bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/internal/resources/AutoSuggestScript.java
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ * Copyright (c) 2013 EclipseSource 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:
+ *    EclipseSource - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.rap.addons.autosuggest.internal.resources;
+
+import org.eclipse.rap.clientscripting.Script;
+import org.eclipse.rap.rwt.SingletonUtil;
+
+
+public class AutoSuggestScript extends Script {
+
+  public static AutoSuggestScript getInstance() {
+    return SingletonUtil.getSessionInstance( AutoSuggestScript.class );
+  }
+
+  private AutoSuggestScript() {
+    super( getText() );
+  }
+
+  private static String getText() {
+    String path = "org/eclipse/rap/addons/autosuggest/internal/resources/AutoSuggest.js";
+    return ResourceLoaderUtil.readTextContent( path );
+  }
+
+}
diff --git a/bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/internal/resources/DataBindingScript.java b/bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/internal/resources/DataBindingScript.java
new file mode 100644
index 0000000..f92a20d
--- /dev/null
+++ b/bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/internal/resources/DataBindingScript.java
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ * Copyright (c) 2013 EclipseSource 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:
+ *    EclipseSource - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.rap.addons.autosuggest.internal.resources;
+
+import org.eclipse.rap.clientscripting.Script;
+import org.eclipse.rap.rwt.SingletonUtil;
+
+
+public class DataBindingScript extends Script {
+
+  public static DataBindingScript getInstance() {
+    return SingletonUtil.getSessionInstance( DataBindingScript.class );
+  }
+
+  private DataBindingScript() {
+    super( getText() );
+  }
+
+  private static String getText() {
+    String path = "org/eclipse/rap/addons/autosuggest/internal/resources/DataBinding.js";
+    return ResourceLoaderUtil.readTextContent( path );
+  }
+
+}