Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRalf Sternberg2013-07-25 16:09:30 +0000
committerRalf Sternberg2013-07-25 16:47:47 +0000
commitc474e82c437da57404a1532085f5b8dcf0cd704b (patch)
tree665e6cdb5a948ecfe3eccca62de6785865f240bd
parent8516462ee01f14220cb3dcb8121cc1473664027e (diff)
downloadorg.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.
-rw-r--r--bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/AutoSuggest.java6
-rw-r--r--bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/ColumnDataProvider.java18
-rw-r--r--bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/ColumnTemplate.java26
-rw-r--r--bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/DataSource.java30
-rw-r--r--bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/internal/resources/DataBinding.js8
-rw-r--r--bundles/org.eclipse.rap.addons.dropdown/js/rwt/dropdown/DropDown.js2
-rw-r--r--examples/org.eclipse.rap.addons.dropdown.demo/src/org/eclipse/rap/addons/dropdown/demo/AutoSuggestSnippet.java70
-rw-r--r--tests/org.eclipse.rap.addons.autosuggest.test/.settings/org.moreunit.prefs5
-rw-r--r--tests/org.eclipse.rap.addons.autosuggest.test/src/org/eclipse/rap/addons/autosuggest/AutoSuggest_Test.java15
-rw-r--r--tests/org.eclipse.rap.addons.autosuggest.test/src/org/eclipse/rap/addons/autosuggest/DataSource_Test.java35
-rw-r--r--tests/org.eclipse.rap.addons.dropdown.test/.settings/org.moreunit.prefs2
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

Back to the top