[jboss-svn-commits] JBL Code SVN: r20593 - in labs/jbossrules/trunk/drools-eclipse: org.guvnor.tools and 12 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Jun 18 11:59:32 EDT 2008


Author: john.graham at jboss.org
Date: 2008-06-18 11:59:32 -0400 (Wed, 18 Jun 2008)
New Revision: 20593

Added:
   labs/jbossrules/trunk/drools-eclipse/.project
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/.classpath
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/.project
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/META-INF/
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/META-INF/MANIFEST.MF
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/about.html
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/bin/
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/build.properties
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/icons/
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/icons/guvnor_controlled.gif
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/icons/guvnor_rep.gif
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/icons/guvnor_rep_add.gif
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/icons/guvnor_rep_wizban.gif
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/plugin.xml
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/Activator.java
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/GuvnorLocationManager.java
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/GuvnorRepository.java
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/perspectives/
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/perspectives/GuvnorRepExplorerPerspective.java
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/PlatformUtils.java
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/StringInput.java
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/StringStorage.java
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/webdav/
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/webdav/ResourceProperties.java
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/webdav/StreamProcessingUtils.java
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/webdav/WebDavAuthenticator.java
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/webdav/WebDavClient.java
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/webdav/WebDavServerCache.java
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/views/
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/views/IGuvnorConstants.java
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/views/RepositoryContentProvider.java
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/views/RepositoryLabelProvider.java
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/views/RepositoryView.java
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/views/ResourceHistoryView.java
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/views/model/
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/views/model/TreeObject.java
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/views/model/TreeParent.java
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/views/model/TreePropertyProvider.java
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/CheckoutWizard.java
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/GuvWizNewProjectPage.java
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/GuvWizardModel.java
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/GuvnorMainConfigPage.java
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/IGuvnorWizard.java
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/NewRepLocationWizard.java
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/SelectGuvnorRepPage.java
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/SelectGuvnorResourcesPage.java
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/SelectResourceVersionPage.java
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/SelectTargetLocationPage.java
Log:
Initial drop of org.guvnor.tools plug-in

Added: labs/jbossrules/trunk/drools-eclipse/.project
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/.project	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/.project	2008-06-18 15:59:32 UTC (rev 20593)
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>drools-eclipse</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+	</buildSpec>
+	<natures>
+	</natures>
+</projectDescription>

Added: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/.classpath
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/.classpath	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/.classpath	2008-06-18 15:59:32 UTC (rev 20593)
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>

Added: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/.project
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/.project	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/.project	2008-06-18 15:59:32 UTC (rev 20593)
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.guvnor.tools</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>

Added: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/META-INF/MANIFEST.MF
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/META-INF/MANIFEST.MF	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/META-INF/MANIFEST.MF	2008-06-18 15:59:32 UTC (rev 20593)
@@ -0,0 +1,13 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: JBoss Guvnor Tools Plug-in
+Bundle-SymbolicName: org.guvnor.tools;singleton:=true
+Bundle-Version: 0.5.0
+Bundle-Activator: org.guvnor.tools.Activator
+Bundle-Vendor: JBoss.org
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.ui.ide,
+ org.eclipse.core.resources,
+ org.eclipse.core.runtime,
+ org.eclipse.webdav
+Eclipse-LazyStart: true

Added: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/about.html
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/about.html	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/about.html	2008-06-18 15:59:32 UTC (rev 20593)
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 15, 2008</p>
+<h3>License</h3>
+
+<p>JBoss, a Division of Red Hat makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from JBoss, a Division of Red Hat, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/build.properties
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/build.properties	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/build.properties	2008-06-18 15:59:32 UTC (rev 20593)
@@ -0,0 +1,9 @@
+source.. = src/
+output.. = bin/
+bin.includes = plugin.xml,\
+               META-INF/,\
+               .,\
+               icons/,\
+               about.html
+src.includes = about.html,\
+               src/

Added: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/icons/guvnor_controlled.gif
===================================================================
(Binary files differ)


Property changes on: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/icons/guvnor_controlled.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/icons/guvnor_rep.gif
===================================================================
(Binary files differ)


Property changes on: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/icons/guvnor_rep.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/icons/guvnor_rep_add.gif
===================================================================
(Binary files differ)


Property changes on: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/icons/guvnor_rep_add.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/icons/guvnor_rep_wizban.gif
===================================================================
(Binary files differ)


Property changes on: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/icons/guvnor_rep_wizban.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/plugin.xml
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/plugin.xml	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/plugin.xml	2008-06-18 15:59:32 UTC (rev 20593)
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.2"?>
+<plugin>
+
+   <extension point="org.eclipse.ui.views">
+      <category name="Guvnor" id="org.guvnor.tools"/>
+      <view name="Guvnor Repositories"
+            icon="icons/guvnor_rep.gif"
+            category="org.guvnor.tools"
+            class="org.guvnor.tools.views.RepositoryView"
+            id="org.guvnor.tools.views.RepositoryView"/>
+      <view category="org.guvnor.tools"
+            class="org.guvnor.tools.views.ResourceHistoryView"
+            icon="icons/guvnor_rep.gif"
+            id="org.guvnor.tools.views.ResourceHistoryView"
+            name="Guvnor Resource History"/>
+   </extension>
+   
+   <extension point="org.eclipse.ui.perspectiveExtensions">
+      <perspectiveExtension targetID="org.eclipse.ui.resourcePerspective">
+         <view ratio="0.5"
+               relative="org.eclipse.ui.views.TaskList"
+               relationship="right"
+               id="org.guvnor.tools.views.RepositoryView"/>
+      </perspectiveExtension>
+   </extension>
+  
+  <extension point = "org.eclipse.ui.newWizards">
+		<category id = "org.guvnor.tools.wizcat" name="Guvnor"/>
+		<!--
+	 	<wizard id = "org.guvnor.tools.wizards.CheckoutWizard"
+	      	    name = "Checkout Projects from Guvnor"
+		        class="org.guvnor.tools.wizards.CheckoutWizard"
+		        category="org.guvnor.tools.wizcat"
+		        project="true"
+		        icon="icons/guvnor_rep.gif">
+	    	   <description>Checkout Projects from Guvnor</description>
+		</wizard>
+		-->
+		<wizard id = "org.guvnor.tools.wizards.NewRepLocationWizard"
+	      	    name = "Guvnor repository location"
+		        class="org.guvnor.tools.wizards.NewRepLocationWizard"
+		        category="org.guvnor.tools.wizcat"
+		        icon="icons/guvnor_rep.gif">
+	    	   <description>New Guvnor repository location</description>
+		</wizard>
+	</extension>
+	<!--
+	<extension point = "org.eclipse.ui.importWizards">
+	    <category id = "org.guvnor.tools.importwizcat" name="Guvnor"/>
+	 	<wizard id = "org.guvnor.tools.CheckoutWizard"
+	      	    name = "Checkout Projects from Guvnor"
+	            category="org.guvnor.tools.importwizcat"
+		        class="org.guvnor.tools.wizards.CheckoutWizard"
+		        icon="icons/guvnor_rep.gif">
+	    	   <description>Checkout Projects from Guvnor</description>
+		</wizard>
+	</extension>
+	-->
+	<extension point="org.eclipse.ui.perspectiveExtensions">
+    	<perspectiveExtension targetID="org.eclipse.ui.resourcePerspective">
+           <view id="org.guvnor.tools.views.RepositoriesView"
+                 ratio="0.5"
+                 relationship="right"
+                 relative="org.eclipse.ui.views.TaskList"/>
+       </perspectiveExtension>
+       <perspectiveExtension targetID="org.eclipse.ui.resourcePerspective">
+          <view id="org.guvnor.tools.views.ResourceHistoryView"
+                ratio="0.5"
+                relationship="right"
+                relative="org.eclipse.ui.views.TaskList"/>
+       </perspectiveExtension>
+  </extension>
+ 
+  <extension point="org.eclipse.ui.perspectives">
+      <perspective name="Guvnor Repository Exploring"
+                   icon="icons/guvnor_rep.gif"
+                   class="org.guvnor.tools.perspectives.GuvnorRepExplorerPerspective"
+                   id="org.guvnor.tools.perspectives.GuvnorRepExplorerPerspective"/>
+  </extension>
+</plugin>

Added: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/Activator.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/Activator.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/Activator.java	2008-06-18 15:59:32 UTC (rev 20593)
@@ -0,0 +1,126 @@
+package org.guvnor.tools;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class Activator extends AbstractUIPlugin {
+
+	// The plug-in ID
+	public static final String PLUGIN_ID = "org.drools.guvnor";
+
+	// The shared instance
+	private static Activator plugin;
+	
+	private static GuvnorLocationManager locManager;
+	
+	/**
+	 * The constructor
+	 */
+	public Activator() {
+	}
+	
+	public static GuvnorLocationManager getLocationManager() {
+		if (locManager == null) {
+			locManager = new GuvnorLocationManager();
+		}
+		return locManager;
+	}
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+	 */
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		plugin = this;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
+	 */
+	public void stop(BundleContext context) throws Exception {
+		plugin = null;
+		super.stop(context);
+	}
+
+	/**
+	 * Returns the shared instance
+	 *
+	 * @return the shared instance
+	 */
+	public static Activator getDefault() {
+		return plugin;
+	}
+	
+	public void writeLog(int severity, String msg, Throwable t) {
+		IStatus status = new Status(severity, PLUGIN_ID, msg, t);
+		super.getLog().log(status);
+	}
+	
+	/**
+	 * Returns an image descriptor for the image file at the given
+	 * plug-in relative path
+	 *
+	 * @param path the path
+	 * @return the image descriptor
+	 */
+	public static ImageDescriptor getImageDescriptor(String id) {
+		ImageDescriptor img = getCachedImageDescriptor(id);
+		if (img == null) {
+			img = loadImageDescriptor(id);
+		}
+		return img;
+	}
+	
+	private static ImageDescriptor loadImageDescriptor(String id) {
+		String iconPath = "icons/"; //$NON-NLS-1$
+
+		try {
+			URL installURL = Activator.getDefault().getBundle().getEntry("/"); //$NON-NLS-1$
+			URL url = new URL(installURL, iconPath + id);
+			return ImageDescriptor.createFromURL(url);
+		} catch (MalformedURLException e) {
+			return ImageDescriptor.getMissingImageDescriptor();
+		}
+	}
+	
+	private static ImageDescriptor getCachedImageDescriptor(String id) {
+		ImageDescriptor img = null;
+		if (id.equals(IMG_GUVCONTROLLED)) {
+			if (GUVCONTROLLED_IMG == null) {
+				GUVCONTROLLED_IMG = loadImageDescriptor(IMG_GUVCONTROLLED);
+			}
+			img = GUVCONTROLLED_IMG; 
+		}
+		if (id.equals(IMG_GUVLOCADD)) {
+			if (GUVLOCADD_IMG == null) {
+				GUVLOCADD_IMG = loadImageDescriptor(IMG_GUVLOCADD);
+			}
+			img = GUVLOCADD_IMG; 
+		}
+		if (id.equals(IMG_GUVREPWIZBAN)) {
+			if (GUVREPWIZBAN_IMG == null) {
+				GUVREPWIZBAN_IMG = loadImageDescriptor(IMG_GUVREPWIZBAN);
+			}
+			img = GUVREPWIZBAN_IMG; 
+		}
+		return img;
+	}
+	
+	private static ImageDescriptor GUVCONTROLLED_IMG;
+	private static ImageDescriptor GUVLOCADD_IMG;
+	private static ImageDescriptor GUVREPWIZBAN_IMG;
+	
+	public static final String IMG_GUVCONTROLLED = "guvnor_controlled.gif";
+	public static final String IMG_GUVLOCADD = "guvnor_rep_add.gif";
+	public static final String IMG_GUVREPWIZBAN = "guvnor_rep_wizban.gif";
+}

