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

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Jul 3 18:10:23 EDT 2008


Author: john.graham at jboss.org
Date: 2008-07-03 18:10:23 -0400 (Thu, 03 Jul 2008)
New Revision: 20898

Added:
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/ResourceChangeListener.java
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/actions/AddAction.java
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/SelectLocalTargetPage.java
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/WizardUtils.java
Removed:
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/SelectTargetLocationPage.java
Modified:
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/META-INF/MANIFEST.MF
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/plugin.properties
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/plugin.xml
   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/GuvnorDecorator.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/actions/DisconnectAction.java
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/actions/UpdateAction.java
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/GuvnorMetadataUtils.java
   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/webdav/IWebDavClient.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/views/RepositoryContentProvider.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/wizards/CheckoutWizard.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/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
Log:
Add update action, initial work on import wizard

Modified: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/META-INF/MANIFEST.MF
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/META-INF/MANIFEST.MF	2008-07-03 19:52:20 UTC (rev 20897)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/META-INF/MANIFEST.MF	2008-07-03 22:10:23 UTC (rev 20898)
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %plugin.name
 Bundle-SymbolicName: org.guvnor.tools;singleton:=true
-Bundle-Version: 0.5.0.200806301613
+Bundle-Version: 0.5.0.200807031810
 Bundle-Activator: org.guvnor.tools.Activator
 Bundle-Vendor: %plugin.provider
 Bundle-Localization: plugin

Modified: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/plugin.properties
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/plugin.properties	2008-07-03 19:52:20 UTC (rev 20897)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/plugin.properties	2008-07-03 22:10:23 UTC (rev 20898)
@@ -9,6 +9,12 @@
 wiz.new.repository.location = Guvnor repository location
 wiz.new.repository.location.desc = New Guvnor repository location
 
+wiz.copy.resources = Resources from Guvnor
+wiz.copy.resources.desc = Copies Guvnor resources into a local workspace
+
+wiz.import.resources = Resources from Guvnor
+wiz.import.resources.desc = Imports Guvnor resources into a local workspace
+
 persp.name = Guvnor Repository Exploring
 
 decorator.desc = Guvnor resource decorator
@@ -16,6 +22,7 @@
 action.properties.tooltip = Show properties for the selected element
 
 action.popup.update = Update
+action.popup.add = Add
 action.popup.commit = Commit
 action.popup.showhistory = Show History
 action.popup.compareversion = Compare with Version...

Modified: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/plugin.xml
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/plugin.xml	2008-07-03 19:52:20 UTC (rev 20897)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/plugin.xml	2008-07-03 22:10:23 UTC (rev 20898)
@@ -27,36 +27,36 @@
   
   <extension point = "org.eclipse.ui.newWizards">
 		<category id = "org.guvnor.tools.wizcat" name="%category.name"/>
-		<!--
-	 	<wizard id = "org.guvnor.tools.wizards.CheckoutWizard"
-	      	    name = "Checkout Projects from Guvnor"
+<!--
+	 	<wizard id = "org.guvnor.tools.wizards.checkoutwizard"
+	      	    name = "%wiz.copy.resources"
 		        class="org.guvnor.tools.wizards.CheckoutWizard"
 		        category="org.guvnor.tools.wizcat"
 		        project="true"
 		        icon="icons/guvnor_rep.gif">
-	    	   <description>Checkout Projects from Guvnor</description>
+	    	   <description>%wiz.copy.resources.desc</description>
 		</wizard>
-		-->
+-->
 		<wizard name = "%wiz.new.repository.location"
-		        id = "org.guvnor.tools.wizards.NewRepLocationWizard"
+		        id = "org.guvnor.tools.wizards.newreplocationwizard"
 		        class="org.guvnor.tools.wizards.NewRepLocationWizard"
 		        category="org.guvnor.tools.wizcat"
 		        icon="icons/guvnor_rep.gif">
 	    	   <description>%wiz.new.repository.location.desc</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 id = "org.guvnor.tools.importwizcat" name="%category.name"/>
+	 	<wizard id = "org.guvnor.tools.checkoutwizard"
+	      	    name = "%wiz.import.resources"
 	            category="org.guvnor.tools.importwizcat"
 		        class="org.guvnor.tools.wizards.CheckoutWizard"
 		        icon="icons/guvnor_rep.gif">
-	    	   <description>Checkout Projects from Guvnor</description>
+	    	   <description>%wiz.import.resources.desc</description>
 		</wizard>
 	</extension>
-	-->
+-->
 	<extension point="org.eclipse.ui.perspectiveExtensions">
     	<perspectiveExtension targetID="org.eclipse.ui.resourcePerspective">
            <view id="org.guvnor.tools.views.RepositoriesView"
@@ -127,6 +127,12 @@
             label="%action.popup.commit"
             menubarPath="org.guvnor.tools.popupmenu/group1">
       </action>
+      <action class="org.guvnor.tools.actions.AddAction"
+              enablesFor="1"
+              id="org.guvnor.tools.actions.addaction"
+            label="%action.popup.add"
+            menubarPath="org.guvnor.tools.popupmenu/group1">
+      </action>
       <action class="org.guvnor.tools.actions.UpdateAction"
               enablesFor="1"
               id="org.guvnor.tools.actions.updateaction"

Modified: 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	2008-07-03 19:52:20 UTC (rev 20897)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/Activator.java	2008-07-03 22:10:23 UTC (rev 20898)
@@ -3,6 +3,8 @@
 import java.net.MalformedURLException;
 import java.net.URL;
 
