Author: adietish
Date: 2010-11-08 08:09:09 -0500 (Mon, 08 Nov 2010)
New Revision: 26326
Added:
trunk/deltacloud/plugins/org.jboss.tools.deltacloud.core/.settings/org.projectusus.core.prefs
trunk/deltacloud/plugins/org.jboss.tools.deltacloud.ui/.settings/org.projectusus.core.prefs
Modified:
trunk/deltacloud/plugins/org.jboss.tools.deltacloud.ui/ChangeLog
trunk/deltacloud/plugins/org.jboss.tools.deltacloud.ui/Deltacloud Tools.launch
trunk/deltacloud/plugins/org.jboss.tools.deltacloud.ui/src/org/jboss/tools/deltacloud/ui/views/CVCategoryElement.java
trunk/deltacloud/plugins/org.jboss.tools.deltacloud.ui/src/org/jboss/tools/deltacloud/ui/views/CVCloudElement.java
trunk/deltacloud/plugins/org.jboss.tools.deltacloud.ui/src/org/jboss/tools/deltacloud/ui/views/CVImagesCategoryElement.java
trunk/deltacloud/plugins/org.jboss.tools.deltacloud.ui/src/org/jboss/tools/deltacloud/ui/views/CVInstancesCategoryElement.java
trunk/deltacloud/plugins/org.jboss.tools.deltacloud.ui/src/org/jboss/tools/deltacloud/ui/views/CVRootElement.java
trunk/deltacloud/plugins/org.jboss.tools.deltacloud.ui/src/org/jboss/tools/deltacloud/ui/views/CloudViewElement.java
Log:
[JBIDE-7513] extracted several common parts (code duplication) to common superclass,
implemented generic selection restoring
Added:
trunk/deltacloud/plugins/org.jboss.tools.deltacloud.core/.settings/org.projectusus.core.prefs
===================================================================
---
trunk/deltacloud/plugins/org.jboss.tools.deltacloud.core/.settings/org.projectusus.core.prefs
(rev 0)
+++
trunk/deltacloud/plugins/org.jboss.tools.deltacloud.core/.settings/org.projectusus.core.prefs 2010-11-08
13:09:09 UTC (rev 26326)
@@ -0,0 +1,3 @@
+#Sun Nov 07 00:34:37 CET 2010
+eclipse.preferences.version=1
+ususProject=true
Property changes on:
trunk/deltacloud/plugins/org.jboss.tools.deltacloud.core/.settings/org.projectusus.core.prefs
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added:
trunk/deltacloud/plugins/org.jboss.tools.deltacloud.ui/.settings/org.projectusus.core.prefs
===================================================================
---
trunk/deltacloud/plugins/org.jboss.tools.deltacloud.ui/.settings/org.projectusus.core.prefs
(rev 0)
+++
trunk/deltacloud/plugins/org.jboss.tools.deltacloud.ui/.settings/org.projectusus.core.prefs 2010-11-08
13:09:09 UTC (rev 26326)
@@ -0,0 +1,3 @@
+#Sun Nov 07 00:34:41 CET 2010
+eclipse.preferences.version=1
+ususProject=true
Property changes on:
trunk/deltacloud/plugins/org.jboss.tools.deltacloud.ui/.settings/org.projectusus.core.prefs
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Modified: trunk/deltacloud/plugins/org.jboss.tools.deltacloud.ui/ChangeLog
===================================================================
--- trunk/deltacloud/plugins/org.jboss.tools.deltacloud.ui/ChangeLog 2010-11-08 11:21:07
UTC (rev 26325)
+++ trunk/deltacloud/plugins/org.jboss.tools.deltacloud.ui/ChangeLog 2010-11-08 13:09:09
UTC (rev 26326)
@@ -1,3 +1,11 @@
+2010-11-08 André Dietisheim <adietish(a)redhat.com>
+
+ * src/org/jboss/tools/deltacloud/ui/views/CVCategoryElement.java
(getChildrenWithSameElement):
+ * src/org/jboss/tools/deltacloud/ui/views/CVInstancesCategoryElement.java (dispose):
+ (CVInstancesCategoryElement):
+ (listChanged):
+ [JBIDE-7513] extracted several common parts (code duplication) to common superclass,
implemented generic selection restoring
+
2010-11-05 André Dietisheim <adietish(a)redhat.com>
* src/org/jboss/tools/deltacloud/ui/views/InstanceViewLabelAndContentProvider.java
(getStatusIcon):
Modified: trunk/deltacloud/plugins/org.jboss.tools.deltacloud.ui/Deltacloud Tools.launch
===================================================================
--- trunk/deltacloud/plugins/org.jboss.tools.deltacloud.ui/Deltacloud
Tools.launch 2010-11-08 11:21:07 UTC (rev 26325)
+++ trunk/deltacloud/plugins/org.jboss.tools.deltacloud.ui/Deltacloud
Tools.launch 2010-11-08 13:09:09 UTC (rev 26326)
@@ -11,7 +11,7 @@
<booleanAttribute key="clearwslog" value="false"/>
<stringAttribute key="configLocation"
value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/Deltacloud
Tools"/>
<booleanAttribute key="default" value="false"/>
-<stringAttribute key="deselected_workspace_plugins"
value="org.eclipse.epp.usagedata.recording,org.eclipse.epp.usagedata.gathering,org.mozilla.xulrunner.cocoa.macosx,org.mozilla.xulrunner.gtk.linux.x86_64,org.jboss.tools.usage.test,org.mozilla.xulrunner.win32.win32.x86,com.jboss.jbds.usage.branding,org.mozilla.xulrunner.gtk.linux.x86,org.eclipse.epp.usagedata.ui,org.mozilla.xulrunner.carbon.macosx,org.mozilla.xpcom,org.jboss.tools.tests"/>
+<stringAttribute key="deselected_workspace_plugins"
value="org.eclipse.epp.usagedata.recording,org.eclipse.epp.usagedata.gathering,org.mozilla.xulrunner.cocoa.macosx,org.mozilla.xulrunner.gtk.linux.x86_64,org.mozilla.xulrunner.win32.win32.x86,com.jboss.jbds.usage.branding,org.jboss.tools.usage.test,org.mozilla.xulrunner.gtk.linux.x86,org.eclipse.epp.usagedata.ui,org.mozilla.xulrunner.carbon.macosx,org.mozilla.xpcom,org.jboss.tools.tests"/>
<booleanAttribute key="includeOptional" value="true"/>
<stringAttribute key="location"
value="${workspace_loc}/../runtime-New_configuration(1)"/>
<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
@@ -23,8 +23,8 @@
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS"
value="-Dosgi.requiredJavaVersion=1.5 -XX:MaxPermSize=256m -Xms40m
-Xmx1024m"/>
<stringAttribute key="pde.version" value="3.3"/>
<stringAttribute key="product" value="org.eclipse.sdk.ide"/>
-<stringAttribute key="selected_target_plugins"
value="org.apache.commons.httpclient*3.1.0.v201005080502@default:default,org.eclipse.ant.core@default:default,org.eclipse.core.jobs@default:default,org.eclipse.swtbot.ant.optional.junit3@default:false,org.eclipse.equinox.http.registry@default:default,org.eclipse.jdt.debug@default:default,org.eclipse.swtbot.ant.optional.junit4@default:false,org.eclipse.core.filesystem.linux.x86_64@default:false,org.eclipse.core.databinding.observable@default:default,org.eclipse.core.net@default:default,org.apache.commons.el@default:default,org.eclipse.core.runtime.compatibility.registry@default:false,org.junit*4.8.1.v4_8_1_v20100427-1100@default:default,org.eclipse.equinox.registry@default:default,org.eclipse.ltk.ui.refactoring@default:default,org.eclipse.osgi@-1:true,org.eclipse.emf.edit@default:default,org.apache.ant@default:default,org.eclipse.core.runtime@default:true,org.eclipse.equinox.app@default:default,org.eclipse.debug.core@default:def!
ault,org.eclipse.help.webapp@default:default,org.eclipse.wst.common.emfworkbench.integration@default:default,org.eclipse.equinox.http.jetty@default:default,org.eclipse.core.resources@default:default,org.eclipse.debug.ui@default:default,org.eclipse.equinox.p2.core@default:default,org.eclipse.equinox.security@default:default,org.apache.commons.codec*1.3.0.v20100518-1140@default:default,org.mortbay.jetty.util@default:default,org.eclipse.ui.workbench@default:default,org.eclipse.core.databinding@default:default,org.eclipse.ui.views.properties.tabbed@default:default,org.apache.xml.serializer@default:default,org.eclipse.jface@default:default,org.eclipse.emf.common@default:default,org.eclipse.rse.services@default:default,org.eclipse.ui.editors@default:default,org.eclipse.jdt.compiler.apt@default:false,org.eclipse.team.ui@default:default,org.eclipse.ltk.core.refactoring@default:default,org.eclipse.sdk@default:default,org.eclipse.help.appserver@default:default,org.eclipse.emf.ecore.x!
mi@default:default,org.eclipse.core.net.linux.x86_64@default:f!
alse,org
.eclipse.ecf.filetransfer@default:default,com.ibm.icu@default:default,org.eclipse.jface.text@default:default,org.eclipse.jem.util@default:default,org.eclipse.wst.validation@default:default,org.eclipse.ui.ide.application@default:default,org.eclipse.ui.ide@default:default,org.eclipse.search@default:default,org.eclipse.emf.ecore.change@default:default,org.eclipse.jdt.core@default:default,org.eclipse.ecf.provider.filetransfer@default:default,org.eclipse.rse.core@default:default,org.eclipse.text@default:default,org.jboss.tools.common@default:default,org.eclipse.wst.sse.core@default:default,javax.xml@default:default,org.eclipse.ui.navigator@default:default,org.eclipse.swt.gtk.linux.x86_64@default:false,com.instantiations.designer.jdt.fragment@default:false,org.eclipse.ui.forms@default:default,org.mortbay.jetty.server@default:default,org.eclipse.equinox.http.servlet@default:default,org.eclipse.core.expressions@default:default,org.eclipse.osgi.util@default:default,org.eclipse.ui.nav!
igator.resources@default:default,org.apache.jasper@default:default,org.eclipse.equinox.jsp.jasper.registry@default:default,org.eclipse.wst.xml.core@default:default,org.eclipse.swt@default:default,org.eclipse.equinox.p2.metadata@default:default,org.eclipse.ui.views@default:default,org.eclipse.wst.common.project.facet.core@default:default,org.apache.lucene.analysis@default:default,org.eclipse.core.databinding.property@default:default,org.eclipse.equinox.security.ui@default:default,org.eclipse.equinox.preferences@default:default,org.eclipse.equinox.jsp.jasper@default:default,org.eclipse.jface.databinding@default:default,org.eclipse.core.contenttype@default:default,org.eclipse.core.filebuffers@default:default,org.eclipse.core.filesystem@default:default,org.eclipse.equinox.p2.engine@default:default,org.apache.commons.logging*1.0.4.v201005080501@default:default,org.eclipse.help.base@default:default,org.eclipse.jdt.compiler.tool@default:false,org.eclipse.ecf@default:default,org.ec!
lipse.jdt.ui@default:default,org.eclipse.equinox.p2.metadata.r!
epositor
y@default:default,org.hamcrest.core@default:default,org.eclipse.ui.console@default:default,org.eclipse.core.commands@default:default,org.eclipse.compare.core@default:default,org.eclipse.jdt.launching@default:default,org.eclipse.compare@default:default,org.eclipse.ui.cheatsheets@default:default,org.jboss.tools.xulrunner.initializer@default:false,org.apache.lucene@default:default,org.apache.xml.resolver@default:default,org.eclipse.help@default:default,org.eclipse.core.variables@default:default,org.eclipse.jdt.core.manipulation@default:default,org.eclipse.wst.common.uriresolver@default:default,org.eclipse.ecf.identity@default:default,org.eclipse.team.core@default:default,org.eclipse.wst.common.environment@default:default,org.eclipse.equinox.concurrent@default:default,org.eclipse.wst.common.emf@default:default,org.eclipse.ecf.provider.filetransfer.ssl@default:false,javax.servlet@default:default,org.eclipse.equinox.common@2:true,org.eclipse.ui.workbench.texteditor@default:default!
,org.eclipse.ecf.ssl@default:false,org.eclipse.wst.common.core@default:default,org.junit4@default:default,org.eclipse.core.runtime.compatibility.auth@default:default,org.eclipse.core.runtime.compatibility@default:default,org.eclipse.osgi.services@default:default,org.eclipse.wst.common.frameworks@default:default,org.eclipse.equinox.p2.repository@default:default,org.eclipse.emf.ecore@default:default,org.eclipse.update.configurator@3:true,org.eclipse.help.ui@default:default,org.eclipse.core.databinding.beans@default:default,javax.servlet.jsp@default:default,org.apache.xerces@default:default,org.eclipse.ui@default:default"/>
-<stringAttribute key="selected_workspace_plugins"
value="org.jboss.tools.usage@default:default,org.jboss.tools.deltacloud.core@default:default,org.jboss.tools.deltacloud.docs@default:default,org.jboss.tools.deltacloud.test@default:default,org.jboss.tools.common@default:default,org.jruby.jruby@default:default,org.jboss.tools.deltacloud.ui@default:default"/>
+<stringAttribute key="selected_target_plugins"
value="org.eclipse.help.ui@default:default,org.eclipse.team.core@default:default,org.apache.lucene.analysis@default:default,org.jboss.tools.common@default:default,org.eclipse.ecf.provider.filetransfer.ssl@default:false,org.apache.commons.logging*1.0.4.v201005080501@default:default,org.eclipse.wst.validation@default:default,org.eclipse.core.contenttype@default:default,org.eclipse.equinox.http.servlet@default:default,org.eclipse.compare.core@default:default,org.eclipse.equinox.common@2:true,org.eclipse.equinox.security@default:default,org.eclipse.core.runtime@default:true,org.eclipse.compare@default:default,org.eclipse.ui.workbench.texteditor@default:default,org.eclipse.core.databinding.observable@default:default,org.eclipse.core.filesystem.linux.x86_64@default:false,com.instantiations.designer.jdt.fragment@default:false,org.eclipse.ecf@default:default,org.eclipse.jface@default:default,org.eclipse.ui.ide.application@default:defau!
lt,org.eclipse.core.variables@default:default,org.eclipse.wst.common.uriresolver@default:default,javax.xml@default:default,org.eclipse.jdt.compiler.tool@default:false,org.eclipse.core.commands@default:default,org.eclipse.ui.workbench@default:default,org.eclipse.help.base@default:default,org.eclipse.jdt.core@default:default,org.eclipse.core.runtime.compatibility@default:default,org.eclipse.swt@default:default,org.hamcrest.core@default:default,org.eclipse.equinox.http.registry@default:default,org.eclipse.emf.common@default:default,org.apache.lucene@default:default,org.eclipse.ui.ide@default:default,org.junit4@default:default,org.eclipse.core.databinding.beans@default:default,org.eclipse.ant.core@default:default,org.eclipse.core.net.linux.x86_64@default:false,org.eclipse.ui.editors@default:default,org.eclipse.core.filebuffers@default:default,org.eclipse.equinox.jsp.jasper@default:default,org.eclipse.wst.common.core@default:default,javax.servlet.jsp@default:default,org.eclipse.!
jem.util@default:default,org.eclipse.jdt.core.manipulation@def!
ault:def
ault,org.apache.commons.el@default:default,org.mortbay.jetty.server@default:default,org.eclipse.jface.text@default:default,org.eclipse.rse.services@default:default,org.eclipse.ltk.core.refactoring@default:default,org.eclipse.help.appserver@default:default,org.eclipse.osgi.util@default:default,org.eclipse.ltk.ui.refactoring@default:default,org.eclipse.equinox.p2.core@default:default,org.eclipse.wst.common.environment@default:default,org.eclipse.help.webapp@default:default,org.eclipse.core.net@default:default,org.eclipse.osgi@-1:true,org.eclipse.wst.common.emf@default:default,org.apache.commons.codec*1.3.0.v20100518-1140@default:default,org.eclipse.ui.cheatsheets@default:default,org.eclipse.team.ui@default:default,org.eclipse.ui.views@default:default,com.ibm.icu@default:default,org.eclipse.core.runtime.compatibility.registry@default:false,org.eclipse.osgi.services@default:default,org.eclipse.jdt.compiler.apt@default:false,org.eclipse.wst.xml.core@default:default,org.eclipse.sw!
t.gtk.linux.x86_64@default:false,org.eclipse.core.databinding@default:default,org.eclipse.equinox.registry@default:default,org.eclipse.equinox.security.ui@default:default,org.eclipse.equinox.http.jetty@default:default,org.apache.xml.resolver@default:default,org.eclipse.equinox.p2.engine@default:default,org.eclipse.ui.console@default:default,org.eclipse.equinox.concurrent@default:default,org.apache.commons.httpclient*3.1.0.v201005080502@default:default,org.eclipse.debug.ui@default:default,org.eclipse.ui@default:default,org.eclipse.rse.core@default:default,org.eclipse.ecf.filetransfer@default:default,org.eclipse.jdt.launching@default:default,org.junit*4.8.1.v4_8_1_v20100427-1100@default:default,org.eclipse.equinox.p2.metadata.repository@default:default,org.eclipse.ui.forms@default:default,org.mortbay.jetty.util@default:default,org.eclipse.emf.ecore.xmi@default:default,org.eclipse.help@default:default,org.jboss.tools.xulrunner.initializer@default:false,org.eclipse.equinox.app@!
default:default,org.eclipse.jdt.debug@default:default,org.ecli!
pse.core
.jobs@default:default,org.eclipse.wst.common.frameworks@default:default,org.eclipse.core.expressions@default:default,org.eclipse.swtbot.ant.optional.junit4@default:false,org.eclipse.equinox.p2.metadata@default:default,org.eclipse.emf.edit@default:default,org.eclipse.jdt.ui@default:default,org.eclipse.wst.common.emfworkbench.integration@default:default,org.eclipse.core.databinding.property@default:default,org.apache.ant@default:default,org.eclipse.equinox.jsp.jasper.registry@default:default,org.eclipse.equinox.preferences@default:default,org.eclipse.wst.common.project.facet.core@default:default,org.eclipse.core.runtime.compatibility.auth@default:default,org.eclipse.wst.sse.core@default:default,org.apache.xml.serializer@default:default,org.eclipse.ecf.ssl@default:false,org.eclipse.ui.views.properties.tabbed@default:default,org.eclipse.equinox.p2.repository@default:default,javax.servlet@default:default,org.apache.xerces@default:default,org.eclipse.core.resources@default:default!
,org.eclipse.ecf.provider.filetransfer@default:default,org.eclipse.emf.ecore@default:default,org.eclipse.ui.navigator.resources@default:default,org.eclipse.sdk@default:default,org.apache.jasper@default:default,org.eclipse.emf.ecore.change@default:default,org.eclipse.swtbot.ant.optional.junit3@default:false,org.eclipse.text@default:default,org.eclipse.ecf.identity@default:default,org.eclipse.core.filesystem@default:default,org.eclipse.search@default:default,org.eclipse.update.configurator@3:true,org.eclipse.jface.databinding@default:default,org.eclipse.ui.navigator@default:default,org.eclipse.debug.core@default:default"/>
+<stringAttribute key="selected_workspace_plugins"
value="org.jboss.tools.usage@default:default,org.jboss.tools.common@default:default,org.jboss.tools.deltacloud.docs@default:default,org.jboss.tools.deltacloud.core@default:default,org.jboss.tools.deltacloud.ui@default:default,org.jboss.tools.deltacloud.test@default:default,org.jruby.jruby@default:default"/>
<booleanAttribute key="show_selected_only" value="false"/>
<stringAttribute key="templateConfig"
value="${target_home}/configuration/config.ini"/>
<booleanAttribute key="tracing" value="false"/>
Modified:
trunk/deltacloud/plugins/org.jboss.tools.deltacloud.ui/src/org/jboss/tools/deltacloud/ui/views/CVCategoryElement.java
===================================================================
---
trunk/deltacloud/plugins/org.jboss.tools.deltacloud.ui/src/org/jboss/tools/deltacloud/ui/views/CVCategoryElement.java 2010-11-08
11:21:07 UTC (rev 26325)
+++
trunk/deltacloud/plugins/org.jboss.tools.deltacloud.ui/src/org/jboss/tools/deltacloud/ui/views/CVCategoryElement.java 2010-11-08
13:09:09 UTC (rev 26326)
@@ -10,36 +10,138 @@
*******************************************************************************/
package org.jboss.tools.deltacloud.ui.views;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.views.properties.IPropertySource;
+import org.jboss.tools.deltacloud.core.DeltaCloud;
+import org.jboss.tools.deltacloud.core.DeltaCloudImage;
+import org.jboss.tools.deltacloud.core.DeltaCloudInstance;
public abstract class CVCategoryElement extends CloudViewElement {
- public final static int INSTANCES = 0;
- public final static int IMAGES = 1;
-
- protected int type;
protected boolean initialized;
-
- public CVCategoryElement(Object element, String name, int type) {
+ private TreeViewer viewer;
+
+ public CVCategoryElement(Object element, String name, TreeViewer viewer) {
super(element, name);
- this.type = type;
+ this.viewer = viewer;
+ viewer.getControl().addDisposeListener(onDispose());
}
@Override
public Object[] getChildren() {
return super.getChildren();
}
-
+
@Override
public boolean hasChildren() {
return true;
}
-
+
@Override
public IPropertySource getPropertySource() {
// no property source for cathegories
return null;
}
-
+ protected Viewer getViewer() {
+ return viewer;
+ }
+
+ protected void refresh() {
+ Display.getDefault().asyncExec(new Runnable() {
+ @Override
+ public void run() {
+ IStructuredSelection oldSelection = (IStructuredSelection) viewer.getSelection();
+ ((TreeViewer) viewer).refresh(CVCategoryElement.this, false);
+ restoreSelection(oldSelection);
+ }
+ });
+ }
+
+ /**
+ * This is a workaround:
+ *
+ * When a change in the list of instances happens, DeltaCloud notifies this
+ * class with the list of all instances (@see
+ * DeltaCloud#performInstanceAction). This class then removes all children
+ * and readds new children with the same DeltaCloudInstance instances.
+ *
+ * <p>
+ * I also tried an alternative approach where I implemented an equals method
+ * in CVInstanceElement that returns <code>true</code> if both elements
have
+ * the same DeltaCloudInsta instance. The consequence is that the viewer
+ * keeps the selection, but is not aware of a change in the underlying
+ * items. The consequence is that the context-menu does not change its state
+ * (the instance action, that was executed, should disappear) and the
+ * properties view does not update either.
+ *
+ * @param selection
+ *
+ * @see DeltaCloud#performInstanceAction
+ * @see #listChanged
+ */
+ private void restoreSelection(IStructuredSelection selection) {
+ List<?> newSelectedElements = getChildrenWithSameElement(selection.toList());
+ if (newSelectedElements != null && newSelectedElements.size() > 0) {
+ ISelection newSelection = new StructuredSelection(newSelectedElements);
+ viewer.setSelection(newSelection);
+ }
+ }
+
+ /**
+ * Returns the children of this category element that have the same elements
+ * (#getElement) as the given items. This method is used to restore
+ * selection after the {@link CVInstanceElement} or {@link CVImageElement}
+ * have been recreated. They still have the same {@link DeltaCloudInstance}
+ * or {@link DeltaCloudImage}.
+ *
+ * @param elementsToMatch
+ * the elements to match
+ * @return the children with same element
+ *
+ * @see #CloudViewElement#getElement
+ * @see CVInstanceElement
+ * @see CVImageElement
+ */
+ private List<?> getChildrenWithSameElement(List<?> itemsToMatch) {
+ if (itemsToMatch == null || itemsToMatch.size() == 0) {
+ return Collections.EMPTY_LIST;
+ }
+ List<Object> children = new ArrayList<Object>();
+ for (Object member : itemsToMatch) {
+ Object element = ((CloudViewElement) member).getElement();
+ if (element != null) {
+ for (Object child : getChildren()) {
+ Object childElement = ((CloudViewElement) child).getElement();
+ if (element.equals(childElement)) {
+ children.add(child);
+ }
+ }
+ }
+ }
+ return children;
+ }
+
+ private DisposeListener onDispose() {
+ return new DisposeListener() {
+
+ @Override
+ public void widgetDisposed(DisposeEvent e) {
+ dispose();
+ }
+ };
+ }
+
+ protected abstract void dispose();
}
Modified:
trunk/deltacloud/plugins/org.jboss.tools.deltacloud.ui/src/org/jboss/tools/deltacloud/ui/views/CVCloudElement.java
===================================================================
---
trunk/deltacloud/plugins/org.jboss.tools.deltacloud.ui/src/org/jboss/tools/deltacloud/ui/views/CVCloudElement.java 2010-11-08
11:21:07 UTC (rev 26325)
+++
trunk/deltacloud/plugins/org.jboss.tools.deltacloud.ui/src/org/jboss/tools/deltacloud/ui/views/CVCloudElement.java 2010-11-08
13:09:09 UTC (rev 26326)
@@ -10,6 +10,7 @@
*******************************************************************************/
package org.jboss.tools.deltacloud.ui.views;
+import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.ui.views.properties.IPropertySource;
import org.jboss.tools.deltacloud.core.DeltaCloud;
@@ -19,10 +20,10 @@
private static final String INSTANCE_CATEGORY_NAME = "InstanceCategoryName";
//$NON-NLS-1$
private static final String IMAGE_CATEGORY_NAME = "ImageCategoryName";
//$NON-NLS-1$
- private Viewer viewer;
+ private TreeViewer viewer;
private boolean initialized;
- public CVCloudElement(Object element, String name, Viewer viewer) {
+ public CVCloudElement(Object element, String name, TreeViewer viewer) {
super(element, name);
this.viewer = viewer;
}
Modified:
trunk/deltacloud/plugins/org.jboss.tools.deltacloud.ui/src/org/jboss/tools/deltacloud/ui/views/CVImagesCategoryElement.java
===================================================================
---
trunk/deltacloud/plugins/org.jboss.tools.deltacloud.ui/src/org/jboss/tools/deltacloud/ui/views/CVImagesCategoryElement.java 2010-11-08
11:21:07 UTC (rev 26325)
+++
trunk/deltacloud/plugins/org.jboss.tools.deltacloud.ui/src/org/jboss/tools/deltacloud/ui/views/CVImagesCategoryElement.java 2010-11-08
13:09:09 UTC (rev 26326)
@@ -13,8 +13,6 @@
import java.util.ArrayList;
import org.eclipse.jface.viewers.TreeViewer;
-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.DeltaCloudImage;
import org.jboss.tools.deltacloud.core.IImageFilter;
@@ -22,22 +20,11 @@
public class CVImagesCategoryElement extends CVCategoryElement implements
IImageListListener {
- private Viewer viewer;
- private CVImagesCategoryElement category;
-
- public CVImagesCategoryElement(Object element, String name, Viewer viewer) {
- super(element, name, CVCategoryElement.INSTANCES);
- this.viewer = viewer;
+ public CVImagesCategoryElement(Object element, String name, TreeViewer viewer) {
+ super(element, name, viewer);
DeltaCloud cloud = (DeltaCloud)getElement();
cloud.addImageListListener(this);
- this.category = this;
}
-
- protected void finalize() throws Throwable {
- DeltaCloud cloud = (DeltaCloud)getElement();
- cloud.removeImageListListener(this);
- super.finalize();
- }
private void addImages(DeltaCloudImage[] images) {
if (images.length > CVNumericFoldingElement.FOLDING_SIZE) {
@@ -95,12 +82,7 @@
DeltaCloudImage[] images = filter(newImages);
addImages(images);
initialized = true;
- Display.getDefault().asyncExec(new Runnable() {
- @Override
- public void run() {
- ((TreeViewer)viewer).refresh(category, false);
- }
- });
+ refresh();
}
public DeltaCloudImage[] filter(DeltaCloudImage[] input) {
@@ -116,4 +98,8 @@
}
+ protected void dispose() {
+ DeltaCloud cloud = (DeltaCloud)getElement();
+ cloud.removeImageListListener(this);
+ }
}
Modified:
trunk/deltacloud/plugins/org.jboss.tools.deltacloud.ui/src/org/jboss/tools/deltacloud/ui/views/CVInstancesCategoryElement.java
===================================================================
---
trunk/deltacloud/plugins/org.jboss.tools.deltacloud.ui/src/org/jboss/tools/deltacloud/ui/views/CVInstancesCategoryElement.java 2010-11-08
11:21:07 UTC (rev 26325)
+++
trunk/deltacloud/plugins/org.jboss.tools.deltacloud.ui/src/org/jboss/tools/deltacloud/ui/views/CVInstancesCategoryElement.java 2010-11-08
13:09:09 UTC (rev 26326)
@@ -11,16 +11,8 @@
package org.jboss.tools.deltacloud.ui.views;
import java.util.ArrayList;
-import java.util.List;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TreeViewer;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.swt.events.DisposeEvent;
-import org.eclipse.swt.events.DisposeListener;
-import org.eclipse.swt.widgets.Display;
import org.jboss.tools.deltacloud.core.DeltaCloud;
import org.jboss.tools.deltacloud.core.DeltaCloudInstance;
import org.jboss.tools.deltacloud.core.IInstanceFilter;
@@ -28,37 +20,12 @@
public class CVInstancesCategoryElement extends CVCategoryElement implements
IInstanceListListener {
- private Viewer viewer;
- private CVInstancesCategoryElement category;
-
- public CVInstancesCategoryElement(Object element, String name, Viewer viewer) {
- super(element, name, CVCategoryElement.INSTANCES);
- this.viewer = viewer;
+ public CVInstancesCategoryElement(Object element, String name, TreeViewer viewer) {
+ super(element, name, viewer);
DeltaCloud cloud = (DeltaCloud) getElement();
cloud.addInstanceListListener(this);
- viewer.getControl().addDisposeListener(onDispose());
- this.category = this;
}
- private DisposeListener onDispose() {
- return new DisposeListener() {
-
- @Override
- public void widgetDisposed(DisposeEvent e) {
- DeltaCloud cloud = (DeltaCloud) getElement();
- if (cloud != null) {
- cloud.removeInstanceListListener(CVInstancesCategoryElement.this);
- }
- }
- };
- }
-
- protected void finalize() throws Throwable {
- DeltaCloud cloud = (DeltaCloud) getElement();
- cloud.removeInstanceListListener(this);
- super.finalize();
- }
-
private void addInstances(DeltaCloudInstance[] instances) {
if (instances.length > CVNumericFoldingElement.FOLDING_SIZE) {
int min = 0;
@@ -115,62 +82,7 @@
final DeltaCloudInstance[] instances = filter(newInstances);
addInstances(instances);
initialized = true;
- Display.getDefault().asyncExec(new Runnable() {
- @Override
- public void run() {
- IStructuredSelection oldSelection = (IStructuredSelection) viewer.getSelection();
- ((TreeViewer) viewer).refresh(category, false);
- restoreSelection(oldSelection);
- }
-
- /**
- * This is a workaround:
- *
- * When a change in the list of instances happens, DeltaCloud
- * notifies this class with the list of all instances (@see
- * DeltaCloud#performInstanceAction). This class then removes all
- * children and readds new children with the same DeltaCloudInstance
- * instances.
- *
- * <p>
- * I also tried an alternative approach where I implemented an
- * equals method in CVInstanceElement that returns <code>true</code>
- * if both elements have the same DeltaCloudInsta instance. The
- * consequence is that the viewer keeps the selection, but is not
- * aware of a change in the underlying items. The consequence is
- * that the context-menu does not change its state (the instance
- * action, that was executed, should disappear) and the properties
- * view does not update either.
- *
- * @param selection
- *
- * @see DeltaCloud#performInstanceAction
- * @see #listChanged
- */
- private void restoreSelection(IStructuredSelection selection) {
- ISelection newSelection = new
StructuredSelection(getChildrenWithSameDeltaCloudInstance(selection
- .toList()));
- viewer.setSelection(newSelection);
- }
-
- private List<CVInstanceElement>
getChildrenWithSameDeltaCloudInstance(List<?> cvInstanceElements) {
- List<CVInstanceElement> cvInstances = new
ArrayList<CVInstanceElement>();
- Object[] children = getChildren();
- for (Object member : cvInstanceElements) {
- CVInstanceElement cvInstance = (CVInstanceElement) member;
- DeltaCloudInstance instance = (DeltaCloudInstance) cvInstance.getElement();
- for (Object child : children) {
- CVInstanceElement childCvInstanceElement = (CVInstanceElement) child;
- DeltaCloudInstance childInstance = (DeltaCloudInstance)
childCvInstanceElement.getElement();
- if (instance != null && instance.equals(childInstance)) {
- cvInstances.add(childCvInstanceElement);
- }
- }
- }
- return cvInstances;
- }
-
- });
+ refresh();
}
private DeltaCloudInstance[] filter(DeltaCloudInstance[] input) {
@@ -185,4 +97,10 @@
return array.toArray(new DeltaCloudInstance[array.size()]);
}
+ protected void dispose() {
+ DeltaCloud cloud = (DeltaCloud) getElement();
+ if (cloud != null) {
+ cloud.removeInstanceListListener(this);
+ }
+ }
}
Modified:
trunk/deltacloud/plugins/org.jboss.tools.deltacloud.ui/src/org/jboss/tools/deltacloud/ui/views/CVRootElement.java
===================================================================
---
trunk/deltacloud/plugins/org.jboss.tools.deltacloud.ui/src/org/jboss/tools/deltacloud/ui/views/CVRootElement.java 2010-11-08
11:21:07 UTC (rev 26325)
+++
trunk/deltacloud/plugins/org.jboss.tools.deltacloud.ui/src/org/jboss/tools/deltacloud/ui/views/CVRootElement.java 2010-11-08
13:09:09 UTC (rev 26326)
@@ -11,7 +11,6 @@
package org.jboss.tools.deltacloud.ui.views;
import org.eclipse.jface.viewers.TreeViewer;
-import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.views.properties.IPropertySource;
import org.jboss.tools.deltacloud.core.DeltaCloud;
@@ -21,9 +20,9 @@
public class CVRootElement extends CloudViewElement implements ICloudManagerListener {
private boolean initialized;
- private Viewer viewer;
+ private TreeViewer viewer;
- public CVRootElement(Viewer viewer) {
+ public CVRootElement(TreeViewer viewer) {
super(DeltaCloudManager.getDefault(), "root"); //$NON-NLS-1$
this.viewer = viewer;
}
Modified:
trunk/deltacloud/plugins/org.jboss.tools.deltacloud.ui/src/org/jboss/tools/deltacloud/ui/views/CloudViewElement.java
===================================================================
---
trunk/deltacloud/plugins/org.jboss.tools.deltacloud.ui/src/org/jboss/tools/deltacloud/ui/views/CloudViewElement.java 2010-11-08
11:21:07 UTC (rev 26325)
+++
trunk/deltacloud/plugins/org.jboss.tools.deltacloud.ui/src/org/jboss/tools/deltacloud/ui/views/CloudViewElement.java 2010-11-08
13:09:09 UTC (rev 26326)
@@ -72,5 +72,4 @@
}
return null;
}
-
}