Use AutoSuggest in Examples demo instead of viewer
Updated AutoSuggest.js to be able to handle changing data sources
diff --git a/bundles/org.eclipse.rap.addons.dropdown/src/org/eclipse/rap/addons/dropdown/internal/resources/AutoSuggest.js b/bundles/org.eclipse.rap.addons.dropdown/src/org/eclipse/rap/addons/dropdown/internal/resources/AutoSuggest.js
index 8b6d2e5..dbb090b 100644
--- a/bundles/org.eclipse.rap.addons.dropdown/src/org/eclipse/rap/addons/dropdown/internal/resources/AutoSuggest.js
+++ b/bundles/org.eclipse.rap.addons.dropdown/src/org/eclipse/rap/addons/dropdown/internal/resources/AutoSuggest.js
@@ -45,7 +45,7 @@
// Event Handling
function onChangeDataSource( event ) {
- processDataSource.apply( this );
+ this.set( "elements", null );
}
function onChangeElements( event ) {
diff --git a/examples/org.eclipse.rap.addons.dropdown.demo.examples/META-INF/MANIFEST.MF b/examples/org.eclipse.rap.addons.dropdown.demo.examples/META-INF/MANIFEST.MF
index e52c0be..2a7698c 100644
--- a/examples/org.eclipse.rap.addons.dropdown.demo.examples/META-INF/MANIFEST.MF
+++ b/examples/org.eclipse.rap.addons.dropdown.demo.examples/META-INF/MANIFEST.MF
@@ -4,12 +4,10 @@
Bundle-SymbolicName: org.eclipse.rap.addons.dropdown.demo.examples
Bundle-Version: 1.0.0.qualifier
Import-Package: org.eclipse.rap.addons.dropdown;version="0.1.0",
- org.eclipse.rap.addons.dropdown.viewer;version="0.1.0",
org.osgi.framework;version="1.3.0"
Bundle-RequiredExecutionEnvironment: J2SE-1.5
Bundle-Vendor: Eclipse.org - RAP
Require-Bundle: org.eclipse.rap.rwt;bundle-version="2.1.0",
- org.eclipse.rap.examples;bundle-version="2.1.0",
- org.eclipse.rap.jface;bundle-version="2.1.0"
+ org.eclipse.rap.examples;bundle-version="2.1.0"
Export-Package: org.eclipse.rap.addons.dropdown.demo.examples;version="0.1.0"
Bundle-Activator: org.eclipse.rap.addons.dropdown.demo.examples.Activator
diff --git a/examples/org.eclipse.rap.addons.dropdown.demo.examples/src/org/eclipse/rap/addons/dropdown/demo/examples/CountryInfo.java b/examples/org.eclipse.rap.addons.dropdown.demo.examples/src/org/eclipse/rap/addons/dropdown/demo/examples/CountryInfo.java
index 1758e69..41c19f9 100644
--- a/examples/org.eclipse.rap.addons.dropdown.demo.examples/src/org/eclipse/rap/addons/dropdown/demo/examples/CountryInfo.java
+++ b/examples/org.eclipse.rap.addons.dropdown.demo.examples/src/org/eclipse/rap/addons/dropdown/demo/examples/CountryInfo.java
@@ -36,6 +36,15 @@
return countries;
}
+ public Country findCountry( String name ) {
+ for( Country country : countries ) {
+ if( country.name.equals( name ) ) {
+ return country;
+ }
+ }
+ return null;
+ }
+
private CountryInfo() {
try {
countries = readCountries();
@@ -116,6 +125,15 @@
return cities;
}
+ public City findCity( String name ) {
+ for( City city : cities ) {
+ if( city.name.equals( name ) ) {
+ return city;
+ }
+ }
+ return null;
+ }
+
}
static class City {
diff --git a/examples/org.eclipse.rap.addons.dropdown.demo.examples/src/org/eclipse/rap/addons/dropdown/demo/examples/DropDownExamplePage.java b/examples/org.eclipse.rap.addons.dropdown.demo.examples/src/org/eclipse/rap/addons/dropdown/demo/examples/DropDownExamplePage.java
index f136811..bb40e82 100644
--- a/examples/org.eclipse.rap.addons.dropdown.demo.examples/src/org/eclipse/rap/addons/dropdown/demo/examples/DropDownExamplePage.java
+++ b/examples/org.eclipse.rap.addons.dropdown.demo.examples/src/org/eclipse/rap/addons/dropdown/demo/examples/DropDownExamplePage.java
@@ -10,14 +10,14 @@
******************************************************************************/
package org.eclipse.rap.addons.dropdown.demo.examples;
-import org.eclipse.jface.viewers.ArrayContentProvider;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.LabelProvider;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
+import java.util.Arrays;
+
+import org.eclipse.rap.addons.dropdown.AutoSuggest;
+import org.eclipse.rap.addons.dropdown.DataProvider;
+import org.eclipse.rap.addons.dropdown.DataSource;
+import org.eclipse.rap.addons.dropdown.SuggestionSelectedListener;
import org.eclipse.rap.addons.dropdown.demo.examples.CountryInfo.City;
import org.eclipse.rap.addons.dropdown.demo.examples.CountryInfo.Country;
-import org.eclipse.rap.addons.dropdown.viewer.DropDownViewer;
import org.eclipse.rap.examples.ExampleUtil;
import org.eclipse.rap.examples.IExamplePage;
import org.eclipse.swt.SWT;
@@ -34,6 +34,10 @@
public class DropDownExamplePage implements IExamplePage {
private CityMap cityMap;
+ private Text countryText;
+ private Text cityText;
+ private AutoSuggest cityAutoSuggest;
+ private Country currentCountry = null;
public void createControl( Composite parent ) {
parent.setLayout( ExampleUtil.createMainLayout( 2 ) );
@@ -46,46 +50,54 @@
group.setText( "City Selection" );
group.setLayout( new GridLayout( 2, false ) );
group.setLayoutData( new GridData( SWT.LEFT, SWT.TOP, false, false ) );
- Label countryLabel = new Label( group, SWT.NONE );
+ createCountryText( group );
+ createCityText( group );
+ createCityAutoSuggest();
+ createCountryAutoSuggest();
+ }
+
+ public void createCountryText( Composite parent ) {
+ Label countryLabel = new Label( parent, SWT.NONE );
countryLabel.setText( "Country:" );
- Text countryText = new Text( group, SWT.BORDER );
+ countryText = new Text( parent, SWT.BORDER );
countryText.setLayoutData( new GridData( 300, SWT.DEFAULT ) );
- Label cityLabel = new Label( group, SWT.NONE );
- cityLabel.setText( "City:" );
- Text cityText = new Text( group, SWT.BORDER );
- cityText.setLayoutData( new GridData( 300, SWT.DEFAULT ) );
- DropDownViewer cityViewer = createCityViewer( cityText );
- createCountryViewer( countryText, cityViewer );
countryText.setFocus();
+ }
+
+ public void createCityText( Composite parent ) {
+ Label cityLabel = new Label( parent, SWT.NONE );
+ cityLabel.setText( "City:" );
+ cityText = new Text( parent, SWT.BORDER );
+ cityText.setLayoutData( new GridData( 300, SWT.DEFAULT ) );
cityText.setEnabled( false );
}
- private DropDownViewer createCityViewer( Text cityText ) {
- DropDownViewer cityViewer = new DropDownViewer( cityText );
- cityViewer.setContentProvider( new ArrayContentProvider() );
- cityViewer.setLabelProvider( new LabelProvider() );
- cityViewer.addSelectionChangedListener( new ISelectionChangedListener() {
- public void selectionChanged( SelectionChangedEvent event ) {
- IStructuredSelection selection = ( IStructuredSelection )event.getSelection();
- cityMap.visit( ( City )selection.getFirstElement() );
+ private void createCountryAutoSuggest() {
+ AutoSuggest countryAutoSuggest = new AutoSuggest( countryText );
+ countryAutoSuggest.setAutoComplete( true );
+ countryAutoSuggest.setDataSource( createCountriesDataSource() );
+ countryAutoSuggest.addSelectionListener( new SuggestionSelectedListener() {
+ public void suggestionSelected() {
+ setCurrentCountry( countryText.getText() );
}
} );
- return cityViewer;
}
- private void createCountryViewer( Text countryText, final DropDownViewer cityViewer ) {
- DropDownViewer countryViewer = new DropDownViewer( countryText );
- countryViewer.setContentProvider( new ArrayContentProvider() );
- countryViewer.setLabelProvider( new LabelProvider() );
- countryViewer.setInput( CountryInfo.getInstance().getCountries() );
- countryViewer.addSelectionChangedListener( new ISelectionChangedListener() {
- public void selectionChanged( SelectionChangedEvent event ) {
- IStructuredSelection selection = ( IStructuredSelection )event.getSelection();
- Country country = ( Country )selection.getFirstElement();
- Text text = ( Text )cityViewer.getControl();
- text.setText( "" );
- text.setEnabled( true );
- cityViewer.setInput( country.getCities() );
+ private void setCurrentCountry( String name ) {
+ cityText.setText( "" );
+ cityText.setEnabled( true );
+ currentCountry = CountryInfo.getInstance().findCountry( name );
+ cityAutoSuggest.setDataSource( createDataSource( currentCountry ) );
+ }
+
+ private void createCityAutoSuggest() {
+ cityAutoSuggest = new AutoSuggest( cityText );
+ cityAutoSuggest.setAutoComplete( true );
+ cityAutoSuggest.addSelectionListener( new SuggestionSelectedListener() {
+ public void suggestionSelected() {
+ String name = cityText.getText();
+ City city = currentCountry.findCity( name );
+ cityMap.visit( city );
}
} );
}
@@ -99,4 +111,33 @@
cityMap = new CityMap( browser );
}
+ // TODO [tb] : re-use data sources
+ private static DataSource createCountriesDataSource() {
+ DataSource countriesDataSource = new DataSource();
+ countriesDataSource.setDataProvider( new DataProvider() {
+ public Iterable<?> getSuggestions() {
+ return Arrays.asList( CountryInfo.getInstance().getCountries() );
+ }
+ public String getValue( Object element ) {
+ return ( ( Country )element ).name;
+ }
+ } );
+ return countriesDataSource;
+ }
+
+ // TODO [tb] : re-use data sources
+ private static DataSource createDataSource( Country country ) {
+ DataSource dataSource = new DataSource();
+ final City[] cities = country.getCities();
+ dataSource.setDataProvider( new DataProvider() {
+ public Iterable< ? > getSuggestions() {
+ return Arrays.asList( cities );
+ }
+ public String getValue( Object element ) {
+ return element.toString();
+ }
+ } );
+ return dataSource;
+ }
+
}
diff --git a/examples/org.eclipse.rap.addons.dropdown.demo/DropDown Demo 9494_dropdown.launch b/examples/org.eclipse.rap.addons.dropdown.demo/DropDown Demo 9494_dropdown.launch
index 70e1b17..54fd9fe 100644
--- a/examples/org.eclipse.rap.addons.dropdown.demo/DropDown Demo 9494_dropdown.launch
+++ b/examples/org.eclipse.rap.addons.dropdown.demo/DropDown Demo 9494_dropdown.launch
@@ -40,9 +40,9 @@
<booleanAttribute key="org.eclipse.rap.launch.useSessionTimeout" value="false"/>
<stringAttribute key="pde.version" value="3.3"/>
<booleanAttribute key="show_selected_only" value="true"/>
-<stringAttribute key="target_bundles" value="com.ibm.icu.base,javax.servlet@default:default,javax.xml,org.apache.felix.gogo.command@default:default,org.apache.felix.gogo.runtime@default:default,org.apache.felix.gogo.shell@default:default,org.eclipse.core.commands,org.eclipse.core.jobs,org.eclipse.equinox.common,org.eclipse.equinox.console@default:default,org.eclipse.equinox.ds@1:true,org.eclipse.equinox.http.jetty@default:default,org.eclipse.equinox.http.servlet@default:default,org.eclipse.equinox.util@default:default,org.eclipse.jetty.continuation@default:default,org.eclipse.jetty.http@default:default,org.eclipse.jetty.io@default:default,org.eclipse.jetty.security@default:default,org.eclipse.jetty.server@default:default,org.eclipse.jetty.servlet@default:default,org.eclipse.jetty.util@default:default,org.eclipse.osgi.services@default:default,org.eclipse.osgi@-1:true,org.eclipse.rap.jface,org.eclipse.rap.rwt.osgi@default:default,org.eclipse.rap.rwt@default:default"/>
+<stringAttribute key="target_bundles" value="com.ibm.icu.base@default:default,javax.servlet@default:default,javax.xml@default:default,org.apache.felix.gogo.command@default:default,org.apache.felix.gogo.runtime@default:default,org.apache.felix.gogo.shell@default:default,org.eclipse.equinox.console@default:default,org.eclipse.equinox.ds@1:true,org.eclipse.equinox.http.jetty@default:default,org.eclipse.equinox.http.servlet@default:default,org.eclipse.equinox.util@default:default,org.eclipse.jetty.continuation@default:default,org.eclipse.jetty.http@default:default,org.eclipse.jetty.io@default:default,org.eclipse.jetty.security@default:default,org.eclipse.jetty.server@default:default,org.eclipse.jetty.servlet@default:default,org.eclipse.jetty.util@default:default,org.eclipse.osgi.services@default:default,org.eclipse.osgi@-1:true,org.eclipse.rap.rwt.osgi@default:default,org.eclipse.rap.rwt@default:default"/>
<booleanAttribute key="tracing" value="false"/>
<booleanAttribute key="useCustomFeatures" value="false"/>
<booleanAttribute key="useDefaultConfigArea" value="true"/>
-<stringAttribute key="workspace_bundles" value="org.eclipse.rap.addons.dropdown,org.eclipse.rap.addons.dropdown.demo,org.eclipse.rap.addons.dropdown.viewer,org.eclipse.rap.clientscripting"/>
+<stringAttribute key="workspace_bundles" value="org.eclipse.rap.addons.dropdown.demo@default:default,org.eclipse.rap.addons.dropdown@default:default,org.eclipse.rap.clientscripting@default:default"/>
</launchConfiguration>
diff --git a/tests/org.eclipse.rap.addons.dropdown.test/jasmine/jasmine/specs/AutoSuggestSpec.js b/tests/org.eclipse.rap.addons.dropdown.test/jasmine/jasmine/specs/AutoSuggestSpec.js
index d693c4f..559c942 100644
--- a/tests/org.eclipse.rap.addons.dropdown.test/jasmine/jasmine/specs/AutoSuggestSpec.js
+++ b/tests/org.eclipse.rap.addons.dropdown.test/jasmine/jasmine/specs/AutoSuggestSpec.js
@@ -204,16 +204,13 @@
describe( "change:dataSource", function() {
- it( "sets elements", function() {
+ it( "sets elements to null", function() {
model.addListener( "change:dataSource", createClientListener( "AutoSuggest" ) );
- var dataSource = rap.typeHandler[ "rwt.remote.Model" ].factory();
- dataSource.set( "data", [ "foo", "bar" ] );
- spyOn( rap, "getObject" ).andReturn( dataSource );
+ model.set( "elements", [] );
model.set( "dataSource", "fooId" );
- expect( rap.getObject ).toHaveBeenCalledWith( "fooId" );
- expect( model.get( "elements" ) ).toEqual( [ "foo", "bar" ] );
+ expect( model.get( "elements" ) ).toBeNull();
} );
} );