+import org.eclipse.core.resources.IWorkspace;
+import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.jface.resource.ImageDescriptor;
@@ -41,6 +43,8 @@
 	public void start(BundleContext context) throws Exception {
 		super.start(context);
 		plugin = this;
+		IWorkspace workspace = ResourcesPlugin.getWorkspace();
+		workspace.addResourceChangeListener(new ResourceChangeListener());
 	}
 
 	/*

Modified: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/GuvnorDecorator.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/GuvnorDecorator.java	2008-07-03 19:52:20 UTC (rev 20897)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/GuvnorDecorator.java	2008-07-03 22:10:23 UTC (rev 20898)
@@ -11,6 +11,8 @@
 
 public class GuvnorDecorator implements ILightweightLabelDecorator {
 	
+	public static final String DECORATOR_ID = "org.guvnor.tools.decorator";
+	
 	private boolean isGuvnorResource(Object element) {
 		if (element instanceof IResource) {
 			return GuvnorMetadataUtils.findGuvnorMetadata((IResource)element) != null;
@@ -20,17 +22,23 @@
 	}
 	
 	private void decorateResource(IResource resource, IDecoration decoration) {
-		if (resource instanceof IFile) {
-			decoration.addOverlay(Activator.getImageDescriptor(Activator.IMG_GUVCONTROLLED), 
-					             IDecoration.TOP_RIGHT);
-			try {
+		try {	
+			if (resource instanceof IFile) {
+				if (GuvnorMetadataUtils.isGuvnorResourceCurrent(resource)) {
+					decoration.addOverlay(
+							Activator.getImageDescriptor(Activator.IMG_GUVCONTROLLED), 
+							IDecoration.TOP_RIGHT);
+				} else {
+					//TODO: Would like a different overlay icon, instead of this, but for the time being...
+					decoration.addPrefix("{g} ");
+				}
 				GuvnorMetadataProps props = GuvnorMetadataUtils.getGuvnorMetadata(resource);
 				if (props.getVersion() != null) {
 					decoration.addSuffix(" " + props.getVersion());
 				}
-			} catch (Exception e) {
-				Activator.getDefault().writeLog(IStatus.ERROR, e.getMessage(), e);
 			}
+		} catch (Exception e) {
+			Activator.getDefault().writeLog(IStatus.ERROR, e.getMessage(), e);
 		}
 	}
 	
@@ -46,22 +54,17 @@
 	}
 
 	public void addListener(ILabelProviderListener listener) {
-		// TODO Auto-generated method stub
-		
+		// TODO: Need to implement this?
 	}
 
-	public void dispose() {
-		// TODO Auto-generated method stub
-		
-	}
+	public void dispose() { }
 
 	public boolean isLabelProperty(Object element, String property) {
-		// TODO Auto-generated method stub
+		// TODO: Need to implement this?
 		return false;
 	}
 
 	public void removeListener(ILabelProviderListener listener) {
-		// TODO Auto-generated method stub
-		
+		// TODO: Need to implement this?
 	}
 }

Modified: 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	2008-07-03 19:52:20 UTC (rev 20897)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/GuvnorLocationManager.java	2008-07-03 22:10:23 UTC (rev 20898)
@@ -69,7 +69,7 @@
 		return res;
 	}
 	
-	private GuvnorRepository findRepository(String rep) {
+	public GuvnorRepository findRepository(String rep) {
 		GuvnorRepository theRep = null;
 		for (int i = 0; i < repList.size(); i++) {
 			if (repList.get(i).getLocation().equals(rep)) {

Added: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/ResourceChangeListener.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/ResourceChangeListener.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/ResourceChangeListener.java	2008-07-03 22:10:23 UTC (rev 20898)
@@ -0,0 +1,62 @@
+package org.guvnor.tools;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceChangeEvent;
+import org.eclipse.core.resources.IResourceChangeListener;
+import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.core.resources.IResourceDeltaVisitor;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IStatus;
+import org.guvnor.tools.utils.GuvnorMetadataUtils;
+import org.guvnor.tools.utils.PlatformUtils;
+
+public class ResourceChangeListener implements IResourceChangeListener {
+
+	public void resourceChanged(IResourceChangeEvent event) {
+		try {
+			//TODO: Need to handle delete and move events as well
+			// For delete, we just remove any corresponding guvnor metadata
+			// Not clear what to do about moves...
+			event.getDelta().accept(new IResourceDeltaVisitor() {
+				public boolean visit(IResourceDelta delta) throws CoreException {
+					try {
+						if (delta.getKind() == IResourceDelta.ADDED) {
+							handleResourceAdded(delta.getResource());
+						}
+						if (delta.getKind() == IResourceDelta.CHANGED) {
+							handleResourceChanged(delta.getResource());
+						}
+					} catch (Exception e) {
+						Activator.getDefault().writeLog(IStatus.ERROR, e.getMessage(), e);
+					}
+					return true;
+				}
+			});
+		} catch (CoreException e) {
+			Activator.getDefault().writeLog(IStatus.ERROR, e.getMessage(), e);
+		}
+	}
+	
+	private void handleResourceAdded(IResource resource) throws Exception {
+		if (GuvnorMetadataUtils.isGuvnorMetadata(resource)) {
+			// Look for the corresponding file
+			IFile target = GuvnorMetadataUtils.getGuvnorControlledResource(resource);
+			if (target != null) {
+				GuvnorMetadataUtils.markCurrentGuvnorResource(target);
+			}
+		} else {
+			// Look for the corresponding metadata
+			if (GuvnorMetadataUtils.isGuvnorControlledResource(resource)) {
+				GuvnorMetadataUtils.markCurrentGuvnorResource(resource);
+			}
+		}
+	}
+	
+	private void handleResourceChanged(IResource resource) throws CoreException {
+		if (GuvnorMetadataUtils.getGuvnorResourceProperty(resource) != null) {
+			GuvnorMetadataUtils.markExpiredGuvnorResource(resource);
+			PlatformUtils.updateDecoration();
+		}
+	}
+}

Added: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/actions/AddAction.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/actions/AddAction.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/actions/AddAction.java	2008-07-03 22:10:23 UTC (rev 20898)
@@ -0,0 +1,67 @@
+package org.guvnor.tools.actions;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.IActionDelegate;
+import org.eclipse.ui.IObjectActionDelegate;
+import org.eclipse.ui.IWorkbenchPart;
+import org.guvnor.tools.Activator;
+import org.guvnor.tools.utils.GuvnorMetadataUtils;
+
+public class AddAction implements IObjectActionDelegate {
+	
+	private IFile selectedFile;
+
+	/**
+	 * Constructor for Action1.
+	 */
+	public AddAction() {
+		super();
+	}
+
+	/**
+	 * @see IObjectActionDelegate#setActivePart(IAction, IWorkbenchPart)
+	 */
+	public void setActivePart(IAction action, IWorkbenchPart targetPart) {
+	}
+
+	/**
+	 * @see IActionDelegate#run(IAction)
+	 */
+	public void run(IAction action) {
+		Shell shell = new Shell();
+		MessageDialog.openInformation(
+			shell,
+			"JBoss Guvnor Tools Plug-in",
+			"Show History was executed.");
+	}
+
+	/**
+	 * @see IActionDelegate#selectionChanged(IAction, ISelection)
+	 */
+	public void selectionChanged(IAction action, ISelection selection) {
+		// Reset state to default
+		selectedFile = null;
+		action.setEnabled(false);
+		// See if we should enable for the selection
+		try {
+			if (selection instanceof IStructuredSelection) {
+				IStructuredSelection sel = (IStructuredSelection)selection;
+				if (sel.getFirstElement() instanceof IFile) {
+					IFile mdFile = GuvnorMetadataUtils.findGuvnorMetadata((IFile)sel.getFirstElement());
+					if (mdFile == null) {
+						selectedFile = (IFile)sel.getFirstElement();
+						action.setEnabled(true);
+					}
+				}
+			} 
+		} catch (Exception e) {
+			Activator.getDefault().writeLog(IStatus.ERROR, e.getMessage(), e);
+		}
+	}
+}

