Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRalf Sternberg2013-07-22 15:20:13 +0000
committerRalf Sternberg2013-07-22 15:24:01 +0000
commitc1ea615422e37d391ad94ac62512c1a7b99ca976 (patch)
tree6b2ba329e65cd16fba8806752845c554c9209eeb
parent35193c48bd3cc6cb856fd306d5250c3ce15bb7be (diff)
downloadorg.eclipse.rap.incubator.dropdown-c1ea615422e37d391ad94ac62512c1a7b99ca976.tar.gz
org.eclipse.rap.incubator.dropdown-c1ea615422e37d391ad94ac62512c1a7b99ca976.tar.xz
org.eclipse.rap.incubator.dropdown-c1ea615422e37d391ad94ac62512c1a7b99ca976.zip
Introduce DataProvider interface and basic implementation
ArrayDataProvider works on an array of strings, replaces SimpleDataSource.
-rw-r--r--bundles/org.eclipse.rap.addons.dropdown/src/org/eclipse/rap/addons/dropdown/ArrayDataProvider.java (renamed from bundles/org.eclipse.rap.addons.dropdown/src/org/eclipse/rap/addons/dropdown/SimpleDataSource.java)23
-rw-r--r--bundles/org.eclipse.rap.addons.dropdown/src/org/eclipse/rap/addons/dropdown/DataProvider.java20
-rw-r--r--bundles/org.eclipse.rap.addons.dropdown/src/org/eclipse/rap/addons/dropdown/DataSource.java18
-rw-r--r--examples/org.eclipse.rap.addons.dropdown.demo/src/org/eclipse/rap/addons/dropdown/demo/AutoSuggestSnippet.java12
-rw-r--r--tests/org.eclipse.rap.addons.dropdown.test/src/org/eclipse/rap/addons/dropdown/ArrayDataProvider_Test.java58
-rw-r--r--tests/org.eclipse.rap.addons.dropdown.test/src/org/eclipse/rap/addons/dropdown/AutoSuggest_Test.java2
-rw-r--r--tests/org.eclipse.rap.addons.dropdown.test/src/org/eclipse/rap/addons/dropdown/DataSource_Test.java10
-rw-r--r--tests/org.eclipse.rap.addons.dropdown.test/src/org/eclipse/rap/addons/dropdown/SimpleDataSource_Test.java67
8 files changed, 116 insertions, 94 deletions
diff --git a/bundles/org.eclipse.rap.addons.dropdown/src/org/eclipse/rap/addons/dropdown/SimpleDataSource.java b/bundles/org.eclipse.rap.addons.dropdown/src/org/eclipse/rap/addons/dropdown/ArrayDataProvider.java
index 8bc09b6..715d679 100644
--- a/bundles/org.eclipse.rap.addons.dropdown/src/org/eclipse/rap/addons/dropdown/SimpleDataSource.java
+++ b/bundles/org.eclipse.rap.addons.dropdown/src/org/eclipse/rap/addons/dropdown/ArrayDataProvider.java
@@ -10,21 +10,24 @@
******************************************************************************/
package org.eclipse.rap.addons.dropdown;
-import org.eclipse.rap.json.JsonArray;
+import java.util.Arrays;
+import java.util.List;
-public class SimpleDataSource extends DataSource {
+public class ArrayDataProvider implements DataProvider {
- public SimpleDataSource( String[] data ) {
- setData( createJsonArray( data ) );
+ private final List<String> elements;
+
+ public ArrayDataProvider( String... elements ) {
+ this.elements = Arrays.asList( elements );
+ }
+
+ public Iterable<?> getSuggestions() {
+ return elements;
}
- private static JsonArray createJsonArray( String[] data ) {
- JsonArray array = new JsonArray();
- for( int i = 0; i < data.length; i++ ) {
- array.add( data[ i ] );
- }
- return array;
+ public String getValue( Object element ) {
+ return ( String )element;
}
}
diff --git a/bundles/org.eclipse.rap.addons.dropdown/src/org/eclipse/rap/addons/dropdown/DataProvider.java b/bundles/org.eclipse.rap.addons.dropdown/src/org/eclipse/rap/addons/dropdown/DataProvider.java
new file mode 100644
index 0000000..a298762
--- /dev/null
+++ b/bundles/org.eclipse.rap.addons.dropdown/src/org/eclipse/rap/addons/dropdown/DataProvider.java
@@ -0,0 +1,20 @@
+/*******************************************************************************
+ * 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.dropdown;
+
+
+public interface DataProvider {
+
+ Iterable<?> getSuggestions();
+
+ String getValue( Object element );
+
+}
diff --git a/bundles/org.eclipse.rap.addons.dropdown/src/org/eclipse/rap/addons/dropdown/DataSource.java b/bundles/org.eclipse.rap.addons.dropdown/src/org/eclipse/rap/addons/dropdown/DataSource.java
index 4c489c2..7822895 100644
--- a/bundles/org.eclipse.rap.addons.dropdown/src/org/eclipse/rap/addons/dropdown/DataSource.java
+++ b/bundles/org.eclipse.rap.addons.dropdown/src/org/eclipse/rap/addons/dropdown/DataSource.java
@@ -21,6 +21,7 @@ public class DataSource {
private static final String REMOTE_TYPE = "rwt.remote.Model";
private final RemoteObject remoteObject;
+ private DataProvider dataProvider;
public DataSource() {
Connection connection = RWT.getUISession().getConnection();
@@ -31,11 +32,20 @@ public class DataSource {
return remoteObject.getId();
}
- protected void setData( JsonArray elements ) {
- if( elements == null ) {
- throw new NullPointerException( "Parameter must not be null: elements" );
+ public void setDataProvider( DataProvider dataProvider ) {
+ if( dataProvider == null ) {
+ throw new NullPointerException( "Parameter must not be null: dataProvider" );
}
- remoteObject.set( "data", elements );
+ this.dataProvider = dataProvider;
+ setInitialData();
+ }
+
+ private void setInitialData() {
+ JsonArray array = new JsonArray();
+ for( Object element : dataProvider.getSuggestions() ) {
+ array.add( dataProvider.getValue( element ) );
+ }
+ remoteObject.set( "data", array );
}
}
diff --git a/examples/org.eclipse.rap.addons.dropdown.demo/src/org/eclipse/rap/addons/dropdown/demo/AutoSuggestSnippet.java b/examples/org.eclipse.rap.addons.dropdown.demo/src/org/eclipse/rap/addons/dropdown/demo/AutoSuggestSnippet.java
index 4435203..762ba56 100644
--- a/examples/org.eclipse.rap.addons.dropdown.demo/src/org/eclipse/rap/addons/dropdown/demo/AutoSuggestSnippet.java
+++ b/examples/org.eclipse.rap.addons.dropdown.demo/src/org/eclipse/rap/addons/dropdown/demo/AutoSuggestSnippet.java
@@ -10,8 +10,9 @@
******************************************************************************/
package org.eclipse.rap.addons.dropdown.demo;
+import org.eclipse.rap.addons.dropdown.ArrayDataProvider;
import org.eclipse.rap.addons.dropdown.AutoSuggest;
-import org.eclipse.rap.addons.dropdown.SimpleDataSource;
+import org.eclipse.rap.addons.dropdown.DataSource;
import org.eclipse.rap.rwt.application.AbstractEntryPoint;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
@@ -24,13 +25,10 @@ public class AutoSuggestSnippet extends AbstractEntryPoint {
protected void createContents( Composite parent ) {
Text text = new Text( parent, SWT.BORDER );
AutoSuggest autoSuggest = new AutoSuggest( text );
- SimpleDataSource dataSource
- = new SimpleDataSource( new String[]{ "foo", "food", "foobar", "bar" } );
- autoSuggest.setDataSource( dataSource );
autoSuggest.setAutoComplete( true );
-
-
-
+ DataSource dataSource = new DataSource();
+ dataSource.setDataProvider( new ArrayDataProvider( "foo", "food", "foobar", "bar" ) );
+ autoSuggest.setDataSource( dataSource );
}
}
diff --git a/tests/org.eclipse.rap.addons.dropdown.test/src/org/eclipse/rap/addons/dropdown/ArrayDataProvider_Test.java b/tests/org.eclipse.rap.addons.dropdown.test/src/org/eclipse/rap/addons/dropdown/ArrayDataProvider_Test.java
new file mode 100644
index 0000000..fb628cf
--- /dev/null
+++ b/tests/org.eclipse.rap.addons.dropdown.test/src/org/eclipse/rap/addons/dropdown/ArrayDataProvider_Test.java
@@ -0,0 +1,58 @@
+/*******************************************************************************
+ * 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.dropdown;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
+
+import org.junit.Test;
+
+
+public class ArrayDataProvider_Test {
+
+ @Test ( expected = NullPointerException.class )
+ public void testConstructor_failsWithNullArgument() {
+ new ArrayDataProvider( ( String[] )null );
+ }
+
+ @Test
+ public void testGetSuggestions_returnsElements() {
+ DataProvider dataProvider = new ArrayDataProvider( new String[]{ "foo", "bar" } );
+
+ Iterable<?> suggestions = dataProvider.getSuggestions();
+
+ assertEquals( Arrays.asList( "foo", "bar" ), getElements( suggestions ) );
+ }
+
+ @Test( expected = UnsupportedOperationException.class )
+ public void testGetSuggestions_returnsUnmodifiableIterator() {
+ DataProvider dataProvider = new ArrayDataProvider( new String[]{ "foo", "bar" } );
+
+ Iterable<?> suggestions = dataProvider.getSuggestions();
+
+ Iterator<?> iterator = suggestions.iterator();
+ iterator.next();
+ iterator.remove();
+ }
+
+ private static List<Object> getElements( Iterable<?> suggestions ) {
+ List<Object> elements = new ArrayList<Object>();
+ for( Object object : suggestions ) {
+ elements.add( object );
+ }
+ return elements;
+ }
+
+}
diff --git a/tests/org.eclipse.rap.addons.dropdown.test/src/org/eclipse/rap/addons/dropdown/AutoSuggest_Test.java b/tests/org.eclipse.rap.addons.dropdown.test/src/org/eclipse/rap/addons/dropdown/AutoSuggest_Test.java
index fdcb3f4..6940823 100644
--- a/tests/org.eclipse.rap.addons.dropdown.test/src/org/eclipse/rap/addons/dropdown/AutoSuggest_Test.java
+++ b/tests/org.eclipse.rap.addons.dropdown.test/src/org/eclipse/rap/addons/dropdown/AutoSuggest_Test.java
@@ -272,7 +272,7 @@ public class AutoSuggest_Test {
@Test
public void testSetDataSource_setsElementsOnRemoteObject() {
AutoSuggest autoSuggest = new AutoSuggest( text );
- DataSource dataSource = mock( SimpleDataSource.class );
+ DataSource dataSource = mock( DataSource.class );
when( dataSource.getId() ).thenReturn( "providerId" );
autoSuggest.setDataSource( dataSource );
diff --git a/tests/org.eclipse.rap.addons.dropdown.test/src/org/eclipse/rap/addons/dropdown/DataSource_Test.java b/tests/org.eclipse.rap.addons.dropdown.test/src/org/eclipse/rap/addons/dropdown/DataSource_Test.java
index c9e08fd..383e23b 100644
--- a/tests/org.eclipse.rap.addons.dropdown.test/src/org/eclipse/rap/addons/dropdown/DataSource_Test.java
+++ b/tests/org.eclipse.rap.addons.dropdown.test/src/org/eclipse/rap/addons/dropdown/DataSource_Test.java
@@ -63,19 +63,19 @@ public class DataSource_Test {
}
@Test ( expected = NullPointerException.class )
- public void testSetData_failsWithNullArgument() {
+ public void testSetDataProvider_failsWithNullArgument() {
DataSource dataSource = new DataSource();
- dataSource.setData( null );
+ dataSource.setDataProvider( null );
}
@Test
- public void testSetData_setsDataOnRemoteObject() {
- JsonArray array = new JsonArray().add( "foo" ).add( "bar" );
+ public void testSetDataProvider_setsDataOnRemoteObject() {
DataSource dataSource = new DataSource();
- dataSource.setData( array );
+ dataSource.setDataProvider( new ArrayDataProvider( "foo", "bar" ) );
+ JsonArray array = new JsonArray().add( "foo" ).add( "bar" );
verify( remoteObject ).set( eq( "data" ), eq( array ) );
}
diff --git a/tests/org.eclipse.rap.addons.dropdown.test/src/org/eclipse/rap/addons/dropdown/SimpleDataSource_Test.java b/tests/org.eclipse.rap.addons.dropdown.test/src/org/eclipse/rap/addons/dropdown/SimpleDataSource_Test.java
deleted file mode 100644
index bebd62e..0000000
--- a/tests/org.eclipse.rap.addons.dropdown.test/src/org/eclipse/rap/addons/dropdown/SimpleDataSource_Test.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*******************************************************************************
- * 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.dropdown;
-
-import static org.junit.Assert.assertEquals;
-import static org.mockito.Matchers.anyString;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
-import java.util.concurrent.atomic.AtomicReference;
-
-import org.eclipse.rap.json.JsonArray;
-import org.eclipse.rap.rwt.remote.Connection;
-import org.eclipse.rap.rwt.remote.RemoteObject;
-import org.eclipse.rap.rwt.testfixture.Fixture;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-
-
-public class SimpleDataSource_Test {
-
- private Connection connection;
- private RemoteObject remoteObject;
-
- @Before
- public void setUp() {
- Fixture.setUp();
- connection = mock( Connection.class );
- remoteObject = mock( RemoteObject.class );
- when( connection.createRemoteObject( anyString() ) ).thenReturn( remoteObject );
- when( remoteObject.getId() ).thenReturn( "idFoo" );
- Fixture.fakeConnection( connection );
- }
-
- @After
- public void tearDown() {
- Fixture.tearDown();
- }
-
- @Test ( expected = NullPointerException.class )
- public void testConstructor_failsWithNullArgument() {
- new SimpleDataSource( null );
- }
-
- @Test
- public void testConstructor_setsData() {
- final AtomicReference<JsonArray> captor = new AtomicReference<JsonArray>();
- new SimpleDataSource( new String[]{ "foo", "bar" } ) {
- @Override
- protected void setData( JsonArray array ) {
- captor.set( array );
- }
- };
-
- assertEquals( new JsonArray().add( "foo" ).add( "bar" ), captor.get() );
- }
-
-}

Back to the top