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

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Tue Jul 15 11:43:32 EDT 2008


Author: john.graham at jboss.org
Date: 2008-07-15 11:43:32 -0400 (Tue, 15 Jul 2008)
New Revision: 21041

Added:
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/.options
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/actions/DeleteAction.java
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/webdav/DebugHttpClient.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/actions/AddAction.java
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/actions/CommitAction.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/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/RepositoryView.java
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/AddResourceWizard.java
Log:
Delete action; refactor actions to accept multiple resources

Added: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/.options
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/.options	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/.options	2008-07-15 15:43:32 UTC (rev 21041)
@@ -0,0 +1 @@
+org.guvnor.tools/debugHttpClient=false
\ No newline at end of file

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-15 15:41:26 UTC (rev 21040)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/META-INF/MANIFEST.MF	2008-07-15 15:43:32 UTC (rev 21041)
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %plugin.name
 Bundle-SymbolicName: org.guvnor.tools;singleton:=true
-Bundle-Version: 0.6.0.200807121723
+Bundle-Version: 0.6.0.200807141651
 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-15 15:41:26 UTC (rev 21040)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/plugin.properties	2008-07-15 15:43:32 UTC (rev 21041)
@@ -27,4 +27,5 @@
 action.popup.showhistory = Show History
 action.popup.compareversion = Compare with Version...
 action.popup.switchversion = Switch to Version...
-action.popup.disconnect = Disconnect
\ No newline at end of file
+action.popup.disconnect = Disconnect
+action.popup.delete = Delete...
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/plugin.xml
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/plugin.xml	2008-07-15 15:41:26 UTC (rev 21040)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/plugin.xml	2008-07-15 15:43:32 UTC (rev 21041)
@@ -105,6 +105,12 @@
             label="%action.popup.disconnect"
             menubarPath="org.guvnor.tools.popupmenu/group1">
       </action>
+      <action class="org.guvnor.tools.actions.DeleteAction"
+              enablesFor="1"
+              id="org.guvnor.tools.actions.deleteaction"
+            label="%action.popup.delete"
+            menubarPath="org.guvnor.tools.popupmenu/group1">
+      </action>
       <action class="org.guvnor.tools.actions.SwitchVersionAction"
               enablesFor="1"
               id="org.guvnor.tools.actions.switchversionaction"

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-15 15:41:26 UTC (rev 21040)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/Activator.java	2008-07-15 15:43:32 UTC (rev 21041)
@@ -6,6 +6,7 @@
 import org.eclipse.core.resources.IWorkspace;
 import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Platform;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.ui.plugin.AbstractUIPlugin;
@@ -130,4 +131,8 @@
 	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";
+	
+	public boolean useDebugHttpClient() {
+		return Boolean.parseBoolean(Platform.getDebugOption("org.guvnor.tools/debugHttpClient"));
+	}
 }

Modified: 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	2008-07-15 15:41:26 UTC (rev 21040)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/actions/AddAction.java	2008-07-15 15:43:32 UTC (rev 21041)
@@ -1,5 +1,7 @@
 package org.guvnor.tools.actions;
 
+import java.util.Iterator;
+
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.jface.action.IAction;
@@ -10,13 +12,14 @@
 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;
 import org.guvnor.tools.wizards.AddResourceWizard;
 
 public class AddAction implements IObjectActionDelegate {
 	
-	private IStructuredSelection sel;
+	private IStructuredSelection selectedItems;
 	private IWorkbenchPart targetPart;
 	
 	/**
@@ -37,9 +40,9 @@
 	 * @see IActionDelegate#run(IAction)
 	 */
 	public void run(IAction action) {
-		assert(targetPart != null && sel != null);
+		assert(targetPart != null && selectedItems != null);
 		AddResourceWizard wiz = new AddResourceWizard();
-		wiz.init(Activator.getDefault().getWorkbench(), sel);
+		wiz.init(Activator.getDefault().getWorkbench(), selectedItems);
 		WizardDialog dialog = new WizardDialog(targetPart.getSite().getShell(), wiz);
 	    dialog.create();
 	    if (dialog.open() == WizardDialog.OK) {
@@ -50,21 +53,32 @@
 	/**
 	 * @see IActionDelegate#selectionChanged(IAction, ISelection)
 	 */
+	@SuppressWarnings("unchecked")
 	public void selectionChanged(IAction action, ISelection selection) {
 		// Reset state to default
-		sel = null;
-		action.setEnabled(false);
+		selectedItems = null;
+		action.setEnabled(true);
 		// See if we should enable for the selection
 		try {
 			if (selection instanceof IStructuredSelection) {
-				sel = (IStructuredSelection)selection;
-				if (sel.getFirstElement() instanceof IFile) {
-					IFile mdFile = GuvnorMetadataUtils.findGuvnorMetadata((IFile)sel.getFirstElement());
-					if (mdFile == null) {
-						action.setEnabled(true);
+				IStructuredSelection sel = (IStructuredSelection)selection;
+				for (Iterator<Object> it = sel.iterator(); it.hasNext();) {
+					Object oneSelection = it.next();
+					if (oneSelection instanceof IFile) {
+						GuvnorMetadataProps props = GuvnorMetadataUtils.
+														getGuvnorMetadata((IFile)oneSelection);
+						if (props != null) {
+							action.setEnabled(false);
+							break;
+						}
 					}
 				}
-			} 
+				if (action.isEnabled()) {
+					selectedItems = sel;
+				}
+			} else {
+				action.setEnabled(false);
+			}
 		} 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/CommitAction.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/actions/CommitAction.java	2008-07-15 15:41:26 UTC (rev 21040)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/actions/CommitAction.java	2008-07-15 15:43:32 UTC (rev 21041)
@@ -1,6 +1,7 @@
 package org.guvnor.tools.actions;
 
 import java.net.URL;
+import java.util.Iterator;
 
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.runtime.IStatus;
@@ -23,8 +24,7 @@
 
 public class CommitAction implements IObjectActionDelegate {
 	
-	private IFile selectedFile;
-	private GuvnorMetadataProps props;
+	private IStructuredSelection selectedItems;
 	
 	/**
 	 * Constructor for Action1.
@@ -42,12 +42,20 @@
 	/**
 	 * @see IActionDelegate#run(IAction)
 	 */
+	@SuppressWarnings("unchecked")
 	public void run(IAction action) {
-		if (selectedFile == null
-		   || props == null) {
-			return;
+		assert(selectedItems != null);
+		for (Iterator it = selectedItems.iterator(); it.hasNext();) {
+			Object oneSelection = it.next();
+			if (oneSelection instanceof IFile) {
+				processCommit((IFile)oneSelection);
+			}
 		}
+	}
+
+	private void processCommit(IFile selectedFile) {
 		try {
+			GuvnorMetadataProps props = GuvnorMetadataUtils.getGuvnorMetadata(selectedFile);
 			IWebDavClient client = WebDavServerCache.getWebDavClient(props.getRepository());
 			if (client == null) {
 				client = WebDavClientFactory.createClient(new URL(props.getRepository()));
@@ -77,29 +85,36 @@
 			Activator.getDefault().writeLog(IStatus.ERROR, e.getMessage(), e);
 		}
 	}
-
+	
 	/**
 	 * @see IActionDelegate#selectionChanged(IAction, ISelection)
 	 */
+	@SuppressWarnings("unchecked")
 	public void selectionChanged(IAction action, ISelection selection) {
 		// Reset state to default
-		selectedFile = null;
-		props = null;
-		action.setEnabled(false);
+		selectedItems = null;
+		action.setEnabled(true);
 		// See if we should enable for the selection
 		try {
 			if (selection instanceof IStructuredSelection) {
 				IStructuredSelection sel = (IStructuredSelection)selection;
-				if (sel.getFirstElement() instanceof IFile) {
-					IFile theFile = (IFile)sel.getFirstElement();
-					props = GuvnorMetadataUtils.getGuvnorMetadata(theFile);
-					if (props != null
-					   && !GuvnorMetadataUtils.isGuvnorResourceCurrent(theFile)) {
-						selectedFile = theFile;
-						action.setEnabled(true);
+				for (Iterator<Object> it = sel.iterator(); it.hasNext();) {
+					Object oneSelection = it.next();
+					if (oneSelection instanceof IFile) {
+						GuvnorMetadataProps props = GuvnorMetadataUtils.
+														getGuvnorMetadata((IFile)oneSelection);
+						if (props == null) {
+							action.setEnabled(false);
+							break;
+						}
 					}
 				}
-			} 
+				if (action.isEnabled()) {
+					selectedItems = sel;
+				}
+			} else {
+				action.setEnabled(false);
+			}
 		} catch (Exception e) {
 			Activator.getDefault().writeLog(IStatus.ERROR, e.getMessage(), e);
 		}

Added: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/actions/DeleteAction.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/actions/DeleteAction.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/actions/DeleteAction.java	2008-07-15 15:43:32 UTC (rev 21041)
@@ -0,0 +1,121 @@
+package org.guvnor.tools.actions;
+
+import java.net.URL;
+import java.util.Iterator;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.ui.IActionDelegate;
+import org.eclipse.ui.IObjectActionDelegate;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.webdav.IResponse;
+import org.guvnor.tools.Activator;
+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;
+import org.guvnor.tools.utils.webdav.WebDavException;
+import org.guvnor.tools.utils.webdav.WebDavServerCache;
+
+public class DeleteAction implements IObjectActionDelegate {
+	
+	private IStructuredSelection selectedItems;
+	
+	/**
+	 * Constructor for Action1.
+	 */
+	public DeleteAction() {
+		super();
+	}
+
+	/**
+	 * @see IObjectActionDelegate#setActivePart(IAction, IWorkbenchPart)
+	 */
+	public void setActivePart(IAction action, IWorkbenchPart targetPart) {
+	}
+
+	/**
+	 * @see IActionDelegate#run(IAction)
+	 */
+	@SuppressWarnings("unchecked")
+	public void run(IAction action) {
+		if (selectedItems == null) {
+			return;
+		}
+		for (Iterator it = selectedItems.iterator(); it.hasNext();) {
+			Object oneItem = it.next();
+			if (oneItem instanceof IFile) {
+				processDelete((IFile)oneItem);
+			}
+		}
+		DisconnectAction dsAction = new DisconnectAction();
+		dsAction.disconnect(selectedItems);
+		PlatformUtils.refreshRepositoryView();
+	}
+
+	private void processDelete(IFile selectedFile) {
+		try {
+			GuvnorMetadataProps props = GuvnorMetadataUtils.getGuvnorMetadata(selectedFile);
+			assert(props != null);
+			IWebDavClient client = WebDavServerCache.getWebDavClient(props.getRepository());
+			if (client == null) {
+				client = WebDavClientFactory.createClient(new URL(props.getRepository()));
+				WebDavServerCache.cacheWebDavClient(props.getRepository(), client);
+			}
+			try {
+				client.deleteResource(props.getFullpath());
+			} catch (WebDavException wde) {
+				if (wde.getErrorCode() != IResponse.SC_UNAUTHORIZED) {
+					// If not an authentication failure, we don't know what to do with it
+					throw wde;
+				}
+				boolean retry = PlatformUtils.getInstance().
+									authenticateForServer(props.getRepository(), client); 
+				if (retry) {
+					client.deleteResource(props.getFullpath());
+				}
+			}
+			
+		} catch (Exception e) {
+			Activator.getDefault().writeLog(IStatus.ERROR, e.getMessage(), e);
+		}
+	}
+	
+	/**
+	 * @see IActionDelegate#selectionChanged(IAction, ISelection)
+	 */
+	@SuppressWarnings("unchecked")
+	public void selectionChanged(IAction action, ISelection selection) {
+		// Reset state to default
+		selectedItems = null;
+		action.setEnabled(true);
+		// See if we should enable for the selection
+		try {
+			if (selection instanceof IStructuredSelection) {
+				IStructuredSelection sel = (IStructuredSelection)selection;
+				for (Iterator<Object> it = sel.iterator(); it.hasNext();) {
+					Object oneSelection = it.next();
+					if (oneSelection instanceof IFile) {
+						GuvnorMetadataProps props = GuvnorMetadataUtils.
+														getGuvnorMetadata((IFile)oneSelection);
+						if (props == null) {
+							action.setEnabled(false);
+							break;
+						}
+					}
+				}
+				if (action.isEnabled()) {
+					selectedItems = sel;
+				}
+			} else {
+				action.setEnabled(false);
+			}
+		} 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-15 15:41:26 UTC (rev 21040)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/actions/DisconnectAction.java	2008-07-15 15:43:32 UTC (rev 21041)
@@ -1,7 +1,10 @@
 package org.guvnor.tools.actions;
 
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
 import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IResource;
 import org.eclipse.core.resources.IWorkspace;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IStatus;
@@ -18,7 +21,7 @@
 
 public class DisconnectAction implements IObjectActionDelegate {
 	
-	private IFile selectedFile;
+	private IStructuredSelection selectedItems;
 	
 	/**
 	 * Constructor for Action1.
@@ -37,42 +40,64 @@
 	 * @see IActionDelegate#run(IAction)
 	 */
 	public void run(IAction action) {
-		if (selectedFile == null) {
+		if (selectedItems == null) {
 			return;
 		}
-		IFile mdFile = GuvnorMetadataUtils.findGuvnorMetadata(selectedFile);
-		if (mdFile == null) {
-			return;
+		disconnect(selectedItems);
+	}
+	
+	@SuppressWarnings("unchecked")
+	public void disconnect(IStructuredSelection files) {
+		List<IFile> toDelete = new ArrayList<IFile>();
+		for (Iterator<Object> it = files.iterator(); it.hasNext();) {
+			Object oneSelection = it.next();
+			if (oneSelection instanceof IFile) {
+				IFile mdFile = GuvnorMetadataUtils.findGuvnorMetadata((IFile)oneSelection);
+				if (mdFile != null) {
+					toDelete.add(mdFile);
+				}
+			}
 		}
 		try {
-			IWorkspace ws = mdFile.getWorkspace();
-			ws.delete(new IResource[] { mdFile }, true, null);
+			IFile[] mdFiles = new IFile[toDelete.size()];
+			toDelete.toArray(mdFiles);
+			IWorkspace ws = Activator.getDefault().getWorkspace();
+			ws.delete(mdFiles, true, null);
 			PlatformUtils.updateDecoration();
 		} catch (CoreException e) {
 			Activator.getDefault().writeLog(IStatus.ERROR, e.getMessage(), e);
 		}
 	}
-
+	
 	/**
 	 * @see IActionDelegate#selectionChanged(IAction, ISelection)
 	 */
+	@SuppressWarnings("unchecked")
 	public void selectionChanged(IAction action, ISelection selection) {
 		// Reset state to default
-		selectedFile = null;
-		action.setEnabled(false);
+		selectedItems = null;
+		action.setEnabled(true);
 		// See if we should enable for the selection
 		try {
 			if (selection instanceof IStructuredSelection) {
 				IStructuredSelection sel = (IStructuredSelection)selection;
-				if (sel.getFirstElement() instanceof IFile) {
-					GuvnorMetadataProps props = GuvnorMetadataUtils.
-													getGuvnorMetadata((IFile)sel.getFirstElement());
-					if (props != null) {
-						selectedFile = (IFile)sel.getFirstElement();
-						action.setEnabled(true);
+				for (Iterator<Object> it = sel.iterator(); it.hasNext();) {
+					Object oneSelection = it.next();
+					if (oneSelection instanceof IFile) {
+						GuvnorMetadataProps props = GuvnorMetadataUtils.
+														getGuvnorMetadata((IFile)oneSelection);
+						if (props == null) {
+							action.setEnabled(false);
+							break;
+						}
 					}
 				}
-			} 
+				if (action.isEnabled()) {
+					selectedItems = sel;
+				}
+			} else {
+				action.setEnabled(false);
+			}
 		} 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/UpdateAction.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/actions/UpdateAction.java	2008-07-15 15:41:26 UTC (rev 21040)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/actions/UpdateAction.java	2008-07-15 15:43:32 UTC (rev 21041)
@@ -3,6 +3,7 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.URL;
+import java.util.Iterator;
 
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.runtime.IStatus;
@@ -25,8 +26,7 @@
 
 public class UpdateAction implements IObjectActionDelegate {
 	
-	private IFile selectedFile;
-	private GuvnorMetadataProps props;
+	private IStructuredSelection selectedItems;
 	
 	/**
 	 * Constructor for Action1.
@@ -45,13 +45,21 @@
 	 * @throws Exception 
 	 * @see IActionDelegate#run(IAction)
 	 */
+	@SuppressWarnings("unchecked")
 	public void run(IAction action) {
-		if (selectedFile == null
-		   || props == null) {
-			return;
+		assert(selectedItems != null);
+		for (Iterator it = selectedItems.iterator(); it.hasNext();) {
+			Object oneItem = it.next();
+			if (oneItem instanceof IFile) {
+				processUpdate((IFile)oneItem);
+			}
 		}
+	}
+	
+	private void processUpdate(IFile selectedFile) {
 		IResponse response = null;
 		try {
+			GuvnorMetadataProps props = GuvnorMetadataUtils.getGuvnorMetadata(selectedFile);
 			IWebDavClient client = WebDavServerCache.getWebDavClient(props.getRepository());
 			if (client == null) {
 				client = WebDavClientFactory.createClient(new URL(props.getRepository()));
@@ -95,27 +103,36 @@
 			}
 		}
 	}
-
+	
 	/**
 	 * @see IActionDelegate#selectionChanged(IAction, ISelection)
 	 */
+	@SuppressWarnings("unchecked")
 	public void selectionChanged(IAction action, ISelection selection) {
 		// Reset state to default
-		selectedFile = null;
-		props = null;
-		action.setEnabled(false);
+		selectedItems = null;
+		action.setEnabled(true);
 		// See if we should enable for the selection
 		try {
 			if (selection instanceof IStructuredSelection) {
 				IStructuredSelection sel = (IStructuredSelection)selection;
-				if (sel.getFirstElement() instanceof IFile) {
-					props = GuvnorMetadataUtils.getGuvnorMetadata((IFile)sel.getFirstElement());
-					if (props != null) {
-						selectedFile = (IFile)sel.getFirstElement();
-						action.setEnabled(true);
+				for (Iterator<Object> it = sel.iterator(); it.hasNext();) {
+					Object oneSelection = it.next();
+					if (oneSelection instanceof IFile) {
+						GuvnorMetadataProps props = GuvnorMetadataUtils.
+														getGuvnorMetadata((IFile)oneSelection);
+						if (props == null) {
+							action.setEnabled(false);
+							break;
+						}
 					}
 				}
-			} 
+				if (action.isEnabled()) {
+					selectedItems = sel;
+				}
+			} else {
+				action.setEnabled(false);
+			}
 		} 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/webdav/DebugHttpClient.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/webdav/DebugHttpClient.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/webdav/DebugHttpClient.java	2008-07-15 15:43:32 UTC (rev 21041)
@@ -0,0 +1,18 @@
+package org.guvnor.tools.utils.webdav;
+
+import java.io.IOException;
+
+import org.eclipse.webdav.http.client.HttpClient;
+import org.eclipse.webdav.http.client.Request;
+import org.eclipse.webdav.http.client.Response;
+
+public class DebugHttpClient extends HttpClient {
+
+	@Override
+	public Response invoke(Request request) throws IOException {
+		System.out.println(request.toString());
+		Response response = super.invoke(request);
+		System.out.println(response.toString());
+		return response;
+	}
+}

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-15 15:41:26 UTC (rev 21040)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/webdav/IWebDavClient.java	2008-07-15 15:43:32 UTC (rev 21041)
@@ -113,4 +113,11 @@
 	 * @throws Exception Various WebDav errors can occur (See IResponse for details)
 	 */
 	public IResponse getResourceVersions(String resource) throws Exception;
+	
+	/**
+	 * Deletes a resource in the repository.
+	 * @param resource The resource to delete
+	 * @throws Exception Various WebDav errors can occur (See IResponse for details)
+	 */
+	public void deleteResource(String resource) throws Exception;
 }

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-15 15:41:26 UTC (rev 21040)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/webdav/WebDavClient.java	2008-07-15 15:43:32 UTC (rev 21041)
@@ -34,7 +34,12 @@
 	 * @param serverUrl The WebDav repository location (server)
 	 */
 	/** package */ WebDavClient(URL serverUrl) {
-		HttpClient httpClient = new HttpClient();
+		HttpClient httpClient = null;
+		if (Activator.getDefault().useDebugHttpClient()) {
+			httpClient = new DebugHttpClient();
+		} else {
+			httpClient = new HttpClient();
+		}
 		platformAuthenticator =  new WebDavAuthenticator(serverUrl);
 		httpClient.setAuthenticator(platformAuthenticator);
 		client = new RemoteDAVClient(new WebDAVFactory(), httpClient);
@@ -323,6 +328,29 @@
 		return getResourceInputStream(apiVer);
 	}
 	
+	/*
+	 * (non-Javadoc)
+	 * @see org.guvnor.tools.utils.webdav.IWebDavClient#deleteResource(java.lang.String)
+	 */
+	public void deleteResource(String resource) throws Exception {
+		IResponse response = null;
+		try {
+			ILocator locator = WebDAVFactory.locatorFactory.newLocator(resource);
+			response = client.delete(locator, createContext());
+			if (response.getStatusCode() != IResponse.SC_NO_CONTENT
+			   && response.getStatusCode() != IResponse.SC_OK) {
+				throw new WebDavException(response);
+			}
+		} finally {
+			if (response != null) {
+				response.close();
+			}
+		}
+	}
+	
+	/**
+	 * Converts the WedDav resource path to a Guvnor "API path."
+	 */
 	private String changeToAPICall(String path) {
 		return path.replaceFirst("/webdav/", "/api/");
 	}

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-15 15:41:26 UTC (rev 21040)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/views/RepositoryView.java	2008-07-15 15:43:32 UTC (rev 21041)
@@ -46,6 +46,7 @@
 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.ResourceProperties;
 import org.guvnor.tools.utils.webdav.WebDavClientFactory;
 import org.guvnor.tools.utils.webdav.WebDavServerCache;
 import org.guvnor.tools.views.model.TreeObject;
@@ -168,18 +169,27 @@
 		File metaFile = GuvnorMetadataUtils.
 							getGuvnorMetadataFile(metaPath.toOSString(), node.getName());
 		metaFile.deleteOnExit();
-		GuvnorMetadataProps mdProps = 
-			new GuvnorMetadataProps(node.getName(), 
-					               node.getGuvnorRepository().getLocation(),
-				                   node.getFullPath(), 
-				                   node.getResourceProps().getLastModifiedDate(),
-				                   node.getResourceProps().getRevision());
-		GuvnorMetadataUtils.writeGuvnorMetadataProps(metaFile, mdProps);
+		GuvnorMetadataUtils.writeGuvnorMetadataProps(metaFile, getGuvnorMetadataProps(node));
 		res.add(metaFile.getAbsolutePath());
 		
 		return res;
 	}
 	
+	private GuvnorMetadataProps getGuvnorMetadataProps(TreeObject node) throws Exception {
+		GuvnorRepository rep = node.getGuvnorRepository();
+		IWebDavClient webdav = WebDavServerCache.getWebDavClient(rep.getLocation());
+		if (webdav == null) {
+			webdav = WebDavClientFactory.createClient(new URL(rep.getLocation()));
+			WebDavServerCache.cacheWebDavClient(rep.getLocation(), webdav);
+		}
+		ResourceProperties props  = webdav.queryProperties(node.getFullPath());
+		return new GuvnorMetadataProps(node.getName(), 
+	                                  node.getGuvnorRepository().getLocation(),
+                                      node.getFullPath(), 
+                                      props.getLastModifiedDate(),
+                                      props.getRevision());
+	}
+	
 	private void hookContextMenu() {
 		MenuManager menuMgr = new MenuManager("#PopupMenu");
 		menuMgr.setRemoveAllWhenShown(true);

Modified: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/AddResourceWizard.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/AddResourceWizard.java	2008-07-15 15:41:26 UTC (rev 21040)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/AddResourceWizard.java	2008-07-15 15:43:32 UTC (rev 21041)
@@ -1,6 +1,7 @@
 package org.guvnor.tools.wizards;
 
 import java.net.URL;
+import java.util.Iterator;
 
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.runtime.IStatus;
@@ -22,12 +23,12 @@
 
 public class AddResourceWizard extends Wizard implements INewWizard, IGuvnorWizard {
 	
-	private IFile selectedFile;
-	
 	private SelectGuvnorRepPage		selectRepPage;
 	private GuvnorMainConfigPage 	mainConfigPage;
 	private SelectGuvnorFolderPage 	selectFolderPage;
 	
+	private IStructuredSelection 	selectedItems;
+	
 	private GuvWizardModel model;
 	
 	public AddResourceWizard() {
@@ -39,12 +40,7 @@
 	}
 	
 	public void init(IWorkbench workbench, IStructuredSelection selection) { 
-		if (selection instanceof IStructuredSelection) {
-			IStructuredSelection sel = (IStructuredSelection)selection;
-			if (sel.getFirstElement() instanceof IFile) {
-				selectedFile = (IFile)sel.getFirstElement();
-			}
-		}
+		selectedItems = selection;
 	}
 	
 	@Override
@@ -82,7 +78,7 @@
 		return null;
 	}
 	
-	private void setDuplicateFileError() {
+	private void setDuplicateFileError(IFile selectedFile) {
 		selectFolderPage.setErrorMessage(selectedFile.getName() +
 				                        " already exists in folder " +
 				                        model.getTargetLocation());
@@ -90,9 +86,7 @@
 		super.getContainer().updateButtons();
 	}
 	
-	@Override
-	public boolean performFinish() {
-		assert(selectedFile != null);
+	private boolean processSelectedFile(IFile selectedFile) {
 		boolean res = false;
 		try {
 			String fullPath = model.getTargetLocation() + selectedFile.getName();
@@ -104,7 +98,7 @@
 			try {
 				res = client.createResource(fullPath, selectedFile.getContents(), false);
 				if (!res) {
-					setDuplicateFileError();
+					setDuplicateFileError(selectedFile);
 				}
 			} catch (WebDavException wde) {
 				if (wde.getErrorCode() != IResponse.SC_UNAUTHORIZED) {
@@ -116,7 +110,7 @@
 				if (retry) {
 					res = client.createResource(fullPath, selectedFile.getContents());
 					if (!res) {
-						setDuplicateFileError();
+						setDuplicateFileError(selectedFile);
 					}
 				}
 			}
@@ -137,7 +131,24 @@
 		return res;
 	}
 	
+	@SuppressWarnings("unchecked")
 	@Override
+	public boolean performFinish() {
+		boolean res = true;
+		assert(selectedItems != null);
+		for (Iterator it = selectedItems.iterator(); it.hasNext();) {
+			Object oneItem = it.next();
+			if (oneItem instanceof IFile) {
+				res = processSelectedFile((IFile)oneItem);
+				if (!res) {
+					break;
+				}
+			}
+		}
+		return res;
+	}
+	
+	@Override
 	public boolean canFinish() {	
 		return model.getRepLocation() != null 
 		       && model.getTargetLocation() != null;




More information about the jboss-svn-commits mailing list