Modified: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/actions/DisconnectAction.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/actions/DisconnectAction.java	2008-07-03 19:52:20 UTC (rev 20897)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/actions/DisconnectAction.java	2008-07-03 22:10:23 UTC (rev 20898)
@@ -9,12 +9,12 @@
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.ui.IActionDelegate;
-import org.eclipse.ui.IDecoratorManager;
 import org.eclipse.ui.IObjectActionDelegate;
 import org.eclipse.ui.IWorkbenchPart;
 import org.guvnor.tools.Activator;
 import org.guvnor.tools.utils.GuvnorMetadataProps;
 import org.guvnor.tools.utils.GuvnorMetadataUtils;
+import org.guvnor.tools.utils.PlatformUtils;
 
 public class DisconnectAction implements IObjectActionDelegate {
 	
@@ -47,9 +47,7 @@
 		try {
 			IWorkspace ws = mdFile.getWorkspace();
 			ws.delete(new IResource[] { mdFile }, true, null);
-			IDecoratorManager manager = Activator.getDefault().
-											getWorkbench().getDecoratorManager();
-			manager.update("org.guvnor.tools.decorator");
+			PlatformUtils.updateDecoration();
 		} catch (CoreException e) {
 			Activator.getDefault().writeLog(IStatus.ERROR, e.getMessage(), e);
 		}

Modified: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/actions/UpdateAction.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/actions/UpdateAction.java	2008-07-03 19:52:20 UTC (rev 20897)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/actions/UpdateAction.java	2008-07-03 22:10:23 UTC (rev 20898)
@@ -70,6 +70,8 @@
 			}
 			if (ins != null) {
 				selectedFile.setContents(ins, true, true, null);
+				GuvnorMetadataUtils.markCurrentGuvnorResource(selectedFile);
+				PlatformUtils.updateDecoration();
 			}
 		} catch (Exception e) {
 			Activator.getDefault().writeLog(IStatus.ERROR, e.getMessage(), e);

Modified: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/GuvnorMetadataUtils.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/GuvnorMetadataUtils.java	2008-07-03 19:52:20 UTC (rev 20897)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/GuvnorMetadataUtils.java	2008-07-03 22:10:23 UTC (rev 20898)
@@ -1,10 +1,16 @@
 package org.guvnor.tools.utils;
 
+import java.io.File;
+import java.io.FileOutputStream;
 import java.util.Properties;
 
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.QualifiedName;
 
 /**
  * A set of utilities for dealing with (local) Guvnor metadata.
@@ -29,6 +35,10 @@
 		return res;
 	}
 	
+	public static boolean isGuvnorControlledResource(IResource resource) {
+		return findGuvnorMetadata(resource) != null;
+	}
+	
 	public static GuvnorMetadataProps getGuvnorMetadata(IResource resource) throws Exception {
 		IFile mdFile = findGuvnorMetadata(resource);
 		if (mdFile == null) {
@@ -41,4 +51,72 @@
 				                       props.getProperty("fullpath"),
 				                       props.getProperty("lastmodified"));
 	}
+	
+	public static void setGuvnorMetadataProps(File mdFile, 
+			                                 GuvnorMetadataProps mdProps) throws Exception {
+		FileOutputStream fos = new FileOutputStream(mdFile);
+		Properties props = new Properties();
+		props.put("repository", 	mdProps.getRepository());
+		props.put("fullpath", 		mdProps.getFullpath());
+		props.put("filename", 		mdProps.getFilename());
+		props.put("lastmodified", 	mdProps.getVersion());
+		props.store(fos, null);
+		fos.flush();
+		fos.close();	
+	}
+	
+	public static IPath createGuvnorMetadataLocation(String rootPath) throws Exception {
+		IPath path = new Path(rootPath + File.separator + ".guvnorinfo");
+		if (!path.toFile().exists()) {
+			if (!path.toFile().mkdir()) {
+				throw new Exception("Could not create directory " + path.toOSString());
+			}
+		}
+		return path;
+	}
+	
+	public static File getGuvnorMetadataFile(String path, String fname) {
+		return new File(path + File.separator + "." + fname);
+	}
+	
+	public static IFile getGuvnorControlledResource(IResource resource) throws Exception {
+		if (resource instanceof IFile) {
+			Properties props = new Properties();
+			props.load(((IFile)resource).getContents());
+			return (IFile)ResourcesPlugin.getWorkspace().
+								getRoot().findMember(resource.getFullPath().
+										removeLastSegments(2).append(props.getProperty("filename")));
+		} else {
+			return null;
+		}
+	}
+	
+	public static boolean isGuvnorMetadata(IResource resource) {
+		return resource.getFullPath().removeLastSegments(1).
+							toOSString().endsWith(".guvnorinfo");
+	}
+	
+	public static void markCurrentGuvnorResource(IResource resource) throws CoreException {
+		resource.setPersistentProperty(generateQualifiedName("version"), "current");
+	}
+	
+	public static void markExpiredGuvnorResource(IResource resource) throws CoreException {
+		resource.setPersistentProperty(generateQualifiedName("version"), "expired");
+	}
+	
+	public static String getGuvnorResourceProperty(IResource resource) throws CoreException {
+		return resource.getPersistentProperty(generateQualifiedName("version"));
+	}
+	
+	public static boolean isGuvnorResourceCurrent(IResource resource) throws CoreException {
+		String ver = resource.getPersistentProperty(generateQualifiedName("version"));
+		if (ver == null) {
+			return false;
+		}
+		return ver.equals("current");
+	}
+	
+	private static QualifiedName generateQualifiedName(String attr) {
+		return new QualifiedName("org.guvnor.tools", attr); 
+	}
 }
\ No newline at end of file

Modified: 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	2008-07-03 19:52:20 UTC (rev 20897)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/PlatformUtils.java	2008-07-03 22:10:23 UTC (rev 20898)
@@ -11,12 +11,14 @@
 import org.eclipse.jface.dialogs.MessageDialog;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.IDecoratorManager;
 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;
+import org.guvnor.tools.GuvnorDecorator;
 import org.guvnor.tools.utils.webdav.IWebDavClient;
 import org.guvnor.tools.utils.webdav.WebDavClientFactory;
 import org.guvnor.tools.utils.webdav.WebDavServerCache;
@@ -42,6 +44,10 @@
 		return instance;
 	}
 	
+	public static void updateDecoration() {
+		IDecoratorManager manager = Activator.getDefault().getWorkbench().getDecoratorManager();
+		manager.update(GuvnorDecorator.DECORATOR_ID);
+	}
 	/**
 	 * Opens a read-only, in-memory editor.
 	 * @param contents The contents for the editor

Modified: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/webdav/IWebDavClient.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/webdav/IWebDavClient.java	2008-07-03 19:52:20 UTC (rev 20897)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/webdav/IWebDavClient.java	2008-07-03 22:10:23 UTC (rev 20898)
@@ -48,11 +48,19 @@
 	 * 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)
+	 * @throws Exception Various WebDav errors can occur (See IResponse for details)
 	 */
 	public Map<String, ResourceProperties> listDirectory(String path) throws Exception;
 	
 	/**
+	 * Queries the server for properties of a given resource.
+	 * @param resource The resource to get properties for
+	 * @return The resource properties
+	 * @throws Exception Various WebDav errors can occur (See IResponse for details)
+	 */
+	public ResourceProperties queryProperties(String resource) throws Exception;
+	
+	/**
 	 * Get the contents of a resource from a WebDav repository.
 	 * @param resource The address of the resource
 	 * @return The contents of the resource

Modified: 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	2008-07-03 19:52:20 UTC (rev 20897)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/webdav/WebDavClient.java	2008-07-03 22:10:23 UTC (rev 20898)
@@ -115,6 +115,41 @@
 	
 	/*
 	 * (non-Javadoc)
+	 * @see org.guvnor.tools.utils.webdav.IWebDavClient#queryProperties(java.lang.String)
+	 */
+	public ResourceProperties queryProperties(String resource) throws Exception {
+		if (isUsingSessionAuthenication()) {
+			if (sessionAuthen != null) {
+				hClient.setAuthenticator(sessionAuthen);
+			} else {
+				setSessionAuthentication(false);
+			}
+		}
+		try {
+			IContext context = createContext();
+			context.put("Depth", "1");
+			ILocator locator = WebDAVFactory.locatorFactory.newLocator(resource);
+			IResponse response = client.propfind(locator, context, null);
+			if (response.getStatusCode() != IResponse.SC_MULTI_STATUS 
+			   && response.getStatusCode() != IResponse.SC_MULTI_STATUS) {
+				throw new WebDavException("WebDav error: " + response.getStatusCode(), 
+									     response.getStatusCode());
+			}
+			Map<String, ResourceProperties> props = 
+				StreamProcessingUtils.parseListing("", response.getInputStream());
+			if (props.keySet().size() != 1) {
+				throw new Exception(props.keySet().size() + " entries found for " + resource);
+			}
+			return props.get(props.keySet().iterator().next());
+		} finally {
+			if (isUsingSessionAuthenication()) {
+				hClient.setAuthenticator(authen);
+			}
+		}
+	}
+	
+	/*
+	 * (non-Javadoc)
 	 * @see org.guvnor.tools.utils.webdav.IWebDavClient#getResourceContents(java.lang.String)
 	 */
 	public String getResourceContents(String resource) throws Exception {

Modified: 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	2008-07-03 19:52:20 UTC (rev 20897)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/views/RepositoryContentProvider.java	2008-07-03 22:10:23 UTC (rev 20898)
@@ -19,6 +19,8 @@
 	private DeferredTreeContentManager manager;
 	private AbstractTreeViewer viewer;
 	
+	private String repUrl;
+	
 	public void inputChanged(Viewer v, Object oldInput, Object newInput) {
 		if (v instanceof AbstractTreeViewer) {
 			viewer = (AbstractTreeViewer)v;
@@ -56,15 +58,32 @@
 	}
 
 	private void initialize() {
+		boolean shouldAdd = true;
 		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);
+			if (repUrl != null) {
+				if (repUrl.equals(reps.get(i).getLocation())) {
+					shouldAdd = true;
+				} else {
+					shouldAdd = false;
+				}
+			} else {
+				shouldAdd = true;
+			}
+			if (shouldAdd) {
+				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);
+			}
 		}
 	}
