changeset 737:6adfe1936814

Thermostat Eclipse perspective, SWTComponent and metadata updates This commit updates the dependencies in each Eclipse POM file. The new charting capabilities rely on com.redhat.thermostat.client.ui. I have changed the com.redhat.thermostat.eclipse plugin to specify a dependency on thermostat-client-core, and the other eclipse projects to depend on the main com.redhat.thermostat.eclipse plugin. This commit also adds the new chart plugin as a friend of the main eclipse plugin. The commit also contains a Thermostat perspective which collects all of the Thermostat views in a manner similar to the Swing GUI, and a constants interface that stores cross-plugin constants such as the various view IDs. I also added a SWTComponent subclass of UIComponent which contains a createControl method. This is necessary since, unlike Swing, SWT controls require a parent composite to be specified in their constructor. Reviewed-by: jerboaa Review-thread: http://icedtea.classpath.org/pipermail/thermostat/2012-September/003345.html
author Elliott Baron <ebaron@redhat.com>
date Thu, 25 Oct 2012 13:25:07 -0400
parents d07e5cc900a3
children f476871fd4d1
files Makefile eclipse/com.redhat.thermostat.client.feature/.project eclipse/com.redhat.thermostat.client.feature/build.properties eclipse/com.redhat.thermostat.client.feature/feature.xml eclipse/com.redhat.thermostat.client.feature/pom.xml eclipse/com.redhat.thermostat.eclipse.feature/feature.xml eclipse/com.redhat.thermostat.eclipse.feature/pom.xml eclipse/com.redhat.thermostat.eclipse.p2-repo/pom.xml eclipse/com.redhat.thermostat.eclipse.test.ui/.classpath eclipse/com.redhat.thermostat.eclipse.test.ui/.project eclipse/com.redhat.thermostat.eclipse.test.ui/META-INF/MANIFEST.MF eclipse/com.redhat.thermostat.eclipse.test.ui/build.properties eclipse/com.redhat.thermostat.eclipse.test.ui/pom.xml eclipse/com.redhat.thermostat.eclipse.test/META-INF/MANIFEST.MF eclipse/com.redhat.thermostat.eclipse.test/pom.xml eclipse/com.redhat.thermostat.eclipse.test/src/com/redhat/thermostat/eclipse/test/views/AbstractRefViewPartTest.java eclipse/com.redhat.thermostat.eclipse.test/src/com/redhat/thermostat/eclipse/test/views/ThermostatPerspectiveTest.java eclipse/com.redhat.thermostat.eclipse/META-INF/MANIFEST.MF eclipse/com.redhat.thermostat.eclipse/plugin.xml eclipse/com.redhat.thermostat.eclipse/pom.xml eclipse/com.redhat.thermostat.eclipse/src/com/redhat/thermostat/eclipse/Activator.java eclipse/com.redhat.thermostat.eclipse/src/com/redhat/thermostat/eclipse/ThermostatConstants.java eclipse/com.redhat.thermostat.eclipse/src/com/redhat/thermostat/eclipse/views/HostOverviewViewPart.java eclipse/com.redhat.thermostat.eclipse/src/com/redhat/thermostat/eclipse/views/SWTComponent.java eclipse/com.redhat.thermostat.eclipse/src/com/redhat/thermostat/eclipse/views/ThermostatPerspectiveFactory.java eclipse/core-p2-repository/category.xml eclipse/core-p2-repository/pom.xml eclipse/pom.xml
diffstat 28 files changed, 960 insertions(+), 294 deletions(-) [+]
line wrap: on
line diff
--- a/Makefile	Thu Oct 25 12:48:30 2012 -0400
+++ b/Makefile	Thu Oct 25 13:25:07 2012 -0400
@@ -31,7 +31,13 @@
 eclipse-test-p2: eclipse-test-deps
 	$(MAVEN) -f eclipse/test-deps-p2-repository/pom.xml $(MAVEN_FLAGS) $(REPO_FLAG) $(MAVEN_SKIP_TEST) clean $(GOAL)
 
