Mercurial > hg > thermostat-tools-eclipse
changeset 62:52d63c65f7bb
Use jface data binding for extensions page
author | Omair Majid <omajid@redhat.com> |
---|---|
date | Thu, 02 Jan 2014 10:52:35 -0500 |
parents | 0f80f81a2773 |
children | fb4fcb5bb4ac |
files | META-INF/MANIFEST.MF src/com/redhat/thermostat/plugin/eclipse/editor/ExtensionEditPage.java src/com/redhat/thermostat/plugin/eclipse/model/Extension.java |
diffstat | 3 files changed, 74 insertions(+), 54 deletions(-) [+] |
line wrap: on
line diff
--- a/META-INF/MANIFEST.MF Thu Jan 02 08:56:54 2014 -0500 +++ b/META-INF/MANIFEST.MF Thu Jan 02 10:52:35 2014 -0500 @@ -15,6 +15,12 @@ org.eclipse.jdt.core;bundle-version="3.9.0", org.eclipse.ui.forms;bundle-version="3.6.0", org.eclipse.wst.sse.ui;bundle-version="1.3.200", - org.junit;bundle-version="4.10.0" + org.junit;bundle-version="4.10.0", + org.eclipse.core.databinding, + org.eclipse.core.databinding.beans, + org.eclipse.core.databinding.observable, + org.eclipse.core.databinding.property, + org.eclipse.jface.databinding, + com.ibm.icu Bundle-RequiredExecutionEnvironment: JavaSE-1.7 Bundle-ActivationPolicy: lazy
--- a/src/com/redhat/thermostat/plugin/eclipse/editor/ExtensionEditPage.java Thu Jan 02 08:56:54 2014 -0500 +++ b/src/com/redhat/thermostat/plugin/eclipse/editor/ExtensionEditPage.java Thu Jan 02 10:52:35 2014 -0500 @@ -1,10 +1,10 @@ package com.redhat.thermostat.plugin.eclipse.editor; -import java.util.List; - -import org.eclipse.jface.viewers.ArrayContentProvider; +import org.eclipse.core.databinding.DataBindingContext; +import org.eclipse.core.databinding.beans.BeansObservables; +import org.eclipse.core.databinding.observable.list.IObservableList; +import org.eclipse.jface.databinding.viewers.ObservableListContentProvider; import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.window.Window; @@ -24,23 +24,23 @@ import org.eclipse.ui.forms.widgets.TableWrapData; import org.eclipse.ui.forms.widgets.TableWrapLayout; +import com.redhat.thermostat.plugin.eclipse.model.BundleInformation; import com.redhat.thermostat.plugin.eclipse.model.Extension; import com.redhat.thermostat.plugin.eclipse.model.PluginModel; -import com.redhat.thermostat.plugin.eclipse.model.PluginModel.PluginModelChangeListener; public class ExtensionEditPage implements IDetailsPage { private FormToolkit toolkit; private PluginModel model; - private TableViewer bundleViewer; - private String extensionName; + private TableViewer bundlesTableViewer; + + private Extension extensionModel; - private PluginModelChangeListener modelRefresher = new PluginModelChangeListener() { - @Override - public void modelChanged() { - updateFromModel(); - } - }; + private DataBindingContext bindingContext; + + public ExtensionEditPage() { + // no-op + } public void setModel(PluginModel model) { this.model = model; @@ -53,24 +53,27 @@ @Override public void dispose() { - model.removeModelChangeListener(modelRefresher); + // no-op } @Override public boolean isDirty() { - Extension extensionModel = model.getExtension(extensionName); if (extensionModel == null) { return false; } + Extension extensionInMasterModel = model.getExtension(extensionModel.getName()); + if (extensionInMasterModel == null) { + return false; + } + // TODO change this is-content-different into is-content-dirty - return !extensionModel.getBundles().equals(BundleInformationHelpers.getBundles((List<String>) bundleViewer.getInput())); + return !extensionInMasterModel.equals(extensionModel); } @Override public void commit(boolean onSave) { - System.out.println("[" + extensionName + "] commit(" + onSave + ")"); - updateModel(); + model.updateExtension(extensionModel); } @Override @@ -93,14 +96,19 @@ @Override public void refresh() { - updateFromModel(); + // no-op } @Override public void selectionChanged(IFormPart part, ISelection selection) { - extensionName = (String) ((IStructuredSelection)selection).getFirstElement(); - updateFromModel(); - System.out.println("[" + extensionName + "] selectionChanged"); + if (bindingContext != null) { + bindingContext.dispose(); + } + + String extensionName = (String) ((IStructuredSelection)selection).getFirstElement(); + extensionModel = model.getExtension(extensionName); + + bindingContext = initDataBindings(); } @Override @@ -120,7 +128,6 @@ section.setLayoutData(tableData); section.setText("Extension details"); - section.setDescription("Items marked with * are required"); Composite sectionContents = toolkit.createComposite(section); section.setClient(sectionContents); @@ -139,11 +146,10 @@ bundles.setClient(bundleContents); bundleContents.setLayout(new GridLayout(2, false)); - Table list = toolkit.createTable(bundleContents, SWT.BORDER | SWT.V_SCROLL); - list.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); - bundleViewer = new TableViewer(list); - IStructuredContentProvider contentProvider = ArrayContentProvider.getInstance(); - bundleViewer.setContentProvider(contentProvider); + Table bundlesTable = toolkit.createTable(bundleContents, SWT.BORDER | SWT.V_SCROLL); + bundlesTable.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); + + bundlesTableViewer = new TableViewer(bundlesTable); Composite buttonComposite = toolkit.createComposite(bundleContents); buttonComposite.setLayout(new GridLayout(1, false)); @@ -156,9 +162,7 @@ NewBundleDialog dialog = new NewBundleDialog(sectionContents.getShell()); dialog.create(); if (dialog.open() == Window.OK) { - List<String> viewModel = (List<String>) bundleViewer.getInput(); - viewModel.add(BundleInformationHelpers.getString(dialog.getBundle())); - bundleViewer.setInput(viewModel); + extensionModel.addBundle(dialog.getBundle()); } } }); @@ -168,34 +172,23 @@ remove.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { - Object selectedItem = ((IStructuredSelection)bundleViewer.getSelection()).getFirstElement(); - List<?> viewModel = (List<?>) bundleViewer.getInput(); - viewModel.remove(selectedItem); - bundleViewer.setInput(viewModel); + BundleInformation selectedItem = (BundleInformation) + ((IStructuredSelection)bundlesTableViewer.getSelection()).getFirstElement(); + extensionModel.removeBundle(selectedItem); } }); + } - private void updateFromModel() { - if (extensionName == null) { - return; - } + private DataBindingContext initDataBindings() { + DataBindingContext bindingContext = new DataBindingContext(); - Extension extensionModel = model.getExtension(extensionName); - - // extension removed? - if (extensionModel == null) { - return; - } + ObservableListContentProvider listContentProvider = new ObservableListContentProvider(); + bundlesTableViewer.setContentProvider(listContentProvider); - bundleViewer.setInput(BundleInformationHelpers.getStrings(extensionModel.getBundles())); - } + IObservableList bundlesModel = BeansObservables.observeList(extensionModel, "bundles"); + bundlesTableViewer.setInput(bundlesModel); - private void updateModel() { - Extension updated = new Extension(extensionName, - BundleInformationHelpers.getBundles((List<String>) bundleViewer.getInput())); - - model.updateExtension(updated); + return bindingContext; } - }
--- a/src/com/redhat/thermostat/plugin/eclipse/model/Extension.java Thu Jan 02 08:56:54 2014 -0500 +++ b/src/com/redhat/thermostat/plugin/eclipse/model/Extension.java Thu Jan 02 10:52:35 2014 -0500 @@ -1,6 +1,7 @@ package com.redhat.thermostat.plugin.eclipse.model; import java.util.List; +import java.util.Objects; public class Extension extends ModelObject { @@ -22,6 +23,7 @@ firePropertyChange("name", this.name, this.name = name); } + /** Do not modify the returned list */ public List<BundleInformation> getBundles() { return this.bundles; } @@ -30,4 +32,23 @@ firePropertyChange("bundles", this.bundles, this.bundles = bundles); } + public void addBundle(BundleInformation bundle) { + bundles.add(bundle); + firePropertyChange("bundles", null, bundles); + } + + public void removeBundle(BundleInformation bundle) { + bundles.remove(bundle); + firePropertyChange("bundles", null, bundles); + } + + @Override + public boolean equals(Object obj) { + if (!(obj instanceof Extension)) { + return false; + } + Extension other = (Extension) obj; + return Objects.equals(this.name, other.name) && Objects.equals(this.bundles, other.bundles); + } + } \ No newline at end of file