+	
+	public void setRepositorySelection(String repUrl) {
+		this.repUrl = repUrl;
+	}
 }

Modified: 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	2008-07-03 19:52:20 UTC (rev 20897)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/views/RepositoryView.java	2008-07-03 22:10:23 UTC (rev 20898)
@@ -7,7 +7,6 @@
 import java.rmi.server.UID;
 import java.util.ArrayList;
 import java.util.List;
-import java.util.Properties;
 
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IStatus;
@@ -43,6 +42,8 @@
 import org.guvnor.tools.Activator;
 import org.guvnor.tools.GuvnorRepository;
 import org.guvnor.tools.GuvnorLocationManager.IRepositorySetListener;
+import org.guvnor.tools.utils.GuvnorMetadataProps;
+import org.guvnor.tools.utils.GuvnorMetadataUtils;
 import org.guvnor.tools.utils.PlatformUtils;
 import org.guvnor.tools.utils.webdav.IWebDavClient;
 import org.guvnor.tools.utils.webdav.WebDavClientFactory;
@@ -157,22 +158,18 @@
 		writer.close();
 		res.add(transfer.getAbsolutePath());
 		
-		IPath metaPath = new Path(path.toOSString() + File.separator + ".guvnorinfo");
-		if (!metaPath.toFile().mkdir()) {
-			throw new Exception("Could not create directory " + metaPath.toOSString());
-		}
+		IPath metaPath = GuvnorMetadataUtils.
+							createGuvnorMetadataLocation(path.toOSString());
 		metaPath.toFile().deleteOnExit();
