Changeset 681

Show
Ignore:
Timestamp:
05/30/07 01:16:26 (2 years ago)
Author:
yuanying
Message:

Data binding support is added.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • org.jalcedo.client.examples/trunk/org.jalcedo.client.examples.rails/META-INF/MANIFEST.MF

    r679 r681  
    99 org.eclipse.core.runtime, 
    1010 org.jalcedo.client.jface, 
    11  org.jalcedo.client.rest 
     11 org.jalcedo.client.rest, 
     12 org.eclipse.core.databinding, 
     13 org.eclipse.core.databinding.beans, 
     14 org.eclipse.jface.databinding 
    1215Eclipse-LazyStart: true 
  • org.jalcedo.client.examples/trunk/org.jalcedo.client.examples.rails/src/org/jalcedo/client/examples/rails/ProjectComponentsFactory.java

    r679 r681  
    11package org.jalcedo.client.examples.rails; 
    22 
     3import org.eclipse.jface.viewers.IContentProvider; 
     4import org.eclipse.jface.viewers.ILabelProvider; 
     5import org.eclipse.jface.viewers.IStructuredContentProvider; 
    36import org.eclipse.swt.widgets.Composite; 
    47import org.jalcedo.client.ds.DataSource; 
    58import org.jalcedo.client.events.ApplicationEventPublisher; 
    69import org.jalcedo.client.events.DefaultEventPublisher; 
     10import org.jalcedo.client.examples.rails.controllers.project.ProjectFetchAction; 
    711import org.jalcedo.client.examples.rails.models.Project; 
    812import org.jalcedo.client.examples.rails.models.ProjectDataSource; 
     13import org.jalcedo.client.examples.rails.views.project.ProjectContentProvider; 
    914import org.jalcedo.client.examples.rails.views.project.ProjectDetailComposite; 
    1015import org.jalcedo.client.examples.rails.views.project.ProjectListComposite; 
     
    2025        if (clazz == ProjectListComposite.class) { 
    2126            ProjectListComposite composite = new ProjectListComposite(parent, style); 
     27            ProjectContentProvider contentProvider = (ProjectContentProvider) this.getComponent(ProjectContentProvider.class); 
     28            composite.getListViewer().setContentProvider(contentProvider); 
     29            composite.getListViewer().setLabelProvider(contentProvider); 
     30            composite.getFetchButton().addSelectionListener((ProjectFetchAction) this.getComponent(ProjectFetchAction.class)); 
    2231            return (T) composite; 
    2332        } 
     
    3140    private HttpClientConnection connection; 
    3241    private Converter<Project> converter; 
    33     private ProjectDataSource projectDataSource; 
     42    private ProjectDataSource dataSource; 
     43    private ProjectContentProvider contentProvider; 
     44    private ProjectFetchAction fetchAction; 
    3445     
    3546    @SuppressWarnings("unchecked") 
     
    3950        } 
    4051        if (key == DataSource.class) { 
    41             if (this.projectDataSource == null) { 
    42                 this.projectDataSource = new ProjectDataSource(); 
    43                 this.projectDataSource.setApplicationEventPublisher((ApplicationEventPublisher) this.getComponent(ApplicationEventPublisher.class)); 
    44                 this.projectDataSource.setConnection((Connection) this.getComponent(Connection.class)); 
    45                 this.projectDataSource.setConverter((Converter<Project>) this.getComponent(Converter.class)); 
     52            if (this.dataSource == null) { 
     53                this.dataSource = new ProjectDataSource(); 
     54                this.dataSource.setApplicationEventPublisher((ApplicationEventPublisher) this.getComponent(ApplicationEventPublisher.class)); 
     55                this.dataSource.setConnection((Connection) this.getComponent(Connection.class)); 
     56                this.dataSource.setConverter((Converter<Project>) this.getComponent(Converter.class)); 
    4657            } 
    47             return this.projectDataSource; 
     58            return this.dataSource; 
    4859        } 
    4960        if (key == Connection.class) { 
     
    6071            return this.converter; 
    6172        } 
     73        if ( 
     74                key == IContentProvider.class || 
     75                key == IStructuredContentProvider.class || 
     76                key == ILabelProvider.class || 
     77                key == ProjectContentProvider.class 
     78            ) { 
     79            if (this.contentProvider == null) { 
     80                this.contentProvider = new ProjectContentProvider(); 
     81                ApplicationEventPublisher applicationEventPublisher = (ApplicationEventPublisher) this.getComponent(ApplicationEventPublisher.class); 
     82                applicationEventPublisher.addListener(this.contentProvider); 
     83                this.contentProvider.setDataSource((DataSource<Integer, Project>) this.getComponent(DataSource.class)); 
     84            } 
     85            return this.contentProvider; 
     86        } 
     87        if (key == ProjectFetchAction.class) { 
     88            if (this.fetchAction == null) { 
     89                this.fetchAction = new ProjectFetchAction(); 
     90                this.fetchAction.setApplicationEventPublisher((ApplicationEventPublisher) this.getComponent(ApplicationEventPublisher.class)); 
     91            } 
     92            return this.fetchAction; 
     93        } 
    6294        return null; 
    6395    } 
  • org.jalcedo.client.examples/trunk/org.jalcedo.client.examples.rails/src/org/jalcedo/client/examples/rails/models/Project.java

    r665 r681  
    22 
    33public class Project { 
    4     private int id; 
     4    private Integer id; 
    55    private String firstName; 
    66    private String desc; 
     
    1818        this.firstName = firstName; 
    1919    } 
    20     public int getId() { 
     20    public Integer getId() { 
    2121        return id; 
    2222    } 
    23     public void setId(int id) { 
     23    public void setId(Integer id) { 
    2424        this.id = id; 
    2525    } 
  • org.jalcedo.client.examples/trunk/org.jalcedo.client.examples.rails/src/org/jalcedo/client/examples/rails/models/ProjectDataSource.java

    r679 r681  
    11package org.jalcedo.client.examples.rails.models; 
    22 
     3import java.util.ArrayList; 
     4import java.util.HashMap; 
    35import java.util.List; 
     6import java.util.Map; 
    47 
    58import org.jalcedo.client.ds.DataSource; 
     
    1518     
    1619    private Converter<Project> converter; 
     20     
     21    private Map<Integer, Project> projects; 
     22     
     23    public ProjectDataSource() { 
     24        this.projects = new HashMap<Integer, Project>(); 
     25        Project p0 = new Project(); 
     26        p0.setId(1); 
     27        p0.setFirstName("test"); 
     28        p0.setDesc("This is a test project."); 
     29        this.projects.put(p0.getId(), p0); 
     30    } 
    1731 
    1832    public Connection getConnection() { 
     
    4256 
    4357    public Project create(Project newObject) { 
    44         // TODO Auto-generated method stub 
    45         return null; 
     58        this.projects.put(newObject.getId(), newObject); 
     59        this.getApplicationEventPublisher().publishEvent(new ProjectEvent(newObject, ProjectEvent.ADDED)); 
     60        return newObject; 
    4661    } 
    4762 
    4863    public void delete(Project detachedObject) { 
    49         // TODO Auto-generated method stub 
    50          
     64        this.projects.remove(detachedObject.getId()); 
     65        this.getApplicationEventPublisher().publishEvent(new ProjectEvent(detachedObject, ProjectEvent.DELETED)); 
    5166    } 
    5267 
    5368    public Project edit(Project detachedObject) { 
    54         // TODO Auto-generated method stub 
    55         return null
     69        this.getApplicationEventPublisher().publishEvent(new ProjectEvent(detachedObject, ProjectEvent.MODIFIED)); 
     70        return detachedObject
    5671    } 
    5772 
    5873    public Project find(Integer key) { 
    59         // TODO Auto-generated method stub 
    60         return null; 
     74        return this.projects.get(key); 
    6175    } 
    6276 
    6377    public List<Project> findList() { 
    64         String source = this.getConnection().get("http://localhost:3000/projects.json", null); 
    65         return this.getConverter().toList(source); 
     78        return new ArrayList<Project>(this.projects.values()); 
    6679    } 
    6780 
  • org.jalcedo.client.examples/trunk/org.jalcedo.client.examples.rails/src/org/jalcedo/client/examples/rails/views/project/ProjectContentProvider.java

    r679 r681  
    2929 
    3030    public Object[] getElements(Object inputElement) { 
    31         return this.getDataSource().findList().toArray()
     31        return (Object[]) inputElement
    3232    } 
    3333 
     
    4343 
    4444    public void onApplicationEvent(ApplicationEvent event) { 
    45         if (event instanceof ProjectEvent && this.viewer != null) { 
    46             this.viewer.refresh(); 
     45        if (event instanceof ProjectEvent) { 
     46            ProjectEvent pe = (ProjectEvent) event; 
     47            if (pe.getType() == ProjectEvent.REFRESH) { 
     48                this.viewer.setInput(this.getDataSource().findList().toArray()); 
     49            } 
    4750        } 
    4851    } 
  • org.jalcedo.client.examples/trunk/org.jalcedo.client.examples.rails/src/org/jalcedo/client/examples/rails/views/project/ProjectView.java

    r673 r681  
    11package org.jalcedo.client.examples.rails.views.project; 
    22 
     3import org.eclipse.core.databinding.DataBindingContext; 
     4import org.eclipse.core.databinding.UpdateValueStrategy; 
     5import org.eclipse.core.databinding.beans.BeansObservables; 
     6import org.eclipse.core.databinding.observable.Realm; 
     7import org.eclipse.core.databinding.observable.value.IObservableValue; 
     8import org.eclipse.jface.databinding.swt.SWTObservables; 
     9import org.eclipse.jface.databinding.viewers.ViewersObservables; 
    310import org.eclipse.swt.SWT; 
    411import org.eclipse.swt.layout.GridData; 
     
    1724        ProjectComponentsFactory factory = ProjectComponentsFactory.getFactory(); 
    1825         
    19         createListComposite(parent, factory); 
    20         createDetailComposite(parent, factory); 
     26        final ProjectListComposite listComposite = createListComposite(parent, factory); 
     27        final ProjectDetailComposite detailComposite = createDetailComposite(parent, factory); 
     28         
     29        // TODO set initial values. 
     30        listComposite.getListViewer().setInput(null); 
     31         
     32        // Set up data binding. In an RCP application, the threading Realm 
     33        // will be set for you automatically by the Workbench. In an SWT 
     34        // application, you can do this once, wrapping your binding 
     35        // method call. 
     36        Realm.runWithDefault(SWTObservables.getRealm(parent.getDisplay()), new Runnable() { 
     37            public void run() { 
     38                // 1. Observe changes in selection. 
     39                IObservableValue selection = ViewersObservables 
     40                        .observeSingleSelection(listComposite.getListViewer()); 
     41                 
     42                // 2. Observe the name property of the current selection. 
     43                IObservableValue firstNameObservable = BeansObservables 
     44                        .observeDetailValue(Realm.getDefault(), selection, 
     45                                "firstName", String.class); 
     46                IObservableValue descObservable = BeansObservables 
     47                        .observeDetailValue(Realm.getDefault(), selection,  
     48                                "desc", String.class); 
     49                 
     50                // 3. Bind the Text widget to the name detail (selection's 
     51                // name). 
     52                DataBindingContext dbc = new DataBindingContext(); 
     53                dbc.bindValue(SWTObservables.observeText( 
     54                        detailComposite.getFirstNameText(), SWT.None), firstNameObservable, 
     55                        new UpdateValueStrategy(false, 
     56                                UpdateValueStrategy.POLICY_NEVER), null); 
     57                dbc.bindValue(SWTObservables.observeText( 
     58                        detailComposite.getDescText(), SWT.None), descObservable, 
     59                        new UpdateValueStrategy(false, 
     60                                UpdateValueStrategy.POLICY_NEVER), null); 
     61            } 
     62        }); 
    2163    } 
    2264 
    23     private void createDetailComposite(Composite parent, 
     65    private ProjectDetailComposite createDetailComposite(Composite parent, 
    2466            ProjectComponentsFactory factory) { 
    2567        GridData gridData = new GridData(); 
    26         //gridData.horizontalAlignment = GridData.FILL; 
    27         //gridData.grabExcessHorizontalSpace = true; 
    28         //gridData.grabExcessVerticalSpace = true; 
    29         //gridData.verticalAlignment = GridData.FILL; 
    30         Composite composite = factory.createComposite(ProjectDetailComposite.class, parent, SWT.NONE); 
     68        ProjectDetailComposite composite = factory.createComposite(ProjectDetailComposite.class, parent, SWT.NONE); 
    3169        composite.setLayoutData(gridData); 
     70         
     71        return composite; 
    3272    } 
    3373 
    34     private void createListComposite(Composite parent, 
     74    private ProjectListComposite createListComposite(Composite parent, 
    3575            ProjectComponentsFactory factory) { 
    3676        GridData gridData = new GridData(); 
     
    3878        gridData.grabExcessHorizontalSpace = true; 
    3979        gridData.verticalAlignment = GridData.CENTER; 
    40         Composite composite = factory.createComposite(ProjectListComposite.class, parent, SWT.NONE); 
    41         //composite.setLayout(new GridLayout()); 
     80        ProjectListComposite composite = factory.createComposite(ProjectListComposite.class, parent, SWT.NONE); 
    4281        composite.setLayoutData(gridData); 
     82         
     83        return composite; 
    4384    } 
    4485