Added: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/GuvnorLocationManager.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/GuvnorLocationManager.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/GuvnorLocationManager.java	2008-06-18 15:59:32 UTC (rev 20593)
@@ -0,0 +1,147 @@
+package org.guvnor.tools;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.InputStreamReader;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.runtime.IStatus;
+
+public class GuvnorLocationManager {
+	
+	private static final String REP_CACHE_NAME = ".replist";
+	
+	private ArrayList<GuvnorRepository> repList = new ArrayList<GuvnorRepository>();
+	
+	/*
+	 * Package restricted
+	 */
+	GuvnorLocationManager() {
+		try {
+			load();
+		} catch (Exception e) {
+			Activator.getDefault().writeLog(IStatus.ERROR, e.getMessage(), e);
+		}
+	}
+	
+	public void addRespository(String location, String username, String password) throws Exception {
+		addRepository(new GuvnorRepository(location, username, password));
+	}
+	
+	public void addRepository(GuvnorRepository rep) throws Exception {
+		if (findRepository(rep.getLocation()) != null) {
+			throw new Exception("Duplicate repository: " + rep.getLocation());
+		}
+		repList.add(rep);
+		notifyListeners(IRepositorySetListener.REP_ADDED);
+		try {
+			commit();
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	public List<GuvnorRepository> getRepositories() {
+		return repList;
+	}
+	
+	public boolean removeRepository(String rep) {
+		GuvnorRepository theRep = findRepository(rep);
+		if (theRep == null) {
+			return false;
+		}
+		boolean res = repList.remove(theRep);
+		notifyListeners(IRepositorySetListener.REP_ADDED);
+		try {
+			commit();
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		return res;
+	}
+	
+	private GuvnorRepository findRepository(String rep) {
+		GuvnorRepository theRep = null;
+		for (int i = 0; i < repList.size(); i++) {
+			if (repList.get(i).getLocation().equals(rep)) {
+				theRep = repList.get(i);
+				break;
+			}
+		}
+		return theRep;
+	}
+	
+	private void commit() throws Exception {
+		File repFile = Activator.getDefault().getStateLocation().
+										append(REP_CACHE_NAME).toFile();
+		FileOutputStream fos = new FileOutputStream(repFile);
+		PrintWriter writer = new PrintWriter(fos);
+		for (int i = 0; i < repList.size(); i++) {
+			GuvnorRepository oneRep = repList.get(i);
+			writer.println(oneRep.getLocation());
+			writer.println(oneRep.getUsername());
+			writer.println(oneRep.getPassword());
+		}
+		writer.flush();
+		fos.flush();
+		fos.close();
+	}
+	
+	private void load() throws Exception {
+		repList.clear();
+		File repFile = Activator.getDefault().getStateLocation().
+									append(REP_CACHE_NAME).toFile();
+		if (!repFile.exists()) {
+			return;
+		}
+		FileInputStream fis = new FileInputStream(repFile);
+		BufferedReader reader = new BufferedReader(new InputStreamReader(fis));
+		String oneRep = null;
+		do {
+			oneRep = reader.readLine();
+			if (oneRep != null && oneRep.trim().length() == 0) {
+				oneRep = null;
+			}
+			String oneUN = reader.readLine();
+			String onePW = reader.readLine();
+			if (oneRep != null) {
+				if (oneUN != null && onePW != null) {
+					repList.add(new GuvnorRepository(oneRep, oneUN, onePW));
+				} else {
+					System.out.println("incomplete rep: " + oneRep);
+				}
+			}
+		} while (oneRep != null);
+	}
+	
+	public interface IRepositorySetListener {
+		public static final int REP_ADDED = 0;
+		public static final int REP_REMOVED = 1;
+		
+		public void repositorySetChanged(int type, List<GuvnorRepository> repList);
+	}
+	
+	private List<IRepositorySetListener> repsetListeners = new ArrayList<IRepositorySetListener>();
+	
+	public boolean addRepositorySetListener(IRepositorySetListener listener) {
+		return repsetListeners.add(listener);
+	}
+	
+	public boolean removeRepositorySetListener(IRepositorySetListener listener) {
+		return repsetListeners.remove(listener);
+	}
+	
+	private void notifyListeners(int eventType) {
+		for (int i = 0; i < repsetListeners.size(); i++) {
+			try {
+				repsetListeners.get(i).repositorySetChanged(eventType, repList);
+			} catch (Throwable t) {
+				Activator.getDefault().writeLog(IStatus.ERROR, t.getMessage(), t);
+			}
+		}
+	}
+}
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/GuvnorRepository.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/GuvnorRepository.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/GuvnorRepository.java	2008-06-18 15:59:32 UTC (rev 20593)
@@ -0,0 +1,25 @@
+package org.guvnor.tools;
+
+public class GuvnorRepository {
+	private String location;
+	private String username;
+	private String password;
+	
+	public GuvnorRepository(String location, String username, String password) {
+		this.location = location;
+		this.username = username;
+		this.password = password;
+	}
+
+	public String getLocation() {
+		return location;
+	}
+
+	public String getUsername() {
+		return username;
+	}
+
+	public String getPassword() {
+		return password;
+	}
+}

Added: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/perspectives/GuvnorRepExplorerPerspective.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/perspectives/GuvnorRepExplorerPerspective.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/perspectives/GuvnorRepExplorerPerspective.java	2008-06-18 15:59:32 UTC (rev 20593)
@@ -0,0 +1,43 @@
+package org.guvnor.tools.perspectives;
+
+import org.eclipse.ui.IFolderLayout;
+import org.eclipse.ui.IPageLayout;
+import org.eclipse.ui.IPerspectiveFactory;
+import org.guvnor.tools.views.IGuvnorConstants;
+
+public class GuvnorRepExplorerPerspective implements IPerspectiveFactory {
+
+	public void createInitialLayout(IPageLayout layout) {
+		String editorArea = layout.getEditorArea();
+		IFolderLayout top =
+			layout.createFolder("top", IPageLayout.LEFT, 0.40f, editorArea);	//$NON-NLS-1$
+		top.addView(IGuvnorConstants.REPVIEW_ID);
+		IFolderLayout botLeft = 
+			layout.createFolder("botleft", IPageLayout.BOTTOM, 0.70f, "top");
+//		botLeft.addView(IPageLayout.ID_OUTLINE);
+		botLeft.addView(IPageLayout.ID_PROP_SHEET);
+		layout.addView(IGuvnorConstants.RESHISTORYVIEW_ID, IPageLayout.BOTTOM, 0.70f, editorArea);
+		layout.setEditorAreaVisible(true);
+		
+		addActions(layout);
+	}
+	
+	private void addActions(IPageLayout layout) {
+		// Add "new wizards". They will be present in File/New menu
+		layout.addNewWizardShortcut("org.eclipse.ui.wizards.new.project"); //$NON-NLS-1$
+		layout.addNewWizardShortcut("org.eclipse.ui.wizards.new.folder"); //$NON-NLS-1$
+		layout.addNewWizardShortcut("org.eclipse.ui.wizards.new.file"); //$NON-NLS-1$
+
+		// Add "show views". They will be present in "show view" menu
+		layout.addShowViewShortcut(IPageLayout.ID_RES_NAV);
+		layout.addShowViewShortcut(IPageLayout.ID_PROP_SHEET);
+//		layout.addShowViewShortcut(IPageLayout.ID_OUTLINE);
+//		layout.addShowViewShortcut(IPageLayout.ID_TASK_LIST);
+		layout.addShowViewShortcut(IGuvnorConstants.RESHISTORYVIEW_ID);
+		layout.addShowViewShortcut(IGuvnorConstants.REPVIEW_ID);
+		
+		// Add  "perspective short cut"
+		layout.addPerspectiveShortcut("org.eclipse.ui.resourcePerspective"); //$NON-NLS-1$
+		layout.addPerspectiveShortcut("org.eclipse.team.ui.TeamSynchronizingPerspective"); //$NON-NLS-1$
+	}
+}

Added: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/PlatformUtils.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/PlatformUtils.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/PlatformUtils.java	2008-06-18 15:59:32 UTC (rev 20593)
@@ -0,0 +1,29 @@
+package org.guvnor.tools.utils;
+
+import org.eclipse.core.resources.IStorage;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.ui.IEditorDescriptor;
+import org.eclipse.ui.IStorageEditorInput;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PlatformUI;
+import org.guvnor.tools.Activator;
+
+public class PlatformUtils {
+	public static void openEditor(String contents, String name) {
+		IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
+		IStorage storage = new StringStorage(contents, name);
+		IStorageEditorInput input = new StringInput(storage);
+		IWorkbenchPage page = window.getActivePage();
+		IEditorDescriptor desc = PlatformUI.getWorkbench().
+        							getEditorRegistry().getDefaultEditor(name);
+		String editorId = desc != null?desc.getId():"org.eclipse.ui.DefaultTextEditor";
+		try {
+		if (page != null) {
+			page.openEditor(input, editorId);
+		}
+		} catch (Exception e) {
+			Activator.getDefault().writeLog(IStatus.ERROR, e.getMessage(), e);
+		}
+	}
+}

Added: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/StringInput.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/StringInput.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/StringInput.java	2008-06-18 15:59:32 UTC (rev 20593)
@@ -0,0 +1,39 @@
+package org.guvnor.tools.utils;
+
+import org.eclipse.core.resources.IStorage;
+import org.eclipse.core.runtime.PlatformObject;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.ui.IPersistableElement;
+import org.eclipse.ui.IStorageEditorInput;
+
+public class StringInput extends PlatformObject implements IStorageEditorInput {
+	private IStorage storage;
+
+	public StringInput(IStorage storage) {
+		this.storage = storage;
+	}
+
+	public boolean exists() {
+		return true;
+	}
+
+	public ImageDescriptor getImageDescriptor() {
+		return null;
+	}
+
+	public String getName() {
+		return storage.getName();
+	}
+
+	public IPersistableElement getPersistable() {
+		return null;
+	}
+
+	public IStorage getStorage() {
+		return storage;
+	}
+
+	public String getToolTipText() {
+		return "String-based file: " + storage.getName();
+	}
+}

Added: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/StringStorage.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/StringStorage.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/StringStorage.java	2008-06-18 15:59:32 UTC (rev 20593)
@@ -0,0 +1,35 @@
+package org.guvnor.tools.utils;
+
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+
+import org.eclipse.core.resources.IStorage;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.PlatformObject;
+
+public class StringStorage extends PlatformObject implements IStorage {
+	private String contents;
+	private String name;
+	
+	public StringStorage(String contents, String name) {
+		this.contents = contents;
+		this.name = name;
+	}
+
+	public InputStream getContents() throws CoreException {
+		return new ByteArrayInputStream(contents.getBytes());
+	}
+
+	public IPath getFullPath() {
+		return null;
+	}
+
+	public String getName() {
+		return name + " (Read only)";
+	}
+
+	public boolean isReadOnly() {
+		return true;
+	}
+}

Added: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/webdav/ResourceProperties.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/webdav/ResourceProperties.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/webdav/ResourceProperties.java	2008-06-18 15:59:32 UTC (rev 20593)
@@ -0,0 +1,33 @@
+package org.guvnor.tools.utils.webdav;
+
+public class ResourceProperties {
+	private boolean isDirectory;
+	private String creationDate;
+	private String lastModifiedDate;
+	private String base;
+	
+	public String getBase() {
+		return base;
+	}
+	public void setBase(String base) {
+		this.base = base;
+	}
+	public boolean isDirectory() {
+		return isDirectory;
+	}
+	public void setDirectory(boolean isDirectory) {
+		this.isDirectory = isDirectory;
+	}
+	public String getCreationDate() {
+		return creationDate != null?creationDate:"";
+	}
+	public void setCreationDate(String creationDate) {
+		this.creationDate = creationDate;
+	}
+	public String getLastModifiedDate() {
+		return lastModifiedDate != null?lastModifiedDate:"";
+	}
+	public void setLastModifiedDate(String lastModifiedDate) {
+		this.lastModifiedDate = lastModifiedDate;
+	}
+}

Added: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/webdav/StreamProcessingUtils.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/webdav/StreamProcessingUtils.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/webdav/StreamProcessingUtils.java	2008-06-18 15:59:32 UTC (rev 20593)
@@ -0,0 +1,90 @@
+package org.guvnor.tools.utils.webdav;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+
+public class StreamProcessingUtils {
+	
+	public static String getStreamContents(InputStream is) throws IOException {
+		StringBuilder sb = new StringBuilder();
+		int c;
+  		while ((c = is.read()) != -1) {
+  			sb.append((char)c);
+  		}
+  		return sb.toString();
+	}
+	
+	private static String DAV_NS = "DAV:";
+	
+	public static Map<String, ResourceProperties> parseListing(String base, InputStream is) throws Exception {
+		Map<String, ResourceProperties> res = new HashMap<String, ResourceProperties>();
+		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+		factory.setNamespaceAware(true);
+		DocumentBuilder parser = factory.newDocumentBuilder();
+		Document doc = parser.parse(is);
+		NodeList nl = doc.getElementsByTagNameNS(DAV_NS, "response");
+		for (int i = 0; i < nl.getLength(); i++) {
+			Element oneElem = (Element)nl.item(i);
+			NodeList resName = oneElem.getElementsByTagNameNS(DAV_NS, "href");
+			assert(resName.getLength() == 1);
+			String bareName = extractOverlap(base, resName.item(0).getTextContent());
+			if (bareName.trim().length() > 0) {
+				ResourceProperties props = new ResourceProperties();
+				NodeList propList = oneElem.getElementsByTagNameNS(DAV_NS, "resourcetype");
+				assert(propList.getLength() == 1);
+				NodeList resTypeList = ((Element)propList.item(0)).getElementsByTagNameNS(DAV_NS, "collection");
+				assert(resTypeList.getLength() < 2);
+				if (resTypeList.getLength() == 1) {
+					props.setDirectory(true);
+				}
+				propList = oneElem.getElementsByTagNameNS(DAV_NS, "creationdate");
+				if (propList.getLength() > 0) {
+					props.setCreationDate(propList.item(0).getTextContent());
+				}
+				propList = oneElem.getElementsByTagNameNS(DAV_NS, "getlastmodified");
+				if (propList.getLength() > 0) {
+					props.setLastModifiedDate(propList.item(0).getTextContent());
+				}
+				String normBase = base.trim().endsWith("/")?base.trim():base.trim() + "/";
+				props.setBase(normBase);
+				res.put(bareName, props);
+			}
+		}
+		return res;
+	}
+	
+	private static String extractOverlap(String base, String extension) {
+		String res = null;
+		int pos = 0;
+		int i = 1;
+		boolean done = false;
+		while (i < extension.length() && !done) {
+			pos = base.lastIndexOf(extension.substring(0, i));
+			if (pos == -1) {
+				res = extension.substring(i - 1);
+				done = true;
+			}
+			i++;
+		}
+		// If we got to the end of the loop above but !done,
+		// that means the entire extension string matched in
+		// base, so remove the entire extension contents
+		if (!done) {
+			res = "";
+		}
+		if (res.startsWith("/") && res.length() > 1) {
+			res = res.substring(1);
+		}
+//System.out.println("Returning " + res + " from " + base + ", " + extension);
+		return res;
+	}
+}

Added: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/webdav/WebDavAuthenticator.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/webdav/WebDavAuthenticator.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/webdav/WebDavAuthenticator.java	2008-06-18 15:59:32 UTC (rev 20593)
@@ -0,0 +1,91 @@
+package org.guvnor.tools.utils.webdav;
+
+import java.net.URL;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.webdav.http.client.IAuthenticator;
+
+public class WebDavAuthenticator implements IAuthenticator {
+	
+	private class ServerAuthenInfo {
+		private String serverUrl;
+		private HashMap<String, Map<String, String>> authInfo;
+		
+		public ServerAuthenInfo(String serverUrl) {
+			this.serverUrl = serverUrl;
+			authInfo = new HashMap<String, Map<String, String>>();
+		}
+		public Map<String, String> getAuthenicationInfo(String scheme) {
+			return authInfo.get(scheme);
+		}
+		public void addAuthenicationInfo(String scheme, Map<String, String> info) {
+			authInfo.put(scheme, info);
+		}
+		public String getServerURL() {
+			return serverUrl;
+		}
+	}
+	
+	private HashMap<String, ServerAuthenInfo> serverAuthMaps;
+
+	public WebDavAuthenticator() {
+		serverAuthMaps = new HashMap<String, ServerAuthenInfo>();
+	}
+	
+	public WebDavAuthenticator(URL serverUrl, 
+							  String username, 
+							  String password, 
+							  String scheme) {
+		this();
+		HashMap<String, String> info = new HashMap<String, String>();
+		info.put("username", username);
+		info.put("password", password);
+		addAuthenticationInfo(serverUrl, null, scheme, info);
+	}
+	
+	@SuppressWarnings("unchecked")
+	public void addAuthenticationInfo(URL serverUrl, 
+			                         String realm,
+			                         String scheme, 
+			                         Map info) {
+		ServerAuthenInfo authInfo = serverAuthMaps.get(serverUrl);
+		if (authInfo == null) {
+			authInfo = new ServerAuthenInfo(serverUrl.getHost());
+			serverAuthMaps.put(serverUrl.getHost().toLowerCase(), authInfo);
+		}
+		authInfo.addAuthenicationInfo(scheme.toLowerCase(), info);
+	}
+
+	public void addProtectionSpace(URL resourceUrl, 
+			                      String realm) {
+		// Not using the notion of "realm," so do nothing
+	}
+
+	@SuppressWarnings("unchecked")
+	public Map getAuthenticationInfo(URL serverUrl, 
+			                        String realm, 
+			                        String scheme) {
+		ServerAuthenInfo authInfo = serverAuthMaps.get(serverUrl.getHost().toLowerCase());
+		if (authInfo == null) {
+			return null;
+		}
+		return authInfo.getAuthenicationInfo(scheme.toLowerCase());
+	}
+
+	public String getProtectionSpace(URL resourceUrl) {
+		// We don't have the notion of "realm," but the client
+		// requires a non-null return value.
+		return "";
+	}
+	
+	@SuppressWarnings("unchecked")
+	public Map requestAuthenticationInfo(URL resourceUrl, 
+			                            String realm,
+			                            String scheme) {
+		// We do not distinguish between resource- and server-based
+		// authentication: all authentication is done on a per-server
+		// basis. Therefore, delegate to a server authentication check.
+		return getAuthenticationInfo(resourceUrl, realm, scheme);
+	}
+}

Added: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/webdav/WebDavClient.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/webdav/WebDavClient.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/webdav/WebDavClient.java	2008-06-18 15:59:32 UTC (rev 20593)
@@ -0,0 +1,107 @@
+package org.guvnor.tools.utils.webdav;
+
+import java.io.InputStream;
+import java.net.URL;
+import java.util.Map;
+
+import org.eclipse.webdav.IContext;
+import org.eclipse.webdav.ILocator;
+import org.eclipse.webdav.IResponse;
+import org.eclipse.webdav.client.RemoteDAVClient;
+import org.eclipse.webdav.client.WebDAVFactory;
+import org.eclipse.webdav.http.client.HttpClient;
+
+/**
+ * WebDav wrapper client.
+ * @author jgraham
+ *
+ */
+public class WebDavClient {
+	private RemoteDAVClient client;
+	
+	/**
+	 * Ctor for this wrapper WebDav client.
+	 * @param serverUrl The WebDav repository location (server)
+	 * @param username User identification
+	 * @param password User password
+	 * @param scheme The authentication scheme { Basic | Digest }
+	 */
+	public WebDavClient(URL serverUrl, String username, 
+			           String password, String scheme) {
+		WebDavAuthenticator authen =  new WebDavAuthenticator(serverUrl, username, 
+				                                             password, scheme);
+		HttpClient hClient = new HttpClient();
+		hClient.setAuthenticator(authen);
+		client = new RemoteDAVClient(new WebDAVFactory(), hClient);
+	}
+	
+	/**
+	 * Ctor for this wrapper WebDav client, assuming "basic" authentication.
+	 * @param serverUrl The WebDav repository location (server)
+	 * @param username User identification
+	 * @param password User password
+	 */
+	public WebDavClient(URL serverUrl,
+			           String username,
+			           String password) {
+		// basic authentication is assumed as the default
+		this(serverUrl, username, password, "basic");
+	}
+	
+	/**
+	 * Provides access to the underlying RemoteDAVClient.
+	 * @return The client associated with the current repository connection.
+	 */
+	public RemoteDAVClient getClient() {
+		return client;
+	}
+	
+	/**
+	 * Convenience method for creating a request IContext.
+	 * @return An instance of IContext
+	 */
+	public IContext createContext() {
+		return WebDAVFactory.contextFactory.newContext();
+	}
+	
+	/**
+	 * Lists a directory (collection) in WebDav.
+	 * @param path The directory (collection) to list
+	 * @return An association of directory content names and their properties
+	 * @throws Exception Exception Various WebDav errors can occur (See IResponse for details)
+	 */
+	public Map<String, ResourceProperties> listDirectory(String path) throws Exception {
+		IContext context = createContext();
+		context.put("Depth", "1");
+		ILocator locator = WebDAVFactory.locatorFactory.newLocator(path);
+		IResponse response = client.propfind(locator, context, null);
+		if (response.getStatusCode() != IResponse.SC_MULTI_STATUS 
+		   && response.getStatusCode() != IResponse.SC_MULTI_STATUS) {
+			throw new Exception("WebDav error: " + response.getStatusCode());
+		}
+		return StreamProcessingUtils.parseListing(path, response.getInputStream());
+	}
+	
+	/**
+	 * Get the contents of a resource from a WebDav repository.
+	 * @param resource The address of the resource
+	 * @return The contents of the resource
+	 * @throws Exception Various WebDav errors can occur (See IResponse for details)
+	 */
+	public String getResourceContents(String resource) throws Exception {
+		ILocator locator = WebDAVFactory.locatorFactory.newLocator(resource);
+		IResponse response = client.get(locator, createContext());
+		if (response.getStatusCode() != IResponse.SC_OK) {
+			throw new Exception("WebDav error: " + response.getStatusCode());
+		}
+		return StreamProcessingUtils.getStreamContents(response.getInputStream());
+	}
+	
+	public void putResource(String location, String name, InputStream is) throws Exception {
+		ILocator locator = WebDAVFactory.locatorFactory.newLocator(location + "/" + name);
+		IResponse response = client.post(locator, createContext(), is);
+		if (response.getStatusCode() != IResponse.SC_OK) {
+			throw new Exception("WebDav error: " + response.getStatusCode());
+		}
+	}
+}

Added: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/webdav/WebDavServerCache.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/webdav/WebDavServerCache.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/webdav/WebDavServerCache.java	2008-06-18 15:59:32 UTC (rev 20593)
@@ -0,0 +1,27 @@
+package org.guvnor.tools.utils.webdav;
+
+import java.util.HashMap;
+
+/**
+ * Simple cache for WebDav connections.
+ * @author jgraham
+ *
+ */
+public class WebDavServerCache {
+	
+	private static HashMap<String, WebDavClient> cache;
+	
+	public static WebDavClient getWebDavClient(String serverUrl) {
+		if (cache == null) {
+			return null;
+		}
+		return cache.get(serverUrl);
+	}
+	
+	public static void cacheWebDavClient(String serverUrl, WebDavClient client) {
+		if (cache == null) {
+			cache = new HashMap<String, WebDavClient>();
+		}
+		cache.put(serverUrl, client);
+	}
+}

Added: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/views/IGuvnorConstants.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/views/IGuvnorConstants.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/views/IGuvnorConstants.java	2008-06-18 15:59:32 UTC (rev 20593)
@@ -0,0 +1,6 @@
+package org.guvnor.tools.views;
+
+public interface IGuvnorConstants {
+	public final static String REPVIEW_ID = "org.guvnor.tools.views.RepositoryView";
+	public static final String RESHISTORYVIEW_ID = "org.guvnor.tools.views.ResourceHistoryView";
+}

Added: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/views/RepositoryContentProvider.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/views/RepositoryContentProvider.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/views/RepositoryContentProvider.java	2008-06-18 15:59:32 UTC (rev 20593)
@@ -0,0 +1,70 @@
+package org.guvnor.tools.views;
+
+import java.util.List;
+
+import org.eclipse.jface.viewers.AbstractTreeViewer;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.ui.progress.DeferredTreeContentManager;
+import org.guvnor.tools.Activator;
+import org.guvnor.tools.GuvnorRepository;
+import org.guvnor.tools.utils.webdav.ResourceProperties;
+import org.guvnor.tools.views.model.TreeObject;
+import org.guvnor.tools.views.model.TreeParent;
+
+public class RepositoryContentProvider implements IStructuredContentProvider, 
+                                                  ITreeContentProvider {
+	private TreeParent invisibleRoot;
+	private DeferredTreeContentManager manager;
+	private AbstractTreeViewer viewer;
+	
+	public void inputChanged(Viewer v, Object oldInput, Object newInput) {
+		if (v instanceof AbstractTreeViewer) {
+			viewer = (AbstractTreeViewer)v;
+		    manager = new DeferredTreeContentManager(this, viewer);
+		}
+	}
+	public void dispose() {
+	}
+	public Object[] getElements(Object parent) {
+		if (parent.equals(viewer)) {
+			if (invisibleRoot == null) initialize();
+			return getChildren(invisibleRoot);
+		}
+		return getChildren(parent);
+	}
+	public Object getParent(Object child) {
+		if (child instanceof TreeObject) {
+			return ((TreeObject)child).getParent();
+		}
+		return null;
+	}
+	public Object [] getChildren(Object parent) {
+		if (parent == invisibleRoot) {
+			return ((TreeParent)invisibleRoot).getChildren();
+		} else if (parent instanceof TreeParent) {
+			return manager.getChildren(parent);
+		}
+		return new Object[0];
+	}
+	public boolean hasChildren(Object parent) {
+		if (parent instanceof TreeParent) {
+			return manager.mayHaveChildren(parent);
+		}
+		return false;
+	}
+
+	private void initialize() {
+		invisibleRoot = new TreeParent("", TreeObject.Type.NONE);
+		List<GuvnorRepository> reps = Activator.getLocationManager().getRepositories();
+		for (int i = 0; i < reps.size(); i++) {
+			TreeParent p = new TreeParent(reps.get(i).getLocation(), TreeObject.Type.REPOSITORY);
+			p.setGuvnorRepository(reps.get(i));
+			ResourceProperties props = new ResourceProperties();
+			props.setBase("");
+			p.setResourceProps(props);
+			invisibleRoot.addChild(p);
+		}
+	}
+}

Added: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/views/RepositoryLabelProvider.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/views/RepositoryLabelProvider.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/views/RepositoryLabelProvider.java	2008-06-18 15:59:32 UTC (rev 20593)
@@ -0,0 +1,46 @@
+package org.guvnor.tools.views;
+
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.ui.ISharedImages;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.progress.PendingUpdateAdapter;
+import org.guvnor.tools.Activator;
+import org.guvnor.tools.views.model.TreeParent;
+import org.guvnor.tools.views.model.TreeObject.Type;
+
+public class RepositoryLabelProvider extends LabelProvider {
+	private Image repImage;
+	
+	public RepositoryLabelProvider() {
+		repImage = Activator.getImageDescriptor(Activator.IMG_GUVCONTROLLED).createImage();
+	}
+	
+	public String getText(Object obj) {
+		if (obj instanceof PendingUpdateAdapter) {
+			return "Pending...";
+		} else {
+			return obj.toString();
+		}
+	}
+	public Image getImage(Object obj) {
+		Image res = null;
+		if (obj instanceof TreeParent) {
+			Type t = ((TreeParent)obj).getNodeType();
+			if (t == Type.REPOSITORY) {
+				res = repImage;
+			}
+			if (t == Type.PACKAGE) {
+				res = PlatformUI.getWorkbench().getSharedImages().
+										getImage(ISharedImages.IMG_OBJ_FOLDER);
+			}
+			if (t == Type.RESOURCE) {
+				res = PlatformUI.getWorkbench().getSharedImages().
+										getImage(ISharedImages.IMG_OBJ_FILE);
+			}
+		}
+		return res != null?res:PlatformUI.getWorkbench().getSharedImages().
+												getImage(ISharedImages.IMG_OBJ_ELEMENT);
+	}
+
+}

Added: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/views/RepositoryView.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/views/RepositoryView.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/views/RepositoryView.java	2008-06-18 15:59:32 UTC (rev 20593)
@@ -0,0 +1,280 @@
+package org.guvnor.tools.views;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.PrintWriter;
+import java.net.URL;
+import java.util.List;
+
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.viewers.DoubleClickEvent;
+import org.eclipse.jface.viewers.IDoubleClickListener;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.ViewerSorter;
+import org.eclipse.jface.wizard.WizardDialog;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.DragSourceEvent;
+import org.eclipse.swt.dnd.DragSourceListener;
+import org.eclipse.swt.dnd.FileTransfer;
+import org.eclipse.swt.dnd.Transfer;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.ISharedImages;
+import org.eclipse.ui.IWorkbenchActionConstants;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.part.DrillDownAdapter;
+import org.eclipse.ui.part.ViewPart;
+import org.guvnor.tools.Activator;
+import org.guvnor.tools.GuvnorRepository;
+import org.guvnor.tools.GuvnorLocationManager.IRepositorySetListener;
+import org.guvnor.tools.utils.PlatformUtils;
+import org.guvnor.tools.utils.webdav.WebDavClient;
+import org.guvnor.tools.utils.webdav.WebDavServerCache;
+import org.guvnor.tools.views.model.TreeObject;
+import org.guvnor.tools.views.model.TreeParent;
+import org.guvnor.tools.wizards.NewRepLocationWizard;
+
+public class RepositoryView extends ViewPart {
+	
+	private TreeViewer viewer;
+	private DrillDownAdapter drillDownAdapter;
+	private Action action1;
+	private Action action2;
+	private Action doubleClickAction;
+	
+	class NameSorter extends ViewerSorter {
+	}
+
+	public RepositoryView() {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
+	 */
+	public void createPartControl(Composite parent) {
+		viewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
+		drillDownAdapter = new DrillDownAdapter(viewer);
+		viewer.setContentProvider(new RepositoryContentProvider());
+		viewer.setLabelProvider(new RepositoryLabelProvider());
+		viewer.setSorter(new NameSorter());
+		viewer.setInput(viewer);
+		makeActions();
+		hookContextMenu();
+		hookDoubleClickAction();
+		contributeToActionBars();
+		
+		Activator.getLocationManager().addRepositorySetListener(new IRepositorySetListener() {
+			public void repositorySetChanged(int type, List<GuvnorRepository> repList) {
+				// TODO: Just creating an entirely new content provider.
+				//       Someday might update this to have incremental changes
+				//       to existing content provider.
+				viewer.setContentProvider(new RepositoryContentProvider());
+			}
+		});
+		
+		super.getSite().setSelectionProvider(viewer);
+		
+		addDragDropSupport();
+	}
+
+	private void addDragDropSupport() {
+		// TODO: Support drag and drop of multiple files, directories, etc.
+		Transfer[] transfers = new Transfer[] { FileTransfer.getInstance()};
+		viewer.addDragSupport(DND.DROP_COPY, transfers, new DragSourceListener() {
+			private TreeObject target;
+			
+			public void dragFinished(DragSourceEvent event) {
+				target = null;
+				event.doit = true;
+			}
+			public void dragSetData(DragSourceEvent event) {
+				if (target == null) {
+					return;
+				}
+				try {
+					String contents = getResourceContents(target);
+					IPath path = Activator.getDefault().getStateLocation();
+					File transfer = new File(path.toOSString() + File.separator + target.getName());
+					transfer.deleteOnExit();
+					FileOutputStream fos = new FileOutputStream(transfer);
+					PrintWriter writer = new PrintWriter(fos);
+					writer.write(contents);
+					writer.flush();
+					writer.close();
+					event.data = new String[] { transfer.getAbsolutePath() };
+				} catch (Exception e) {
+					Activator.getDefault().writeLog(IStatus.ERROR, e.getMessage(), e);
+				}
+			}
+			
+			public void dragStart(DragSourceEvent event) {
+				ISelection selection = viewer.getSelection();
+				Object obj = ((IStructuredSelection)selection).getFirstElement();
+				if (obj instanceof TreeObject
+				   && ((TreeObject)obj).getNodeType() == TreeObject.Type.RESOURCE) {
+					target = (TreeObject)obj;
+					event.doit = true;
+				} else {
+					event.doit = false;
+				}
+			}
+		});
+	}
+
+	private void hookContextMenu() {
+		MenuManager menuMgr = new MenuManager("#PopupMenu");
+		menuMgr.setRemoveAllWhenShown(true);
+		menuMgr.addMenuListener(new IMenuListener() {
+			public void menuAboutToShow(IMenuManager manager) {
+				RepositoryView.this.fillContextMenu(manager);
+			}
+		});
+		Menu menu = menuMgr.createContextMenu(viewer.getControl());
+		viewer.getControl().setMenu(menu);
+		getSite().registerContextMenu(menuMgr, viewer);
+	}
+
+	private void contributeToActionBars() {
+		IActionBars bars = getViewSite().getActionBars();
+		fillLocalPullDown(bars.getMenuManager());
+		fillLocalToolBar(bars.getToolBarManager());
+	}
+
+	private void fillLocalPullDown(IMenuManager manager) {
+		manager.add(action1);
+		manager.add(new Separator());
+		manager.add(action2);
+	}
+
+	private void fillContextMenu(IMenuManager manager) {
+		manager.add(action1);
+		manager.add(action2);
+		manager.add(new Separator());
+		drillDownAdapter.addNavigationActions(manager);
+		// Other plug-ins can contribute there actions here
+		manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
+	}
+	
+	private void fillLocalToolBar(IToolBarManager manager) {
+		manager.add(action1);
+		manager.add(action2);
+		manager.add(new Separator());
+		drillDownAdapter.addNavigationActions(manager);
+	}
+
+	private void makeActions() {
+		action1 = new Action() {
+			public void run() {
+				ISelection selection = viewer.getSelection();
+				Object obj = ((IStructuredSelection)selection).getFirstElement();
+				if (obj instanceof TreeParent) {
+					GuvnorRepository rep = ((TreeParent)obj).getGuvnorRepository();
+					if (MessageDialog.openConfirm(RepositoryView.this.getSite().getShell(), 
+							                     "Remove repository location", "Confirm removing " + 
+							                     rep.getLocation())) {
+						Activator.getLocationManager().removeRepository(rep.getLocation());
+					}
+				}
+			}
+		};
+		action1.setText("Delete");
+		action1.setToolTipText("Delete Guvnor repository location");
+		action1.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().
+			getImageDescriptor(ISharedImages.IMG_TOOL_DELETE));
+		
+		action2 = new Action() {
+			public void run() {
+				NewRepLocationWizard wiz = new NewRepLocationWizard();
+				wiz.init(Activator.getDefault().getWorkbench(), null);
+				WizardDialog dialog = 
+					new WizardDialog(RepositoryView.this.getSite().getShell(), wiz);
+			    dialog.create();
+			    dialog.open();
+			}
+		};
+		action2.setText("Add");
+		action2.setToolTipText("Add a Guvnor respository location");
+		action2.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().
+				getImageDescriptor(ISharedImages.IMG_TOOL_NEW_WIZARD));
+		doubleClickAction = new Action() {
+			public void run() {
+				ISelection selection = viewer.getSelection();
+				Object obj = ((IStructuredSelection)selection).getFirstElement();
+				if (obj instanceof TreeObject) {
+					doubleClick((TreeObject)obj);
+				}
+			}
+		};
+	}
+	
+	private void hookDoubleClickAction() {
+		viewer.addDoubleClickListener(new IDoubleClickListener() {
+			public void doubleClick(DoubleClickEvent event) {
+				doubleClickAction.run();
+			}
+		});
+	}
+	
+	private void doubleClick(TreeObject node) {
+		if (node.getNodeType() == TreeObject.Type.PACKAGE
+			|| node.getNodeType() == TreeObject.Type.REPOSITORY) {
+			if (viewer.getExpandedState(node)) {
+				viewer.collapseToLevel(node, 1);
+			} else {
+				viewer.expandToLevel(node, 1);
+			}
+		}
+		if (node.getNodeType() == TreeObject.Type.RESOURCE) {
+			
+			try {
+				String contents = getResourceContents(node);
+				PlatformUtils.openEditor(contents, node.getName());
+			} catch (Exception e) {
+				Activator.getDefault().writeLog(IStatus.ERROR, e.getMessage(), e);
+			}
+		}
+	}
+	
+	private String getResourceContents(TreeObject node) throws Exception {
+		GuvnorRepository rep = node.getGuvnorRepository();
+		WebDavClient webdav = WebDavServerCache.getWebDavClient(rep.getLocation());
+		if (webdav == null) {
+			webdav = new WebDavClient(new URL(rep.getLocation()), 
+					                 rep.getUsername(), rep.getPassword());
+			WebDavServerCache.cacheWebDavClient(rep.getLocation(), webdav);
+		}
+		return webdav.getResourceContents(node.getFullPath());	
+	}
+	
+//	private void putResource(TreeParent node, String name, InputStream is) throws Exception {
+//		GuvnorRepository rep = node.getGuvnorRepository();
+//		WebDavClient webdav = WebDavServerCache.getWebDavClient(rep.getLocation());
+//		if (webdav == null) {
+//			webdav = new WebDavClient(new URL(rep.getLocation()), 
+//					                 rep.getUsername(), rep.getPassword());
+//			WebDavServerCache.cacheWebDavClient(rep.getLocation(), webdav);
+//		}
+//		webdav.putResource(node.getFullPath(), name, is);
+//	}
+	
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.part.WorkbenchPart#setFocus()
+	 */
+	public void setFocus() {
+		viewer.getControl().setFocus();
+	}
+}
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/views/ResourceHistoryView.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/views/ResourceHistoryView.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/views/ResourceHistoryView.java	2008-06-18 15:59:32 UTC (rev 20593)
@@ -0,0 +1,231 @@
+package org.guvnor.tools.views;
+
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.viewers.DoubleClickEvent;
+import org.eclipse.jface.viewers.IDoubleClickListener;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.ITableLabelProvider;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerSorter;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.SashForm;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.ISharedImages;
+import org.eclipse.ui.IWorkbenchActionConstants;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.part.ViewPart;
+
+public class ResourceHistoryView extends ViewPart {
+	
+	private TableViewer viewer;
+	private Text 		verNotes;
+	private Text		verOwner;
+	
+	private Action action1;
+	private Action action2;
+	private Action doubleClickAction;
+
+	class ViewContentProvider implements IStructuredContentProvider {
+		public void inputChanged(Viewer v, Object oldInput, Object newInput) {
+		}
+		public void dispose() {
+		}
+		public Object[] getElements(Object parent) {
+			return new Object[] { };
+//			return new String[] { "v20080522", "v20080516", "v20080424" };
+		}
+	}
+	class ViewLabelProvider extends LabelProvider implements ITableLabelProvider {
+		public String getColumnText(Object obj, int index) {
+			return getText(obj);
+		}
+		public Image getColumnImage(Object obj, int index) {
+			return getImage(obj);
+		}
+		public Image getImage(Object obj) {
+			return PlatformUI.getWorkbench().
+					getSharedImages().getImage(ISharedImages.IMG_OBJ_FILE);
+		}
+	}
+	class NameSorter extends ViewerSorter {
+	}
+
+	/**
+	 * The constructor.
+	 */
+	public ResourceHistoryView() {
+	}
+	
+	private void updateDetails(String selection) {
+		//TODO: Need a model for version entries, comments, etc.
+//		if (selection.equals("v20080522")) {
+//			verNotes.setText("Remove dead code");
+//			verOwner.setText("jgraham");
+//		}
+//		if (selection.equals("v20080516")) {
+//			verNotes.setText("Add new branch");
+//			verOwner.setText("tyler");
+//		}
+//		if (selection.equals("v20080424")) {
+//			verNotes.setText("Inital check in");
+//			verOwner.setText("ygm");
+//		}
+	}
+	
+	public void createPartControl(Composite parent) {
+		
+		Composite composite = createComposite(parent, 1);
+		
+		viewer = new TableViewer(composite, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
+		viewer.getTable().setLayoutData(new GridData(GridData.FILL_BOTH));
+		viewer.setContentProvider(new ViewContentProvider());
+		viewer.setLabelProvider(new ViewLabelProvider());
+		viewer.setSorter(new NameSorter());
+		viewer.setInput(getViewSite());
+		
+		viewer.getTable().addSelectionListener(new SelectionListener() {
+			public void widgetDefaultSelected(SelectionEvent e) { }
+
+			public void widgetSelected(SelectionEvent e) {
+				updateDetails(viewer.getTable().getSelection()[0].getText());
+			}
+		});
+		
+		SashForm sash = new SashForm(composite, SWT.HORIZONTAL);
+		sash.setLayoutData(new GridData(GridData.FILL_BOTH));
+		
+		verNotes = new Text(sash, SWT.BORDER | SWT.MULTI);
+		verNotes.setLayoutData(new GridData(GridData.FILL_BOTH));
+		
+		verOwner = new Text(sash, SWT.BORDER | SWT.MULTI);
+		verOwner.setLayoutData(new GridData(GridData.FILL_BOTH));
+		
+		sash.setWeights(new int[]{70, 30});
+		
+		makeActions();
+		hookContextMenu();
+		hookDoubleClickAction();
+		contributeToActionBars();
+		
+		if (viewer.getTable().getItemCount() > 0) {
+			viewer.getTable().setSelection(0);
+			updateDetails(viewer.getTable().getSelection()[0].getText());
+		}
+	}
+	
+	private Composite createComposite(Composite parent, int numColumns) {
+		Composite composite = new Composite(parent, SWT.NULL);
+		
+		GridLayout layout = new GridLayout();
+		layout.numColumns = numColumns;
+		composite.setLayout(layout);
+		composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+		return composite;
+	}
+	
+	private void hookContextMenu() {
+		MenuManager menuMgr = new MenuManager("#PopupMenu");
+		menuMgr.setRemoveAllWhenShown(true);
+		menuMgr.addMenuListener(new IMenuListener() {
+			public void menuAboutToShow(IMenuManager manager) {
+				ResourceHistoryView.this.fillContextMenu(manager);
+			}
+		});
+		Menu menu = menuMgr.createContextMenu(viewer.getControl());
+		viewer.getControl().setMenu(menu);
+		getSite().registerContextMenu(menuMgr, viewer);
+	}
+
+	private void contributeToActionBars() {
+		IActionBars bars = getViewSite().getActionBars();
+		fillLocalPullDown(bars.getMenuManager());
+		fillLocalToolBar(bars.getToolBarManager());
+	}
+
+	private void fillLocalPullDown(IMenuManager manager) {
+		manager.add(action1);
+		manager.add(new Separator());
+		manager.add(action2);
+	}
+
+	private void fillContextMenu(IMenuManager manager) {
+		manager.add(action1);
+		manager.add(action2);
+		// Other plug-ins can contribute there actions here
+		manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
+	}
+	
+	private void fillLocalToolBar(IToolBarManager manager) {
+		manager.add(action1);
+		manager.add(action2);
+	}
+
+	private void makeActions() {
+		action1 = new Action() {
+			public void run() {
+				showMessage("Action 1 executed");
+			}
+		};
+		action1.setText("Action 1");
+		action1.setToolTipText("Action 1 tooltip");
+		action1.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().
+			getImageDescriptor(ISharedImages.IMG_OBJS_INFO_TSK));
+		
+		action2 = new Action() {
+			public void run() {
+				showMessage("Action 2 executed");
+			}
+		};
+		action2.setText("Action 2");
+		action2.setToolTipText("Action 2 tooltip");
+		action2.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().
+				getImageDescriptor(ISharedImages.IMG_OBJS_INFO_TSK));
+		doubleClickAction = new Action() {
+			public void run() {
+				ISelection selection = viewer.getSelection();
+				Object obj = ((IStructuredSelection)selection).getFirstElement();
+				showMessage("Double-click detected on "+obj.toString());
+			}
+		};
+	}
+
+	private void hookDoubleClickAction() {
+		viewer.addDoubleClickListener(new IDoubleClickListener() {
+			public void doubleClick(DoubleClickEvent event) {
+				doubleClickAction.run();
+			}
+		});
+	}
+	private void showMessage(String message) {
+		MessageDialog.openInformation(
+			viewer.getControl().getShell(),
+			"Resource History View",
+			message);
+	}
+
+	/**
+	 * Passing the focus request to the viewer's control.
+	 */
+	public void setFocus() {
+		viewer.getControl().setFocus();
+	}
+}
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/views/model/TreeObject.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/views/model/TreeObject.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/views/model/TreeObject.java	2008-06-18 15:59:32 UTC (rev 20593)
@@ -0,0 +1,81 @@
+package org.guvnor.tools.views.model;
+
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.ui.views.properties.IPropertySource;
+import org.guvnor.tools.GuvnorRepository;
+import org.guvnor.tools.utils.webdav.ResourceProperties;
+
+public class TreeObject implements IAdaptable {
+	
+	private GuvnorRepository theRep;
+	
+	public enum Type {
+		NONE,
+		REPOSITORY,
+		PACKAGE,
+		RESOURCE
+	}
+	
+	private String 		name;
+	private Type 		nodeType;
+	private TreeParent 	parent;
+	
+	private ResourceProperties props;
+	
+	public TreeObject(String name, Type nodeType) {
+		this.name = name;
+		this.nodeType = nodeType;
+	}
+	public String getName() {
+		return name;
+	}
+	public Type getNodeType() {
+		return nodeType;
+	}
+	public void setParent(TreeParent parent) {
+		this.parent = parent;
+	}
+	public TreeParent getParent() {
+		return parent;
+	}
+	public String toString() {
+		return getName();
+	}
+	
+	private TreePropertyProvider propProvider;
+	
+	@SuppressWarnings("unchecked")
+	public Object getAdapter(Class adapter) {
+		if (adapter == IPropertySource.class) {
+			if (propProvider == null) {
+				propProvider = new TreePropertyProvider(this);
+			}
+			return propProvider;
+		}
+	    return null;
+	}
+	
+	public ResourceProperties getResourceProps() {
+		return props;
+	}
+	public void setResourceProps(ResourceProperties props) {
+		this.props = props;
+	}
+	public void setGuvnorRepository(GuvnorRepository theRep) {
+		this.theRep = theRep;
+	}
+	public GuvnorRepository getGuvnorRepository() {
+		return theRep;
+	}
+	public String getFullPath() {
+		if (props.getBase().trim().length() > 0) {
+			if (props.getBase().endsWith("/")) {
+				return props.getBase() + getName();
+			} else {
+				return props.getBase() + "/" + getName();
+			}
+		} else {
+			return getName();
+		}
+	}
+}

Added: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/views/model/TreeParent.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/views/model/TreeParent.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/views/model/TreeParent.java	2008-06-18 15:59:32 UTC (rev 20593)
@@ -0,0 +1,162 @@
+package org.guvnor.tools.views.model;
+
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.jobs.ISchedulingRule;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.ui.progress.IDeferredWorkbenchAdapter;
+import org.eclipse.ui.progress.IElementCollector;
+import org.guvnor.tools.Activator;
+import org.guvnor.tools.GuvnorRepository;
+import org.guvnor.tools.utils.webdav.ResourceProperties;
+import org.guvnor.tools.utils.webdav.WebDavClient;
+import org.guvnor.tools.utils.webdav.WebDavServerCache;
+
+public class TreeParent extends TreeObject implements IDeferredWorkbenchAdapter {
+		
+		private ArrayList<TreeObject> children;
+		
+		public TreeParent(String name, Type nodeType) {
+			super(name, nodeType);
+			children = new ArrayList<TreeObject>();
+		}
+		public void addChild(TreeObject child) {
+			children.add(child);
+			child.setParent(this);
+		}
+		public void removeChild(TreeObject child) {
+			children.remove(child);
+			child.setParent(null);
+		}
+		public TreeObject [] getChildren() {
+			return (TreeObject [])children.toArray(new TreeObject[children.size()]);
+		}
+		public boolean hasChildren() {
+			return children.size()>0;
+		}
+		
+		/*
+		 * (non-Javadoc)
+		 * @see org.eclipse.ui.progress.IDeferredWorkbenchAdapter#fetchDeferredChildren(java.lang.Object, org.eclipse.ui.progress.IElementCollector, org.eclipse.core.runtime.IProgressMonitor)
+		 */
+		public void fetchDeferredChildren(Object object,
+										 IElementCollector collector, 
+										 IProgressMonitor monitor) {
+			if (!(object instanceof TreeParent)) {
+				return;
+			}
+			TreeParent node = (TreeParent)object;
+			if (node.getNodeType() == Type.NONE) {
+				List<GuvnorRepository> reps = Activator.getLocationManager().getRepositories();
+				monitor.beginTask("Pending...", reps.size());
+				for (int i = 0; i < reps.size(); i++) {
+					TreeParent p = new TreeParent(reps.get(i).getLocation(), Type.REPOSITORY);
+					p.setGuvnorRepository(reps.get(i));
+					ResourceProperties props = new ResourceProperties();
+					props.setBase("");
+					p.setResourceProps(props);
+					collector.add(p, monitor);
+					monitor.worked(1);
+					if (i < reps.size() - 1) pause(500);
+				}
+				monitor.done();
+			}
+			if (node.getNodeType() == Type.REPOSITORY
+			   || node.getNodeType() == Type.PACKAGE) {
+				   listDirectory(node, collector, monitor);
+			}
+		}
+		
+		public void listDirectory(TreeParent node,
+				 		         IElementCollector collector, 
+				                 IProgressMonitor monitor) {
+			monitor.beginTask("Pending...", 1);
+			
+			monitor.worked(1);
+			GuvnorRepository rep = node.getGuvnorRepository();
+			try {
+				WebDavClient webdav = WebDavServerCache.getWebDavClient(rep.getLocation());
+				if (webdav == null) {
+					webdav = new WebDavClient(new URL(rep.getLocation()), 
+							                 rep.getUsername(), rep.getPassword());
+					WebDavServerCache.cacheWebDavClient(rep.getLocation(), webdav);
+				}
+				Map<String, ResourceProperties> listing = webdav.listDirectory(node.getFullPath());
+				for (String s: listing.keySet()) {
+					ResourceProperties resProps = listing.get(s);
+					TreeObject o = null;
+					if (resProps.isDirectory()) {
+						o = new TreeParent(s, Type.PACKAGE);	
+					} else {
+						o = new TreeObject(s, Type.RESOURCE);
+					}
+					o.setGuvnorRepository(rep);
+					o.setResourceProps(resProps);
+					collector.add(o, monitor);
+				}
+				monitor.worked(1);
+			} catch (Exception e) {
+				Activator.getDefault().writeLog(IStatus.ERROR, e.getMessage(), e);
+			}
+		}
+		
+		private void pause(long msec){
+		  try {
+		    Thread.sleep(msec);
+		  } catch (InterruptedException e) {
+		    e.printStackTrace();
+		  }
+		}
+		
+		/*
+		 * (non-Javadoc)
+		 * @see org.eclipse.ui.progress.IDeferredWorkbenchAdapter#getRule(java.lang.Object)
+		 */
+		public ISchedulingRule getRule(Object object) {
+			return null;
+		}
+		/*
+		 * (non-Javadoc)
+		 * @see org.eclipse.ui.progress.IDeferredWorkbenchAdapter#isContainer()
+		 */
+		public boolean isContainer() {
+			return (this instanceof TreeParent);
+		}
+		/*
+		 * (non-Javadoc)
+		 * @see org.eclipse.ui.model.IWorkbenchAdapter#getChildren(java.lang.Object)
+		 */
+		public Object[] getChildren(Object o) {
+			return children.toArray();
+		}
+		/*
+		 * (non-Javadoc)
+		 * @see org.eclipse.ui.model.IWorkbenchAdapter#getImageDescriptor(java.lang.Object)
+		 */
+		public ImageDescriptor getImageDescriptor(Object object) {
+			return null;
+		}
+		/*
+		 * (non-Javadoc)
+		 * @see org.eclipse.ui.model.IWorkbenchAdapter#getLabel(java.lang.Object)
+		 */
+		public String getLabel(Object o) {
+			return o.toString();
+		}
+		/*
+		 * (non-Javadoc)
+		 * @see org.eclipse.ui.model.IWorkbenchAdapter#getParent(java.lang.Object)
+		 */
+		public Object getParent(Object o) {
+			if (o instanceof TreeObject) {
+				return ((TreeObject)o).getParent();
+			} else {
+				return null;
+			}
+		}
+}

Added: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/views/model/TreePropertyProvider.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/views/model/TreePropertyProvider.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/views/model/TreePropertyProvider.java	2008-06-18 15:59:32 UTC (rev 20593)
@@ -0,0 +1,68 @@
+package org.guvnor.tools.views.model;
+
+import org.eclipse.ui.views.properties.IPropertyDescriptor;
+import org.eclipse.ui.views.properties.IPropertySource;
+import org.eclipse.ui.views.properties.TextPropertyDescriptor;
+
+public class TreePropertyProvider implements IPropertySource {
+	
+	private TreeObject node;
+	
+	public TreePropertyProvider(TreeObject node) {
+		this.node = node;
+	}
+	
+	public Object getEditableValue() {
+		return null;
+	}
+
+	public IPropertyDescriptor[] getPropertyDescriptors() { 
+		return new IPropertyDescriptor[] {
+			new TextPropertyDescriptor("name", "Name"),
+			new TextPropertyDescriptor("location", "Location"),
+			new TextPropertyDescriptor("type", "Type"),
+			new TextPropertyDescriptor("creationdate", "Created"),
+			new TextPropertyDescriptor("lastmodified", "Last Modified")
+		};
+	}
+
+	public Object getPropertyValue(Object id) {
+		if (id.equals("name")) {
+			return node.getName();
+		}
+		if (id.equals("location")) {
+			return node.getFullPath();
+		}
+		if (id.equals("type")) {
+			if (node.getNodeType() == TreeObject.Type.REPOSITORY) {
+				return "repository";
+			}
+			if (node.getNodeType() == TreeObject.Type.PACKAGE) {
+				return "directory";
+			}
+			if (node.getNodeType() == TreeObject.Type.RESOURCE) {
+				return "file";
+			}
+		}
+		if (id.equals("creationdate")) {
+			return node.getResourceProps().getCreationDate();
+		}
+		if (id.equals("lastmodified")) {
+			return node.getResourceProps().getLastModifiedDate();
+		}
+		return "";
+	}
+
+	public boolean isPropertySet(Object id) {
+		// Guvnor properties are read-only, so do nothing
+		return false;
+	}
+
+	public void resetPropertyValue(Object id) {
+		// Guvnor properties are read-only, so do nothing
+	}
+
+	public void setPropertyValue(Object id, Object value) {
+		// Guvnor properties are read-only, so do nothing
+	}
+}

Added: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/CheckoutWizard.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/CheckoutWizard.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/CheckoutWizard.java	2008-06-18 15:59:32 UTC (rev 20593)
@@ -0,0 +1,82 @@
+package org.guvnor.tools.wizards;
+
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.ui.INewWizard;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.dialogs.WizardNewProjectCreationPage;
+import org.guvnor.tools.Activator;
+
+public class CheckoutWizard extends Wizard implements INewWizard, IGuvnorWizard {
+	
+	private GuvnorMainConfigPage 			mainConfigPage;
+	private SelectGuvnorRepPage 			selectRepPage;
+	private SelectGuvnorResourcesPage 		selectResPage;
+	private SelectTargetLocationPage 		targetLocationPage;
+	private WizardNewProjectCreationPage 	createProjectPage;
+	private SelectResourceVersionPage		selectVerPage;
+	
+	private GuvWizardModel model;
+	
+	public CheckoutWizard() {
+		model = new GuvWizardModel();
+	}
+	
+	/*
+	 * (non-Javadoc)
+	 * @see org.jboss.tools.guvnor.wizards.IGuvnorWizard#getModel()
+	 */
+	public GuvWizardModel getModel() {
+		return model;
+	}
+	
+	@Override
+	public void addPages() {
+		selectRepPage = new SelectGuvnorRepPage("select_rep_page", "Select Guvnor repository location",
+                							Activator.getImageDescriptor(Activator.IMG_GUVREPWIZBAN));
+		selectRepPage.setDescription("Select an existing Guvnor repository location or create a new one");
+		super.addPage(selectRepPage);
+		
+		mainConfigPage = new GuvnorMainConfigPage("config_page", "New Guvnor repository location", 
+											Activator.getImageDescriptor(Activator.IMG_GUVREPWIZBAN));
+		mainConfigPage.setDescription("Creates a connection to a Guvnor repository");
+		super.addPage(mainConfigPage);
+		
+		selectResPage = new SelectGuvnorResourcesPage("select_res_page", "Select Guvnor repository location",
+											Activator.getImageDescriptor(Activator.IMG_GUVREPWIZBAN));
+		selectResPage.setDescription("Select resources from the Guvnor repository to check out");
+		super.addPage(selectResPage);
+		
+		targetLocationPage = new SelectTargetLocationPage("select_targetloc_page", "Select target location",
+				Activator.getImageDescriptor(Activator.IMG_GUVREPWIZBAN));
+		targetLocationPage.setDescription("Select the location to check out the resources");
+		super.addPage(targetLocationPage);
+		
+		createProjectPage = new WizardNewProjectCreationPage("new_project_page");
+		createProjectPage.setImageDescriptor(Activator.getImageDescriptor(Activator.IMG_GUVREPWIZBAN));
+		createProjectPage.setTitle("Create a new project");
+		createProjectPage.setDescription("Specify the name of the new project to create");
+		super.addPage(createProjectPage);
+		
+		selectVerPage = new SelectResourceVersionPage("select_version_page", "Select resource versions",
+											Activator.getImageDescriptor(Activator.IMG_GUVREPWIZBAN));
+		selectVerPage.setDescription("Select the version of the resources to check out");
+		super.addPage(selectVerPage);
+		
+		super.addPages();
+	}
+	
+	@Override
+	public boolean performFinish() {
+		return true;
+	}
+
+	public void init(IWorkbench workbench, IStructuredSelection selection) {
+		
+	}
+
+	@Override
+	public boolean canFinish() {
+		return model.isModelComplete();
+	}
+}

Added: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/GuvWizNewProjectPage.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/GuvWizNewProjectPage.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/GuvWizNewProjectPage.java	2008-06-18 15:59:32 UTC (rev 20593)
@@ -0,0 +1,12 @@
+package org.guvnor.tools.wizards;
+
+import org.eclipse.ui.dialogs.WizardNewProjectCreationPage;
+
+public class GuvWizNewProjectPage extends WizardNewProjectCreationPage {
+
+	public GuvWizNewProjectPage(String pageName) {
+		super(pageName);
+	}
+	
+	
+}

Added: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/GuvWizardModel.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/GuvWizardModel.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/GuvWizardModel.java	2008-06-18 15:59:32 UTC (rev 20593)
@@ -0,0 +1,70 @@
+package org.guvnor.tools.wizards;
+
+import java.util.List;
+
+public class GuvWizardModel {
+	private String repLocation;
+	private String username;
+	private String password;
+	private boolean createNewRep;
+	
+	private String targetProject;
+	private boolean createNewProj;
+	
+	private List<String> resources;
+	private String version;
+	
+	public String getRepLocation() {
+		return repLocation;
+	}
+	public void setRepLocation(String repLocation) {
+		this.repLocation = repLocation;
+	}
+	public String getUsername() {
+		return username;
+	}
+	public void setUsername(String username) {
+		this.username = username;
+	}
+	public String getPassword() {
+		return password;
+	}
+	public void setPassword(String password) {
+		this.password = password;
+	}
+	public boolean isCreateNewRep() {
+		return createNewRep;
+	}
+	public void setCreateNewRep(boolean createNewRep) {
+		this.createNewRep = createNewRep;
+	}
+	public String getTargetProject() {
+		return targetProject;
+	}
+	public void setTargetProject(String targetProject) {
+		this.targetProject = targetProject;
+	}
+	public boolean isCreateNewProj() {
+		return createNewProj;
+	}
+	public void setCreateNewProj(boolean createNewProj) {
+		this.createNewProj = createNewProj;
+	}
+	public List<String> getResources() {
+		return resources;
+	}
+	public void setResources(List<String> resources) {
+		this.resources = resources;
+	}
+	public String getVersion() {
+		return version;
+	}
+	public void setVersion(String version) {
+		this.version = version;
+	}
+	
+	public boolean isModelComplete() {
+		// TODO: Check if model is complete
+		return true;
+	}
+}

Added: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/GuvnorMainConfigPage.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/GuvnorMainConfigPage.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/GuvnorMainConfigPage.java	2008-06-18 15:59:32 UTC (rev 20593)
@@ -0,0 +1,85 @@
+package org.guvnor.tools.wizards;
+
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+
+public class GuvnorMainConfigPage extends WizardPage {
+	
+	private Text locationField;
+	private Text unField;
+	private Text pwField;
+	
+	public GuvnorMainConfigPage(String pageName) {
+		super(pageName);
+	}
+
+	public GuvnorMainConfigPage(String pageName, String title, ImageDescriptor titleImage) {
+		super(pageName, title, titleImage);
+	}
+
+	public void createControl(Composite parent) {
+		
+		Composite composite = createComposite(parent, 2);
+		new Label(composite, SWT.NONE).setText("Location: ");
+		locationField = new Text(composite, SWT.SINGLE | SWT.BORDER);
+		locationField.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+		locationField.addModifyListener(new ModifyListener() {
+
+			public void modifyText(ModifyEvent e) {
+				if (locationField.getText().trim().length() > 0) {
+					GuvnorMainConfigPage.super.setPageComplete(true);
+				} else {
+					GuvnorMainConfigPage.super.setPageComplete(false);
+				}
+				updateModel();
+			}
+			
+		});
+		
+		new Label(composite, SWT.NONE).setText("User Name: ");
+		unField = new Text(composite, SWT.SINGLE | SWT.BORDER);
+		unField.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+		unField.addModifyListener(new ModifyListener() {
+			public void modifyText(ModifyEvent e) {
+				updateModel();
+			}
+		});
+		
+		new Label(composite, SWT.NONE).setText("Password: ");
+		pwField = new Text(composite, SWT.SINGLE | SWT.BORDER | SWT.PASSWORD);
+		pwField.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+		pwField.addModifyListener(new ModifyListener() {
+			public void modifyText(ModifyEvent e) {
+				updateModel();
+			}
+		});
+
+		super.setControl(composite);
+	}
+
+	private Composite createComposite(Composite parent, int numColumns) {
+		Composite composite = new Composite(parent, SWT.NULL);
+		
+		GridLayout layout = new GridLayout();
+		layout.numColumns = numColumns;
+		composite.setLayout(layout);
+		composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+		return composite;
+	}
+	
+	private void updateModel() {
+		GuvWizardModel model = ((IGuvnorWizard)super.getWizard()).getModel();
+		model.setRepLocation(locationField.getText());
+		model.setUsername(unField.getText());
+		model.setPassword(pwField.getText());
+		model.setCreateNewRep(true);
+	}
+}

Added: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/IGuvnorWizard.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/IGuvnorWizard.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/IGuvnorWizard.java	2008-06-18 15:59:32 UTC (rev 20593)
@@ -0,0 +1,5 @@
+package org.guvnor.tools.wizards;
+
+public interface IGuvnorWizard {
+	public GuvWizardModel getModel();
+}

Added: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/NewRepLocationWizard.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/NewRepLocationWizard.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/NewRepLocationWizard.java	2008-06-18 15:59:32 UTC (rev 20593)
@@ -0,0 +1,54 @@
+package org.guvnor.tools.wizards;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.ui.INewWizard;
+import org.eclipse.ui.IWorkbench;
+import org.guvnor.tools.Activator;
+import org.guvnor.tools.GuvnorRepository;
+
+public class NewRepLocationWizard extends Wizard implements INewWizard, IGuvnorWizard {
+	
+	private GuvnorMainConfigPage mainPage;
+//	private IWorkbench workbench;
+	
+	private GuvWizardModel model = new GuvWizardModel();
+	
+	public GuvWizardModel getModel() {
+		return model;
+	}
+	
+	@Override
+	public void addPages() {
+		mainPage = new GuvnorMainConfigPage("config_page", "New Guvnor location", 
+										Activator.getImageDescriptor(Activator.IMG_GUVLOCADD));
+		super.addPage(mainPage);
+		super.addPages();
+	}
+	
+	public boolean canFinish() {
+		return mainPage.isPageComplete();
+	}
+	
+	@Override
+	public boolean performFinish() {
+		try {
+			Activator.getLocationManager().addRepository(
+					new GuvnorRepository(model.getRepLocation(), 
+							            model.getUsername(), 
+							            model.getPassword()));
+		} catch (Exception e) {
+			Activator.getDefault().writeLog(IStatus.ERROR, e.getMessage(), e);
+		}
+		return true;
+	}
+	
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.IWorkbenchWizard#init(org.eclipse.ui.IWorkbench, org.eclipse.jface.viewers.IStructuredSelection)
+	 */
+	public void init(IWorkbench workbench, IStructuredSelection selection) {
+//		this.workbench = workbench;
+	}
+}

Added: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/SelectGuvnorRepPage.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/SelectGuvnorRepPage.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/SelectGuvnorRepPage.java	2008-06-18 15:59:32 UTC (rev 20593)
@@ -0,0 +1,94 @@
+package org.guvnor.tools.wizards;
+
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.wizard.IWizardPage;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.List;
+import org.guvnor.tools.Activator;
+import org.guvnor.tools.GuvnorRepository;
+
+public class SelectGuvnorRepPage extends WizardPage {
+	
+	private Button createRep;
+	private Button existingRep;
+	private List   repLocations;
+	
+	public SelectGuvnorRepPage(String pageName) {
+		super(pageName);
+	}
+
+	public SelectGuvnorRepPage(String pageName, String title, ImageDescriptor titleImage) {
+		super(pageName, title, titleImage);
+	}
+	
+	public void createControl(Composite parent) {
+		Composite composite = createComposite(parent, 1);
+		new Label(composite, SWT.NONE).setText("This wizard allow you to check out resource from a Guvnor repository");
+		
+		createRep = new Button(composite, SWT.RADIO);
+		createRep.setText("Create a new Guvnor repository location");
+		createRep.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+		createRep.setSelection(false);
+		createRep.addSelectionListener(new SelectionListener() {
+			public void widgetDefaultSelected(SelectionEvent e) { }
+
+			public void widgetSelected(SelectionEvent e) {
+				repLocations.setEnabled(existingRep.getSelection());
+			}
+		});
+		
+		existingRep = new Button(composite, SWT.RADIO);
+		existingRep.setText("Use an existing Guvnor repository location");
+		existingRep.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+		existingRep.setSelection(true);
+		existingRep.addSelectionListener(new SelectionListener() {
+			public void widgetDefaultSelected(SelectionEvent e) { }
+
+			public void widgetSelected(SelectionEvent e) {
+				repLocations.setEnabled(existingRep.getSelection());
+			}
+		});
+		
+		repLocations = new List(composite, SWT.BORDER | SWT.MULTI);
+		repLocations.setLayoutData(new GridData(GridData.FILL_BOTH));
+		addRepositoryList();
+		super.setControl(composite);
+	}
+	
+	private void addRepositoryList() {
+		java.util.List<GuvnorRepository> reps = Activator.getLocationManager().getRepositories();
+		for (int i = 0; i < reps.size(); i++) {
+			repLocations.add(reps.get(i).getLocation());
+		}
+		if (repLocations.getItemCount() > 0) {
+			repLocations.setSelection(0);
+		}
+	}
+	
+	private Composite createComposite(Composite parent, int numColumns) {
+		Composite composite = new Composite(parent, SWT.NULL);
+		
+		GridLayout layout = new GridLayout();
+		layout.numColumns = numColumns;
+		composite.setLayout(layout);
+		composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+		return composite;
+	}
+
+	@Override
+	public IWizardPage getNextPage() {
+		if (createRep.getSelection()) {
+			return getWizard().getPage("config_page");
+		} else {
+			return getWizard().getPage("select_res_page");
+		}
+	}
+}

Added: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/SelectGuvnorResourcesPage.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/SelectGuvnorResourcesPage.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/SelectGuvnorResourcesPage.java	2008-06-18 15:59:32 UTC (rev 20593)
@@ -0,0 +1,104 @@
+package org.guvnor.tools.wizards;
+
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.viewers.AbstractTreeViewer;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.ui.progress.DeferredTreeContentManager;
+import org.guvnor.tools.views.RepositoryLabelProvider;
+import org.guvnor.tools.views.model.TreeObject;
+import org.guvnor.tools.views.model.TreeParent;
+
+public class SelectGuvnorResourcesPage extends WizardPage {
+	
+	class ResourcesContentProvider implements IStructuredContentProvider, 
+										   ITreeContentProvider {
+		private TreeParent invisibleRoot;
+		private DeferredTreeContentManager manager;
+		
+		public void inputChanged(Viewer v, Object oldInput, Object newInput) {
+			if (resourceTree instanceof AbstractTreeViewer) {
+			    manager = new DeferredTreeContentManager(this, (AbstractTreeViewer)resourceTree);
+			  }
+		}
+		public void dispose() {
+		}
+		public Object[] getElements(Object parent) {
+			if (parent.equals(SelectGuvnorResourcesPage.this)) {
+				if (invisibleRoot == null) initialize();
+				return getChildren(invisibleRoot);
+			}
+			return getChildren(parent);
+		}
+		public Object getParent(Object child) {
+			if (child instanceof TreeObject) {
+				return ((TreeObject)child).getParent();
+			}
+			return null;
+		}
+		public Object [] getChildren(Object parent) {
+			if (parent == invisibleRoot) {
+				return ((TreeParent)invisibleRoot).getChildren();
+			} else if (parent instanceof TreeParent) {
+				return manager.getChildren(parent);
+			}
+			return new Object[0];
+		}
+		public boolean hasChildren(Object parent) {
+			if (parent instanceof TreeParent) {
+				return manager.mayHaveChildren(parent);
+			}
+			return false;
+		}
+
+		private void initialize() {
+			invisibleRoot = new TreeParent("", TreeObject.Type.NONE);
+			for (int i = 0; i < 4; i++) {
+				TreeParent p = new TreeParent("Package" + String.valueOf(i + 1), 
+											TreeObject.Type.PACKAGE);
+				invisibleRoot.addChild(p);
+			}
+		}
+	}
+	
+	private TreeViewer resourceTree;
+	
+	public SelectGuvnorResourcesPage(String pageName) {
+		super(pageName);
+	}
+
+	public SelectGuvnorResourcesPage(String pageName, String title, ImageDescriptor titleImage) {
+		super(pageName, title, titleImage);
+	}
+	
+	public void createControl(Composite parent) {
+		Composite composite = createComposite(parent, 1);
+		new Label(composite, SWT.NONE).setText("Select resources:");
+		
+		resourceTree = new TreeViewer(composite, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
+		resourceTree.getTree().setLayoutData(new GridData(GridData.FILL_BOTH));
+		resourceTree.setContentProvider(new ResourcesContentProvider());
+		resourceTree.setLabelProvider(new RepositoryLabelProvider());
+		resourceTree.setInput(this);
+		
+		super.setControl(composite);
+	}
+	
+	private Composite createComposite(Composite parent, int numColumns) {
+		Composite composite = new Composite(parent, SWT.NULL);
+		
+		GridLayout layout = new GridLayout();
+		layout.numColumns = numColumns;
+		composite.setLayout(layout);
+		composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+		return composite;
+	}
+}

Added: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/SelectResourceVersionPage.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/SelectResourceVersionPage.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/SelectResourceVersionPage.java	2008-06-18 15:59:32 UTC (rev 20593)
@@ -0,0 +1,52 @@
+package org.guvnor.tools.wizards;
+
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.List;
+
+public class SelectResourceVersionPage extends WizardPage {
+	
+	private List versions;
+	
+	public SelectResourceVersionPage(String pageName) {
+		super(pageName);
+	}
+
+	public SelectResourceVersionPage(String pageName, String title, ImageDescriptor titleImage) {
+		super(pageName, title, titleImage);
+	}
+	
+	public void createControl(Composite parent) {
+		Composite composite = createComposite(parent, 1);
+		new Label(composite, SWT.NONE).setText("Select version:");
+		
+		versions = new List(composite, SWT.BORDER | SWT.MULTI);
+		versions.setLayoutData(new GridData(GridData.FILL_BOTH));
+		populateVersions();
+		
+		super.setControl(composite);
+	}
+	
+	private void populateVersions() {
+		versions.add("v20080424");
+		versions.add("v20080516");
+		versions.add("v20080522");
+		versions.add("v20080705");
+		versions.setSelection(0);
+	}
+	
+	private Composite createComposite(Composite parent, int numColumns) {
+		Composite composite = new Composite(parent, SWT.NULL);
+		
+		GridLayout layout = new GridLayout();
+		layout.numColumns = numColumns;
+		composite.setLayout(layout);
+		composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+		return composite;
+	}
+}

Added: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/SelectTargetLocationPage.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/SelectTargetLocationPage.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/SelectTargetLocationPage.java	2008-06-18 15:59:32 UTC (rev 20593)
@@ -0,0 +1,99 @@
+package org.guvnor.tools.wizards;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IWorkspace;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.wizard.IWizardPage;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.List;
+
+public class SelectTargetLocationPage extends WizardPage {
+	
+	private Button createProj;
+	private Button existingProj;
+	private List   candidateProjs;
+	
+	public SelectTargetLocationPage(String pageName) {
+		super(pageName);
+	}
+
+	public SelectTargetLocationPage(String pageName, String title, ImageDescriptor titleImage) {
+		super(pageName, title, titleImage);
+	}
+	
+	public void createControl(Composite parent) {
+		Composite composite = createComposite(parent, 1);
+		new Label(composite, SWT.NONE).setText("Check out files to");
+		
+		createProj = new Button(composite, SWT.RADIO);
+		createProj.setText("Create a new project");
+		createProj.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+		createProj.setSelection(false);
+		createProj.addSelectionListener(new SelectionListener() {
+			public void widgetDefaultSelected(SelectionEvent e) { }
+
+			public void widgetSelected(SelectionEvent e) {
+				candidateProjs.setEnabled(existingProj.getSelection());
+			}
+		});
+		
+		existingProj = new Button(composite, SWT.RADIO);
+		existingProj.setText("Use an existing project");
+		existingProj.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+		existingProj.setSelection(true);
+		existingProj.addSelectionListener(new SelectionListener() {
+			public void widgetDefaultSelected(SelectionEvent e) { }
+
+			public void widgetSelected(SelectionEvent e) {
+				candidateProjs.setEnabled(existingProj.getSelection());
+			}
+		});
+		
+		candidateProjs = new List(composite, SWT.BORDER | SWT.MULTI);
+		candidateProjs.setLayoutData(new GridData(GridData.FILL_BOTH));
+		addCandidateProjList();
+		super.setControl(composite);
+	}
+	
+	private void addCandidateProjList() {
+		IWorkspace workspace = ResourcesPlugin.getWorkspace();
+		IProject[] projects = workspace.getRoot().getProjects();
+		for (int i = 0; i < projects.length; i++) {
+//			if (RepositoryProvider.getProvider(
+//							projects[i],"GuvnorRepProvider") != null) {
+				candidateProjs.add(projects[i].getName());
+//			}
+		}
+		if (candidateProjs.getItemCount() > 0) {
+			candidateProjs.setSelection(0);
+		}
+	}
+	
+	private Composite createComposite(Composite parent, int numColumns) {
+		Composite composite = new Composite(parent, SWT.NULL);
+		
+		GridLayout layout = new GridLayout();
+		layout.numColumns = numColumns;
+		composite.setLayout(layout);
+		composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+		return composite;
+	}
+
+	@Override
+	public IWizardPage getNextPage() {
+		if (createProj.getSelection()) {
+			return getWizard().getPage("new_project_page");
+		} else {
+			return getWizard().getPage("select_version_page");
+		}
+	}
+}




More information about the jboss-svn-commits mailing list