-		File metaFile = new File(metaPath.toOSString() + File.separator + "." + node.getName());
+		File metaFile = GuvnorMetadataUtils.
+							getGuvnorMetadataFile(metaPath.toOSString(), node.getName());
 		metaFile.deleteOnExit();
-		fos = new FileOutputStream(metaFile);
-		Properties props = new Properties();
-		props.put("repository", node.getGuvnorRepository().getLocation());
-		props.put("fullpath", node.getFullPath());
-		props.put("filename", node.getName());
-		props.put("lastmodified", node.getResourceProps().getLastModifiedDate());
-		props.store(fos, null);
-		fos.flush();
-		fos.close();
+		GuvnorMetadataProps mdProps = 
+			new GuvnorMetadataProps(node.getName(), 
+					               node.getGuvnorRepository().getLocation(),
+				                   node.getFullPath(), 
+				                   node.getResourceProps().getLastModifiedDate());
+		GuvnorMetadataUtils.setGuvnorMetadataProps(metaFile, mdProps);
 		res.add(metaFile.getAbsolutePath());
 		
 		return res;

Modified: 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	2008-07-03 19:52:20 UTC (rev 20897)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/CheckoutWizard.java	2008-07-03 22:10:23 UTC (rev 20898)
@@ -1,20 +1,29 @@
 package org.guvnor.tools.wizards;
 
+import java.util.Properties;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IWorkspaceRoot;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.IPath;
+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.eclipse.ui.dialogs.WizardNewProjectCreationPage;
 import org.guvnor.tools.Activator;
+import org.guvnor.tools.utils.GuvnorMetadataUtils;
+import org.guvnor.tools.utils.webdav.IWebDavClient;
+import org.guvnor.tools.utils.webdav.ResourceProperties;
+import org.guvnor.tools.utils.webdav.WebDavServerCache;
 
 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 SelectLocalTargetPage			selectLocalTargetPage;
+//	private SelectResourceVersionPage		selectVerPage;
 	
 	private GuvWizardModel model;
 	
@@ -42,32 +51,44 @@
 		mainConfigPage.setDescription("Creates a connection to a Guvnor repository");
 		super.addPage(mainConfigPage);
 		
-		selectResPage = new SelectGuvnorResourcesPage("select_res_page", "Select Guvnor repository location",
+		selectResPage = new SelectGuvnorResourcesPage("select_res_page", "Select resources",
 											Activator.getImageDescriptor(Activator.IMG_GUVREPWIZBAN));
-		selectResPage.setDescription("Select resources from the Guvnor repository to check out");
+		selectResPage.setDescription("Select resources to copy from the Guvnor repository");
 		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);
