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

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Jul 10 17:21:26 EDT 2008


Author: john.graham at jboss.org
Date: 2008-07-10 17:21:26 -0400 (Thu, 10 Jul 2008)
New Revision: 21002

Added:
   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/ResourceHistoryContentProvider.java
Modified:
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/META-INF/MANIFEST.MF
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/plugin.xml
   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/actions/CompareVersionAction.java
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/actions/ShowHistoryAction.java
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/actions/SwitchVersionAction.java
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/properties/GuvnorWorkspaceFilePage.java
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/properties/RepositoryElementPropsDialog.java
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/AuthenticationPromptDialog.java
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/GuvnorMetadataProps.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/ResourceProperties.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/views/ResourceHistoryView.java
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/views/model/TreePropertyProvider.java
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/GuvnorMainConfigPage.java
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/SelectGuvnorFolderPage.java
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/SelectGuvnorRepPage.java
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/SelectGuvnorResourcesPage.java
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/SelectLocalTargetPage.java
   labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/SelectResourceVersionPage.java
Log:
Switch version action

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-10 19:27:42 UTC (rev 21001)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/META-INF/MANIFEST.MF	2008-07-10 21:21:26 UTC (rev 21002)
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %plugin.name
 Bundle-SymbolicName: org.guvnor.tools;singleton:=true
-Bundle-Version: 0.6.0.200807091700
+Bundle-Version: 0.6.0.200807101720
 Bundle-Activator: org.guvnor.tools.Activator
 Bundle-Vendor: %plugin.provider
 Bundle-Localization: plugin

Modified: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/plugin.xml
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/plugin.xml	2008-07-10 19:27:42 UTC (rev 21001)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/plugin.xml	2008-07-10 21:21:26 UTC (rev 21002)
@@ -111,12 +111,6 @@
             label="%action.popup.switchversion"
             menubarPath="org.guvnor.tools.popupmenu/group1">
       </action>
-      <action class="org.guvnor.tools.actions.CompareVersionAction"
-              enablesFor="1"
-              id="org.guvnor.tools.actions.compareversionaction"
-            label="%action.popup.compareversion"
-            menubarPath="org.guvnor.tools.popupmenu/group1">
-      </action>
       <action class="org.guvnor.tools.actions.ShowHistoryAction"
               enablesFor="1"
               id="org.guvnor.tools.actions.showhistoryaction"

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-10 19:27:42 UTC (rev 21001)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/GuvnorDecorator.java	2008-07-10 21:21:26 UTC (rev 21002)
@@ -23,7 +23,7 @@
 	
 	private void decorateResource(IResource resource, IDecoration decoration) {
 		try {	
-			if (resource instanceof IFile) {
+			if (resource instanceof IFile) { 
 				decoration.addOverlay(Activator.getImageDescriptor(Activator.IMG_GUVCONTROLLED), 
 						             IDecoration.TOP_RIGHT);
 				if (!GuvnorMetadataUtils.isGuvnorResourceCurrent(resource)) {
@@ -50,18 +50,13 @@
 		}
 	}
 
-	public void addListener(ILabelProviderListener listener) {
-		// TODO: Need to implement this?
-	}
+	public void addListener(ILabelProviderListener listener) { }
 
 	public void dispose() { }
 
 	public boolean isLabelProperty(Object element, String property) {
-		// TODO: Need to implement this?
 		return false;
 	}
 
-	public void removeListener(ILabelProviderListener listener) {
-		// TODO: Need to implement this?
-	}
+	public void removeListener(ILabelProviderListener listener) { }
 }

Modified: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/actions/CompareVersionAction.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/actions/CompareVersionAction.java	2008-07-10 19:27:42 UTC (rev 21001)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/actions/CompareVersionAction.java	2008-07-10 21:21:26 UTC (rev 21002)
@@ -3,10 +3,9 @@
 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;
@@ -18,6 +17,8 @@
 	private IFile selectedFile;
 	private GuvnorMetadataProps props;
 	
+	private IWorkbenchPart targetPart;
+	
 	/**
 	 * Constructor for Action1.
 	 */
@@ -29,19 +30,20 @@
 	 * @see IObjectActionDelegate#setActivePart(IAction, IWorkbenchPart)
 	 */
 	public void setActivePart(IAction action, IWorkbenchPart targetPart) {
+		this.targetPart = targetPart;
 	}
 
 	/**
 	 * @see IActionDelegate#run(IAction)
 	 */
 	public void run(IAction action) {
-		Shell shell = new Shell();
-		MessageDialog.openInformation(
-			shell,
-			"JBoss Guvnor Tools Plug-in",
-			"Compare Verson was executed.");
+		if (selectedFile == null
+		   || props == null
+		   || targetPart == null) {
+			return;
+		}
 	}
-
+	
 	/**
 	 * @see IActionDelegate#selectionChanged(IAction, ISelection)
 	 */

Modified: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/actions/ShowHistoryAction.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/actions/ShowHistoryAction.java	2008-07-10 19:27:42 UTC (rev 21001)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/actions/ShowHistoryAction.java	2008-07-10 21:21:26 UTC (rev 21002)
@@ -87,7 +87,7 @@
 				verProps.load(ins);
 				ResourceHistoryView view = PlatformUtils.getResourceHistoryView();
 				if (view != null) {
-					view.setEntries(verProps);
+					view.setEntries(repositoryLoc, fullPath, verProps);
 				}
 			}
 		} catch (Exception e) {

Modified: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/actions/SwitchVersionAction.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/actions/SwitchVersionAction.java	2008-07-10 19:27:42 UTC (rev 21001)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/actions/SwitchVersionAction.java	2008-07-10 21:21:26 UTC (rev 21002)
@@ -1,23 +1,39 @@
 package org.guvnor.tools.actions;
 
+import java.io.InputStream;
+import java.net.URL;
+import java.util.Properties;
+
 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.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.VersionChooserDialog;
+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;
 
 public class SwitchVersionAction implements IObjectActionDelegate {
 	
 	private IFile selectedFile;
 	private GuvnorMetadataProps props;
 	
+	private IWorkbenchPart targetPart;
+	
+	private IWebDavClient client;
+	
 	/**
 	 * Constructor for Action1.
 	 */
@@ -29,19 +45,78 @@
 	 * @see IObjectActionDelegate#setActivePart(IAction, IWorkbenchPart)
 	 */
 	public void setActivePart(IAction action, IWorkbenchPart targetPart) {
+		this.targetPart = targetPart;
 	}
 
 	/**
 	 * @see IActionDelegate#run(IAction)
 	 */
 	public void run(IAction action) {
-		Shell shell = new Shell();
-		MessageDialog.openInformation(
-			shell,
-			"JBoss Guvnor Tools Plug-in",
-			"Switch Version was executed.");
+		if (selectedFile == null
+		   || props == null
+		   || targetPart == null) {
+			return;
+		}
+		VersionChooserDialog dialog = 
+			new VersionChooserDialog(targetPart.getSite().getShell(), 
+					                selectedFile.getName(), 
+					                getVersionEntries());
+		if (dialog.open() == VersionChooserDialog.OK) {
+			updateSelectedFile(dialog.getSelectedEntry().getRevision());
+		}
+ 	}
+	
+	private void updateSelectedFile(String version) {
+		try {
+			InputStream ins = client.getResourceVersionInputStream(props.getFullpath(), version);
+			if (ins != null) {
+				selectedFile.setContents(ins, true, true, null);
+				client.closeResponse();
+				GuvnorMetadataUtils.markCurrentGuvnorResource(selectedFile);
+				ResourceProperties resProps = client.queryProperties(props.getFullpath());
+				client.closeResponse();
+				GuvnorMetadataProps mdProps = GuvnorMetadataUtils.getGuvnorMetadata(selectedFile);
+				mdProps.setVersion(resProps.getLastModifiedDate());
+				GuvnorMetadataUtils.setGuvnorMetadataProps(selectedFile.getFullPath(), mdProps);
+				PlatformUtils.updateDecoration();
+			}
+		} catch (Exception e) {
+			Activator.getDefault().writeLog(IStatus.ERROR, e.getMessage(), e);
+		}
 	}
-
+	private ResourceHistoryEntry[] getVersionEntries() {
+		ResourceHistoryEntry[] entries = new ResourceHistoryEntry[0];
+		try {
+			client = WebDavServerCache.getWebDavClient(props.getRepository());
+			if (client == null) {
+				client = WebDavClientFactory.createClient(new URL(props.getRepository()));
+				WebDavServerCache.cacheWebDavClient(props.getRepository(), client);
+			}
+			InputStream ins = null;
+			try {
+				ins = client.getResourceVersions(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) {
+					ins = client.getResourceVersions(props.getFullpath());
+				}
+			}
+			if (ins != null) {
+				Properties verProps = new Properties();
+				verProps.load(ins);
+				entries = GuvnorMetadataUtils.parseHistoryProperties(verProps);
+			}
+		} catch (Exception e) {
+			Activator.getDefault().writeLog(IStatus.ERROR, e.getMessage(), e);
+		}
+		return entries;
+	}
+	
 	/**
 	 * @see IActionDelegate#selectionChanged(IAction, ISelection)
 	 */

Modified: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/properties/GuvnorWorkspaceFilePage.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/properties/GuvnorWorkspaceFilePage.java	2008-07-10 19:27:42 UTC (rev 21001)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/properties/GuvnorWorkspaceFilePage.java	2008-07-10 21:21:26 UTC (rev 21002)
@@ -3,8 +3,6 @@
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.runtime.IStatus;
 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.Control;
 import org.eclipse.swt.widgets.Label;
@@ -13,6 +11,7 @@
 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 GuvnorWorkspaceFilePage extends PropertyPage implements IWorkbenchPropertyPage {
 
@@ -22,7 +21,7 @@
 
 	@Override
 	protected Control createContents(Composite parent) {
-		Composite composite = createComposite(parent, 2);
+		Composite composite = PlatformUtils.createComposite(parent, 2);
 		IResource resource = (IResource)super.getElement().getAdapter(IResource.class);
 		if (resource != null) {
 			displayGuvnorProperties(composite, resource);
@@ -71,14 +70,4 @@
 	private void indicateNotGuvnorAssociated(Composite composite) {
 		new Label(composite, SWT.NONE).setText("(Not associated with Guvnor)");
 	}
-	
-	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;
-	}
 }

Modified: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/properties/RepositoryElementPropsDialog.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/properties/RepositoryElementPropsDialog.java	2008-07-10 19:27:42 UTC (rev 21001)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/properties/RepositoryElementPropsDialog.java	2008-07-10 21:21:26 UTC (rev 21002)
@@ -14,7 +14,6 @@
 import org.eclipse.swt.events.SelectionListener;
 import org.eclipse.swt.graphics.Point;
 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.Control;
@@ -27,6 +26,7 @@
 import org.eclipse.ui.views.properties.IPropertySource;
 import org.eclipse.ui.views.properties.TextPropertyDescriptor;
 import org.guvnor.tools.Activator;
+import org.guvnor.tools.utils.PlatformUtils;
 import org.guvnor.tools.views.model.TreeObject;
 
 public class RepositoryElementPropsDialog extends TitleAreaDialog {
@@ -58,13 +58,13 @@
 		folder.setLayoutData(new GridData(GridData.FILL_BOTH));
 		TabItem tab = new TabItem(folder, SWT.NONE);
 		tab.setText("Basic");
-		Composite composite = createComposite(folder, 2);
+		Composite composite = PlatformUtils.createComposite(folder, 2);
 		tab.setControl(composite);
 		addElementProperties(composite);
 		
 		tab = new TabItem(folder, SWT.NONE);
 		tab.setText("Security");
-		composite = createComposite(folder, 2);
+		composite = PlatformUtils.createComposite(folder, 2);
 		tab.setControl(composite);
 		addSecurityProperties(composite);
 		
@@ -109,7 +109,7 @@
 		
 		new Label(composite, SWT.NONE).setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
 		
-		Composite pwgroup = createComposite(composite, 2);
+		Composite pwgroup = PlatformUtils.createComposite(composite, 2);
 		cbSavePassword = new Button(pwgroup, SWT.CHECK);
 		cbSavePassword.addSelectionListener(new SelectionListener() {
 
@@ -163,16 +163,6 @@
 		// Try to set a reasonable default size.
 		return new Point(INITIAL_WIDTH, INITIAL_HEIGHT);
 	}
-	
-	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;
-	}
 
 	public String getUsername() {
 		return username;

Modified: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/AuthenticationPromptDialog.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/AuthenticationPromptDialog.java	2008-07-10 19:27:42 UTC (rev 21001)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/AuthenticationPromptDialog.java	2008-07-10 21:21:26 UTC (rev 21002)
@@ -8,7 +8,6 @@
 import org.eclipse.swt.events.SelectionListener;
 import org.eclipse.swt.graphics.Point;
 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.Control;
@@ -52,7 +51,7 @@
 		super.setMessage("Authentication required for repository: " + serverName);
 		super.setTitleImage(Activator.getImageDescriptor(Activator.IMG_GUVREPWIZBAN).createImage());
 		
-		Composite composite = createComposite(parent, 2);
+		Composite composite = PlatformUtils.createComposite(parent, 2);
 		new Label(composite, SWT.NONE).setText("User Name: ");
 		unField = new Text(composite, SWT.SINGLE | SWT.BORDER);
 		unField.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
@@ -73,7 +72,7 @@
 		
 		new Label(composite, SWT.NONE).setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
 		
-		Composite pwgroup = createComposite(composite, 2);
+		Composite pwgroup = PlatformUtils.createComposite(composite, 2);
 		cbSavePassword = new Button(pwgroup, SWT.CHECK);
 		cbSavePassword.addSelectionListener(new SelectionListener() {
 			public void widgetDefaultSelected(SelectionEvent e) { }
@@ -104,16 +103,6 @@
 		return new Point(INITIAL_WIDTH, INITIAL_HEIGHT);
 	}
 	
-	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;
-	}
-	
 	public String getUserName() {
 		return username;
 	}

Modified: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/GuvnorMetadataProps.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/GuvnorMetadataProps.java	2008-07-10 19:27:42 UTC (rev 21001)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/GuvnorMetadataProps.java	2008-07-10 21:21:26 UTC (rev 21002)
@@ -5,6 +5,7 @@
 	private String repository;
 	private String fullpath;
 	private String version;
+	private String revision;
 	
 	public GuvnorMetadataProps(String filename, String repository,
 			                  String fullpath, String version) {
@@ -12,6 +13,7 @@
 		this.repository = repository;
 		this.fullpath = fullpath;
 		this.version = version;
+//		this.revision = revision;
 	}
 	public String getFilename() {
 		return filename;
@@ -37,4 +39,10 @@
 	public void setVersion(String version) {
 		this.version = version;
 	}
+	public String getRevision() {
+		return revision;
+	}
+	public void setRevision(String revision) {
+		this.revision = revision;
+	}
 }

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-10 19:27:42 UTC (rev 21001)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/GuvnorMetadataUtils.java	2008-07-10 21:21:26 UTC (rev 21002)
@@ -4,7 +4,10 @@
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.OutputStream;
+import java.util.Enumeration;
+import java.util.NoSuchElementException;
 import java.util.Properties;
+import java.util.StringTokenizer;
 
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IFolder;
@@ -15,6 +18,7 @@
 import org.eclipse.core.runtime.Path;
 import org.eclipse.core.runtime.QualifiedName;
 import org.guvnor.tools.Activator;
+import org.guvnor.tools.views.model.ResourceHistoryEntry;
 
 /**
  * A set of utilities for dealing with (local) Guvnor metadata.
@@ -161,4 +165,26 @@
 	private static QualifiedName generateQualifiedName(String attr) {
 		return new QualifiedName("org.guvnor.tools", attr); 
 	}
+	
+	public static ResourceHistoryEntry[] parseHistoryProperties(Properties entryProps) {
+		ResourceHistoryEntry[] entries = new ResourceHistoryEntry[entryProps.size()];
+		Enumeration<Object> en = entryProps.keys();
+		for (int i = 0; i < entryProps.size(); i++) {
+			String oneRevision = (String)en.nextElement();
+			String val = entryProps.getProperty(oneRevision);
+			StringTokenizer tokens = new StringTokenizer(val, ",");
+			String verDate = null;
+			String author = null;
+			String comment = null;
+			try {
+				verDate = tokens.nextToken();
+				author = tokens.nextToken();
+				comment = tokens.nextToken();
+			} catch (NoSuchElementException e) {
+				// Don't care if some fields are missing
+			}
+			entries[i] = new ResourceHistoryEntry(oneRevision, verDate, author, comment);
+		}
+		return entries;
+	}
 }
\ 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-10 19:27:42 UTC (rev 21001)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/PlatformUtils.java	2008-07-10 21:21:26 UTC (rev 21002)
@@ -9,8 +9,14 @@
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.jface.dialogs.MessageDialog;
+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.Display;
 import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
 import org.eclipse.ui.IDecoratorManager;
 import org.eclipse.ui.IEditorDescriptor;
 import org.eclipse.ui.IStorageEditorInput;
@@ -47,6 +53,16 @@
 		return instance;
 	}
 	
+	public static 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;
+	}
+	
 	/**
 	 * Causes the platform to update Guvnor decoration notions.
 	 */
@@ -120,6 +136,43 @@
 		}
 	}
 	
+	public static Table createResourceHistoryTable(Composite parent) {
+		int style = SWT.SINGLE | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL | 
+		            SWT.FULL_SELECTION | SWT.HIDE_SELECTION;
+
+		Table table = new Table(parent, style);
+
+		GridData gridData = new GridData(GridData.FILL_BOTH);
+		gridData.grabExcessVerticalSpace = true;
+		gridData.horizontalSpan = 3;
+		table.setLayoutData(gridData);		
+		
+		table.setLinesVisible(true);
+		table.setHeaderVisible(true);
+
+		TableColumn column = new TableColumn(table, SWT.LEFT, 0);
+		column.setResizable(true);
+		column.setText("Revision");
+		column.setWidth(100);
+
+		column = new TableColumn(table, SWT.LEFT, 1);
+		column.setResizable(true);
+		column.setText("Date");
+		column.setWidth(175);
+
+		column = new TableColumn(table, SWT.LEFT, 2);
+		column.setResizable(true);
+		column.setText("Author");
+		column.setWidth(200);
+
+		column = new TableColumn(table, SWT.CENTER, 3);
+		column.setResizable(true);
+		column.setText("Comment");
+		column.setWidth(350);
+
+		return table;
+	}
+	
 	public boolean authenticateForServer(String server, IWebDavClient client) throws Exception {
 		AuthPromptResults res = promptForAuthentication(server);
 		if (res != null) {

Added: 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	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/VersionChooserDialog.java	2008-07-10 21:21:26 UTC (rev 21002)
@@ -0,0 +1,78 @@
+package org.guvnor.tools.utils;
+
+import org.eclipse.jface.dialogs.TitleAreaDialog;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Shell;
+import org.guvnor.tools.Activator;
+import org.guvnor.tools.views.ResourceHistoryContentProvider;
+import org.guvnor.tools.views.ResourceHistoryLabelProvider;
+import org.guvnor.tools.views.model.ResourceHistoryEntry;
+
+public class VersionChooserDialog extends TitleAreaDialog {
+	
+	private static final int INITIAL_WIDTH = 790;
+	private static final int INITIAL_HEIGHT = 350;
+	
+	private String fileName;
+	private ResourceHistoryEntry[] entries;
+	
+	private ResourceHistoryEntry selectedEntry;
+	
+	private TableViewer viewer;
+	
+	public VersionChooserDialog(Shell parentShell, String fileName, ResourceHistoryEntry[] entries) {
+		super(parentShell);
+		super.setShellStyle(getShellStyle() | SWT.RESIZE);
+		this.entries = entries;
+		this.fileName = fileName;
+	}
+	
+	@Override
+	protected Control createDialogArea(Composite parent) {
+		super.setTitle("Resource Versions");
+		super.setMessage("Choose a version for " + fileName);
+		super.setTitleImage(Activator.getImageDescriptor(Activator.IMG_GUVREPWIZBAN).createImage());
+		
+		viewer = new TableViewer(PlatformUtils.createResourceHistoryTable(parent));
+		viewer.getTable().setLayoutData(new GridData(GridData.FILL_BOTH));
+		
+		viewer.setContentProvider(new ResourceHistoryContentProvider(entries));
+		viewer.setLabelProvider(new ResourceHistoryLabelProvider());
+		viewer.setInput(this);
+		viewer.addSelectionChangedListener(new ISelectionChangedListener() {
+			public void selectionChanged(SelectionChangedEvent event) {
+				if (viewer.getSelection() instanceof IStructuredSelection) {
+					IStructuredSelection sel = (IStructuredSelection)viewer.getSelection();
+					if (sel.getFirstElement() instanceof ResourceHistoryEntry) {
+						selectedEntry = (ResourceHistoryEntry)sel.getFirstElement();
+					}
+				}
+			}
+		});
+		
+		if (entries.length > 0) {
+			viewer.getTable().setSelection(0);
+			selectedEntry = entries[0];
+		}
+		
+		return super.createDialogArea(parent);
+	}
+	
+	@Override
+	protected Point getInitialSize() {
+		// Try to set a reasonable default size.
+		return new Point(INITIAL_WIDTH, INITIAL_HEIGHT);
+	}
+	
+	public ResourceHistoryEntry getSelectedEntry() {
+		return selectedEntry;
+	}
+}

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-10 19:27:42 UTC (rev 21001)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/webdav/IWebDavClient.java	2008-07-10 21:21:26 UTC (rev 21002)
@@ -8,7 +8,7 @@
 import org.eclipse.webdav.http.client.IAuthenticator;
 
 /**
- * Client methods for interacting with WebDav.
+ * Client methods for interacting with Guvnor through WebDav.
  * @author jgraham
  */
 public interface IWebDavClient {
@@ -33,7 +33,7 @@
 	public IContext createContext();
 	
 	/**
-	 * Lists a directory (collection) in WebDav.
+	 * Lists a directory (collection) in Guvnor through WebDav.
 	 * @param path The directory (collection) to list
 	 * @return An association of directory content names and their properties
 	 * @throws Exception Various WebDav errors can occur (See IResponse for details)
@@ -49,7 +49,7 @@
 	public ResourceProperties queryProperties(String resource) throws Exception;
 	
 	/**
-	 * Get the contents of a resource from a WebDav repository.
+	 * Get the contents of a resource from Guvnor through WebDav.
 	 * @param resource The address of the resource
 	 * @return The contents of the resource
 	 * @throws Exception Various WebDav errors can occur (See IResponse for details)
@@ -57,20 +57,38 @@
 	public String getResourceContents(String resource) throws Exception;
 	
 	/**
-	 * Get the <code>InputStream</code> of a resource from a WebDav repository.
+	 * Get the contents for a specific version of a resource from a Guvnor repository.
 	 * @param resource The address of the resource
+	 * @param version The version number of the resource
+	 * @return The contents of the resource
+	 * @throws Exception Various WebDav errors can occur (See IResponse for details)
+	 */
+	public String getResourceVersionContents(String resource, String version) throws Exception;
+	
+	/**
+	 * Get the <code>InputStream</code> of a resource from Guvnor through WebDav.
+	 * @param resource The address of the resource
 	 * @return An code>InputStream</code> for the resource
 	 * @throws Exception Various WebDav errors can occur (See IResponse for details)
 	 */
 	public InputStream getResourceInputStream(String resource) throws Exception;
 	
 	/**
+	 * Get the <code>InputStream</code> for a specific version of a resource from Guvnor through WebDav.
+	 * @param resource The address of the resource
+	 * @param version The version number of the resource
+	 * @return An code>InputStream</code> for the resource
+	 * @throws Exception Various WebDav errors can occur (See IResponse for details)
+	 */
+	public InputStream getResourceVersionInputStream(String resource, String version) throws Exception;
+	
+	/**
 	 * Same as createResource(resource, is, true)
 	 */
 	public boolean createResource(String resource, InputStream is) throws Exception;
 
 	/**
-	 * Creates a file in the WebDav repository
+	 * Creates a file in Guvnor through WebDav.
 	 * @param resource The path and name of the resource
 	 * @param is A stream to the file contents
 	 * @param overwrite Whether to overwrite the file if it already exists
@@ -80,7 +98,7 @@
 	public boolean createResource(String resource, InputStream is, boolean overwrite) throws Exception;
 	
 	/**
-	 * Write a file to the WebDav repository
+	 * Write a file to Guvnor through WebDav.
 	 * @param resource The path and name of the resource
 	 * @param is A stream to the file contents
 	 * @throws Exception Various WebDav errors can occur (See IResponse for details)

Modified: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/webdav/ResourceProperties.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/webdav/ResourceProperties.java	2008-07-10 19:27:42 UTC (rev 21001)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/webdav/ResourceProperties.java	2008-07-10 21:21:26 UTC (rev 21002)
@@ -4,6 +4,7 @@
 	private boolean isDirectory;
 	private String creationDate;
 	private String lastModifiedDate;
+	private String revision;
 	private String base;
 	
 	public String getBase() {
@@ -30,4 +31,10 @@
 	public void setLastModifiedDate(String lastModifiedDate) {
 		this.lastModifiedDate = lastModifiedDate;
 	}
+	public String getRevision() {
+		return revision != null?revision:"";
+	}
+	public void setRevision(String revision) {
+		this.revision = revision;
+	}
 }

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-10 19:27:42 UTC (rev 21001)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/webdav/WebDavClient.java	2008-07-10 21:21:26 UTC (rev 21002)
@@ -2,7 +2,10 @@
 
 import java.io.InputStream;
 import java.net.URL;
+import java.util.Iterator;
 import java.util.Map;
+import java.util.Properties;
+import java.util.StringTokenizer;
 
 import org.eclipse.webdav.IContext;
 import org.eclipse.webdav.ILocator;
@@ -81,9 +84,35 @@
 			throw new WebDavException("WebDav error: " + response.getStatusCode(), 
 								     response.getStatusCode());
 		}
-		return StreamProcessingUtils.parseListing(path, response.getInputStream());
+		Map<String, ResourceProperties> res = StreamProcessingUtils.
+												parseListing(path, response.getInputStream());
+		addGuvnorResourceProperties(res, path);
+		return res;
 	}
 	
+	private void addGuvnorResourceProperties(Map<String, ResourceProperties> props, 
+			                                String path) throws Exception {
+		try {
+			String apiVer = changeToAPICall(path);
+			Properties guvProps = new Properties();
+			guvProps.load(getResourceInputStream(apiVer));
+			for (Iterator<String> it = props.keySet().iterator(); it.hasNext();) {
+				String oneKey = it.next();
+				String val = guvProps.getProperty(oneKey);
+				if (val != null) {
+					ResourceProperties resProps = props.get(oneKey);
+					StringTokenizer tokens = new StringTokenizer(val, ",");
+					String dateStamp = tokens.nextToken();
+					String revision = tokens.nextToken();
+					resProps.setLastModifiedDate(dateStamp);
+					resProps.setRevision(revision);
+				}
+			}
+		} catch (Exception e) {
+//TODO: Getting some server internal errors here. Why?
+		}
+	}
+	
 	/*
 	 * (non-Javadoc)
 	 * @see org.guvnor.tools.utils.webdav.IWebDavClient#queryProperties(java.lang.String)
@@ -103,9 +132,36 @@
 		if (props.keySet().size() != 1) {
 			throw new Exception(props.keySet().size() + " entries found for " + resource);
 		}
-		return props.get(props.keySet().iterator().next());
+		String filename = props.keySet().iterator().next();
+		ResourceProperties res = props.get(filename);
+		addGuvnorResourceProperties(res, filename, resource);
+		return res;
 	}
 	
+	private void addGuvnorResourceProperties(ResourceProperties props, 
+			                                String filename, String resource) throws Exception {
+		if (props == null) {
+			return;
+		}
+		try {
+			String path = resource.substring(0, resource.lastIndexOf('/'));
+			String apiVer = changeToAPICall(path);
+			Properties guvProps = new Properties();
+			guvProps.load(getResourceInputStream(apiVer));
+			String val = guvProps.getProperty(filename);
+			if (val != null) {
+				StringTokenizer tokens = new StringTokenizer(val, ",");
+				String dateStamp = tokens.nextToken();
+				String revision = tokens.nextToken();
+				props.setLastModifiedDate(dateStamp);
+				props.setRevision(revision);
+			}
+		} catch (Exception e) {
+//TODO: Getting some server internal errors here. Why?
+			System.out.println(e.getMessage());
+		}
+	}
+	
 	/*
 	 * (non-Javadoc)
 	 * @see org.guvnor.tools.utils.webdav.IWebDavClient#getResourceContents(java.lang.String)
@@ -116,6 +172,15 @@
 	
 	/*
 	 * (non-Javadoc)
+	 * @see org.guvnor.tools.utils.webdav.IWebDavClient#getResourceVersionContents(java.lang.String, java.lang.String)
+	 */
+	public String getResourceVersionContents(String resource, String version) throws Exception {
+		String apiVer = changeToAPICall(resource) + "?version=" + version;
+		return getResourceContents(apiVer);
+	}
+	
+	/*
+	 * (non-Javadoc)
 	 * @see org.guvnor.tools.utils.webdav.IWebDavClient#getInputStream(java.lang.String)
 	 */
 	public InputStream getResourceInputStream(String resource) throws Exception {
@@ -130,6 +195,15 @@
 	
 	/*
 	 * (non-Javadoc)
+	 * @see org.guvnor.tools.utils.webdav.IWebDavClient#getResourceVersionInputStream(java.lang.String, java.lang.String)
+	 */
+	public InputStream getResourceVersionInputStream(String resource, String version) throws Exception {
+		String apiVer = changeToAPICall(resource) + "?version=" + version;
+		return getResourceInputStream(apiVer);
+	}
+	
+	/*
+	 * (non-Javadoc)
 	 * @see org.guvnor.tools.utils.webdav.IWebDavClient#createResource(java.lang.String, java.io.InputStream)
 	 */
 	public boolean createResource(String resource, InputStream is) throws Exception {

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-10 19:27:42 UTC (rev 21001)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/views/RepositoryView.java	2008-07-10 21:21:26 UTC (rev 21002)
@@ -56,8 +56,8 @@
 	
 	private TreeViewer viewer;
 	private DrillDownAdapter drillDownAdapter;
-	private Action deleteRepositoryLoc;
-	private Action addRepositoryLoc;
+	private Action deleteRepositoryLocAction;
+	private Action addRepositoryLocAction;
 	private Action doubleClickAction;
 	
 	class NameSorter extends ViewerSorter {
@@ -199,14 +199,14 @@
 	}
 
 	private void fillLocalPullDown(IMenuManager manager) {
-		manager.add(deleteRepositoryLoc);
+		manager.add(deleteRepositoryLocAction);
 		manager.add(new Separator());
-		manager.add(addRepositoryLoc);
+		manager.add(addRepositoryLocAction);
 	}
 
 	private void fillContextMenu(IMenuManager manager) {
-		manager.add(deleteRepositoryLoc);
-		manager.add(addRepositoryLoc);
+		manager.add(deleteRepositoryLocAction);
+		manager.add(addRepositoryLocAction);
 		manager.add(new Separator());
 		drillDownAdapter.addNavigationActions(manager);
 		// Other plug-ins can contribute there actions here
@@ -214,14 +214,14 @@
 	}
 	
 	private void fillLocalToolBar(IToolBarManager manager) {
-		manager.add(deleteRepositoryLoc);
-		manager.add(addRepositoryLoc);
+		manager.add(deleteRepositoryLocAction);
+		manager.add(addRepositoryLocAction);
 		manager.add(new Separator());
 		drillDownAdapter.addNavigationActions(manager);
 	}
 
 	private void makeActions() {
-		deleteRepositoryLoc = new Action() {
+		deleteRepositoryLocAction = new Action() {
 			public void run() {
 				ISelection selection = viewer.getSelection();
 				Object obj = ((IStructuredSelection)selection).getFirstElement();
@@ -235,12 +235,12 @@
 				}
 			}
 		};
-		deleteRepositoryLoc.setText("Delete");
-		deleteRepositoryLoc.setToolTipText("Delete Guvnor repository location");
-		deleteRepositoryLoc.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().
+		deleteRepositoryLocAction.setText("Delete");
+		deleteRepositoryLocAction.setToolTipText("Delete Guvnor repository location");
+		deleteRepositoryLocAction.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().
 			getImageDescriptor(ISharedImages.IMG_TOOL_DELETE));
 		
-		addRepositoryLoc = new Action() {
+		addRepositoryLocAction = new Action() {
 			public void run() {
 				NewRepLocationWizard wiz = new NewRepLocationWizard();
 				wiz.init(Activator.getDefault().getWorkbench(), null);
@@ -250,9 +250,9 @@
 			    dialog.open();
 			}
 		};
-		addRepositoryLoc.setText("Add");
-		addRepositoryLoc.setToolTipText("Add a Guvnor respository location");
-		addRepositoryLoc.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().
+		addRepositoryLocAction.setText("Add");
+		addRepositoryLocAction.setToolTipText("Add a Guvnor respository location");
+		addRepositoryLocAction.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().
 				getImageDescriptor(ISharedImages.IMG_TOOL_NEW_WIZARD));
 		doubleClickAction = new Action() {
 			public void run() {

Added: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/views/ResourceHistoryContentProvider.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/views/ResourceHistoryContentProvider.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/views/ResourceHistoryContentProvider.java	2008-07-10 21:21:26 UTC (rev 21002)
@@ -0,0 +1,24 @@
+package org.guvnor.tools.views;
+
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.Viewer;
+import org.guvnor.tools.views.model.ResourceHistoryEntry;
+/**
+ * Structured content provider for resource history tables, etc.
+ * @author jgraham
+ *
+ */
+public class ResourceHistoryContentProvider implements IStructuredContentProvider {
+	private ResourceHistoryEntry[] entries;
+	
+	public ResourceHistoryContentProvider(ResourceHistoryEntry[] entries) {
+		this.entries = entries;
+	}
+	public void inputChanged(Viewer v, Object oldInput, Object newInput) {
+	}
+	public void dispose() {
+	}
+	public Object[] getElements(Object parent) {
+		return entries;
+	}
+}

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-07-10 19:27:42 UTC (rev 21001)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/views/ResourceHistoryView.java	2008-07-10 21:21:26 UTC (rev 21002)
@@ -1,82 +1,169 @@
 package org.guvnor.tools.views;
 
 
-import java.util.Enumeration;
-import java.util.NoSuchElementException;
+import java.net.URL;
 import java.util.Properties;
-import java.util.StringTokenizer;
 
-import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.viewers.DoubleClickEvent;
+import org.eclipse.jface.viewers.IDoubleClickListener;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.TableViewer;
-import org.eclipse.jface.viewers.Viewer;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Table;
-import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.ui.ISharedImages;
+import org.eclipse.ui.IWorkbenchActionConstants;
+import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.part.ViewPart;
+import org.eclipse.webdav.IResponse;
+import org.guvnor.tools.Activator;
+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;
 import org.guvnor.tools.views.model.ResourceHistoryEntry;
 
+/**
+ * View showing the versions of a given resource.
+ * 
+ * @author jgraham
+ *
+ */
 public class ResourceHistoryView extends ViewPart {
 	
+	private Label repositoryLabel;
+	private Label resourceLabel;
+	
 	private TableViewer viewer;
 	
-	private ResourceHistoryEntry[] entries;
+	private Action showVersionAction;
 	
 	/**
 	 * The constructor.
 	 */
-	public ResourceHistoryView() {
-		entries = new ResourceHistoryEntry[0];
-	}
+	public ResourceHistoryView() { }
 	
 	public void createPartControl(Composite parent) {
+
+		Composite composite = PlatformUtils.createComposite(parent, 1);
 		
-		viewer = new TableViewer(createTable(parent));
+		repositoryLabel = new Label(composite, SWT.NONE);
+		repositoryLabel.setText("Repository: ");
+		repositoryLabel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+		
+		resourceLabel = new Label(composite, SWT.NONE);
+		resourceLabel.setText("Resource: ");
+		resourceLabel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+		
+		viewer = new TableViewer(PlatformUtils.createResourceHistoryTable(composite));
 		viewer.getTable().setLayoutData(new GridData(GridData.FILL_BOTH));
 		
-		viewer.setContentProvider(new ResourceHistoryViewContentProvider());
+		viewer.setContentProvider(new ResourceHistoryContentProvider(new ResourceHistoryEntry[0]));
 		viewer.setLabelProvider(new ResourceHistoryLabelProvider());
 		viewer.setInput(getViewSite());
+		
+		makeActions();
+		hookContextMenu();
+		hookDoubleClickAction();
 	}
-	
-	private Table createTable(Composite parent) {
-		int style = SWT.SINGLE | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL | 
-					SWT.FULL_SELECTION | SWT.HIDE_SELECTION;
 
-		Table table = new Table(parent, style);
-		
-		GridData gridData = new GridData(GridData.FILL_BOTH);
-		gridData.grabExcessVerticalSpace = true;
-		gridData.horizontalSpan = 3;
-		table.setLayoutData(gridData);		
-					
-		table.setLinesVisible(true);
-		table.setHeaderVisible(true);
-
-		TableColumn column = new TableColumn(table, SWT.LEFT, 0);
-		column.setResizable(true);
-		column.setText("Revision");
-		column.setWidth(100);
-		
-		column = new TableColumn(table, SWT.LEFT, 1);
-		column.setResizable(true);
-		column.setText("Date");
-		column.setWidth(175);
-
-		column = new TableColumn(table, SWT.LEFT, 2);
-		column.setResizable(true);
-		column.setText("Author");
-		column.setWidth(200);
- 
-		column = new TableColumn(table, SWT.CENTER, 3);
-		column.setResizable(true);
-		column.setText("Comment");
-		column.setWidth(350);
-		
-		return table;
+	private void hookContextMenu() {
+		MenuManager menuMgr = new MenuManager("#PopupMenu");
+		menuMgr.setRemoveAllWhenShown(true);
+		menuMgr.addMenuListener(new IMenuListener() {
+			public void menuAboutToShow(IMenuManager manager) {
+				ResourceHistoryView.this.fillContextMenu(manager);
+			}
+		});
+		Menu menu = menuMgr.createContextMenu(viewer.getControl());
+		viewer.getControl().setMenu(menu);
+		getSite().registerContextMenu(menuMgr, viewer);
 	}
-
+	
+	private void fillContextMenu(IMenuManager manager) {
+		manager.add(showVersionAction);
+		manager.add(new Separator());
+		// Other plug-ins can contribute there actions here
+		manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
+	}
+	
+	private void hookDoubleClickAction() {
+		viewer.addDoubleClickListener(new IDoubleClickListener() {
+			public void doubleClick(DoubleClickEvent event) {
+				showResourceVersionContents();
+			}
+		});
+	}
+	
+	private void makeActions() {
+		showVersionAction = new Action() {
+			public void run() {
+				showResourceVersionContents();
+			}
+		};
+		showVersionAction.setText("Open (read-only)");
+		showVersionAction.setToolTipText("Opens a read-only editor with the version contents");
+		showVersionAction.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().
+			getImageDescriptor(ISharedImages.IMG_OBJ_FILE));
+	}
+	
+	private void showResourceVersionContents() {
+		String repository = repositoryLabel.getToolTipText();
+		String fullPath = resourceLabel.getToolTipText();
+		ISelection selection = viewer.getSelection();
+		Object obj = ((IStructuredSelection)selection).getFirstElement();
+		if (obj instanceof ResourceHistoryEntry) {
+			ResourceHistoryEntry theEntry = (ResourceHistoryEntry)obj;
+			try {
+				IWebDavClient client = WebDavServerCache.getWebDavClient(repository);
+				if (client == null) {
+					client = WebDavClientFactory.createClient(new URL(repository));
+					WebDavServerCache.cacheWebDavClient(repository, client);
+				}
+				String contents = null;
+				try {
+					contents = client.getResourceVersionContents(fullPath, theEntry.getRevision());
+				} catch (WebDavException wde) {
+					if (wde.getErrorCode() != IResponse.SC_UNAUTHORIZED) {
+						// If not an authentication failure, we don't know what to do with it
+						client.closeResponse();
+						throw wde;
+					}
+					boolean retry = PlatformUtils.getInstance().
+										authenticateForServer(repository, client); 
+					if (retry) {
+						contents = client.getResourceVersionContents(fullPath, theEntry.getRevision());
+					}
+				}
+				client.closeResponse();
+				if (contents != null) {
+					String editorTitle = null;
+					int pos = fullPath.lastIndexOf("/");
+					if (pos != -1
+					   && pos + 1 < fullPath.length()) {
+						editorTitle = fullPath.substring(pos + 1);
+					} else {
+						editorTitle = fullPath;
+					}
+					PlatformUtils.openEditor(contents, editorTitle + ", " + theEntry.getRevision());
+				}
+			} catch (Exception e) {
+				Activator.getDefault().writeLog(IStatus.ERROR, e.getMessage(), e);
+			}
+		}
+	}
+	
 	/**
 	 * Passing the focus request to the viewer's control.
 	 */
@@ -84,38 +171,13 @@
 		viewer.getControl().setFocus();
 	}
 	
-	public void setEntries(Properties entryProps) {
-		entries = new ResourceHistoryEntry[entryProps.size()];
-		Enumeration<Object> en = entryProps.keys();
-		int i = 0;
-		while (en.hasMoreElements()) {
-			String oneRevision = (String)en.nextElement();
-			String val = entryProps.getProperty(oneRevision);
-			StringTokenizer tokens = new StringTokenizer(val, ",");
-			String verDate = null;
-			String author = null;
-			String comment = null;
-			try {
-				verDate = tokens.nextToken();
-				author = tokens.nextToken();
-				comment = tokens.nextToken();
-			} catch (NoSuchElementException e) {
-				// Don't care if some fields are missing
-			}
-			entries[i] = new ResourceHistoryEntry(oneRevision, verDate, author, comment);
-			i++;
-		}
-		viewer.setContentProvider(new ResourceHistoryViewContentProvider());
+	public void setEntries(String repository, String fullPath, Properties entryProps) {
+		repositoryLabel.setText("Repository: " + repository);
+		repositoryLabel.setToolTipText(repository);
+		resourceLabel.setText("Resource: " + fullPath.substring(repository.length()));
+		resourceLabel.setToolTipText(fullPath);
+		ResourceHistoryEntry[] entries = GuvnorMetadataUtils.parseHistoryProperties(entryProps);
+		viewer.setContentProvider(new ResourceHistoryContentProvider(entries));
 		viewer.setInput(getViewSite());
 	}
-	
-	class ResourceHistoryViewContentProvider implements IStructuredContentProvider {
-		public void inputChanged(Viewer v, Object oldInput, Object newInput) {
-		}
-		public void dispose() {
-		}
-		public Object[] getElements(Object parent) {
-			return entries;
-		}
-	}
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/views/model/TreePropertyProvider.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/views/model/TreePropertyProvider.java	2008-07-10 19:27:42 UTC (rev 21001)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/views/model/TreePropertyProvider.java	2008-07-10 21:21:26 UTC (rev 21002)
@@ -22,7 +22,8 @@
 			new TextPropertyDescriptor("location", "Location"),
 			new TextPropertyDescriptor("type", "Type"),
 			new TextPropertyDescriptor("creationdate", "Created"),
-			new TextPropertyDescriptor("lastmodified", "Last Modified")
+			new TextPropertyDescriptor("lastmodified", "Last Modified"),
+			new TextPropertyDescriptor("revision", "Revision")
 		};
 	}
 
@@ -50,6 +51,9 @@
 		if (id.equals("lastmodified")) {
 			return node.getResourceProps().getLastModifiedDate();
 		}
+		if (id.equals("revision")) {
+			return node.getResourceProps().getRevision();
+		}
 		return "";
 	}
 

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-10 19:27:42 UTC (rev 21001)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/GuvnorMainConfigPage.java	2008-07-10 21:21:26 UTC (rev 21002)
@@ -18,12 +18,12 @@
 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.Text;
 import org.guvnor.tools.Activator;
+import org.guvnor.tools.utils.PlatformUtils;
 
 public class GuvnorMainConfigPage extends WizardPage {
 	
@@ -36,6 +36,8 @@
 	private Button cbSavePassword;
 	private boolean saveAuthInfo;
 	
+	private Label warningLabel;
+	
 	public GuvnorMainConfigPage(String pageName) {
 		super(pageName);
 	}
@@ -46,7 +48,7 @@
 
 	public void createControl(Composite parent) {
 		
-		Composite composite = createComposite(parent, 2);
+		Composite composite = PlatformUtils.createComposite(parent, 2);
 		new Label(composite, SWT.NONE).setText("Location: ");
 		serverField = new Text(composite, SWT.SINGLE | SWT.BORDER);
 		serverField.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
@@ -97,13 +99,14 @@
 
 		new Label(composite, SWT.NONE).setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
 		
-		Composite pwgroup = createComposite(composite, 2);
+		Composite pwgroup = PlatformUtils.createComposite(composite, 2);
 		cbSavePassword = new Button(pwgroup, SWT.CHECK);
 		cbSavePassword.addSelectionListener(new SelectionListener() {
 			public void widgetDefaultSelected(SelectionEvent e) { }
 
 			public void widgetSelected(SelectionEvent e) {
 				saveAuthInfo = cbSavePassword.getSelection();
+				warningLabel.setEnabled(saveAuthInfo);
 				updateModel();
 			}
 			
@@ -115,7 +118,8 @@
 		
 		new Label(pwgroup, SWT.NONE).setText("Save user name and password");
 		new Label(composite, SWT.NONE).setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-		new Label(composite, SWT.WRAP).setText("NOTE: Saved passwords are stored on your computer in a file that is difficult, but not impossible, for an intruder to read.");
+		warningLabel = new Label(composite, SWT.WRAP);
+		warningLabel.setText("NOTE: Saved passwords are stored on your computer in a file that is difficult, but not impossible, for an intruder to read.");
 		
 		super.setControl(composite);
 	}
@@ -176,16 +180,6 @@
 		}
 	}
 	
-	private Composite createComposite(Composite parent, int numColumns) {
-		Composite composite = new Composite(parent, SWT.NULL);
-		
-		GridLayout layout = new GridLayout();
-		layout.numColumns = numColumns;
-		composite.setLayout(layout);
-		composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-		return composite;
-	}
-	
 	private void updateModel() {
 		GuvWizardModel model = ((IGuvnorWizard)super.getWizard()).getModel();
 		try {

Modified: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/SelectGuvnorFolderPage.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/SelectGuvnorFolderPage.java	2008-07-10 19:27:42 UTC (rev 21001)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/SelectGuvnorFolderPage.java	2008-07-10 21:21:26 UTC (rev 21002)
@@ -9,11 +9,11 @@
 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.guvnor.tools.Activator;
 import org.guvnor.tools.GuvnorRepository;
+import org.guvnor.tools.utils.PlatformUtils;
 import org.guvnor.tools.views.RepositoryContentProvider;
 import org.guvnor.tools.views.RepositoryLabelProvider;
 import org.guvnor.tools.views.model.TreeObject;
@@ -33,7 +33,7 @@
 	}
 	
 	public void createControl(Composite parent) {
-		Composite composite = createComposite(parent, 1);
+		Composite composite = PlatformUtils.createComposite(parent, 1);
 		new Label(composite, SWT.NONE).setText("Select folder:");
 		
 		viewer = new TreeViewer(composite, SWT.BORDER | SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL);
@@ -100,16 +100,6 @@
 		}
 		super.setVisible(visible);
 	}
-
-	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;
-	}
 	
 	@SuppressWarnings("unchecked")
 	private void updateModel() {

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-10 19:27:42 UTC (rev 21001)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/SelectGuvnorRepPage.java	2008-07-10 21:21:26 UTC (rev 21002)
@@ -6,13 +6,13 @@
 import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.events.SelectionListener;
 import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Button;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.List;
 import org.guvnor.tools.Activator;
 import org.guvnor.tools.GuvnorRepository;
+import org.guvnor.tools.utils.PlatformUtils;
 
 public class SelectGuvnorRepPage extends WizardPage {
 	
@@ -29,7 +29,7 @@
 	}
 	
 	public void createControl(Composite parent) {
-		Composite composite = createComposite(parent, 1);
+		Composite composite = PlatformUtils.createComposite(parent, 1);
 		new Label(composite, SWT.NONE).setText("This wizard allow you to check out resource from a Guvnor repository");
 		
 		createRep = new Button(composite, SWT.RADIO);
@@ -82,16 +82,6 @@
 		}
 	}
 	
-	private Composite createComposite(Composite parent, int numColumns) {
-		Composite composite = new Composite(parent, SWT.NULL);
-		
-		GridLayout layout = new GridLayout();
-		layout.numColumns = numColumns;
-		composite.setLayout(layout);
-		composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-		return composite;
-	}
-	
 	private void updateModel() {
 		GuvWizardModel model = ((IGuvnorWizard)super.getWizard()).getModel();
 		if (createRep.getSelection()) {

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-10 19:27:42 UTC (rev 21001)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/SelectGuvnorResourcesPage.java	2008-07-10 21:21:26 UTC (rev 21002)
@@ -12,11 +12,11 @@
 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.guvnor.tools.Activator;
 import org.guvnor.tools.GuvnorRepository;
+import org.guvnor.tools.utils.PlatformUtils;
 import org.guvnor.tools.views.RepositoryContentProvider;
 import org.guvnor.tools.views.RepositoryLabelProvider;
 import org.guvnor.tools.views.model.TreeObject;
@@ -35,7 +35,7 @@
 	}
 	
 	public void createControl(Composite parent) {
-		Composite composite = createComposite(parent, 1);
+		Composite composite = PlatformUtils.createComposite(parent, 1);
 		new Label(composite, SWT.NONE).setText("Select resources:");
 		
 		viewer = new TreeViewer(composite, SWT.BORDER | SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
@@ -102,16 +102,6 @@
 		}
 		super.setVisible(visible);
 	}
-
-	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;
-	}
 	
 	@SuppressWarnings("unchecked")
 	private void updateModel() {

Modified: 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	2008-07-10 19:27:42 UTC (rev 21001)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/SelectLocalTargetPage.java	2008-07-10 21:21:26 UTC (rev 21002)
@@ -12,11 +12,11 @@
 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;
+import org.guvnor.tools.utils.PlatformUtils;
 
 public class SelectLocalTargetPage extends WizardPage {
 	
@@ -31,7 +31,7 @@
 	}
 	
 	public void createControl(Composite parent) {
-		Composite composite = createComposite(parent, 1);
+		Composite composite = PlatformUtils.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);
@@ -48,16 +48,6 @@
 		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();

Modified: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/SelectResourceVersionPage.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/SelectResourceVersionPage.java	2008-07-10 19:27:42 UTC (rev 21001)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/SelectResourceVersionPage.java	2008-07-10 21:21:26 UTC (rev 21002)
@@ -4,10 +4,10 @@
 import org.eclipse.jface.wizard.WizardPage;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.List;
+import org.guvnor.tools.utils.PlatformUtils;
 
 public class SelectResourceVersionPage extends WizardPage {
 	
@@ -22,7 +22,7 @@
 	}
 	
 	public void createControl(Composite parent) {
-		Composite composite = createComposite(parent, 1);
+		Composite composite = PlatformUtils.createComposite(parent, 1);
 		new Label(composite, SWT.NONE).setText("Select version:");
 		
 		versions = new List(composite, SWT.BORDER | SWT.MULTI);
@@ -39,14 +39,4 @@
 		versions.add("v20080705");
 		versions.setSelection(0);
 	}
-	
-	private Composite createComposite(Composite parent, int numColumns) {
-		Composite composite = new Composite(parent, SWT.NULL);
-		
-		GridLayout layout = new GridLayout();
-		layout.numColumns = numColumns;
-		composite.setLayout(layout);
-		composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-		return composite;
-	}
 }




More information about the jboss-svn-commits mailing list