Author: rob.stryker(a)jboss.com
Date: 2011-01-25 20:49:39 -0500 (Tue, 25 Jan 2011)
New Revision: 28607
Added:
trunk/deltacloud/plugins/org.jboss.tools.deltacloud.ui/src/org/jboss/tools/deltacloud/ui/views/cloud/cnf/FiltersActionProvider.java
trunk/deltacloud/plugins/org.jboss.tools.deltacloud.ui/src/org/jboss/tools/deltacloud/ui/views/cloud/cnf/FiltersContentProvider.java
Modified:
trunk/deltacloud/plugins/org.jboss.tools.deltacloud.ui/plugin.xml
trunk/deltacloud/plugins/org.jboss.tools.deltacloud.ui/src/org/jboss/tools/deltacloud/ui/views/cloud/cnf/CloudContentProvider.java
trunk/deltacloud/plugins/org.jboss.tools.deltacloud.ui/src/org/jboss/tools/deltacloud/ui/views/cloud/cnf/CloudNavigator.java
Log:
JBIDE-8224 - initial commit for CNF based CloudView
Modified: trunk/deltacloud/plugins/org.jboss.tools.deltacloud.ui/plugin.xml
===================================================================
--- trunk/deltacloud/plugins/org.jboss.tools.deltacloud.ui/plugin.xml 2011-01-26 00:04:15
UTC (rev 28606)
+++ trunk/deltacloud/plugins/org.jboss.tools.deltacloud.ui/plugin.xml 2011-01-26 01:49:39
UTC (rev 28607)
@@ -875,6 +875,28 @@
</instanceof>
</or></possibleChildren>
</navigatorContent>
+ <navigatorContent
+ activeByDefault="true"
+
contentProvider="org.jboss.tools.deltacloud.ui.views.cloud.cnf.FiltersContentProvider"
+ icon="icons/sample.gif"
+ id="org.jboss.tools.deltacloud.ui.filtersContentRoot"
+
labelProvider="org.jboss.tools.deltacloud.ui.views.cloud.cnf.CloudLabelProvider"
+ name="Filters"
+ priority="high">
+ <triggerPoints>
+ <or>
+ <instanceof
+ value="java.lang.Object">
+ </instanceof>
+ </or>
+ </triggerPoints>
+ <possibleChildren>
+ <or>
+ <instanceof
+ value="java.lang.Object">
+ </instanceof>
+ </or></possibleChildren>
+ </navigatorContent>
<actionProvider
class="org.jboss.tools.deltacloud.ui.views.cloud.cnf.CloudViewActionProvider"
id="org.jboss.tools.deltacloud.ui.views.cloud.cnf.CloudViewActionProvider"
@@ -887,6 +909,18 @@
</or>
</enablement>
</actionProvider>
+ <actionProvider
+
class="org.jboss.tools.deltacloud.ui.views.cloud.cnf.FiltersActionProvider"
+
id="org.jboss.tools.deltacloud.ui.views.cloud.cnf.FiltersActionProvider"
+ priority="higher">
+ <enablement>
+ <or>
+ <instanceof
+ value="java.lang.Object">
+ </instanceof>
+ </or>
+ </enablement>
+ </actionProvider>
</extension>
<extension
point="org.eclipse.ui.navigator.viewer">
@@ -900,6 +934,10 @@
isRoot="true"
pattern="org.jboss.tools.deltacloud.ui.cloudContentRoot">
</contentExtension>
+ <contentExtension
+ isRoot="false"
+
pattern="org.jboss.tools.deltacloud.ui.filtersContentRoot">
+ </contentExtension>
</includes>
</viewerContentBinding>
<viewerActionBinding
@@ -908,6 +946,9 @@
<actionExtension
pattern="org.jboss.tools.deltacloud.ui.views.cloud.cnf.CloudViewActionProvider">
</actionExtension>
+ <actionExtension
+
pattern="org.jboss.tools.deltacloud.ui.views.cloud.cnf.FiltersActionProvider">
+ </actionExtension>
</includes>
</viewerActionBinding>
</extension>
Modified:
trunk/deltacloud/plugins/org.jboss.tools.deltacloud.ui/src/org/jboss/tools/deltacloud/ui/views/cloud/cnf/CloudContentProvider.java
===================================================================
---
trunk/deltacloud/plugins/org.jboss.tools.deltacloud.ui/src/org/jboss/tools/deltacloud/ui/views/cloud/cnf/CloudContentProvider.java 2011-01-26
00:04:15 UTC (rev 28606)
+++
trunk/deltacloud/plugins/org.jboss.tools.deltacloud.ui/src/org/jboss/tools/deltacloud/ui/views/cloud/cnf/CloudContentProvider.java 2011-01-26
01:49:39 UTC (rev 28607)
@@ -49,17 +49,12 @@
return clouds;
}
- public abstract static class CategoryContent implements IAdaptable{
- protected String name;
- protected DeltaCloud cloud;
- public CategoryContent(String name, DeltaCloud cloud) {
- this.name = name;
- this.cloud = cloud;
+ public abstract static class CloudAdaptable implements IAdaptable {
+ private DeltaCloud cloud;
+ public CloudAdaptable(DeltaCloud dc) {
+ this.cloud = dc;
}
public DeltaCloud getCloud(){ return cloud; }
- public String getName(){ return name;}
- public abstract Job getFetchChildrenJob(TreeViewer viewer);
- public abstract Object[] getChildren() throws Exception ;
public Object getAdapter(Class adapter) {
if( adapter == DeltaCloud.class )
return cloud;
@@ -67,15 +62,26 @@
}
}
+ public abstract static class CategoryContent extends CloudAdaptable {
+ protected String name;
+ public CategoryContent(String name, DeltaCloud cloud) {
+ super(cloud);
+ this.name = name;
+ }
+ public String getName(){ return name;}
+ public abstract Job getFetchChildrenJob(TreeViewer viewer);
+ public abstract Object[] getChildren() throws Exception ;
+ }
+
public static class InstancesCategory extends CategoryContent {
public InstancesCategory(String name, DeltaCloud cloud) {
super(name, cloud);
}
public Job getFetchChildrenJob(TreeViewer viewer) {
- return new LoadCloudInstancesJob(cloud,refreshParentRunnable(viewer, this) );
+ return new LoadCloudInstancesJob(getCloud(),refreshParentRunnable(viewer, this) );
}
public Object[] getChildren() throws Exception {
- return cloud.instancesLoaded() ? cloud.getInstances() : null;
+ return getCloud().instancesLoaded() ? getCloud().getInstances() : null;
}
}
@@ -84,19 +90,19 @@
super(name, cloud);
}
public Job getFetchChildrenJob(TreeViewer viewer) {
- return new LoadCloudImagesJob(cloud,refreshParentRunnable(viewer, this) );
+ return new LoadCloudImagesJob(getCloud(),refreshParentRunnable(viewer, this) );
}
public Object[] getChildren() throws Exception {
- if( !cloud.imagesLoaded() )
+ if( !getCloud().imagesLoaded() )
return null;
- DeltaCloudImage[] images = cloud.getImages();
+ DeltaCloudImage[] images = getCloud().getImages();
int numPages = images.length / ImagesPager.PER_PAGE;
if( images.length != 0 &&
images.length % ImagesPager.PER_PAGE != 0)
numPages++;
ImagesPager[] pages = new ImagesPager[numPages];
for( int i = 0; i < numPages; i++ ) {
- pages[i] = new ImagesPager(cloud, i);
+ pages[i] = new ImagesPager(getCloud(), i);
}
return pages;
}
Modified:
trunk/deltacloud/plugins/org.jboss.tools.deltacloud.ui/src/org/jboss/tools/deltacloud/ui/views/cloud/cnf/CloudNavigator.java
===================================================================
---
trunk/deltacloud/plugins/org.jboss.tools.deltacloud.ui/src/org/jboss/tools/deltacloud/ui/views/cloud/cnf/CloudNavigator.java 2011-01-26
00:04:15 UTC (rev 28606)
+++
trunk/deltacloud/plugins/org.jboss.tools.deltacloud.ui/src/org/jboss/tools/deltacloud/ui/views/cloud/cnf/CloudNavigator.java 2011-01-26
01:49:39 UTC (rev 28607)
@@ -10,13 +10,18 @@
******************************************************************************/
package org.jboss.tools.deltacloud.ui.views.cloud.cnf;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+
import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.navigator.CommonNavigator;
import org.jboss.tools.deltacloud.core.DeltaCloud;
+import org.jboss.tools.deltacloud.core.DeltaCloudException;
import org.jboss.tools.deltacloud.core.DeltaCloudManager;
import org.jboss.tools.deltacloud.core.IDeltaCloudManagerListener;
-public class CloudNavigator extends CommonNavigator implements IDeltaCloudManagerListener
{
+public class CloudNavigator extends CommonNavigator implements
IDeltaCloudManagerListener, PropertyChangeListener {
protected Object getInitialInput() {
return this;
}
@@ -24,13 +29,56 @@
super.createPartControl(aParent);
getCommonViewer().setSorter(null);
DeltaCloudManager.getDefault().addCloudManagerListener(this);
+ try {
+ DeltaCloud[] currentClouds = DeltaCloudManager.getDefault().getClouds();
+ for( int i = 0; i < currentClouds.length; i++ ) {
+ currentClouds[i].addPropertyChangeListener(DeltaCloud.PROP_NAME, this);
+ currentClouds[i].addPropertyChangeListener(DeltaCloud.PROP_IMAGES, this);
+ currentClouds[i].addPropertyChangeListener(DeltaCloud.PROP_INSTANCES, this);
+ }
+ } catch( DeltaCloudException dce ) { /* ignore */ }
}
public void cloudsChanged(int type, DeltaCloud cloud) {
+ // This is super ugly
+ if( type == IDeltaCloudManagerListener.ADD_EVENT) {
+ cloud.addPropertyChangeListener(DeltaCloud.PROP_NAME, this);
+ cloud.addPropertyChangeListener(DeltaCloud.PROP_IMAGES, this);
+ cloud.addPropertyChangeListener(DeltaCloud.PROP_INSTANCES, this);
+ }
+ else if( type == IDeltaCloudManagerListener.REMOVE_EVENT) {
+ cloud.removePropertyChangeListener(DeltaCloud.PROP_NAME, this);
+ cloud.removePropertyChangeListener(DeltaCloud.PROP_IMAGES, this);
+ cloud.removePropertyChangeListener(DeltaCloud.PROP_INSTANCES, this);
+ }
if( getCommonViewer() != null && !getCommonViewer().getTree().isDisposed())
- getCommonViewer().refresh();
+ asyncRefresh(null);
}
+
+ private void asyncRefresh(final Object o) {
+ Display.getDefault().asyncExec(new Runnable(){
+ public void run() {
+ if( o == null )
+ getCommonViewer().refresh();
+ else
+ getCommonViewer().refresh(o);
+ }
+ });
+ }
+
public void dispose() {
super.dispose();
DeltaCloudManager.getDefault().removeCloudManagerListener(this);
+ try {
+ DeltaCloud[] currentClouds = DeltaCloudManager.getDefault().getClouds();
+ for( int i = 0; i < currentClouds.length; i++ ) {
+ currentClouds[i].removePropertyChangeListener(DeltaCloud.PROP_NAME, this);
+ currentClouds[i].removePropertyChangeListener(DeltaCloud.PROP_IMAGES, this);
+ currentClouds[i].removePropertyChangeListener(DeltaCloud.PROP_INSTANCES, this);
+ }
+ } catch( DeltaCloudException dce ) { /* ignore */ }
}
+
+ public void propertyChange(PropertyChangeEvent evt) {
+ asyncRefresh(evt.getSource());
+ }
}
Added:
trunk/deltacloud/plugins/org.jboss.tools.deltacloud.ui/src/org/jboss/tools/deltacloud/ui/views/cloud/cnf/FiltersActionProvider.java
===================================================================
---
trunk/deltacloud/plugins/org.jboss.tools.deltacloud.ui/src/org/jboss/tools/deltacloud/ui/views/cloud/cnf/FiltersActionProvider.java
(rev 0)
+++
trunk/deltacloud/plugins/org.jboss.tools.deltacloud.ui/src/org/jboss/tools/deltacloud/ui/views/cloud/cnf/FiltersActionProvider.java 2011-01-26
01:49:39 UTC (rev 28607)
@@ -0,0 +1,11 @@
+package org.jboss.tools.deltacloud.ui.views.cloud.cnf;
+
+import org.eclipse.ui.navigator.CommonActionProvider;
+
+public class FiltersActionProvider extends CommonActionProvider {
+
+ public FiltersActionProvider() {
+ // TODO Auto-generated constructor stub
+ }
+
+}
Added:
trunk/deltacloud/plugins/org.jboss.tools.deltacloud.ui/src/org/jboss/tools/deltacloud/ui/views/cloud/cnf/FiltersContentProvider.java
===================================================================
---
trunk/deltacloud/plugins/org.jboss.tools.deltacloud.ui/src/org/jboss/tools/deltacloud/ui/views/cloud/cnf/FiltersContentProvider.java
(rev 0)
+++
trunk/deltacloud/plugins/org.jboss.tools.deltacloud.ui/src/org/jboss/tools/deltacloud/ui/views/cloud/cnf/FiltersContentProvider.java 2011-01-26
01:49:39 UTC (rev 28607)
@@ -0,0 +1,74 @@
+package org.jboss.tools.deltacloud.ui.views.cloud.cnf;
+
+import java.util.Collection;
+
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.Viewer;
+import org.jboss.tools.deltacloud.core.DeltaCloud;
+import org.jboss.tools.deltacloud.core.DeltaCloudException;
+import org.jboss.tools.deltacloud.core.DeltaCloudImage;
+import org.jboss.tools.deltacloud.core.IImageFilter;
+import
org.jboss.tools.deltacloud.ui.views.cloud.cnf.CloudContentProvider.CloudAdaptable;
+
+public class FiltersContentProvider implements ITreeContentProvider {
+
+ @Override
+ public void dispose() {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public Object[] getElements(Object inputElement) {
+ return getChildren(inputElement);
+ }
+
+ public class CloudFilterPair extends CloudAdaptable {
+ private IImageFilter filter;
+ public CloudFilterPair(DeltaCloud cloud, IImageFilter filter) {
+ super(cloud);
+ this.filter = filter;
+ }
+ public String toString() {
+ return "Filter: " + filter.toString();
+ }
+ }
+
+ @Override
+ public Object[] getChildren(Object parentElement) {
+ if( parentElement instanceof DeltaCloud ) {
+ IImageFilter filter = ((DeltaCloud)parentElement).getImageFilter();
+ if( filter != null ) {
+ CloudFilterPair cfp = new CloudFilterPair(((DeltaCloud)parentElement), filter);
+ return new Object[]{ cfp };
+ }
+ }
+ if( parentElement instanceof CloudFilterPair ) {
+ try {
+ CloudFilterPair cfp = (CloudFilterPair)parentElement;
+ Collection<DeltaCloudImage> filteredImages =
cfp.filter.filter(cfp.getCloud().getImages());
+ return filteredImages.toArray(new DeltaCloudImage[filteredImages.size()]);
+ } catch(DeltaCloudException dce) { /* ignore */ }
+ }
+ return new Object[]{};
+ }
+
+ @Override
+ public Object getParent(Object element) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public boolean hasChildren(Object element) {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+}