+		selectLocalTargetPage = new SelectLocalTargetPage("local_target_page", "Select copy location",
+											Activator.getImageDescriptor(Activator.IMG_GUVREPWIZBAN));
+		selectLocalTargetPage.setDescription("Select the destination location");
+		super.addPage(selectLocalTargetPage);
 		
-		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);
 		
-		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() {
+		try {
+			IWebDavClient webdav = WebDavServerCache.getWebDavClient(model.getRepLocation());
+			// During the course of the wizard, the user had to drill into a Guvnor repository
+			// to choose resources. Therefore, we should have a cached repository connection
+			// that is authenticated already. If not, something is really strange.
+			assert(webdav != null);
+			IPath metaPath = GuvnorMetadataUtils.createGuvnorMetadataLocation(model.getTargetLocation());
+			IWorkspaceRoot wsRoot = ResourcesPlugin.getWorkspace().getRoot();
+			for (String oneResource:model.getResources()) {
+				// Get the metadata properties
+				ResourceProperties resprops = webdav.queryProperties(oneResource);
+				if (resprops == null) {
+					throw new Exception("Null resource properties for " + oneResource);
+				}
+			}
+		} catch (Exception e) {
+			Activator.getDefault().writeLog(IStatus.ERROR, e.getMessage(), e);
+		}
 		return true;
 	}
 

Modified: 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	2008-07-03 19:52:20 UTC (rev 20897)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/GuvWizardModel.java	2008-07-03 22:10:23 UTC (rev 20898)
@@ -9,8 +9,7 @@
 	private boolean createNewRep;
 	private boolean saveAuthInfo;
 	
-	private String targetProject;
-	private boolean createNewProj;
+	private String targetLocation;
 	
 	private List<String> resources;
 	private String version;
@@ -33,27 +32,21 @@
 	public void setPassword(String password) {
 		this.password = password;
 	}
-	public boolean isCreateNewRep() {
+	public boolean shouldCreateNewRep() {
 		return createNewRep;
 	}
 	public void setCreateNewRep(boolean createNewRep) {
 		this.createNewRep = createNewRep;
 	}
-	public String getTargetProject() {
-		return targetProject;
+	public String getTargetLocation() {
+		return targetLocation;
 	}
-	public void setTargetProject(String targetProject) {
-		this.targetProject = targetProject;
+	public void setTargetLocation(String targetLocation) {
+		this.targetLocation = targetLocation;
 	}
-	public boolean isCreateNewProj() {
-		return createNewProj;
-	}
 	public boolean shouldSaveAuthInfo() {
 		return saveAuthInfo;
 	}
-	public void setCreateNewProj(boolean createNewProj) {
-		this.createNewProj = createNewProj;
-	}
 	public void setSaveAuthInfo(boolean saveAuthInfo) {
 		this.saveAuthInfo = saveAuthInfo;
 	}
@@ -70,8 +63,9 @@
 		this.version = version;
 	}
 	
-	public boolean isModelComplete() {
-		// TODO: Check if model is complete
-		return true;
+	public boolean isModelComplete() {		
+		return this.repLocation != null && 
+		       this.targetLocation != null && 
+		       this.resources != null;
 	}
 }

Modified: 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	2008-07-03 19:52:20 UTC (rev 20897)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/GuvnorMainConfigPage.java	2008-07-03 22:10:23 UTC (rev 20898)
@@ -57,6 +57,8 @@
 		});
 		addDropSupport(serverField);
 		
+		serverField.setFocus();
+		
 		new Label(composite, SWT.NONE).setText("Port: ");
 		portField = new Text(composite, SWT.SINGLE | SWT.BORDER);
 		portField.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
@@ -165,7 +167,9 @@
 		try {
 			URL server = new URL(dropped);
 			serverField.setText(server.getHost());
-			portField.setText(String.valueOf(server.getPort()));
+			if (server.getPort() != -1) {
+				portField.setText(String.valueOf(server.getPort()));
+			}
 			replocField.setText(server.getFile());
 		} catch (MalformedURLException e) {
 			Activator.getDefault().writeLog(IStatus.ERROR, e.getMessage(), e);
@@ -191,13 +195,17 @@
 			model.setPassword(pwField.getText());
 			model.setSaveAuthInfo(saveAuthInfo);
 			model.setCreateNewRep(true);
-			GuvnorMainConfigPage.super.setPageComplete(true);
 		} catch (Exception e) {
-			GuvnorMainConfigPage.super.setPageComplete(false);
+			model.setRepLocation(null);
 		}
+		super.getWizard().getContainer().updateButtons();
 	}
 
 	private URL validateUrl() throws Exception {
+		// If the server text box is empty, this is not a valid location
+		if (serverField.getText().trim().length() == 0) {
+			return null;
+		}
 		// First we'll test if the server text box is a complete
 		// URL in itself. If so, we'll parse it out into the other
 		// fields and leave early
@@ -235,4 +243,10 @@
 		}
 		return res;
 	}
+
+	@Override
+	public boolean isPageComplete() {
+		GuvWizardModel model = ((IGuvnorWizard)super.getWizard()).getModel();
+		return model.getRepLocation() != null;
+	}
 }

Modified: 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	2008-07-03 19:52:20 UTC (rev 20897)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/NewRepLocationWizard.java	2008-07-03 22:10:23 UTC (rev 20898)
@@ -1,26 +1,15 @@
 package org.guvnor.tools.wizards;
 
-import java.net.URL;
-import java.util.HashMap;
-import java.util.Map;
-
 import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Platform;
 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;
