Create ClientListener( Script ) constructor
diff --git a/bundles/org.eclipse.rap.clientscripting.demo/src/org/eclipse/rap/clientscripting/demo/CustomBehaviors.java b/bundles/org.eclipse.rap.clientscripting.demo/src/org/eclipse/rap/clientscripting/demo/CustomBehaviors.java
index 477787b..2e339df 100644
--- a/bundles/org.eclipse.rap.clientscripting.demo/src/org/eclipse/rap/clientscripting/demo/CustomBehaviors.java
+++ b/bundles/org.eclipse.rap.clientscripting.demo/src/org/eclipse/rap/clientscripting/demo/CustomBehaviors.java
@@ -11,7 +11,9 @@
package org.eclipse.rap.clientscripting.demo;
import org.eclipse.rap.clientscripting.ClientListener;
+import org.eclipse.rap.clientscripting.Script;
import org.eclipse.rap.clientscripting.WidgetDataWhiteList;
+import org.eclipse.rap.rwt.RWT;
import org.eclipse.rap.rwt.lifecycle.WidgetUtil;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.MouseAdapter;
@@ -19,6 +21,7 @@
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Device;
import org.eclipse.swt.graphics.RGB;
+import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Canvas;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Text;
@@ -123,4 +126,23 @@
return new Color( device, rgb );
}
+ public static void addNumKeyBehavior( Text text, int number, Button button ) {
+ button.setData( "textWidget", WidgetUtil.getId( text ) );
+ button.setData( "numValue", Integer.valueOf( number ) );
+ ClientListener listener = new ClientListener( getScript( "NumKey.js" ) );
+ button.addListener( SWT.MouseDown, listener );
+ }
+
+ private static Script getScript( String fileName ) {
+ String key = CustomBehaviors.class.getCanonicalName() + fileName;
+ Script result = ( Script )RWT.getUISession().getAttribute( key );
+ if( result == null ) {
+ String scriptCode
+ = ResourceLoaderUtil.readTextContent( RESOURCES_PREFIX + fileName );
+ result = new Script( scriptCode );
+ RWT.getUISession().setAttribute( key, result );
+ }
+ return result;
+ }
+
}
diff --git a/bundles/org.eclipse.rap.clientscripting.demo/src/org/eclipse/rap/clientscripting/demo/Demo.java b/bundles/org.eclipse.rap.clientscripting.demo/src/org/eclipse/rap/clientscripting/demo/Demo.java
index 4596373..f7cf226 100644
--- a/bundles/org.eclipse.rap.clientscripting.demo/src/org/eclipse/rap/clientscripting/demo/Demo.java
+++ b/bundles/org.eclipse.rap.clientscripting.demo/src/org/eclipse/rap/clientscripting/demo/Demo.java
@@ -10,10 +10,8 @@
******************************************************************************/
package org.eclipse.rap.clientscripting.demo;
-import org.eclipse.rap.clientscripting.ClientListener;
import org.eclipse.rap.clientscripting.WidgetDataWhiteList;
import org.eclipse.rap.rwt.application.AbstractEntryPoint;
-import org.eclipse.rap.rwt.lifecycle.WidgetUtil;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.FocusAdapter;
import org.eclipse.swt.events.FocusEvent;
@@ -118,25 +116,21 @@
private void createNumKeys( Composite parent, Text text ) {
WidgetDataWhiteList.addKey( "textWidget" );
WidgetDataWhiteList.addKey( "numValue" );
- String scriptCode
- = ResourceLoaderUtil.readTextContent( "org/eclipse/rap/clientscripting/demo/NumKey.js" );
- ClientListener listener = new ClientListener( scriptCode );
int[] numbers = new int[]{ 7, 8, 9, 4, 5, 6, 1, 2, 3 };
for( int i = 0; i < numbers.length; i++ ) {
- createNumButton( parent, text, listener, numbers[ i ] );
+ createNumButton( parent, text, numbers[ i ] );
}
- createNumButton( parent, text, listener, -1 ).setText( "C" );
- createNumButton( parent, text, listener, 0 );
- createNumButton( parent, text, listener, -2 ).setText( "." );
+ createNumButton( parent, text, -1 ).setText( "C" );
+ createNumButton( parent, text, 0 );
+ createNumButton( parent, text, -2 ).setText( "." );
}
- private Button createNumButton( Composite parent, Text text, ClientListener listener, int number ) {
+
+ private Button createNumButton( Composite parent, Text text, int number ) {
Button button = new Button( parent, SWT.PUSH );
button.setText( String.valueOf( number ) );
- button.setData( "textWidget", WidgetUtil.getId( text ) );
- button.setData( "numValue", Integer.valueOf( number ) );
- button.addListener( SWT.MouseDown, listener );
button.setLayoutData( new GridData( 80, 70 ) );
+ CustomBehaviors.addNumKeyBehavior( text, number, button );
return button;
}
diff --git a/bundles/org.eclipse.rap.clientscripting/src/org/eclipse/rap/clientscripting/ClientListener.java b/bundles/org.eclipse.rap.clientscripting/src/org/eclipse/rap/clientscripting/ClientListener.java
index e34a59c..650419e 100644
--- a/bundles/org.eclipse.rap.clientscripting/src/org/eclipse/rap/clientscripting/ClientListener.java
+++ b/bundles/org.eclipse.rap.clientscripting/src/org/eclipse/rap/clientscripting/ClientListener.java
@@ -65,6 +65,10 @@
super( scriptCode );
}
+ public ClientListener( Script script ) {
+ super( script );
+ }
+
/**
* This method will NOT be called on a ClientListener.
*/
diff --git a/bundles/org.eclipse.rap.clientscripting/src/org/eclipse/rap/clientscripting/Script.java b/bundles/org.eclipse.rap.clientscripting/src/org/eclipse/rap/clientscripting/Script.java
index 26eecef..f4ba7dc 100644
--- a/bundles/org.eclipse.rap.clientscripting/src/org/eclipse/rap/clientscripting/Script.java
+++ b/bundles/org.eclipse.rap.clientscripting/src/org/eclipse/rap/clientscripting/Script.java
@@ -20,13 +20,13 @@
private static final String REMOTE_TYPE = "rwt.clientscripting.Script";
private RemoteObject remoteObject;
- public Script( String text ) {
- if( text == null ) {
- throw new NullPointerException( "Text must not be null" );
+ public Script( String scriptCode ) {
+ if( scriptCode == null ) {
+ throw new NullPointerException( "Parameter is null: scriptCode" );
}
Connection connection = RWT.getUISession().getConnection();
remoteObject = connection.createRemoteObject( REMOTE_TYPE );
- remoteObject.set( "text", text );
+ remoteObject.set( "text", scriptCode );
}
public String getId() {
diff --git a/bundles/org.eclipse.rap.clientscripting/src/org/eclipse/rap/clientscripting/internal/ClientFunction.java b/bundles/org.eclipse.rap.clientscripting/src/org/eclipse/rap/clientscripting/internal/ClientFunction.java
index 95e1d11..15708d5 100644
--- a/bundles/org.eclipse.rap.clientscripting/src/org/eclipse/rap/clientscripting/internal/ClientFunction.java
+++ b/bundles/org.eclipse.rap.clientscripting/src/org/eclipse/rap/clientscripting/internal/ClientFunction.java
@@ -25,15 +25,17 @@
private final RemoteObject remoteObject;
private final Collection<ClientListenerBinding> bindings;
- private final Script script;
public ClientFunction( String scriptCode ) {
- if( scriptCode == null ) {
- throw new NullPointerException( "Parameter is null: scriptCode" );
+ this( new Script( scriptCode ) );
+ }
+
+ public ClientFunction( Script script ) {
+ if( script == null ) {
+ throw new NullPointerException( "Parameter is null: script" );
}
ClientScriptingResources.ensure();
bindings = new ArrayList<ClientListenerBinding>();
- script = new Script( scriptCode );
remoteObject = RWT.getUISession().getConnection().createRemoteObject( REMOTE_TYPE );
remoteObject.set( "script", script.getId() );
}
diff --git a/tests/org.eclipse.rap.clientscripting.test/src/org/eclipse/rap/clientscripting/ClientListener_Test.java b/tests/org.eclipse.rap.clientscripting.test/src/org/eclipse/rap/clientscripting/ClientListener_Test.java
index 87415f1..128d187 100644
--- a/tests/org.eclipse.rap.clientscripting.test/src/org/eclipse/rap/clientscripting/ClientListener_Test.java
+++ b/tests/org.eclipse.rap.clientscripting.test/src/org/eclipse/rap/clientscripting/ClientListener_Test.java
@@ -200,7 +200,7 @@
}
private void createListener() {
- listener = spy( new ClientListener( "code" ) );
+ listener = spy( new ClientListener( new Script( "code" ) ) );
}
}
diff --git a/tests/org.eclipse.rap.clientscripting.test/src/org/eclipse/rap/clientscripting/internal/ClientFunction_Test.java b/tests/org.eclipse.rap.clientscripting.test/src/org/eclipse/rap/clientscripting/internal/ClientFunction_Test.java
index f54ca6e..581b763 100644
--- a/tests/org.eclipse.rap.clientscripting.test/src/org/eclipse/rap/clientscripting/internal/ClientFunction_Test.java
+++ b/tests/org.eclipse.rap.clientscripting.test/src/org/eclipse/rap/clientscripting/internal/ClientFunction_Test.java
@@ -23,6 +23,7 @@
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
+import org.eclipse.rap.clientscripting.Script;
import org.eclipse.rap.rwt.remote.Connection;
import org.eclipse.rap.rwt.remote.RemoteObject;
import org.eclipse.rap.rwt.testfixture.Fixture;
@@ -48,10 +49,11 @@
Fixture.tearDown();
}
+ @SuppressWarnings( "deprecation" )
@Test
- public void testCreation_failsWithNull() {
+ public void testCreation_failsWithStringNull() {
try {
- new ClientFunction( null );
+ new ClientFunction( ( String )null );
fail();
} catch( NullPointerException expected ) {
assertTrue( expected.getMessage().contains( "scriptCode" ) );
@@ -59,16 +61,26 @@
}
@Test
+ public void testCreation_failsWithScriptNull() {
+ try {
+ new ClientFunction( ( Script )null );
+ fail();
+ } catch( NullPointerException expected ) {
+ assertTrue( expected.getMessage().contains( "script" ) );
+ }
+ }
+
+ @Test
public void testCreation_createsRemoteObject() {
Connection connection = fakeConnection( mock( RemoteObject.class ), CLIENT_LISTENER_TYPE );
- new ClientFunction( "script code" );
+ new ClientFunction( new Script( "script code" ) );
verify( connection ).createRemoteObject( "rwt.clientscripting.Listener" );
}
@Test
- public void testCreation_initializesRemoteObject() {
+ public void testCreationWithString_initializesRemoteObject() {
RemoteObject listenerRemoteObject = mock( RemoteObject.class );
RemoteObject scriptRemoteObject = mock( RemoteObject.class );
Connection connection = mock( Connection.class );
@@ -78,11 +90,22 @@
when( scriptRemoteObject.getId() ).thenReturn( "fooId" );
Fixture.fakeConnection( connection );
- new ClientFunction( "script code" );
+ new ClientFunction( new Script( "script code" ) );
verify( listenerRemoteObject ).set( eq( "script" ), eq( "fooId" ) );
}
+ @Test
+ public void testCreationWithScript_initializesRemoteObject() {
+ RemoteObject listenerRemoteObject = mock( RemoteObject.class );
+ fakeConnection( listenerRemoteObject, CLIENT_LISTENER_TYPE );
+ Script script = mock( Script.class );
+ when( script.getId() ).thenReturn( "fooId" );
+
+ new ClientFunction( script );
+
+ verify( listenerRemoteObject ).set( eq( "script" ), eq( "fooId" ) );
+ }
@Test
public void testAddTo_createsBinding() {
@@ -140,7 +163,7 @@
}
private void createListener() {
- function = spy( new ClientFunction( "code" ) );
+ function = spy( new ClientFunction( new Script( "code" ) ) );
}
}