diff options
author | Ralf Sternberg | 2013-07-22 15:20:13 +0000 |
---|---|---|
committer | Ralf Sternberg | 2013-07-22 15:24:01 +0000 |
commit | c1ea615422e37d391ad94ac62512c1a7b99ca976 (patch) | |
tree | 6b2ba329e65cd16fba8806752845c554c9209eeb | |
parent | 35193c48bd3cc6cb856fd306d5250c3ce15bb7be (diff) | |
download | org.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.
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() ); - } - -} |