-import org.guvnor.tools.utils.webdav.IWebDavClient;
-import org.guvnor.tools.utils.webdav.WebDavClientFactory;
-import org.guvnor.tools.utils.webdav.WebDavServerCache;
-import org.guvnor.tools.utils.webdav.WebDavSessionAuthenticator;
 
 public class NewRepLocationWizard extends Wizard implements INewWizard, IGuvnorWizard {
 	
 	private GuvnorMainConfigPage mainPage;
-//	private IWorkbench workbench;
 	
 	private GuvWizardModel model = new GuvWizardModel();
 	
@@ -44,21 +33,7 @@
 	@Override
 	public boolean performFinish() {
 		try {
-			Activator.getLocationManager().addRepository(new GuvnorRepository(model.getRepLocation()));
-			URL serverUrl = new URL(model.getRepLocation());
-			Map<String, String> info = new HashMap<String, String>();
-			info.put("username", model.getUsername());
-			info.put("password", model.getPassword());
-			if (model.shouldSaveAuthInfo()) {
-				Platform.addAuthorizationInfo(serverUrl, "", "basic", info);	
-			} else {
-				IWebDavClient client = WebDavClientFactory.createClient(serverUrl);
-				WebDavServerCache.cacheWebDavClient(serverUrl.toString(), client);
-				WebDavSessionAuthenticator authen = new WebDavSessionAuthenticator();
-				authen.addAuthenticationInfo(serverUrl, "", "basic", info);
-				client.setSessionAuthenticator(authen);
-				client.setSessionAuthentication(true);
-			}
+			WizardUtils.createGuvnorRepository(model);
 		} catch (Exception e) {
 			Activator.getDefault().writeLog(IStatus.ERROR, e.getMessage(), e);
 		}
@@ -69,7 +44,5 @@
 	 * (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;
-	}
+	public void init(IWorkbench workbench, IStructuredSelection selection) { }
 }

Modified: 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	2008-07-03 19:52:20 UTC (rev 20897)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/SelectGuvnorRepPage.java	2008-07-03 22:10:23 UTC (rev 20898)
@@ -59,6 +59,13 @@
 		
 		repLocations = new List(composite, SWT.BORDER | SWT.MULTI);
 		repLocations.setLayoutData(new GridData(GridData.FILL_BOTH));
+		repLocations.addSelectionListener(new SelectionListener() {
+			public void widgetDefaultSelected(SelectionEvent e) { }
+
+			public void widgetSelected(SelectionEvent e) {
+				updateModel();
+			}
+		});
 		addRepositoryList();
 		super.setControl(composite);
 	}
@@ -70,6 +77,7 @@
 		}
 		if (repLocations.getItemCount() > 0) {
 			repLocations.setSelection(0);
+			updateModel();
 		}
 	}
 	
@@ -82,8 +90,19 @@
 		composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
 		return composite;
 	}
-
-	@Override
+	
+	private void updateModel() {
+		GuvWizardModel model = ((IGuvnorWizard)super.getWizard()).getModel();
+		String selected = null;
+		if (repLocations.getSelection().length > 0) {
+			selected = repLocations.getSelection()[0];
+		}
+		if (selected != null) {
+			model.setRepLocation(repLocations.getSelection()[0]);
+		}
+	}
+	
+ 	@Override
 	public IWizardPage getNextPage() {
 		if (createRep.getSelection()) {
 			return getWizard().getPage("config_page");

Modified: 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	2008-07-03 19:52:20 UTC (rev 20897)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/SelectGuvnorResourcesPage.java	2008-07-03 22:10:23 UTC (rev 20898)
@@ -1,76 +1,31 @@
 package org.guvnor.tools.wizards;
 
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.runtime.IStatus;
 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.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
 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.Activator;
+import org.guvnor.tools.GuvnorRepository;
+import org.guvnor.tools.views.RepositoryContentProvider;
 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 viewer;
+	private String previousSelection;
 	
-	private TreeViewer resourceTree;
-	
 	public SelectGuvnorResourcesPage(String pageName) {
 		super(pageName);
 	}
@@ -83,15 +38,71 @@
 		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);
-		
+		viewer = new TreeViewer(composite, SWT.BORDER | SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
+		viewer.getTree().setLayoutData(new GridData(GridData.FILL_BOTH));
+		viewer.setLabelProvider(new RepositoryLabelProvider());
+		viewer.addPostSelectionChangedListener(new ISelectionChangedListener() {
+			public void selectionChanged(SelectionChangedEvent event) {
+				updateModel();	
+			}
+		});
 		super.setControl(composite);
 	}
 	
+	private void handleRepositoryCreation() {
+		// First we'll see if the repository already exists
+		GuvWizardModel model = ((IGuvnorWizard)super.getWizard()).getModel();
+		if (model.shouldCreateNewRep()
+		   && model.getRepLocation() != null) {
+			GuvnorRepository theRep = Activator.getLocationManager().
+										findRepository(model.getRepLocation());
+			if (theRep != null) {
+				// The repository already exists, nothing to do
+				return;
+			}
+			try {
+				WizardUtils.createGuvnorRepository(model);
+			} catch (Exception e) {
+				super.setErrorMessage(e.getMessage());
+				Activator.getDefault().writeLog(IStatus.ERROR, e.getMessage(), e);
+			}
+		}
+	}
+	
+	@Override
+	public void setVisible(boolean visible) {
+		if (visible) {
+			// Need to filter repository list based on currently selected repository
+			// Will also keep track of which filter is applied, so we don't create
+			// additional content providers unnecessarily.
+			GuvWizardModel model = ((IGuvnorWizard)super.getWizard()).getModel();
+			String currentSelection = model.getRepLocation();
+			// Not supposed to use this page without setting the target repository in the model
+			assert(currentSelection != null);
+			// If we had a repository selection before that is different from the current selection
+			if (previousSelection != null
+			   && !currentSelection.equals(previousSelection)) {
+				handleRepositoryCreation();
+				RepositoryContentProvider cp = new RepositoryContentProvider();
+				cp.setRepositorySelection(currentSelection);
+				viewer.setContentProvider(cp);
+				viewer.setInput(viewer);
+				previousSelection = currentSelection;
+			} else {
+				// If we didn't have a repository selection before (first time this page is loaded)
+				if (previousSelection == null) {
+					handleRepositoryCreation();
+					RepositoryContentProvider cp = new RepositoryContentProvider();
+					cp.setRepositorySelection(currentSelection);
+					viewer.setContentProvider(cp);
+					viewer.setInput(viewer);
+					previousSelection = currentSelection;
+				}
+			}
+		}
+		super.setVisible(visible);
+	}
+
 	private Composite createComposite(Composite parent, int numColumns) {
 		Composite composite = new Composite(parent, SWT.NULL);
 		
@@ -101,4 +112,18 @@
 		composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
 		return composite;
 	}
+	
+	@SuppressWarnings("unchecked")
+	private void updateModel() {
+		IStructuredSelection selection = (IStructuredSelection)viewer.getSelection();
+		if (!selection.isEmpty()) {
+			List<String> resources = new ArrayList<String>();
+			List<TreeObject> nodes = selection.toList();
+			for (TreeObject o:nodes) {
+				resources.add(o.getFullPath());
+			}
+			GuvWizardModel model = ((IGuvnorWizard)super.getWizard()).getModel();
+			model.setResources(resources);
+		}
+	}
 }