-eclipse: eclipse-test-p2
+jfreechart-deps: core-install
+	$(MAVEN) -f eclipse/jfreechart-bundle-wrapping/pom.xml $(MAVEN_FLAGS) $(REPO_FLAG) $(MAVEN_SKIP_TEST) clean install
+
+jfreechart-p2: jfreechart-deps
+	$(MAVEN) -f eclipse/jfreechart-p2-repository/pom.xml $(MAVEN_FLAGS) $(REPO_FLAG) $(MAVEN_SKIP_TEST) clean $(GOAL)
+
+eclipse: eclipse-test-p2 jfreechart-p2
 	$(MAVEN) -f eclipse/pom.xml $(MAVEN_FLAGS) $(REPO_FLAG) $(MAVEN_SKIP_TEST) clean $(GOAL)
 
 create-repo-dir:
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eclipse/com.redhat.thermostat.client.feature/.project	Thu Oct 25 13:25:07 2012 -0400
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>com.redhat.thermostat.client.feature</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.FeatureBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.FeatureNature</nature>
+	</natures>
+</projectDescription>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eclipse/com.redhat.thermostat.client.feature/build.properties	Thu Oct 25 13:25:07 2012 -0400
@@ -0,0 +1,1 @@
+bin.includes = feature.xml
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eclipse/com.redhat.thermostat.client.feature/feature.xml	Thu Oct 25 13:25:07 2012 -0400
@@ -0,0 +1,129 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="com.redhat.thermostat.client.feature"
+      label="Thermostat Client Feature"
+      version="0.5.0.qualifier"
+      provider-name="Red Hat Inc.">
+
+   <description url="http://icedtea.classpath.org/thermostat">
+      Plug-ins necessary for a Thermostat client interface.
+   </description>
+
+   <copyright url="http://icedtea.classpath.org/thermostat">
+      Copyright 2012 Red Hat, Inc.
+   </copyright>
+
+   <license url="http://www.gnu.org/licenses/">
+      Copyright 2012 Red Hat, Inc.
+
+This file is part of Thermostat.
+
+Thermostat is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published
+by the Free Software Foundation; either version 2, or (at your
+option) any later version.
+
+Thermostat is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Thermostat; see the file COPYING.  If not see
+&lt;http://www.gnu.org/licenses/&gt;.
+
+Linking this code with other modules is making a combined work
+based on this code.  Thus, the terms and conditions of the GNU
+General Public License cover the whole combination.
+
+As a special exception, the copyright holders of this code give
+you permission to link this code with independent modules to
+produce an executable, regardless of the license terms of these
+independent modules, and to copy and distribute the resulting
+executable under terms of your choice, provided that you also
+meet, for each linked independent module, the terms and conditions
+of the license of that module.  An independent module is a module
+which is not derived from or based on this code.  If you modify
+this code, you may extend this exception to your version of the
+library, but you are not obligated to do so.  If you do not wish
+to do so, delete this exception statement from your version.
+   </license>
+
+   <plugin
+         id="com.redhat.thermostat.client.core"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="com.redhat.thermostat.common.core"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="com.redhat.thermostat.keyring"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="com.redhat.thermostat.bundles.org.jfree.chart"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="com.redhat.thermostat.bundles.org.jfree"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="com.redhat.thermostat.web.client"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="com.redhat.thermostat.web.common"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.apache.servicemix.bundles.lucene"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="com.google.gson"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="com.redhat.thermostat.launcher"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="com.redhat.thermostat.bundles.core"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eclipse/com.redhat.thermostat.client.feature/pom.xml	Thu Oct 25 13:25:07 2012 -0400
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <artifactId>thermostat-eclipse-parent</artifactId>
+    <groupId>com.redhat.thermostat.eclipse.parent</groupId>
+    <version>0.5.0-SNAPSHOT</version>
+  </parent>
+  <groupId>com.redhat.thermostat.eclipse.parent</groupId>
+  <artifactId>com.redhat.thermostat.client.feature</artifactId>
+  <version>0.5.0-SNAPSHOT</version>
+
+  <name>Thermostat Client Feature</name>
+
+  <dependencies>
+    <dependency>
+      <groupId>com.redhat.thermostat</groupId>
+      <artifactId>thermostat-client-core</artifactId>
+      <version>0.5.0-SNAPSHOT</version>
+    </dependency>
+    <dependency>
+      <groupId>com.redhat.thermostat</groupId>
+      <artifactId>thermostat-web-client</artifactId>
+      <version>0.5.0-SNAPSHOT</version>
+    </dependency>
+    <dependency>
+      <groupId>com.redhat.thermostat</groupId>
+      <artifactId>thermostat-web-common</artifactId>
+      <version>0.5.0-SNAPSHOT</version>
+    </dependency>
+    <dependency>
+      <groupId>com.redhat.thermostat</groupId>
+      <artifactId>thermostat-launcher</artifactId>
+      <version>0.5.0-SNAPSHOT</version>
+    </dependency>
+  </dependencies>
+
+  <build>
+     <!-- workaround for https://issues.sonatype.org/browse/TYCHO-168 -->
+     <resources>
+      <resource>
+        <directory>src</directory>
+        <excludes>
+          <exclude>**/*.java</exclude>
+        </excludes>
+      </resource>
+    </resources>
+    <plugins>
+      <plugin>
+        <groupId>org.eclipse.tycho</groupId>
+        <artifactId>tycho-source-plugin</artifactId>
+      </plugin>
+      <plugin>
+        <groupId>org.eclipse.tycho</groupId>
+        <artifactId>tycho-packaging-plugin</artifactId>
+        <version>${tycho-version}</version>
+        <configuration>
+          <deployableFeature>true</deployableFeature>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+  <packaging>eclipse-feature</packaging>
+</project>
--- a/eclipse/com.redhat.thermostat.eclipse.feature/feature.xml	Thu Oct 25 12:48:30 2012 -0400
+++ b/eclipse/com.redhat.thermostat.eclipse.feature/feature.xml	Thu Oct 25 13:25:07 2012 -0400
@@ -13,48 +13,43 @@
    </copyright>
 
    <license url="http://www.gnu.org/licenses/">
-   Copyright 2012 Red Hat, Inc.
-  
-   This file is part of Thermostat.
-  
-   Thermostat is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published
-   by the Free Software Foundation; either version 2, or (at your
-   option) any later version.
-  
-   Thermostat is distributed in the hope that it will be useful, but
-   WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   General Public License for more details.
-  
-   You should have received a copy of the GNU General Public License
-   along with Thermostat; see the file COPYING.  If not see
-   &lt;http://www.gnu.org/licenses/&gt;.
-  
-   Linking this code with other modules is making a combined work
-   based on this code.  Thus, the terms and conditions of the GNU
-   General Public License cover the whole combination.
-  
-   As a special exception, the copyright holders of this code give
-   you permission to link this code with independent modules to
-   produce an executable, regardless of the license terms of these
-   independent modules, and to copy and distribute the resulting
-   executable under terms of your choice, provided that you also
-   meet, for each linked independent module, the terms and conditions
-   of the license of that module.  An independent module is a module
-   which is not derived from or based on this code.  If you modify
-   this code, you may extend this exception to your version of the
-   library, but you are not obligated to do so.  If you do not wish
-   to do so, delete this exception statement from your version.
+Copyright 2012 Red Hat, Inc.
+
+This file is part of Thermostat.
+
+Thermostat is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published
+by the Free Software Foundation; either version 2, or (at your
+option) any later version.
+
+Thermostat is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Thermostat; see the file COPYING.  If not see
+&lt;http://www.gnu.org/licenses/&gt;.
+
+Linking this code with other modules is making a combined work
+based on this code.  Thus, the terms and conditions of the GNU
+General Public License cover the whole combination.
+
+As a special exception, the copyright holders of this code give
+you permission to link this code with independent modules to
+produce an executable, regardless of the license terms of these
+independent modules, and to copy and distribute the resulting
+executable under terms of your choice, provided that you also
+meet, for each linked independent module, the terms and conditions
+of the license of that module.  An independent module is a module
+which is not derived from or based on this code.  If you modify
+this code, you may extend this exception to your version of the
+library, but you are not obligated to do so.  If you do not wish
+to do so, delete this exception statement from your version.
    </license>
 
-   <!-- common core requires mongodb and lucene. Bundle names might need
-        patching for Fedora and other distros. They come from
-        eclipse.org's orbit repo -->
    <requires>
-      <import plugin="com.redhat.thermostat.common.core"/>
-      <import plugin="org.eclipse.orbit.mongodb" version="2.7.3" match="greaterOrEqual"/>
-      <import plugin="org.apache.lucene.core" version="3.5.0" match="greaterOrEqual"/>
+      <import feature="com.redhat.thermostat.client.feature" version="0.5.0.qualifier"/>
    </requires>
 
    <plugin
@@ -72,4 +67,11 @@
          fragment="true"
          unpack="false"/>
 
+   <plugin
+         id="com.redhat.thermostat.eclipse.chart.common"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
 </feature>
--- a/eclipse/com.redhat.thermostat.eclipse.feature/pom.xml	Thu Oct 25 12:48:30 2012 -0400
+++ b/eclipse/com.redhat.thermostat.eclipse.feature/pom.xml	Thu Oct 25 13:25:07 2012 -0400
@@ -15,8 +15,8 @@
 
   <dependencies>
     <dependency>
-      <groupId>com.redhat.thermostat</groupId>
-      <artifactId>thermostat-common-core</artifactId>
+      <groupId>com.redhat.thermostat.eclipse.parent</groupId>
+      <artifactId>com.redhat.thermostat.eclipse</artifactId>
       <version>0.5.0-SNAPSHOT</version>
     </dependency>
     <!-- using Web storage -->
--- a/eclipse/com.redhat.thermostat.eclipse.p2-repo/pom.xml	Thu Oct 25 12:48:30 2012 -0400
+++ b/eclipse/com.redhat.thermostat.eclipse.p2-repo/pom.xml	Thu Oct 25 13:25:07 2012 -0400
@@ -15,8 +15,8 @@
 
   <dependencies>
     <dependency>
-      <groupId>com.redhat.thermostat</groupId>
-      <artifactId>thermostat-common-core</artifactId>
+      <groupId>com.redhat.thermostat.eclipse.parent</groupId>
+      <artifactId>com.redhat.thermostat.eclipse</artifactId>
       <version>0.5.0-SNAPSHOT</version>
     </dependency>
     <!-- using Web storage -->
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eclipse/com.redhat.thermostat.eclipse.test.ui/.classpath	Thu Oct 25 13:25:07 2012 -0400
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src/"/>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eclipse/com.redhat.thermostat.eclipse.test.ui/.project	Thu Oct 25 13:25:07 2012 -0400
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>com.redhat.thermostat.eclipse.test.ui</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eclipse/com.redhat.thermostat.eclipse.test.ui/META-INF/MANIFEST.MF	Thu Oct 25 13:25:07 2012 -0400
@@ -0,0 +1,37 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Thermostat Eclipse UI Tests
+Bundle-SymbolicName: com.redhat.thermostat.eclipse.test.ui
+Bundle-Version: 0.5.0.qualifier
+Bundle-Vendor: Red Hat Inc.
+Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.core.runtime,
+ org.junit;bundle-version="4.10.0",
+ org.hamcrest;bundle-version="1.1.0"
+Import-Package: com.redhat.thermostat.client.core.views,
+ com.redhat.thermostat.client.osgi.service,
+ com.redhat.thermostat.client.ui,
+ com.redhat.thermostat.common,
+ com.redhat.thermostat.common.appctx,
+ com.redhat.thermostat.common.model,
+ com.redhat.thermostat.eclipse,
+ com.redhat.thermostat.eclipse.chart.common,
+ org.apache.log4j;version="1.2.13",
+ org.eclipse.swtbot.eclipse.finder,
+ org.eclipse.swtbot.eclipse.finder.matchers,
+ org.eclipse.swtbot.eclipse.finder.widgets,
+ org.eclipse.swtbot.swt.finder,
+ org.eclipse.swtbot.swt.finder.exceptions,
+ org.eclipse.swtbot.swt.finder.junit,
+ org.eclipse.swtbot.swt.finder.matchers,
+ org.eclipse.swtbot.swt.finder.utils,
+ org.eclipse.swtbot.swt.finder.waits,
+ org.eclipse.swtbot.swt.finder.widgets,
+ org.jfree.chart,
+ org.jfree.chart.axis,
+ org.jfree.chart.plot,
+ org.jfree.data.general,
+ org.jfree.data.time,
+ org.jfree.data.xy
+Export-Package: com.redhat.thermostat.eclipse.test.ui
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eclipse/com.redhat.thermostat.eclipse.test.ui/build.properties	Thu Oct 25 13:25:07 2012 -0400
@@ -0,0 +1,4 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eclipse/com.redhat.thermostat.eclipse.test.ui/pom.xml	Thu Oct 25 13:25:07 2012 -0400
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <artifactId>thermostat-eclipse-parent</artifactId>
+    <groupId>com.redhat.thermostat.eclipse.parent</groupId>
+    <version>0.5.0-SNAPSHOT</version>
+  </parent>
+  <groupId>com.redhat.thermostat.eclipse.parent</groupId>
+  <artifactId>com.redhat.thermostat.eclipse.test.ui</artifactId>
+  <packaging>eclipse-test-plugin</packaging>
+  <version>0.5.0-SNAPSHOT</version>
+
+  <name>Thermostat Eclipse Client UI Tests</name>
+
+  <repositories>
+    <repository>
+      <id>swtbot</id>
+      <layout>p2</layout>
+      <url>http://download.eclipse.org/technology/swtbot/helios/dev-build/update-site</url>
+    </repository>
+  </repositories>
+
+  <dependencies>
+    <dependency>
+      <groupId>com.redhat.thermostat.eclipse.parent</groupId>
+      <artifactId>com.redhat.thermostat.eclipse.chart.common</artifactId>
+      <version>0.5.0-SNAPSHOT</version>
+    </dependency>
+    <dependency>
+      <groupId>com.redhat.thermostat.eclipse.parent</groupId>
+      <artifactId>com.redhat.thermostat.eclipse.test-deps-repo</artifactId>
+      <version>0.5.0-SNAPSHOT</version>
+      <type>pom</type>
+    </dependency>
+  </dependencies>
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.eclipse.tycho</groupId>
+        <artifactId>tycho-surefire-plugin</artifactId>
+        <version>${tycho-version}</version>
+        <configuration>
+          <useUIHarness>true</useUIHarness>
+          <useUIThread>false</useUIThread>
+          <product>org.eclipse.platform.ide</product>
+          <application>org.eclipse.ui.ide.workbench</application>
+          <bundleStartLevel>
+            <bundle>
+              <id>com.redhat.thermostat.common.core</id>
+              <level>4</level>
+              <autoStart>true</autoStart>
+            </bundle>
+            <bundle>
+              <id>com.redhat.thermostat.web.common</id>
+              <level>4</level>
+              <autoStart>true</autoStart>
+            </bundle>
+            <bundle>
+              <id>com.redhat.thermostat.web.client</id>
+              <level>4</level>
+              <autoStart>true</autoStart>
+            </bundle>
+            <bundle>
+              <id>com.redhat.thermostat.launcher</id>
+              <level>4</level>
+              <autoStart>true</autoStart>
+            </bundle>
+          </bundleStartLevel>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+
+</project>
--- a/eclipse/com.redhat.thermostat.eclipse.test/META-INF/MANIFEST.MF	Thu Oct 25 12:48:30 2012 -0400
+++ b/eclipse/com.redhat.thermostat.eclipse.test/META-INF/MANIFEST.MF	Thu Oct 25 13:25:07 2012 -0400
@@ -12,11 +12,17 @@
  com.redhat.thermostat.bundles.org.objenesis;resolution:=optional,
  com.redhat.thermostat.bundles.org.mockito.mockito-core;resolution:=optional
 Bundle-RequiredExecutionEnvironment: JavaSE-1.7
-Import-Package: com.redhat.thermostat.common,
+Import-Package: com.redhat.thermostat.client.core.views,
+ com.redhat.thermostat.client.osgi.service,
+ com.redhat.thermostat.client.ui,
+ com.redhat.thermostat.common,
  com.redhat.thermostat.common.dao,
+ com.redhat.thermostat.common.utils,
+ com.redhat.thermostat.eclipse,
+ com.redhat.thermostat.eclipse.chart.common,
  com.redhat.thermostat.eclipse.model,
- org.eclipse.core.resources,
- org.eclipse.ui.ide,
+ com.redhat.thermostat.eclipse.views,
  org.mockito,
  org.mockito.stubbing
-Export-Package: com.redhat.thermostat.eclipse.test.model
+Export-Package: com.redhat.thermostat.eclipse.test.model,
+ com.redhat.thermostat.eclipse.test.views
--- a/eclipse/com.redhat.thermostat.eclipse.test/pom.xml	Thu Oct 25 12:48:30 2012 -0400
+++ b/eclipse/com.redhat.thermostat.eclipse.test/pom.xml	Thu Oct 25 13:25:07 2012 -0400
@@ -16,8 +16,8 @@
 
   <dependencies>
     <dependency>
-      <groupId>com.redhat.thermostat</groupId>
-      <artifactId>thermostat-common-core</artifactId>
+      <groupId>com.redhat.thermostat.eclipse.parent</groupId>
+      <artifactId>com.redhat.thermostat.eclipse</artifactId>
       <version>0.5.0-SNAPSHOT</version>
     </dependency>
     <!-- using Web storage -->
@@ -50,10 +50,9 @@
         <groupId>org.eclipse.tycho</groupId>
         <artifactId>tycho-surefire-plugin</artifactId>
         <version>${tycho-version}</version>
-        <!--
         <configuration>
           <useUIHarness>true</useUIHarness>
-          <useUIThread>false</useUIThread>
+          <useUIThread>true</useUIThread>
           <product>org.eclipse.platform.ide</product>
           <dependencies>
             <dependency>
@@ -61,9 +60,30 @@
               <artifactId>org.eclipse.sdk.feature.group</artifactId>
               <version>${sdk-version}</version>
             </dependency>
-          </dependencies>   
+          </dependencies>
+          <bundleStartLevel>
+            <bundle>
+              <id>com.redhat.thermostat.common.core</id>
+              <level>4</level>
+              <autoStart>true</autoStart>
+            </bundle>
+            <bundle>
+              <id>com.redhat.thermostat.web.common</id>
+              <level>4</level>
+              <autoStart>true</autoStart>
+            </bundle>
+            <bundle>
+              <id>com.redhat.thermostat.web.client</id>
+              <level>4</level>
+              <autoStart>true</autoStart>
+            </bundle>
+            <bundle>
+              <id>com.redhat.thermostat.launcher</id>
+              <level>4</level>
+              <autoStart>true</autoStart>
+            </bundle>
+          </bundleStartLevel>
         </configuration>
-        -->
       </plugin>
     </plugins>
   </build>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eclipse/com.redhat.thermostat.eclipse.test/src/com/redhat/thermostat/eclipse/test/views/AbstractRefViewPartTest.java	Thu Oct 25 13:25:07 2012 -0400
@@ -0,0 +1,116 @@
+/*
+ * Copyright 2012 Red Hat, Inc.
+ *
+ * This file is part of Thermostat.
+ *
+ * Thermostat is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published
+ * by the Free Software Foundation; either version 2, or (at your
+ * option) any later version.
+ *
+ * Thermostat is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Thermostat; see the file COPYING.  If not see
+ * <http://www.gnu.org/licenses/>.
+ *
+ * Linking this code with other modules is making a combined work
+ * based on this code.  Thus, the terms and conditions of the GNU
+ * General Public License cover the whole combination.
+ *
+ * As a special exception, the copyright holders of this code give
+ * you permission to link this code with independent modules to
+ * produce an executable, regardless of the license terms of these
+ * independent modules, and to copy and distribute the resulting
+ * executable under terms of your choice, provided that you also
+ * meet, for each linked independent module, the terms and conditions
+ * of the license of that module.  An independent module is a module
+ * which is not derived from or based on this code.  If you modify
+ * this code, you may extend this exception to your version of the
+ * library, but you are not obligated to do so.  If you do not wish
+ * to do so, delete this exception statement from your version.
+ */
+
+package com.redhat.thermostat.eclipse.test.views;
+
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
+
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.ISelectionService;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchPartSite;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.junit.Before;
+
+import com.redhat.thermostat.common.dao.Ref;
+import com.redhat.thermostat.common.utils.OSGIUtils;
+import com.redhat.thermostat.eclipse.ThermostatConstants;
+import com.redhat.thermostat.eclipse.chart.common.RefViewPart;
+import com.redhat.thermostat.eclipse.views.HostsVmsTreeViewPart;
+import com.redhat.thermostat.eclipse.views.SWTComponent;
+
+public abstract class AbstractRefViewPartTest<T extends Ref> {
+
+    protected Composite parent;
+    protected RefViewPart<T> view;
+    protected SWTComponent thermoView;
+    protected HostsVmsTreeViewPart hostVMView;
+    private ISelectionProvider provider;
+    protected OSGIUtils osgi;
+
+    public AbstractRefViewPartTest() {
+        super();
+    }
+
+    @Before
+    public void before() {
+        parent = spy(new Shell(Display.getCurrent()));
+        
+        view = spy(createViewPart());
+        hostVMView = mock(HostsVmsTreeViewPart.class);
+        osgi = mock(OSGIUtils.class);
+        OSGIUtils.setInstance(osgi);
+    
+        // Workbench mocks
+        IWorkbenchWindow window = mock(IWorkbenchWindow.class);
+        IWorkbenchPage page = mock(IWorkbenchPage.class);
+        ISelectionService service = mock(ISelectionService.class);
+        
+        when(page.findView(ThermostatConstants.VIEW_ID_HOST_VM)).thenReturn(hostVMView);
+        when(window.getSelectionService()).thenReturn(service);
+        when(window.getActivePage()).thenReturn(page);
+        when(view.getWorkbenchWindow()).thenReturn(window);
+        
+        // Controller mock
+        mockController();
+        
+        // Selection mocks
+        IWorkbenchPartSite site = mock(IWorkbenchPartSite.class);
+        provider = mock(ISelectionProvider.class);
+    
+        when(site.getSelectionProvider()).thenReturn(provider);
+        when(hostVMView.getSite()).thenReturn(site);
+    }
+
+    protected abstract void mockController();
+
+    protected abstract RefViewPart<T> createViewPart();
+
+    protected IStructuredSelection mockSelection(Ref ref) {
+        IStructuredSelection selection = mock(IStructuredSelection.class);;
+        when(provider.getSelection()).thenReturn(selection);
+        when(selection.getFirstElement()).thenReturn(ref);
+        
+        return selection;
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eclipse/com.redhat.thermostat.eclipse.test/src/com/redhat/thermostat/eclipse/test/views/ThermostatPerspectiveTest.java	Thu Oct 25 13:25:07 2012 -0400
@@ -0,0 +1,140 @@
+/*
+ * Copyright 2012 Red Hat, Inc.
+ *
+ * This file is part of Thermostat.
+ *
+ * Thermostat is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published
+ * by the Free Software Foundation; either version 2, or (at your
+ * option) any later version.
+ *
+ * Thermostat is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Thermostat; see the file COPYING.  If not see
+ * <http://www.gnu.org/licenses/>.
+ *
+ * Linking this code with other modules is making a combined work
+ * based on this code.  Thus, the terms and conditions of the GNU
+ * General Public License cover the whole combination.
+ *
+ * As a special exception, the copyright holders of this code give
+ * you permission to link this code with independent modules to
+ * produce an executable, regardless of the license terms of these
+ * independent modules, and to copy and distribute the resulting
+ * executable under terms of your choice, provided that you also
+ * meet, for each linked independent module, the terms and conditions
+ * of the license of that module.  An independent module is a module
+ * which is not derived from or based on this code.  If you modify
+ * this code, you may extend this exception to your version of the
+ * library, but you are not obligated to do so.  If you do not wish
+ * to do so, delete this exception statement from your version.
+ */
+
+package com.redhat.thermostat.eclipse.test.views;
+
+import static org.mockito.Matchers.anyFloat;
+import static org.mockito.Matchers.anyInt;
+import static org.mockito.Matchers.anyString;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import org.eclipse.ui.IFolderLayout;
+import org.eclipse.ui.IPageLayout;
+import org.junit.Before;
+import org.junit.Test;
+
+import com.redhat.thermostat.eclipse.ThermostatConstants;
+import com.redhat.thermostat.eclipse.views.ThermostatPerspectiveFactory;
+
+public class ThermostatPerspectiveTest {
+    
+    private IFolderLayout leftFolder;
+    private IFolderLayout rightFolder;
+    private IPageLayout layout;
+
+    @Before
+    public void createLayout() {
+        ThermostatPerspectiveFactory factory = new ThermostatPerspectiveFactory();
+        layout = mock(IPageLayout.class);
+        leftFolder = mock(IFolderLayout.class);
+        rightFolder = mock(IFolderLayout.class);
+        when(layout.createFolder(eq(ThermostatPerspectiveFactory.FOLDER_LEFT), anyInt(), anyFloat(), anyString())).thenReturn(leftFolder);
+        when(layout.createFolder(eq(ThermostatPerspectiveFactory.FOLDER_RIGHT), anyInt(), anyFloat(), anyString())).thenReturn(rightFolder);
+        factory.createInitialLayout(layout);
+    }
+
+    @Test
+    public void testHostVMViewAdded() {
+        verifyViewAdded(ThermostatConstants.VIEW_ID_HOST_VM, leftFolder);
+    }
+    
+    @Test
+    public void testHostVMShortcutAdded() {
+        verifyShortcutAdded(ThermostatConstants.VIEW_ID_HOST_VM);
+    }
+    
+    @Test
+    public void testHostOverviewViewAdded() {
+        verifyViewAdded(ThermostatConstants.VIEW_ID_HOST_OVERVIEW, rightFolder);
+    }
+    
+    @Test
+    public void testHostOverviewShortcutAdded() {
+        verifyShortcutAdded(ThermostatConstants.VIEW_ID_HOST_OVERVIEW);
+    }
+    
+    @Test
+    public void testHostCPUViewAdded() {
+        verifyViewAdded(ThermostatConstants.VIEW_ID_HOST_CPU, rightFolder);
+    }
+    
+    @Test
+    public void testHostCPUShortcutAdded() {
+        verifyShortcutAdded(ThermostatConstants.VIEW_ID_HOST_CPU);
+    }
+    
+    @Test
+    public void testHostMemoryViewAdded() {
+        verifyViewAdded(ThermostatConstants.VIEW_ID_HOST_MEMORY, rightFolder);
+    }
+    
+    @Test
+    public void testHostMemoryShortcutAdded() {
+        verifyShortcutAdded(ThermostatConstants.VIEW_ID_HOST_MEMORY);
+    }
+    
+    @Test
+    public void testVMCPUViewAdded() {
+        verifyViewAdded(ThermostatConstants.VIEW_ID_VM_CPU, rightFolder);
+    }
+    
+    @Test
+    public void testVMCPUShortcutAdded() {
+        verifyShortcutAdded(ThermostatConstants.VIEW_ID_VM_CPU);
+    }
+    
+    @Test
+    public void testVMGCViewAdded() {
+        verifyViewAdded(ThermostatConstants.VIEW_ID_VM_GC, rightFolder);
+    }
+    
+    @Test
+    public void testVMGCShortcutAdded() {
+        verifyShortcutAdded(ThermostatConstants.VIEW_ID_VM_GC);
+    }
+    
+    private void verifyViewAdded(String viewID, IFolderLayout folder) {
+        verify(folder).addView(viewID);
+    }
+    
+    private void verifyShortcutAdded(String viewID) {
+        verify(layout).addShowViewShortcut(viewID);
+    }
+
+}
--- a/eclipse/com.redhat.thermostat.eclipse/META-INF/MANIFEST.MF	Thu Oct 25 12:48:30 2012 -0400
+++ b/eclipse/com.redhat.thermostat.eclipse/META-INF/MANIFEST.MF	Thu Oct 25 13:25:07 2012 -0400
@@ -10,16 +10,17 @@
 Require-Bundle: org.eclipse.core.runtime,
  org.eclipse.ui
 Import-Package: com.mongodb,
+ com.redhat.thermostat.client.core.views,
  com.redhat.thermostat.common,
  com.redhat.thermostat.common.appctx,
  com.redhat.thermostat.common.config,
  com.redhat.thermostat.common.dao,
  com.redhat.thermostat.common.model,
  com.redhat.thermostat.common.storage,
+ com.redhat.thermostat.common.utils,
  com.redhat.thermostat.launcher,
- com.redhat.thermostat.common.utils,
  com.redhat.thermostat.web.client,
  com.redhat.thermostat.web.common
-Export-Package: com.redhat.thermostat.eclipse;x-friends:=com.redhat.thermostat.eclipse.test,
- com.redhat.thermostat.eclipse.model;x-friends:=com.redhat.thermostat.eclipse.test,
- com.redhat.thermostat.eclipse.views;x-friends:=com.redhat.thermostat.eclipse.test
+Export-Package: com.redhat.thermostat.eclipse;x-friends:="com.redhat.thermostat.eclipse.test,com.redhat.thermostat.eclipse.chart.common,com.redhat.thermostat.eclipse.test.ui",
+ com.redhat.thermostat.eclipse.model;x-friends:="com.redhat.thermostat.eclipse.test,com.redhat.thermostat.eclipse.chart.common,com.redhat.thermostat.eclipse.test.ui",
+ com.redhat.thermostat.eclipse.views;x-friends:="com.redhat.thermostat.eclipse.test,com.redhat.thermostat.eclipse.chart.common,com.redhat.thermostat.eclipse.test.ui"
--- a/eclipse/com.redhat.thermostat.eclipse/plugin.xml	Thu Oct 25 12:48:30 2012 -0400
+++ b/eclipse/com.redhat.thermostat.eclipse/plugin.xml	Thu Oct 25 13:25:07 2012 -0400
@@ -59,4 +59,12 @@
             restorable="true">
       </view>
    </extension>
+   <extension
+         point="org.eclipse.ui.perspectives">
+      <perspective
+            class="com.redhat.thermostat.eclipse.views.ThermostatPerspectiveFactory"
+            id="com.redhat.thermostat.eclipse.perspective"
+            name="Thermostat">
+      </perspective>
+   </extension>
 </plugin>
--- a/eclipse/com.redhat.thermostat.eclipse/pom.xml	Thu Oct 25 12:48:30 2012 -0400
+++ b/eclipse/com.redhat.thermostat.eclipse/pom.xml	Thu Oct 25 13:25:07 2012 -0400
@@ -17,7 +17,7 @@
   <dependencies>
     <dependency>
       <groupId>com.redhat.thermostat</groupId>
-      <artifactId>thermostat-common-core</artifactId>
+      <artifactId>thermostat-client-core</artifactId>
       <version>0.5.0-SNAPSHOT</version>
     </dependency>
     <!-- using Web storage -->
--- a/eclipse/com.redhat.thermostat.eclipse/src/com/redhat/thermostat/eclipse/Activator.java	Thu Oct 25 12:48:30 2012 -0400
+++ b/eclipse/com.redhat.thermostat.eclipse/src/com/redhat/thermostat/eclipse/Activator.java	Thu Oct 25 13:25:07 2012 -0400
@@ -43,6 +43,9 @@
 import org.eclipse.ui.plugin.AbstractUIPlugin;
 import org.osgi.framework.BundleContext;
 
+import com.redhat.thermostat.common.ThreadPoolTimerFactory;
+import com.redhat.thermostat.common.TimerFactory;
+import com.redhat.thermostat.common.appctx.ApplicationContext;
 import com.redhat.thermostat.common.storage.ConnectionException;
 import com.redhat.thermostat.common.utils.OSGIUtils;
 import com.redhat.thermostat.launcher.DbService;
@@ -74,6 +77,10 @@
     public void start(BundleContext context) throws Exception {
         super.start(context);
         plugin = this;
+        
+        // Register a TimerFactory
+        TimerFactory timerFactory = new ThreadPoolTimerFactory(1);
+        ApplicationContext.getInstance().setTimerFactory(timerFactory);
     }
 
     /*
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eclipse/com.redhat.thermostat.eclipse/src/com/redhat/thermostat/eclipse/ThermostatConstants.java	Thu Oct 25 13:25:07 2012 -0400
@@ -0,0 +1,52 @@
+/*
+ * Copyright 2012 Red Hat, Inc.
+ *
+ * This file is part of Thermostat.
+ *
+ * Thermostat is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published
+ * by the Free Software Foundation; either version 2, or (at your
+ * option) any later version.
+ *
+ * Thermostat is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Thermostat; see the file COPYING.  If not see
+ * <http://www.gnu.org/licenses/>.
+ *
+ * Linking this code with other modules is making a combined work
+ * based on this code.  Thus, the terms and conditions of the GNU
+ * General Public License cover the whole combination.
+ *
+ * As a special exception, the copyright holders of this code give
+ * you permission to link this code with independent modules to
+ * produce an executable, regardless of the license terms of these
+ * independent modules, and to copy and distribute the resulting
+ * executable under terms of your choice, provided that you also
+ * meet, for each linked independent module, the terms and conditions
+ * of the license of that module.  An independent module is a module
+ * which is not derived from or based on this code.  If you modify
+ * this code, you may extend this exception to your version of the
+ * library, but you are not obligated to do so.  If you do not wish
+ * to do so, delete this exception statement from your version.
+ */
+
+package com.redhat.thermostat.eclipse;
+
+public interface ThermostatConstants {
+    
+    public static final String PERSPECTIVE_ID = "com.redhat.thermostat.eclipse.perspective";
+    
+    public static final String VIEW_ID_HOST_VM = "com.redhat.thermostat.eclipse.vmtree";
+    public static final String VIEW_ID_HOST_OVERVIEW = "com.redhat.thermostat.eclipse.mainContainer";
+    public static final String VIEW_ID_HOST_CPU = "com.redhat.thermostat.eclipse.chart.hostCpuView";
+    public static final String VIEW_ID_HOST_MEMORY = "com.redhat.thermostat.eclipse.chart.hostMemoryView";
+    public static final String VIEW_ID_VM_CPU = "com.redhat.thermostat.eclipse.chart.vmCpuView";
+    public static final String VIEW_ID_VM_GC = "com.redhat.thermostat.eclipse.chart.vmGcView";
+    
+    public static final String TEST_TAG = "com.redhat.thermostat.eclipse.test.swtTag";
+
+}
--- a/eclipse/com.redhat.thermostat.eclipse/src/com/redhat/thermostat/eclipse/views/HostOverviewViewPart.java	Thu Oct 25 12:48:30 2012 -0400
+++ b/eclipse/com.redhat.thermostat.eclipse/src/com/redhat/thermostat/eclipse/views/HostOverviewViewPart.java	Thu Oct 25 13:25:07 2012 -0400
@@ -54,6 +54,7 @@
 import org.eclipse.swt.widgets.Table;
 import org.eclipse.swt.widgets.TableColumn;
 import org.eclipse.ui.ISelectionListener;
+import org.eclipse.ui.IViewPart;
 import org.eclipse.ui.IWorkbenchPart;
 import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.part.PageBook;
@@ -68,6 +69,7 @@
 import com.redhat.thermostat.common.model.NetworkInterfaceInfo;
 import com.redhat.thermostat.common.utils.OSGIUtils;
 import com.redhat.thermostat.eclipse.Activator;
+import com.redhat.thermostat.eclipse.ThermostatConstants;
 
 public class HostOverviewViewPart extends ViewPart {
 
@@ -250,23 +252,28 @@
 
         // Listen for VMtree changes
         getSite().getWorkbenchWindow().getSelectionService()
-                .addSelectionListener(listener);
+        .addSelectionListener(listener);
         if (Activator.getDefault().isDbConnected()) {
-            ISelection selection = getSite().getWorkbenchWindow()
-                    .getSelectionService().getSelection();
-            Ref ref = getRefFromSelection(selection);
-            if (ref != null) {
-                updateText(ref);
-                if (ref instanceof HostRef) {
-                    showPage(mainScrollPage);
-                } else {
-                    showPage(vmPage);
-                }
-            } else {
-                // FIXME: probably want to show something else, e.g. select x in
-                // VM tree
-                showPage(notConnectedPage);
-            }
+        	// Explicitly get the selected element from the VmsTreeViewPart
+        	IViewPart part = getSite().getWorkbenchWindow().getActivePage().findView(ThermostatConstants.VIEW_ID_HOST_VM);
+        	if (part != null && part instanceof HostsVmsTreeViewPart) {
+        		ISelection selection = part.getSite().getSelectionProvider().getSelection();
+        		Ref ref = getRefFromSelection(selection);
+        		if (ref != null) {
+        			updateText(ref);
+        			if (ref instanceof HostRef) {
+        				showPage(mainScrollPage);
+        			} else {
+        				showPage(vmPage);
+        			}
+        		} else {
+        			// FIXME: probably want to show something else, e.g. select x in
+        			// VM tree
+        			showPage(notConnectedPage);
+        		}
+        	} else {
+        		showPage(notConnectedPage);
+        	}
         } else {
             showPage(notConnectedPage);
         }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eclipse/com.redhat.thermostat.eclipse/src/com/redhat/thermostat/eclipse/views/SWTComponent.java	Thu Oct 25 13:25:07 2012 -0400
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2012 Red Hat, Inc.
+ *
+ * This file is part of Thermostat.
+ *
+ * Thermostat is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published
+ * by the Free Software Foundation; either version 2, or (at your
+ * option) any later version.
+ *
+ * Thermostat is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Thermostat; see the file COPYING.  If not see
+ * <http://www.gnu.org/licenses/>.
+ *
+ * Linking this code with other modules is making a combined work
+ * based on this code.  Thus, the terms and conditions of the GNU
+ * General Public License cover the whole combination.
+ *
+ * As a special exception, the copyright holders of this code give
+ * you permission to link this code with independent modules to
+ * produce an executable, regardless of the license terms of these
+ * independent modules, and to copy and distribute the resulting
+ * executable under terms of your choice, provided that you also
+ * meet, for each linked independent module, the terms and conditions
+ * of the license of that module.  An independent module is a module
+ * which is not derived from or based on this code.  If you modify
+ * this code, you may extend this exception to your version of the
+ * library, but you are not obligated to do so.  If you do not wish
+ * to do so, delete this exception statement from your version.
+ */
+
+package com.redhat.thermostat.eclipse.views;
+
+import org.eclipse.swt.widgets.Composite;
+
+import com.redhat.thermostat.client.core.views.UIComponent;
+
+public interface SWTComponent extends UIComponent {
+    
+    public void createControl(Composite parent);
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eclipse/com.redhat.thermostat.eclipse/src/com/redhat/thermostat/eclipse/views/ThermostatPerspectiveFactory.java	Thu Oct 25 13:25:07 2012 -0400
@@ -0,0 +1,79 @@
+/*
+ * Copyright 2012 Red Hat, Inc.
+ *
+ * This file is part of Thermostat.
+ *
+ * Thermostat is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published
+ * by the Free Software Foundation; either version 2, or (at your
+ * option) any later version.
+ *
+ * Thermostat is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Thermostat; see the file COPYING.  If not see
+ * <http://www.gnu.org/licenses/>.
+ *
+ * Linking this code with other modules is making a combined work
+ * based on this code.  Thus, the terms and conditions of the GNU
+ * General Public License cover the whole combination.
+ *
+ * As a special exception, the copyright holders of this code give
+ * you permission to link this code with independent modules to
+ * produce an executable, regardless of the license terms of these
+ * independent modules, and to copy and distribute the resulting
+ * executable under terms of your choice, provided that you also
+ * meet, for each linked independent module, the terms and conditions
+ * of the license of that module.  An independent module is a module
+ * which is not derived from or based on this code.  If you modify
+ * this code, you may extend this exception to your version of the
+ * library, but you are not obligated to do so.  If you do not wish
+ * to do so, delete this exception statement from your version.
+ */
+
+package com.redhat.thermostat.eclipse.views;
+
+import org.eclipse.ui.IFolderLayout;
+import org.eclipse.ui.IPageLayout;
+import org.eclipse.ui.IPerspectiveFactory;
+
+import com.redhat.thermostat.eclipse.ThermostatConstants;
+
+public class ThermostatPerspectiveFactory implements IPerspectiveFactory {
+    
+    public static final String FOLDER_LEFT = "left";
+    public static final String FOLDER_RIGHT = "right";
+
+    @Override
+    public void createInitialLayout(IPageLayout layout) {
+        defineActions(layout);
+        defineLayout(layout);
+    }
+
+    private void defineLayout(IPageLayout layout) {
+        IFolderLayout left = layout.createFolder(FOLDER_LEFT, IPageLayout.LEFT, 0.25f, layout.getEditorArea());
+        left.addView(ThermostatConstants.VIEW_ID_HOST_VM);
+        
+        IFolderLayout right = layout.createFolder(FOLDER_RIGHT, IPageLayout.RIGHT, 0.5f, layout.getEditorArea());
+        right.addView(ThermostatConstants.VIEW_ID_HOST_OVERVIEW);
+        right.addView(ThermostatConstants.VIEW_ID_HOST_CPU);
+        right.addView(ThermostatConstants.VIEW_ID_HOST_MEMORY);
+        right.addView(ThermostatConstants.VIEW_ID_VM_CPU);
+        right.addView(ThermostatConstants.VIEW_ID_VM_GC);
+        
+        layout.setEditorAreaVisible(false);
+    }
+
+    private void defineActions(IPageLayout layout) {
+        layout.addShowViewShortcut(ThermostatConstants.VIEW_ID_HOST_VM);
+        layout.addShowViewShortcut(ThermostatConstants.VIEW_ID_HOST_OVERVIEW);
+        layout.addShowViewShortcut(ThermostatConstants.VIEW_ID_HOST_CPU);
+        layout.addShowViewShortcut(ThermostatConstants.VIEW_ID_HOST_MEMORY);
+        layout.addShowViewShortcut(ThermostatConstants.VIEW_ID_VM_CPU);
+        layout.addShowViewShortcut(ThermostatConstants.VIEW_ID_VM_GC);
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eclipse/core-p2-repository/category.xml	Thu Oct 25 13:25:07 2012 -0400
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<site>
+   <feature url="features/com.redhat.thermostat.client.feature_0.5.0.qualifier.jar" id="com.redhat.thermostat.client.feature" version="0.5.0.qualifier">
+      <category name="thermostat-client"/>
+   </feature>
+   <category-def name="thermostat-client" label="Thermostat Client"/>
+</site>
--- a/eclipse/core-p2-repository/pom.xml	Thu Oct 25 12:48:30 2012 -0400
+++ b/eclipse/core-p2-repository/pom.xml	Thu Oct 25 13:25:07 2012 -0400
@@ -1,41 +1,4 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-
- Copyright 2012 Red Hat, Inc.
-
- This file is part of Thermostat.
-
- Thermostat is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published
- by the Free Software Foundation; either version 2, or (at your
- option) any later version.
-
- Thermostat is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with Thermostat; see the file COPYING.  If not see
- <http://www.gnu.org/licenses />.
-
- Linking this code with other modules is making a combined work
- based on this code.  Thus, the terms and conditions of the GNU
- General Public License cover the whole combination.
-
- As a special exception, the copyright holders of this code give
- you permission to link this code with independent modules to
- produce an executable, regardless of the license terms of these
- independent modules, and to copy and distribute the resulting
- executable under terms of your choice, provided that you also
- meet, for each linked independent module, the terms and conditions
- of the license of that module.  An independent module is a module
- which is not derived from or based on this code.  If you modify
- this code, you may extend this exception to your version of the
- library, but you are not obligated to do so.  If you do not wish
- to do so, delete this exception statement from your version.
-
--->
 <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <modelVersion>4.0.0</modelVersion>
@@ -48,197 +11,28 @@
   <artifactId>com.redhat.thermostat.eclipse.core-p2-repo</artifactId>
   <version>0.5.0-SNAPSHOT</version>
 
-  <name>Thermostat Core Bundles p2 Repository</name>
+  <name>Thermostat Client p2 Repository</name>
+
+  <dependencies>
+    <dependency>
+      <groupId>com.redhat.thermostat.eclipse.parent</groupId>
+      <artifactId>com.redhat.thermostat.client.feature</artifactId>
+      <version>0.5.0-SNAPSHOT</version>
+    </dependency>
+  </dependencies>
 
   <build>
     <plugins>
-      <!-- Configuration for the PublishFeaturesAndBundlesMojoTest -->
       <plugin>
-        <groupId>org.eclipse.tycho.extras</groupId>
-        <artifactId>tycho-p2-extras-plugin</artifactId>
+        <groupId>org.eclipse.tycho</groupId>
+        <artifactId>tycho-p2-publisher-plugin</artifactId>
         <version>${tycho-version}</version>
-        <executions>
-          <execution>
-            <phase>prepare-package</phase>
-            <goals>
-              <goal>publish-features-and-bundles</goal>
-            </goals>
-          </execution>
-        </executions>
         <configuration>
-          <compress>true</compress>
+          <publishArtifacts>true</publishArtifacts>
         </configuration>
       </plugin>
-      <plugin>
-        <artifactId>maven-dependency-plugin</artifactId>
-        <executions>
-          <execution>
-            <id>copy-bundles-for-publishing</id>
-            <phase>process-resources</phase>
-            <goals>
-              <goal>copy-dependencies</goal>
-            </goals>
-            <configuration>
-              <excludeTransitive>false</excludeTransitive>
-              <includeGroupIds>com.redhat.thermostat</includeGroupIds>
-              <outputDirectory>${project.basedir}/target/source/plugins</outputDirectory>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
     </plugins>
   </build>
 
-  <packaging>pom</packaging>
-
-  <dependencies>
-    <dependency>
-      <groupId>com.redhat.thermostat</groupId>
-      <artifactId>thermostat-main</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>com.redhat.thermostat</groupId>
-      <artifactId>thermostat-bundles</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>com.redhat.thermostat</groupId>
-      <artifactId>thermostat-tools</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>com.redhat.thermostat</groupId>
-      <artifactId>thermostat-launcher</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>com.redhat.thermostat</groupId>
-      <artifactId>thermostat-client-swing</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>com.redhat.thermostat</groupId>
-      <artifactId>thermostat-client-command</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>com.redhat.thermostat</groupId>
-      <artifactId>thermostat-client-vmclassstat-swing</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>com.redhat.thermostat</groupId>
-      <artifactId>thermostat-osgi-memory-stats-panel-swing</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-        <groupId>com.redhat.thermostat</groupId>
-        <artifactId>thermostat-osgi-living-vm-filter-swing</artifactId>
-        <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>com.redhat.thermostat</groupId>
-      <artifactId>thermostat-agent-core</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>com.redhat.thermostat</groupId>
-      <artifactId>thermostat-agent-cli</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>com.redhat.thermostat</groupId>
-      <artifactId>thermostat-agent-command</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>com.redhat.thermostat</groupId>
-      <artifactId>thermostat-agent-heapdumper</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>com.redhat.thermostat</groupId>
-      <artifactId>thermostat-killvm-agent</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-        <groupId>com.redhat.thermostat</groupId>
-        <artifactId>thermostat-killvm-client-swing</artifactId>
-        <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>com.redhat.thermostat</groupId>
-      <artifactId>thermostat-common-core</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>com.redhat.thermostat</groupId>
-      <artifactId>thermostat-common-command</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-        <groupId>com.redhat.thermostat</groupId>
-        <artifactId>thermostat-osgi-process-handler</artifactId>
-        <version>${project.version}</version>
-    </dependency>
-    <dependency>
-        <groupId>com.redhat.thermostat</groupId>
-        <artifactId>thermostat-client-heapdumper-swing</artifactId>
-        <version>${project.version}</version>
-    </dependency>
-    <dependency>
-        <groupId>com.redhat.thermostat</groupId>
-        <artifactId>thermostat-laf</artifactId>
-        <version>${project.version}</version>
-    </dependency>
-    <dependency>
-        <groupId>com.redhat.thermostat</groupId>
-        <artifactId>thermostat-keyring</artifactId>
-        <version>${project.version}</version>
-    </dependency>
-    <dependency>
-        <groupId>com.redhat.thermostat</groupId>
-        <artifactId>thermostat-web-client</artifactId>
-        <version>${project.version}</version>
-    </dependency>
-    <dependency>
-        <groupId>com.redhat.thermostat</groupId>
-        <artifactId>thermostat-web-server</artifactId>
-        <version>${project.version}</version>
-    </dependency>
-
-    <!--  thread plugin -->
-    <dependency>
-        <groupId>com.redhat.thermostat</groupId>
-        <artifactId>thermostat-thread-client-common</artifactId>
-        <version>${project.version}</version>
-    </dependency>
-    <dependency>
-        <groupId>com.redhat.thermostat</groupId>
-        <artifactId>thermostat-thread-client-controllers</artifactId>
-        <version>${project.version}</version>
-    </dependency>
-    <dependency>
-        <groupId>com.redhat.thermostat</groupId>
-        <artifactId>thermostat-thread-client-swing</artifactId>
-        <version>${project.version}</version>
-    </dependency>
-    <dependency>
-        <groupId>com.redhat.thermostat</groupId>
-        <artifactId>thermostat-thread-collector</artifactId>
-        <version>${project.version}</version>
-    </dependency>      
-    <dependency>
-        <groupId>com.redhat.thermostat</groupId>
-        <artifactId>thermostat-thread-harvester</artifactId>
-        <version>${project.version}</version>
-    </dependency>
-     
-    <dependency>
-        <groupId>com.redhat.thermostat</groupId>
-        <artifactId>thermostat-system-backend</artifactId>
-        <version>${project.version}</version>
-    </dependency>
-  </dependencies>
+  <packaging>eclipse-repository</packaging>
 </project>
--- a/eclipse/pom.xml	Thu Oct 25 12:48:30 2012 -0400
+++ b/eclipse/pom.xml	Thu Oct 25 13:25:07 2012 -0400
@@ -91,15 +91,20 @@
   <modules>
     <module>com.redhat.thermostat.eclipse.boot</module>
     <module>com.redhat.thermostat.eclipse</module>
+    <module>com.redhat.thermostat.eclipse.chart.common</module>
     <module>com.redhat.thermostat.eclipse.test</module>
+    <module>com.redhat.thermostat.eclipse.test.ui</module>
     <module>com.redhat.thermostat.eclipse.feature</module>
     <module>com.redhat.thermostat.eclipse.p2-repo</module>
+    <module>com.redhat.thermostat.client.feature</module>
     <module>core-p2-repository</module>
     <module>test-deps-bundle-wrapping</module>
+    <module>jfreechart-bundle-wrapping</module>
     <!-- Adds p2 metadata and creates repo for plain (wrapped)
          Java OSGi bundles so they can be found for building and
          running tycho tests -->
     <module>test-deps-p2-repository</module>
+    <module>jfreechart-p2-repository</module>
     <module>composite-repo</module>
   </modules>
 
@@ -120,6 +125,11 @@
       <url>file://${basedir}/../test-deps-p2-repository/target/repository/</url>
     </repository>
     <repository>
+      <id>local_jfreechart</id>
+      <layout>p2</layout>
+      <url>file://${basedir}/../jfreechart-p2-repository/target/repository/</url>
+    </repository>
+    <repository>
       <id>maven.eclipse.org</id>
       <url>http://maven.eclipse.org/nexus/content/groups/public/</url>
     </repository>