Advertisement
Guest User

Master detail binding with nested properties

a guest
May 6th, 2011
299
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 7.31 KB | None | 0 0
  1. package master.detail.binding.test;
  2.  
  3. import java.beans.PropertyChangeListener;
  4. import java.beans.PropertyChangeSupport;
  5.  
  6. import org.eclipse.core.databinding.DataBindingContext;
  7. import org.eclipse.core.databinding.UpdateValueStrategy;
  8. import org.eclipse.core.databinding.beans.BeansObservables;
  9. import org.eclipse.core.databinding.observable.value.IValueChangeListener;
  10. import org.eclipse.core.databinding.observable.value.ValueChangeEvent;
  11. import org.eclipse.jface.databinding.swt.SWTObservables;
  12. import org.eclipse.jface.databinding.viewers.IViewerObservableValue;
  13. import org.eclipse.jface.databinding.viewers.ViewersObservables;
  14. import org.eclipse.jface.viewers.IStructuredContentProvider;
  15. import org.eclipse.jface.viewers.ITableLabelProvider;
  16. import org.eclipse.jface.viewers.LabelProvider;
  17. import org.eclipse.jface.viewers.TableViewer;
  18. import org.eclipse.jface.viewers.Viewer;
  19. import org.eclipse.swt.SWT;
  20. import org.eclipse.swt.graphics.Image;
  21. import org.eclipse.swt.layout.RowLayout;
  22. import org.eclipse.swt.widgets.Composite;
  23. import org.eclipse.swt.widgets.Label;
  24. import org.eclipse.ui.ISharedImages;
  25. import org.eclipse.ui.PlatformUI;
  26. import org.eclipse.ui.part.ViewPart;
  27.  
  28. public class View extends ViewPart {
  29.   class Model {
  30.     PropertyChangeSupport changes = new PropertyChangeSupport(this);
  31.  
  32.     Model2 model2;
  33.  
  34.     public Model(Model2 model2) {
  35.       this.model2 = model2;
  36.     }
  37.  
  38.     public void addPropertyChangeListener(PropertyChangeListener listener) {
  39.       changes.addPropertyChangeListener(listener);
  40.     }
  41.  
  42.     public void addPropertyChangeListener(String propertyName,
  43.         PropertyChangeListener listener) {
  44.       changes.addPropertyChangeListener(propertyName, listener);
  45.     }
  46.  
  47.     public void removePropertyChangeListener(PropertyChangeListener listener) {
  48.       changes.removePropertyChangeListener(listener);
  49.     }
  50.  
  51.     public void removePropertyChangeListener(String propertyName,
  52.         PropertyChangeListener listener) {
  53.       changes.removePropertyChangeListener(propertyName, listener);
  54.     }
  55.  
  56.     public Model2 getModel2() {
  57.       return model2;
  58.     }
  59.  
  60.     public void setModel2(Model2 model2) {
  61.       Model2 old = this.model2;
  62.       this.model2 = model2;
  63.       changes.firePropertyChange("model2", old, model2);
  64.     }
  65.  
  66.     @Override
  67.     public String toString() {
  68.       return "model2: " + model2.getText();
  69.     }
  70.   }
  71.  
  72.   class Model2 {
  73.     PropertyChangeSupport changes = new PropertyChangeSupport(this);
  74.  
  75.     String text;
  76.  
  77.     public Model2(String text) {
  78.       this.text = text;
  79.     }
  80.  
  81.     public void addPropertyChangeListener(PropertyChangeListener listener) {
  82.       changes.addPropertyChangeListener(listener);
  83.     }
  84.  
  85.     public void addPropertyChangeListener(String propertyName,
  86.         PropertyChangeListener listener) {
  87.       changes.addPropertyChangeListener(propertyName, listener);
  88.     }
  89.  
  90.     public String getText() {
  91.       return text;
  92.     }
  93.  
  94.     public void removePropertyChangeListener(PropertyChangeListener listener) {
  95.       changes.removePropertyChangeListener(listener);
  96.     }
  97.  
  98.     public void removePropertyChangeListener(String propertyName,
  99.         PropertyChangeListener listener) {
  100.       changes.removePropertyChangeListener(propertyName, listener);
  101.     }
  102.  
  103.     public void setText(String text) {
  104.       String old = this.text;
  105.       this.text = text;
  106.       changes.firePropertyChange("text", old, text);
  107.     }
  108.  
  109.     @Override
  110.     public String toString() {
  111.       return text;
  112.     }
  113.   }
  114.  
  115.   /**
  116.    * The content provider class is responsible for providing objects to the
  117.    * view. It can wrap existing objects in adapters or simply return objects
  118.    * as-is. These objects may be sensitive to the current input of the view,
  119.    * or ignore it and always show the same content (like Task List, for
  120.    * example).
  121.    */
  122.   class ViewContentProvider implements IStructuredContentProvider {
  123.     public void dispose() {
  124.     }
  125.  
  126.     public Object[] getElements(Object parent) {
  127.       if (parent instanceof Object[]) {
  128.         return (Object[]) parent;
  129.       }
  130.       return new Object[0];
  131.     }
  132.  
  133.     public void inputChanged(Viewer v, Object oldInput, Object newInput) {
  134.     }
  135.   }
  136.  
  137.   class ViewLabelProvider extends LabelProvider implements ITableLabelProvider {
  138.     public Image getColumnImage(Object obj, int index) {
  139.       return getImage(obj);
  140.     }
  141.  
  142.     public String getColumnText(Object obj, int index) {
  143.       return getText(obj);
  144.     }
  145.  
  146.     public Image getImage(Object obj) {
  147.       return PlatformUI.getWorkbench().getSharedImages()
  148.           .getImage(ISharedImages.IMG_OBJ_ELEMENT);
  149.     }
  150.   }
  151.  
  152.   public static final String ID = "master.detail.binding.test.view";
  153.  
  154.   PropertyChangeSupport changes = new PropertyChangeSupport(this);
  155.  
  156.   String text;
  157.  
  158.   private Label selection;
  159.  
  160.   private TableViewer viewer;
  161.  
  162.   public void addPropertyChangeListener(PropertyChangeListener listener) {
  163.     changes.addPropertyChangeListener(listener);
  164.   }
  165.  
  166.   public void addPropertyChangeListener(String propertyName,
  167.       PropertyChangeListener listener) {
  168.     changes.addPropertyChangeListener(propertyName, listener);
  169.   }
  170.  
  171.   /**
  172.    * This is a callback that will allow us to create the viewer and initialize
  173.    * it.
  174.    */
  175.   public void createPartControl(Composite parent) {
  176.     viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
  177.     viewer.setContentProvider(new ViewContentProvider());
  178.     viewer.setLabelProvider(new ViewLabelProvider());
  179.     // Provide the input to the ContentProvider
  180.     viewer.setInput(new Model[] { new Model(new Model2("One")),
  181.         new Model(new Model2("Two")), new Model(new Model2("Three")) });
  182.  
  183.     selection = new Label(parent, SWT.NONE);
  184.  
  185.     DataBindingContext ctx = new DataBindingContext();
  186.  
  187.     IViewerObservableValue ssel = ViewersObservables
  188.         .observeSinglePostSelection(viewer);
  189.     ctx.bindValue(BeansObservables.observeDetailValue(ssel, "model2.text",
  190.         String.class), BeansObservables.observeValue(this, "text"),
  191.         new UpdateValueStrategy(UpdateValueStrategy.POLICY_UPDATE),
  192.         new UpdateValueStrategy(UpdateValueStrategy.POLICY_UPDATE));
  193.     ctx.bindValue(SWTObservables.observeText(selection),
  194.         BeansObservables.observeDetailValue(ssel, "model2.text", String.class),
  195.         new UpdateValueStrategy(UpdateValueStrategy.POLICY_NEVER),
  196.         new UpdateValueStrategy(UpdateValueStrategy.POLICY_UPDATE));
  197.  
  198.     ssel.addValueChangeListener(new IValueChangeListener() {
  199.       @Override
  200.       public void handleValueChange(ValueChangeEvent event) {
  201.         System.out.println(event.diff.getNewValue());
  202.       }
  203.     });
  204.   }
  205.  
  206.   public void removePropertyChangeListener(PropertyChangeListener listener) {
  207.     changes.removePropertyChangeListener(listener);
  208.   }
  209.  
  210.   public void removePropertyChangeListener(String propertyName,
  211.       PropertyChangeListener listener) {
  212.     changes.removePropertyChangeListener(propertyName, listener);
  213.   }
  214.  
  215.   /**
  216.    * Passing the focus request to the viewer's control.
  217.    */
  218.   public void setFocus() {
  219.     viewer.getControl().setFocus();
  220.   }
  221.  
  222.   public String getText() {
  223.     return text;
  224.   }
  225.  
  226.   public void setText(String text) {
  227.     String old = this.text;
  228.     this.text = text;
  229.     changes.firePropertyChange("text", old, text);
  230.     System.out.println("setText(\"" + text + "\")");
  231.   }
  232.  
  233. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement