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

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Sep 3 16:23:41 EDT 2008


Author: john.graham at jboss.org
Date: 2008-09-03 16:23:40 -0400 (Wed, 03 Sep 2008)
New Revision: 22361

Added:
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/ResourceHistorySorter.java
Modified:
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/META-INF/MANIFEST.MF
   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/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/VersionChooserDialog.java
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/views/RepositoryView.java
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/views/ResourceHistoryView.java
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/AddResourceWizard.java
Log:
Enhanced drag and drop support

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-09-03 15:56:39 UTC (rev 22360)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/META-INF/MANIFEST.MF	2008-09-03 20:23:40 UTC (rev 22361)
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %plugin.name
 Bundle-SymbolicName: org.guvnor.tools;singleton:=true
-Bundle-Version: 0.8.0.200809021730
+Bundle-Version: 0.9.0.200809031608
 Bundle-Activator: org.guvnor.tools.Activator
 Bundle-Vendor: %plugin.provider
 Bundle-Localization: plugin

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-09-03 15:56:39 UTC (rev 22360)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/actions/CommitAction.java	2008-09-03 20:23:40 UTC (rev 22361)
@@ -1,33 +1,20 @@
 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.dialogs.MessageDialog;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.ui.IObjectActionDelegate;
 import org.eclipse.ui.IWorkbenchPart;
-import org.eclipse.webdav.IResponse;
-import org.guvnor.tools.Activator;
-import org.guvnor.tools.Messages;
 import org.guvnor.tools.utils.ActionUtils;
-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.ResourceProperties;
-import org.guvnor.tools.utils.webdav.WebDavClientFactory;
-import org.guvnor.tools.utils.webdav.WebDavException;
-import org.guvnor.tools.utils.webdav.WebDavServerCache;
 
 public class CommitAction implements IObjectActionDelegate {
 	
 	private IStructuredSelection selectedItems;
-	private IWorkbenchPart targetPart;
 	
 	/**
 	 * Constructor for Action1.
@@ -39,9 +26,7 @@
 	/**
 	 * @see IObjectActionDelegate#setActivePart(IAction, IWorkbenchPart)
 	 */
-	public void setActivePart(IAction action, IWorkbenchPart targetPart) {
-		this.targetPart = targetPart;
-	}
+	public void setActivePart(IAction action, IWorkbenchPart targetPart) { }
 
 	/*
 	 * @see IActionDelegate#run(IAction)
@@ -52,62 +37,11 @@
 		for (Iterator it = selectedItems.iterator(); it.hasNext();) {
 			Object oneSelection = it.next();
 			if (oneSelection instanceof IFile) {
-				processCommit((IFile)oneSelection);
+				GuvnorMetadataUtils.commitFileChanges((IFile)oneSelection);
 			}
 		}
 		PlatformUtils.updateDecoration();
 	}
-
-	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()));
-				WebDavServerCache.cacheWebDavClient(props.getRepository(), client);
-			}
-			ResourceProperties remoteProps = null;
-			try {
-				remoteProps = client.queryProperties(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) {
-					remoteProps = client.queryProperties(props.getFullpath());
-				}
-			}
-			if (remoteProps == null) {
-				throw new Exception("Could not retrieve server version of " + props.getFullpath()); //$NON-NLS-1$
-			}
-			// Check to make sure that the version in the repository is the same as the base
-			// version for the local copy
-			boolean proceed = true;
-			if (!props.getRevision().equals(remoteProps.getRevision())) {
-				String msg = Messages.getString("overwrite.confirmation.prefix") + selectedFile.getName() + Messages.getString("overwrite.confirmation.infix") + //$NON-NLS-1$ //$NON-NLS-2$
-				             remoteProps.getRevision() + Messages.getString("overwrite.confirmation.suffix") + //$NON-NLS-1$
-				             props.getRevision() + 
-				             Messages.getString("overwrite.confirmation.question"); //$NON-NLS-1$
-				proceed = MessageDialog.openQuestion(targetPart.getSite().getShell(), 
-						                            Messages.getString("overwrite.confirmation.caption"), msg); //$NON-NLS-1$
-						
-			}
-			if (proceed) {
-				client.putResource(props.getFullpath(), selectedFile.getContents());
-				GuvnorMetadataUtils.markCurrentGuvnorResource(selectedFile);
-				ResourceProperties resProps = client.queryProperties(props.getFullpath());
-				GuvnorMetadataProps mdProps = GuvnorMetadataUtils.getGuvnorMetadata(selectedFile);
-				mdProps.setVersion(resProps.getLastModifiedDate());
-				mdProps.setRevision(resProps.getRevision());
-				GuvnorMetadataUtils.setGuvnorMetadataProps(selectedFile.getFullPath(), mdProps);
-			}
-		} catch (Exception e) {
-			Activator.getDefault().displayError(IStatus.ERROR, e.getMessage(), e);
-		}
-	}
 	
 	/*
 	 * @see IActionDelegate#selectionChanged(IAction, ISelection)

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-09-03 15:56:39 UTC (rev 22360)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/GuvnorMetadataUtils.java	2008-09-03 20:23:40 UTC (rev 22361)
@@ -4,6 +4,7 @@
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.OutputStream;
+import java.net.URL;
 import java.util.Enumeration;
 import java.util.NoSuchElementException;
 import java.util.Properties;
@@ -15,9 +16,20 @@
 import org.eclipse.core.resources.IWorkspaceRoot;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Path;
 import org.eclipse.core.runtime.QualifiedName;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.webdav.IResponse;
 import org.guvnor.tools.Activator;
+import org.guvnor.tools.Messages;
+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.WebDavException;
+import org.guvnor.tools.utils.webdav.WebDavServerCache;
 import org.guvnor.tools.views.model.ResourceHistoryEntry;
 
 /**
@@ -44,6 +56,124 @@
 	}
 	
 	/**
+	 * Adds a resource to Guvnor.
+	 * @param repLoc The location of the Guvnor repository
+	 * @param targetLoc The location in Guvnor to add the resource
+	 * @param selectedFile The resource to add
+	 * @return true if the resource is added, false if there is already a resource
+	 *         with the same name in the given location.
+	 */
+	public static boolean addResourceToGuvnor(String repLoc, 
+											 String targetLoc, 
+			                                 IFile selectedFile) {
+		boolean res = false;
+		try {
+			String fullPath = targetLoc + selectedFile.getName();
+			IWebDavClient client = WebDavServerCache.getWebDavClient(repLoc);
+			if (client == null) {
+				client = WebDavClientFactory.createClient(new URL(repLoc));
+				WebDavServerCache.cacheWebDavClient(repLoc, client);
+			}
+			try {
+//				res = client.createResource(fullPath, selectedFile.getContents(), false);
+				// Hack: When creating a file, if the actual contents are passed first,
+				// the client hangs for about 20 seconds when closing the InputStream.
+				// Don't know why...
+				// But, if the file is created with empty contents, and then the contents
+				// set, the operation is fast (less than a couple of seconds)
+				res = client.createResource(fullPath, new ByteArrayInputStream(new byte[0]), false);
+				if (res) {
+					client.putResource(fullPath, selectedFile.getContents());
+				}
+			} 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(repLoc, client); 
+				if (retry) {
+//					res = client.createResource(fullPath, selectedFile.getContents(), false);
+					// See Hack note immediately above...
+					res = client.createResource(fullPath, new ByteArrayInputStream(new byte[0]), false);
+					if (res) {
+						client.putResource(fullPath, selectedFile.getContents());
+					}
+				}
+			}
+			if (res) {
+				GuvnorMetadataUtils.markCurrentGuvnorResource(selectedFile);
+				ResourceProperties resProps = client.queryProperties(fullPath);
+				GuvnorMetadataProps mdProps = 
+						new GuvnorMetadataProps(selectedFile.getName(),
+								               repLoc,
+					                           fullPath, resProps.getLastModifiedDate(),
+					                           resProps.getRevision());
+				GuvnorMetadataUtils.setGuvnorMetadataProps(selectedFile.getFullPath(), mdProps);
+			}
+		} catch (Exception e) {
+			Activator.getDefault().displayError(IStatus.ERROR, e.getMessage(), e);
+		}
+		return res;
+	}
+	
+	/**
+	 * Commits changes to Guvnor.
+	 * @param selectedFile The Guvnor controlled file with pending changes
+	 */
+	public static void commitFileChanges(IFile selectedFile) {
+		try {
+			GuvnorMetadataProps props = GuvnorMetadataUtils.getGuvnorMetadata(selectedFile);
+			IWebDavClient client = WebDavServerCache.getWebDavClient(props.getRepository());
+			if (client == null) {
+				client = WebDavClientFactory.createClient(new URL(props.getRepository()));
+				WebDavServerCache.cacheWebDavClient(props.getRepository(), client);
+			}
+			ResourceProperties remoteProps = null;
+			try {
+				remoteProps = client.queryProperties(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) {
+					remoteProps = client.queryProperties(props.getFullpath());
+				}
+			}
+			if (remoteProps == null) {
+				throw new Exception("Could not retrieve server version of " + props.getFullpath()); //$NON-NLS-1$
+			}
+			// Check to make sure that the version in the repository is the same as the base
+			// version for the local copy
+			boolean proceed = true;
+			if (!props.getRevision().equals(remoteProps.getRevision())) {
+				String msg = Messages.getString("overwrite.confirmation.prefix") + selectedFile.getName() + Messages.getString("overwrite.confirmation.infix") + //$NON-NLS-1$ //$NON-NLS-2$
+				             remoteProps.getRevision() + Messages.getString("overwrite.confirmation.suffix") + //$NON-NLS-1$
+				             props.getRevision() + 
+				             Messages.getString("overwrite.confirmation.question"); //$NON-NLS-1$
+				Display display = PlatformUI.getWorkbench().getDisplay();
+				proceed = MessageDialog.openQuestion(display.getActiveShell(), 
+						                            Messages.getString("overwrite.confirmation.caption"), msg); //$NON-NLS-1$
+						
+			}
+			if (proceed) {
+				client.putResource(props.getFullpath(), selectedFile.getContents());
+				GuvnorMetadataUtils.markCurrentGuvnorResource(selectedFile);
+				ResourceProperties resProps = client.queryProperties(props.getFullpath());
+				GuvnorMetadataProps mdProps = GuvnorMetadataUtils.getGuvnorMetadata(selectedFile);
+				mdProps.setVersion(resProps.getLastModifiedDate());
+				mdProps.setRevision(resProps.getRevision());
+				GuvnorMetadataUtils.setGuvnorMetadataProps(selectedFile.getFullPath(), mdProps);
+			}
+		} catch (Exception e) {
+			Activator.getDefault().displayError(IStatus.ERROR, e.getMessage(), e);
+		}
+	}
+	
+	/**
 	 * Finds the local Guvnor metadata file associated with a given resource.
 	 * @param resource The resource path to locate metadata for.
 	 * @return The metadata file for the given resource, null if metadata is not found.

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-09-03 15:56:39 UTC (rev 22360)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/PlatformUtils.java	2008-09-03 20:23:40 UTC (rev 22361)
@@ -4,8 +4,10 @@
 import java.util.HashMap;
 import java.util.Map;
 
+import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IStorage;
 import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Path;
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.jface.dialogs.MessageDialog;
@@ -55,6 +57,16 @@
 		return instance;
 	}
 	
+	/**
+	 * Resolves a file system location to an Eclipse workspace resource.
+	 * @param location The file system location
+	 * @return The Eclipse <code>IFile</code>, null if not found
+	 */
+	public static IFile getResourceFromFSPath(String location) {
+		return Activator.getDefault().getWorkspace().
+				getRoot().getFileForLocation(new Path(location));
+	}
+	
 	public static Composite createComposite(Composite parent, int numColumns) {
 		Composite composite = new Composite(parent, SWT.NULL);
 		

Added: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/ResourceHistorySorter.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/ResourceHistorySorter.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/ResourceHistorySorter.java	2008-09-03 20:23:40 UTC (rev 22361)
@@ -0,0 +1,25 @@
+package org.guvnor.tools.utils;
+
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerSorter;
+import org.guvnor.tools.views.model.ResourceHistoryEntry;
+
+/**
+ * Sorts resource versions based on revision number.
+ * @author jgraham
+ */
+public class ResourceHistorySorter extends ViewerSorter {
+
+	@Override
+	public int compare(Viewer viewer, Object e1, Object e2) {
+		if (e1 instanceof ResourceHistoryEntry
+		   && e2 instanceof ResourceHistoryEntry) {
+			ResourceHistoryEntry entry1 = (ResourceHistoryEntry)e1;
+			ResourceHistoryEntry entry2 = (ResourceHistoryEntry)e2;
+			return Integer.parseInt(entry2.getRevision()) - Integer.parseInt(entry1.getRevision());
+		} else {
+			return super.compare(viewer, e1, e2);
+		}
+	}
+	
+}


Property changes on: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/ResourceHistorySorter.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Modified: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/VersionChooserDialog.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/VersionChooserDialog.java	2008-09-03 15:56:39 UTC (rev 22360)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/VersionChooserDialog.java	2008-09-03 20:23:40 UTC (rev 22361)
@@ -47,6 +47,7 @@
 		
 		viewer.setContentProvider(new ResourceHistoryContentProvider(entries));
 		viewer.setLabelProvider(new ResourceHistoryLabelProvider());
+		viewer.setSorter(new ResourceHistorySorter());
 		viewer.setInput(this);
 		viewer.addSelectionChangedListener(new ISelectionChangedListener() {
 			public void selectionChanged(SelectionChangedEvent event) {

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-09-03 15:56:39 UTC (rev 22360)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/views/RepositoryView.java	2008-09-03 20:23:40 UTC (rev 22361)
@@ -8,6 +8,7 @@
 import java.util.ArrayList;
 import java.util.List;
 
+import org.eclipse.core.resources.IFile;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Path;
@@ -23,6 +24,7 @@
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.ViewerDropAdapter;
 import org.eclipse.jface.viewers.ViewerSorter;
 import org.eclipse.jface.wizard.WizardDialog;
 import org.eclipse.swt.SWT;
@@ -31,6 +33,7 @@
 import org.eclipse.swt.dnd.DragSourceListener;
 import org.eclipse.swt.dnd.FileTransfer;
 import org.eclipse.swt.dnd.Transfer;
+import org.eclipse.swt.dnd.TransferData;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Menu;
 import org.eclipse.ui.IActionBars;
@@ -153,30 +156,98 @@
 			}
 		});
 		
-//		viewer.addDropSupport(DND.DROP_COPY | DND.DROP_MOVE, transfers, new ViewerDropAdapter(viewer) {
-//			
-//			private TreeParent targetNode;
-//			
-//			@Override
-//			public boolean performDrop(Object data) {
-//				return false;
-//			}
-//
-//			@Override
-//			public boolean validateDrop(Object target, int operation,
-//					TransferData transferType) {
-//				if (target == null
-//					|| !(target instanceof TreeParent)) {
-//					targetNode = null;
-//					return false;
-//				}
-//				targetNode = (TreeParent)target;
-//				return true;
-//			}
-//			
-//		});
+		viewer.addDropSupport(DND.DROP_COPY | DND.DROP_MOVE, transfers, new ViewerDropAdapter(viewer) {
+			
+			private TreeParent targetNode;
+			
+			@Override
+			public boolean performDrop(Object data) {
+				if (targetNode == null) {
+					return false;
+				}
+				String[] items = (String[])data;
+				String[] errors = processDrop(targetNode, items);
+				if (errors.length != 0) {
+					StringBuilder msg = new StringBuilder();
+					for (int i = 0; i < errors.length; i++) {
+						msg.append(errors[i]);
+						msg.append("\r\n");
+					}
+					Activator.getDefault().
+						displayMessage(IStatus.ERROR, msg.toString());
+				}
+				if (items.length != errors.length) {
+					// At least one item did not have an error,
+					// so refresh the views
+					PlatformUtils.updateDecoration();
+					PlatformUtils.refreshRepositoryView();
+				}
+				return items.length != errors.length;
+			}
+
+			@Override
+			public boolean validateDrop(Object target, 
+					                   int operation,
+					                   TransferData transferType) {
+				// The drop target needs to be a directory
+				if (target == null
+					|| !(target instanceof TreeParent)) {
+					targetNode = null;
+					return false;
+				}
+				targetNode = (TreeParent)target;
+				return true;
+			}
+			
+		});
 	}
 	
+	private String[] processDrop(TreeParent target, String[] items) {
+		List<String> errors = new ArrayList<String>();
+		
+		for (int i = 0; i < items.length; i++) {
+			IFile sourceFile = PlatformUtils.getResourceFromFSPath(items[i]);
+			if (sourceFile != null) {
+				try {
+					GuvnorMetadataProps md = GuvnorMetadataUtils.getGuvnorMetadata(sourceFile);
+					if (md == null) {
+						// The file is not already associated with Guvnor, so just add it
+						boolean res = GuvnorMetadataUtils.
+										addResourceToGuvnor(target.getGuvnorRepository().getLocation(), 
+										                   target.getFullPath(), sourceFile);
+						if (!res) {
+							errors.add("Could not add " + items[i] + 
+									   " to " + target.getFullPath());
+						}
+					} else {
+						// Need to check if the drop location is the same as the Guvnor
+						// associated location. If so, then perform commit. 
+						// If not, disallow the drop.
+						String itemPath = target.getFullPath() + sourceFile.getName();
+						if (itemPath.equals(md.getFullpath())) {
+							// If there are pending changes
+							if (!GuvnorMetadataUtils.isGuvnorResourceCurrent(sourceFile)) {
+								GuvnorMetadataUtils.commitFileChanges(sourceFile);
+							}
+						} else {
+							errors.add(items[i] + " is already in Guvnor as " + md.getFullpath());
+						}
+					}
+				} catch (Exception e) {
+					Activator.getDefault().writeLog(IStatus.ERROR, e.getMessage(), e);
+				}
+			} else {
+				Activator.getDefault().
+					writeLog(IStatus.WARNING, 
+							"Could not resolve: " + items[i], 
+							new Exception());
+			}
+		}
+		String[] res = new String[errors.size()];
+		errors.toArray(res);
+		return res;
+	}
+	
 	private List<String> prepareFileTransfer(TreeObject[] nodes) throws Exception {
 		List<String> res = new ArrayList<String>();
 		for (int i = 0; i < nodes.length; i++) {

Modified: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/views/ResourceHistoryView.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/views/ResourceHistoryView.java	2008-09-03 15:56:39 UTC (rev 22360)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/views/ResourceHistoryView.java	2008-09-03 20:23:40 UTC (rev 22361)
@@ -15,8 +15,6 @@
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.TableViewer;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.jface.viewers.ViewerSorter;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.widgets.Composite;
@@ -31,6 +29,7 @@
 import org.guvnor.tools.Messages;
 import org.guvnor.tools.utils.GuvnorMetadataUtils;
 import org.guvnor.tools.utils.PlatformUtils;
+import org.guvnor.tools.utils.ResourceHistorySorter;
 import org.guvnor.tools.utils.webdav.IWebDavClient;
 import org.guvnor.tools.utils.webdav.WebDavClientFactory;
 import org.guvnor.tools.utils.webdav.WebDavException;
@@ -45,22 +44,6 @@
  */
 public class ResourceHistoryView extends ViewPart {
 	
-	class ResourceHistorySorter extends ViewerSorter {
-
-		@Override
-		public int compare(Viewer viewer, Object e1, Object e2) {
-			if (e1 instanceof ResourceHistoryEntry
-			   && e2 instanceof ResourceHistoryEntry) {
-				ResourceHistoryEntry entry1 = (ResourceHistoryEntry)e1;
-				ResourceHistoryEntry entry2 = (ResourceHistoryEntry)e2;
-				return Integer.parseInt(entry2.getRevision()) - Integer.parseInt(entry1.getRevision());
-			} else {
-				return super.compare(viewer, e1, e2);
-			}
-		}
-		
-	}
-	
 	private Label repositoryLabel;
 	private Label resourceLabel;
 	

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-09-03 15:56:39 UTC (rev 22360)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/AddResourceWizard.java	2008-09-03 20:23:40 UTC (rev 22361)
@@ -1,27 +1,17 @@
 package org.guvnor.tools.wizards;
 
-import java.io.ByteArrayInputStream;
-import java.net.URL;
 import java.util.Iterator;
 
 import org.eclipse.core.resources.IFile;
-import org.eclipse.core.runtime.IStatus;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.wizard.IWizardPage;
 import org.eclipse.jface.wizard.Wizard;
 import org.eclipse.ui.INewWizard;
 import org.eclipse.ui.IWorkbench;
-import org.eclipse.webdav.IResponse;
 import org.guvnor.tools.Activator;
 import org.guvnor.tools.Messages;
-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.ResourceProperties;
-import org.guvnor.tools.utils.webdav.WebDavClientFactory;
-import org.guvnor.tools.utils.webdav.WebDavException;
-import org.guvnor.tools.utils.webdav.WebDavServerCache;
 
 public class AddResourceWizard extends Wizard implements INewWizard, IGuvnorWizard {
 	
@@ -89,55 +79,12 @@
 	}
 	
 	private boolean processSelectedFile(IFile selectedFile) {
-		boolean res = false;
-		try {
-			String fullPath = model.getTargetLocation() + selectedFile.getName();
-			IWebDavClient client = WebDavServerCache.getWebDavClient(model.getRepLocation());
-			if (client == null) {
-				client = WebDavClientFactory.createClient(new URL(model.getRepLocation()));
-				WebDavServerCache.cacheWebDavClient(model.getRepLocation(), client);
-			}
-			try {
-//				res = client.createResource(fullPath, selectedFile.getContents(), false);
-				// Hack: When creating a file, if the actual contents are passed first,
-				// the client hangs for about 20 seconds when closing the InputStream.
-				// Don't know why...
-				// But, if the file is created with empty contents, and then the contents
-				// set, the operation is fast (less than a couple of seconds)
-				res = client.createResource(fullPath, new ByteArrayInputStream(new byte[0]), false);
-				if (!res) {
-					setDuplicateFileError(selectedFile);
-				}
-				client.putResource(fullPath, selectedFile.getContents());
-			} 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(model.getRepLocation(), client); 
-				if (retry) {
-//					res = client.createResource(fullPath, selectedFile.getContents(), false);
-					// See Hack note immediately above...
-					res = client.createResource(fullPath, new ByteArrayInputStream(new byte[0]), false);
-					if (!res) {
-						setDuplicateFileError(selectedFile);
-					}
-					client.putResource(fullPath, selectedFile.getContents());
-				}
-			}
-			if (res) {
-				GuvnorMetadataUtils.markCurrentGuvnorResource(selectedFile);
-				ResourceProperties resProps = client.queryProperties(fullPath);
-				GuvnorMetadataProps mdProps = 
-						new GuvnorMetadataProps(selectedFile.getName(),
-					                           model.getRepLocation(),
-					                           fullPath, resProps.getLastModifiedDate(),
-					                           resProps.getRevision());
-				GuvnorMetadataUtils.setGuvnorMetadataProps(selectedFile.getFullPath(), mdProps);
-			}
-		} catch (Exception e) {
-			Activator.getDefault().displayError(IStatus.ERROR, e.getMessage(), e);
+		boolean res = GuvnorMetadataUtils.
+						addResourceToGuvnor(model.getRepLocation(), 
+								            model.getTargetLocation(), 
+								            selectedFile);
+		if (!res) {
+			setDuplicateFileError(selectedFile);
 		}
 		return res;
 	}




More information about the jboss-svn-commits mailing list