diff options
author | Ralf Sternberg | 2013-07-25 16:09:30 +0000 |
---|---|---|
committer | Ralf Sternberg | 2013-07-25 16:47:47 +0000 |
commit | c474e82c437da57404a1532085f5b8dcf0cd704b (patch) | |
tree | 665e6cdb5a948ecfe3eccca62de6785865f240bd | |
parent | 8516462ee01f14220cb3dcb8121cc1473664027e (diff) | |
download | org.eclipse.rap.incubator.dropdown-c474e82c437da57404a1532085f5b8dcf0cd704b.tar.gz org.eclipse.rap.incubator.dropdown-c474e82c437da57404a1532085f5b8dcf0cd704b.tar.xz org.eclipse.rap.incubator.dropdown-c474e82c437da57404a1532085f5b8dcf0cd704b.zip |
Add column support to AutoSuggest API
Introduce ColumnDataProvider to set column texts and ColumnTemplate to
set column width. DataSource.setTemplate() currently accepts only
ColumnTemplates, other template types will follow.
11 files changed, 191 insertions, 26 deletions
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 c83718a..0bbab38 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 @@ -73,6 +73,12 @@ public class AutoSuggest { public void setDataSource( DataSource dataSource ) { checkDisposed(); model.set( "dataSourceId", dataSource != null ? dataSource.getId() : null ); + if( dataSource != null ) { + ColumnTemplate template = dataSource.getTemplate(); + if( template != null ) { + dropDown.setData( "columns", template.getColumnWidths() ); + } + } } public void setVisibleItemCount( int itemCount ) { diff --git a/bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/ColumnDataProvider.java b/bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/ColumnDataProvider.java new file mode 100644 index 0000000..c7ff577 --- /dev/null +++ b/bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/ColumnDataProvider.java @@ -0,0 +1,18 @@ +/******************************************************************************* + * 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; + + +public interface ColumnDataProvider extends DataProvider { + + String[] getTexts( Object element ); + +} diff --git a/bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/ColumnTemplate.java b/bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/ColumnTemplate.java new file mode 100644 index 0000000..b26cdff --- /dev/null +++ b/bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/ColumnTemplate.java @@ -0,0 +1,26 @@ +/******************************************************************************* + * 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; + + +public class ColumnTemplate { + + private final int[] widths; + + public ColumnTemplate( int... widths ) { + this.widths = widths; + } + + int[] getColumnWidths() { + return widths; + } + +} diff --git a/bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/DataSource.java b/bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/DataSource.java index c933b2c..957b41a 100644 --- a/bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/DataSource.java +++ b/bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/DataSource.java @@ -22,6 +22,7 @@ public class DataSource { private final RemoteObject remoteObject; private DataProvider dataProvider; + private ColumnTemplate template; public DataSource() { Connection connection = RWT.getUISession().getConnection(); @@ -44,12 +45,39 @@ public class DataSource { remoteObject.set( "filterScript", script ); } + public void setTemplate( ColumnTemplate template ) { + this.template = template; + } + + ColumnTemplate getTemplate() { + return template; + } + private void setInitialData() { + boolean hasColumns = dataProvider instanceof ColumnDataProvider; + remoteObject.set( "data", hasColumns ? getColumnData() : getStringData() ); + } + + private JsonArray getStringData() { JsonArray array = new JsonArray(); for( Object element : dataProvider.getSuggestions() ) { array.add( dataProvider.getValue( element ) ); } - remoteObject.set( "data", array ); + return array; + } + + private JsonArray getColumnData() { + JsonArray array = new JsonArray(); + ColumnDataProvider columnDataProvider = ( ColumnDataProvider )dataProvider; + for( Object element : dataProvider.getSuggestions() ) { + JsonArray row = new JsonArray().add( dataProvider.getValue( element ) ); + String[] texts = columnDataProvider.getTexts( element ); + for( String text : texts ) { + row.add( text ); + } + array.add( row ); + } + return array; } } diff --git a/bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/internal/resources/DataBinding.js b/bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/internal/resources/DataBinding.js index de7617e..f7edaf6 100644 --- a/bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/internal/resources/DataBinding.js +++ b/bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/internal/resources/DataBinding.js @@ -65,8 +65,8 @@ function handleModelEvent( event ) { case "textSelection": onModelChangeTextSelection( textWidget, model, event ); break; - case "currentSuggestions": - onModelChangeCurrentSuggestions( dropDown, model, event ); + case "suggestionTexts": + onModelChangeSuggestionTexts( dropDown, model, event ); break; case "suggestionsVisible": onModelChangeSuggestionsVisible( dropDown, model, event ); @@ -111,8 +111,8 @@ function onDropDownDefaultSelection( model, event ) { model.notify( "accept", { type : "accept", "source" : model } ); } -function onModelChangeCurrentSuggestions( dropDown, model, event ) { - dropDown.setItems( model.get( "currentSuggestions" ) ); +function onModelChangeSuggestionTexts( dropDown, model, event ) { + dropDown.setItems( model.get( "suggestionTexts" ) ); } function onModelChangeSuggestionsVisible( dropDown, model, event ) { diff --git a/bundles/org.eclipse.rap.addons.dropdown/js/rwt/dropdown/DropDown.js b/bundles/org.eclipse.rap.addons.dropdown/js/rwt/dropdown/DropDown.js index 8245c2e..36fc87d 100644 --- a/bundles/org.eclipse.rap.addons.dropdown/js/rwt/dropdown/DropDown.js +++ b/bundles/org.eclipse.rap.addons.dropdown/js/rwt/dropdown/DropDown.js @@ -9,6 +9,8 @@ * EclipseSource - initial API and implementation ******************************************************************************/ +//@ sourceURL=DropDown.js + (function(){ var POPUP_BORDER = new rwt.html.Border( 1, "solid", "#000000" ); 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 d88743f..2879bd2 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,36 +10,80 @@ ******************************************************************************/ package org.eclipse.rap.addons.dropdown.demo; +import java.util.Arrays; + import org.eclipse.rap.addons.autosuggest.ArrayDataProvider; import org.eclipse.rap.addons.autosuggest.AutoSuggest; +import org.eclipse.rap.addons.autosuggest.ColumnDataProvider; +import org.eclipse.rap.addons.autosuggest.ColumnTemplate; import org.eclipse.rap.addons.autosuggest.DataSource; import org.eclipse.rap.addons.autosuggest.SuggestionSelectedListener; import org.eclipse.rap.rwt.application.AbstractEntryPoint; import org.eclipse.swt.SWT; +import org.eclipse.swt.layout.FormAttachment; +import org.eclipse.swt.layout.FormData; +import org.eclipse.swt.layout.FormLayout; import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Text; public class AutoSuggestSnippet extends AbstractEntryPoint { + private DataSource simpleDataSource; + private DataSource columnDataSource; + private Text text1; + @Override protected void createContents( Composite parent ) { - final Text text = new Text( parent, SWT.BORDER ); - AutoSuggest autoSuggest = new AutoSuggest( text ); - autoSuggest.setAutoComplete( true ); - DataSource dataSource = new DataSource(); - dataSource.setFilterScript( - "functfsdfion( suggestion, userText ) { " - + " return suggestion.indexOf( userText ) !== -1;" - + "}" - ); - dataSource.setDataProvider( new ArrayDataProvider( "foo", "food", "foobar", "bar" ) ); - autoSuggest.setDataSource( dataSource ); - autoSuggest.addSelectionListener( new SuggestionSelectedListener() { + parent.setLayout( new FormLayout() ); + createDataSources(); + + text1 = new Text( parent, SWT.BORDER ); + text1.setLayoutData( createTextData( null ) ); + AutoSuggest autoSuggest1 = new AutoSuggest( text1 ); + autoSuggest1.setAutoComplete( true ); + autoSuggest1.setDataSource( simpleDataSource ); + autoSuggest1.addSelectionListener( new SuggestionSelectedListener() { public void suggestionSelected() { - System.out.println( "selected: " + text.getText() ); + System.out.println( "selected: " + text1.getText() ); + } + } ); + + Text text2 = new Text( parent, SWT.BORDER ); + text2.setLayoutData( createTextData( text1 ) ); + AutoSuggest autoSuggest2 = new AutoSuggest( text2 ); + autoSuggest2.setDataSource( columnDataSource ); + } + + private void createDataSources() { + simpleDataSource = new DataSource(); + simpleDataSource.setDataProvider( new ArrayDataProvider( Movies.VALUES ) ); + columnDataSource = new DataSource(); + columnDataSource.setTemplate( new ColumnTemplate( 50, 150, 150 ) ); + columnDataSource.setDataProvider( new ColumnDataProvider() { + public Iterable<?> getSuggestions() { + return Arrays.asList( KFZ.DE ); + } + public String getValue( Object element ) { + String[] value = ( String[] )element; + return value[ 0 ]; + } + public String[] getTexts( Object element ) { + String[] value = ( String[] )element; + return new String[] { value[ 0 ], value[ 2 ], value[ 3 ] }; } } ); } + private static FormData createTextData( Control control ) { + FormData formData = new FormData(); + formData.top = control == null + ? new FormAttachment( 0, 100 ) + : new FormAttachment( control, 50 ); + formData.left = new FormAttachment( 50, -150 ); + formData.right = new FormAttachment( 50, 150 ); + return formData; + } + } diff --git a/tests/org.eclipse.rap.addons.autosuggest.test/.settings/org.moreunit.prefs b/tests/org.eclipse.rap.addons.autosuggest.test/.settings/org.moreunit.prefs deleted file mode 100644 index f561a5b..0000000 --- a/tests/org.eclipse.rap.addons.autosuggest.test/.settings/org.moreunit.prefs +++ /dev/null @@ -1,5 +0,0 @@ -eclipse.preferences.version=1 -org.moreunit.preferences.version=2 -org.moreunit.testClassNameTemplate=${srcFile}_Test -org.moreunit.unitsourcefolder=org.eclipse.rap.addons.dropdown\:src\:org.eclipse.rap.addons.dropdown.test\:src -org.moreunit.useprojectsettings=true diff --git a/tests/org.eclipse.rap.addons.autosuggest.test/src/org/eclipse/rap/addons/autosuggest/AutoSuggest_Test.java b/tests/org.eclipse.rap.addons.autosuggest.test/src/org/eclipse/rap/addons/autosuggest/AutoSuggest_Test.java index d058076..113f573 100644 --- a/tests/org.eclipse.rap.addons.autosuggest.test/src/org/eclipse/rap/addons/autosuggest/AutoSuggest_Test.java +++ b/tests/org.eclipse.rap.addons.autosuggest.test/src/org/eclipse/rap/addons/autosuggest/AutoSuggest_Test.java @@ -11,6 +11,7 @@ package org.eclipse.rap.addons.autosuggest; import static org.eclipse.rap.rwt.lifecycle.WidgetUtil.getId; +import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertSame; @@ -305,7 +306,7 @@ public class AutoSuggest_Test { } @Test - public void testSetDataSource_setsElementsOnRemoteObject() { + public void testSetDataSource_setsDataSourceOnRemoteObject() { AutoSuggest autoSuggest = new AutoSuggest( text ); DataSource dataSource = mock( DataSource.class ); when( dataSource.getId() ).thenReturn( "providerId" ); @@ -316,6 +317,18 @@ public class AutoSuggest_Test { } @Test + public void testSetDataSource_setsColumnWithOnDropDown() { + AutoSuggest autoSuggest = new AutoSuggest( text ); + DataSource dataSource = mock( DataSource.class ); + when( dataSource.getTemplate() ).thenReturn( new ColumnTemplate( 23, 42 ) ); + + autoSuggest.setDataSource( dataSource ); + + int[] columns = ( int[] )autoSuggest.getDropDown().getData( "columns" ); + assertArrayEquals( new int[] { 23, 42 }, columns ); + } + + @Test public void testSetAutoComplete_defaultIsNotSet() { new AutoSuggest( text ); diff --git a/tests/org.eclipse.rap.addons.autosuggest.test/src/org/eclipse/rap/addons/autosuggest/DataSource_Test.java b/tests/org.eclipse.rap.addons.autosuggest.test/src/org/eclipse/rap/addons/autosuggest/DataSource_Test.java index 99a9437..25b917a 100644 --- a/tests/org.eclipse.rap.addons.autosuggest.test/src/org/eclipse/rap/addons/autosuggest/DataSource_Test.java +++ b/tests/org.eclipse.rap.addons.autosuggest.test/src/org/eclipse/rap/addons/autosuggest/DataSource_Test.java @@ -11,12 +11,15 @@ package org.eclipse.rap.addons.autosuggest; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertSame; import static org.mockito.Matchers.anyString; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import java.util.Arrays; + import org.eclipse.rap.json.JsonArray; import org.eclipse.rap.rwt.remote.Connection; import org.eclipse.rap.rwt.remote.RemoteObject; @@ -80,6 +83,28 @@ public class DataSource_Test { } @Test + public void testSetDataProvider_setsDataOnRemoteObject_forColumnDataProvider() { + DataSource dataSource = new DataSource(); + + dataSource.setDataProvider( new ColumnDataProvider() { + public Iterable<?> getSuggestions() { + return Arrays.asList( "foo", "bar" ); + } + public String getValue( Object element ) { + return ( String )element; + } + public String[] getTexts( Object element ) { + return new String[] { element + "-1", element + "-2" }; + } + } ); + + JsonArray array = new JsonArray(); + array.add( new JsonArray().add( "foo" ).add( "foo-1").add( "foo-2") ); + array.add( new JsonArray().add( "bar" ).add( "bar-1").add( "bar-2") ); + verify( remoteObject ).set( eq( "data" ), eq( array ) ); + } + + @Test public void testSetFilterScript_setsFilterScriptOnRemoteObject() { DataSource dataSource = new DataSource(); @@ -88,4 +113,14 @@ public class DataSource_Test { verify( remoteObject ).set( eq( "filterScript" ), eq( "foobar" ) ); } + @Test + public void testSetTemplate() { + DataSource dataSource = new DataSource(); + ColumnTemplate template = mock( ColumnTemplate.class ); + + dataSource.setTemplate( template ); + + assertSame( template, dataSource.getTemplate() ); + } + } diff --git a/tests/org.eclipse.rap.addons.dropdown.test/.settings/org.moreunit.prefs b/tests/org.eclipse.rap.addons.dropdown.test/.settings/org.moreunit.prefs deleted file mode 100644 index b23adba..0000000 --- a/tests/org.eclipse.rap.addons.dropdown.test/.settings/org.moreunit.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -org.moreunit.preferences.version=2 |