Added: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/SelectLocalTargetPage.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/SelectLocalTargetPage.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/SelectLocalTargetPage.java	2008-07-03 22:10:23 UTC (rev 20898)
@@ -0,0 +1,79 @@
+package org.guvnor.tools.wizards;
+
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerFilter;
+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.model.WorkbenchContentProvider;
+import org.eclipse.ui.model.WorkbenchLabelProvider;
+
+public class SelectLocalTargetPage extends WizardPage {
+	
+	private TreeViewer viewer;
+	
+	public SelectLocalTargetPage(String pageName) {
+		super(pageName);
+	}
+
+	public SelectLocalTargetPage(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 location:");
+		
+		viewer = new TreeViewer(composite, SWT.BORDER | SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL);
+		viewer.getTree().setLayoutData(new GridData(GridData.FILL_BOTH));
+		viewer.setLabelProvider(new WorkbenchLabelProvider());
+		WorkbenchContentProvider cp = new WorkbenchContentProvider();
+		viewer.setContentProvider(cp);
+		viewer.setFilters(new ViewerFilter[] { new ProjectFilter() });
+		viewer.addPostSelectionChangedListener(new ISelectionChangedListener() {
+			public void selectionChanged(SelectionChangedEvent event) {
+				updateModel();	
+			}
+		});
+		viewer.setInput(ResourcesPlugin.getWorkspace());
+		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() {
+		IStructuredSelection selection = (IStructuredSelection)viewer.getSelection();
+		if (!selection.isEmpty()
+		   && selection.getFirstElement() instanceof IContainer) {
+			IContainer container = (IContainer)selection.getFirstElement();
+			GuvWizardModel model = ((IGuvnorWizard)super.getWizard()).getModel();
+			model.setTargetLocation(container.getFullPath().toString());
+			super.getWizard().getContainer().updateButtons();
+		}
+	}
+	
+	class ProjectFilter extends ViewerFilter {
+		@Override
+		public boolean select(Viewer viewer, Object parent, Object element) {
+			return element instanceof IContainer;
+		}
+	}
+}

Deleted: 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	2008-07-03 19:52:20 UTC (rev 20897)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/SelectTargetLocationPage.java	2008-07-03 22:10:23 UTC (rev 20898)
@@ -1,99 +0,0 @@
-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");
-		}
-	}
-}

Added: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/WizardUtils.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/WizardUtils.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/WizardUtils.java	2008-07-03 22:10:23 UTC (rev 20898)
@@ -0,0 +1,33 @@
+package org.guvnor.tools.wizards;
+
+import java.net.URL;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.core.runtime.Platform;
+import org.guvnor.tools.Activator;
+import org.guvnor.tools.GuvnorRepository;
+import org.guvnor.tools.utils.webdav.IWebDavClient;
+import org.guvnor.tools.utils.webdav.WebDavClientFactory;
+import org.guvnor.tools.utils.webdav.WebDavServerCache;
+import org.guvnor.tools.utils.webdav.WebDavSessionAuthenticator;
+
+public class WizardUtils {
+	public static void createGuvnorRepository(GuvWizardModel model) throws Exception {
+		Activator.getLocationManager().addRepository(new GuvnorRepository(model.getRepLocation()));
+		URL serverUrl = new URL(model.getRepLocation());
+		Map<String, String> info = new HashMap<String, String>();
+		info.put("username", model.getUsername());
+		info.put("password", model.getPassword());
+		if (model.shouldSaveAuthInfo()) {
+			Platform.addAuthorizationInfo(serverUrl, "", "basic", info);	
+		} else {
+			IWebDavClient client = WebDavClientFactory.createClient(serverUrl);
+			WebDavServerCache.cacheWebDavClient(serverUrl.toString(), client);
+			WebDavSessionAuthenticator authen = new WebDavSessionAuthenticator();
+			authen.addAuthenticationInfo(serverUrl, "", "basic", info);
+			client.setSessionAuthenticator(authen);
+			client.setSessionAuthentication(true);
+		}
+	}
+}




More information about the jboss-svn-commits mailing list