Author: adietish
Date: 2011-01-17 06:47:04 -0500 (Mon, 17 Jan 2011)
New Revision: 28288
Modified:
trunk/deltacloud/plugins/org.jboss.tools.deltacloud.ui/src/org/jboss/tools/deltacloud/ui/views/cloudelements/AbstractCloudElementViewLabelAndContentProvider.java
trunk/deltacloud/plugins/org.jboss.tools.deltacloud.ui/src/org/jboss/tools/deltacloud/ui/views/cloudelements/ImageViewLabelAndContentProvider.java
trunk/deltacloud/plugins/org.jboss.tools.deltacloud.ui/src/org/jboss/tools/deltacloud/ui/views/cloudelements/InstanceViewLabelAndContentProvider.java
Log:
[JBIDE-8104] moved to a viewer.refresh() based approach (was: add/remove items manually)
Modified:
trunk/deltacloud/plugins/org.jboss.tools.deltacloud.ui/src/org/jboss/tools/deltacloud/ui/views/cloudelements/AbstractCloudElementViewLabelAndContentProvider.java
===================================================================
---
trunk/deltacloud/plugins/org.jboss.tools.deltacloud.ui/src/org/jboss/tools/deltacloud/ui/views/cloudelements/AbstractCloudElementViewLabelAndContentProvider.java 2011-01-17
09:47:42 UTC (rev 28287)
+++
trunk/deltacloud/plugins/org.jboss.tools.deltacloud.ui/src/org/jboss/tools/deltacloud/ui/views/cloudelements/AbstractCloudElementViewLabelAndContentProvider.java 2011-01-17
11:47:04 UTC (rev 28288)
@@ -11,12 +11,14 @@
package org.jboss.tools.deltacloud.ui.views.cloudelements;
import java.beans.PropertyChangeListener;
+import java.text.MessageFormat;
+import java.util.Collections;
+import java.util.concurrent.atomic.AtomicReference;
import org.eclipse.core.runtime.Assert;
import org.eclipse.jface.viewers.BaseLabelProvider;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.swt.widgets.Display;
import org.jboss.tools.deltacloud.core.DeltaCloud;
import org.jboss.tools.deltacloud.core.DeltaCloudException;
import org.jboss.tools.deltacloud.core.ICloudElementFilter;
@@ -37,25 +39,24 @@
private ICloudElementFilter<CLOUDELEMENT> localFilter;
private TableViewer viewer;
+ private AtomicReference<CLOUDELEMENT[]> elementsReference = new
AtomicReference<CLOUDELEMENT[]>();
+
@Override
public Object[] getElements(Object input) {
- /*
- * items are added in asynchronous manner.
- *
- * @see #inputChanged
- *
- * @see #asyncAddCloudElements
- */
- return new Object[] {};
+ try {
+ return filter(getFilter(currentCloud), elementsReference.get());
+ } catch (DeltaCloudException e) {
+ ErrorUtils.handleError(
+ "Error", MessageFormat.format(
+ "Could not filter the elements for cloud \"{0}\"",
currentCloud.getName()),
+ e, viewer.getControl().getDisplay().getActiveShell());
+ return new Object[] {};
+ }
}
- public void setFilter(ICloudElementFilter<CLOUDELEMENT> filter) {
- this.localFilter = filter;
- }
-
@Override
public void inputChanged(final Viewer viewer, Object oldInput, Object newInput) {
- if (!(newInput instanceof DeltaCloud || newInput != null)) {
+ if (!(newInput instanceof DeltaCloud)) {
return;
}
Assert.isLegal(viewer instanceof TableViewer);
@@ -63,41 +64,55 @@
removeListener(currentCloud);
this.currentCloud = (DeltaCloud) newInput;
addPropertyChangeListener(currentCloud);
- asyncAddCloudElements(currentCloud);
+ asyncGetCloudElements(currentCloud);
}
- protected void updateCloudElements(CLOUDELEMENT[] elements, DeltaCloud cloud) {
- if (isCurrentCloud(cloud)) {
- addToViewer(elements);
- }
+ protected void setCloudElements(CLOUDELEMENT[] elements) {
+ this.elementsReference.set(elements);
+ refreshViewer();
}
- private boolean isCurrentCloud(final DeltaCloud cloud) {
- return cloud != null
- && currentCloud != null
- && cloud.getName().equals(currentCloud.getName());
- }
-
- protected void addToViewer(final CLOUDELEMENT[] cloudElements) {
+ private void refreshViewer() {
viewer.getControl().getDisplay().asyncExec(new Runnable() {
@Override
public void run() {
- try {
- clearTableViewer();
- Object[] elements = filter(getFilter(currentCloud), cloudElements);
- viewer.add(elements);
- } catch (DeltaCloudException e) {
- // TODO: internationalize strings
- ErrorUtils.handleError(
- "Error", "Could not filter the elements for cloud " +
currentCloud.getName(),
- e, Display.getDefault().getActiveShell());
-
- }
+ viewer.refresh();
}
});
}
+ protected boolean isCurrentCloud(final DeltaCloud cloud) {
+ return cloud != null
+ && currentCloud != null
+ && cloud.getName().equals(currentCloud.getName());
+ }
+
+ // protected void addToViewer(final CLOUDELEMENT[] cloudElements) {
+ // viewer.getControl().getDisplay().asyncExec(new Runnable() {
+ //
+ // @Override
+ // public void run() {
+ // try {
+ // clearTableViewer();
+ // Object[] elements = filter(getFilter(currentCloud), cloudElements);
+ // viewer.add(elements);
+ // } catch (DeltaCloudException e) {
+ // // TODO: internationalize strings
+ // ErrorUtils.handleError(
+ // "Error", "Could not filter the elements for cloud " +
+ // currentCloud.getName(),
+ // e, Display.getDefault().getActiveShell());
+ //
+ // }
+ // }
+ // });
+ // }
+
+ public void setFilter(ICloudElementFilter<CLOUDELEMENT> filter) {
+ this.localFilter = filter;
+ }
+
private ICloudElementFilter<CLOUDELEMENT> getFilter(DeltaCloud cloud) {
if (localFilter != null) {
return localFilter;
@@ -130,12 +145,12 @@
}
protected void clearTableViewer() {
- viewer.refresh();
+ viewer.setInput(Collections.emptyList());
}
protected abstract ICloudElementFilter<CLOUDELEMENT> getCloudFilter(DeltaCloud
cloud);
- protected abstract void asyncAddCloudElements(DeltaCloud cloud);
+ protected abstract void asyncGetCloudElements(DeltaCloud cloud);
protected abstract void addPropertyChangeListener(DeltaCloud cloud);
}
Modified:
trunk/deltacloud/plugins/org.jboss.tools.deltacloud.ui/src/org/jboss/tools/deltacloud/ui/views/cloudelements/ImageViewLabelAndContentProvider.java
===================================================================
---
trunk/deltacloud/plugins/org.jboss.tools.deltacloud.ui/src/org/jboss/tools/deltacloud/ui/views/cloudelements/ImageViewLabelAndContentProvider.java 2011-01-17
09:47:42 UTC (rev 28287)
+++
trunk/deltacloud/plugins/org.jboss.tools.deltacloud.ui/src/org/jboss/tools/deltacloud/ui/views/cloudelements/ImageViewLabelAndContentProvider.java 2011-01-17
11:47:04 UTC (rev 28288)
@@ -99,32 +99,36 @@
}
@Override
- protected void asyncAddCloudElements(final DeltaCloud cloud) {
+ protected void asyncGetCloudElements(final DeltaCloud cloud) {
if (cloud == null) {
clearTableViewer();
return;
}
- new AbstractCloudElementJob(
- MessageFormat.format("Get images from cloud {0}", cloud.getName()), cloud,
CLOUDELEMENT.IMAGES) {
+ if (isCurrentCloud(cloud)) {
+ new AbstractCloudElementJob(
+ MessageFormat.format("Get images from cloud {0}", cloud.getName()), cloud,
CLOUDELEMENT.IMAGES) {
- @Override
- protected IStatus doRun(IProgressMonitor monitor) throws DeltaCloudException {
- try {
- addToViewer(cloud.getImages());
- return Status.OK_STATUS;
- } catch (DeltaCloudException e) {
- throw e;
+ @Override
+ protected IStatus doRun(IProgressMonitor monitor) throws DeltaCloudException {
+ try {
+ setCloudElements(cloud.getImages());
+ return Status.OK_STATUS;
+ } catch (DeltaCloudException e) {
+ throw e;
+ }
}
- }
- }.schedule();
+ }.schedule();
+ }
}
@Override
public void propertyChange(PropertyChangeEvent event) {
if (DeltaCloud.PROP_IMAGES.equals(event.getPropertyName())) {
DeltaCloud cloud = (DeltaCloud) event.getSource();
- DeltaCloudImage[] images = (DeltaCloudImage[]) event.getNewValue();
- updateCloudElements(images, cloud);
+ if (isCurrentCloud(cloud)) {
+ DeltaCloudImage[] images = (DeltaCloudImage[]) event.getNewValue();
+ setCloudElements(images);
+ }
}
}
Modified:
trunk/deltacloud/plugins/org.jboss.tools.deltacloud.ui/src/org/jboss/tools/deltacloud/ui/views/cloudelements/InstanceViewLabelAndContentProvider.java
===================================================================
---
trunk/deltacloud/plugins/org.jboss.tools.deltacloud.ui/src/org/jboss/tools/deltacloud/ui/views/cloudelements/InstanceViewLabelAndContentProvider.java 2011-01-17
09:47:42 UTC (rev 28287)
+++
trunk/deltacloud/plugins/org.jboss.tools.deltacloud.ui/src/org/jboss/tools/deltacloud/ui/views/cloudelements/InstanceViewLabelAndContentProvider.java 2011-01-17
11:47:04 UTC (rev 28288)
@@ -124,32 +124,37 @@
}
@Override
- protected void asyncAddCloudElements(final DeltaCloud cloud) {
+ protected void asyncGetCloudElements(final DeltaCloud cloud) {
if (cloud == null) {
clearTableViewer();
return;
}
- new AbstractCloudElementJob(
- MessageFormat.format("Get instances from cloud {0}", cloud.getName()),
cloud, CLOUDELEMENT.INSTANCES) {
+ if (isCurrentCloud(cloud)) {
+ new AbstractCloudElementJob(
+ MessageFormat.format("Get instances from cloud {0}", cloud.getName()),
cloud,
+ CLOUDELEMENT.INSTANCES) {
- @Override
- protected IStatus doRun(IProgressMonitor monitor) throws DeltaCloudException {
- try {
- addToViewer(cloud.getInstances());
- return Status.OK_STATUS;
- } catch (DeltaCloudException e) {
- throw e;
+ @Override
+ protected IStatus doRun(IProgressMonitor monitor) throws DeltaCloudException {
+ try {
+ setCloudElements(cloud.getInstances());
+ return Status.OK_STATUS;
+ } catch (DeltaCloudException e) {
+ throw e;
+ }
}
- }
- }.schedule();
+ }.schedule();
+ }
}
@Override
public void propertyChange(PropertyChangeEvent event) {
if (DeltaCloud.PROP_INSTANCES.equals(event.getPropertyName())) {
DeltaCloud cloud = (DeltaCloud) event.getSource();
- DeltaCloudInstance[] instances = (DeltaCloudInstance[]) event.getNewValue();
- updateCloudElements(instances, cloud);
+ if (isCurrentCloud(cloud)) {
+ DeltaCloudInstance[] instances = (DeltaCloudInstance[]) event.getNewValue();
+ setCloudElements(instances);
+ }
}
}
Show replies by date