[jboss-svn-commits] JBL Code SVN: r20986 - in labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools: META-INF and 6 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Wed Jul 9 17:11:42 EDT 2008
Author: john.graham at jboss.org
Date: 2008-07-09 17:11:42 -0400 (Wed, 09 Jul 2008)
New Revision: 20986
Added:
labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/views/ResourceHistoryLabelProvider.java
labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/views/model/ResourceHistoryEntry.java
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/SelectGuvnorFolderPage.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/actions/AddAction.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/actions/UpdateAction.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/PlatformUtils.java
labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/webdav/IWebDavClient.java
labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/webdav/WebDavClient.java
labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/views/RepositoryContentProvider.java
labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/views/RepositoryView.java
labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/views/ResourceHistoryView.java
labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/views/model/TreeParent.java
labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/CheckoutWizard.java
labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/GuvWizardModel.java
labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/SelectGuvnorRepPage.java
labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/WizardUtils.java
Log:
Initial version history support; add action implemented
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-09 19:28:20 UTC (rev 20985)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/META-INF/MANIFEST.MF 2008-07-09 21:11:42 UTC (rev 20986)
@@ -2,7 +2,7 @@
Bundle-ManifestVersion: 2
Bundle-Name: %plugin.name
Bundle-SymbolicName: org.guvnor.tools;singleton:=true
-Bundle-Version: 0.6.0.200807071811
+Bundle-Version: 0.6.0.200807091700
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-09 19:28:20 UTC (rev 20985)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/plugin.xml 2008-07-09 21:11:42 UTC (rev 20986)
@@ -79,12 +79,18 @@
<objectContribution objectClass="org.guvnor.tools.views.model.TreeObject"
adaptable="true"
id="org.guvnor.tools.view.model.actions">
- <action label="%action.properties"
+ <action label="%action.properties"
tooltip="%action.properties.tooltip"
class="org.guvnor.tools.actions.RepositoryElementPropsAction"
menubarPath="additions"
id="org.guvnor.tools.view.model.actions.properties">
- </action>
+ </action>
+ <action class="org.guvnor.tools.actions.ShowHistoryAction"
+ enablesFor="1"
+ id="org.guvnor.tools.actions.showhistoryaction"
+ label="%action.popup.showhistory"
+ menubarPath="additions">
+ </action>
</objectContribution>
<objectContribution id="org.guvnor.tools.contribution1"
objectClass="org.eclipse.core.resources.IFile">
Modified: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/actions/AddAction.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/actions/AddAction.java 2008-07-09 19:28:20 UTC (rev 20985)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/actions/AddAction.java 2008-07-09 21:11:42 UTC (rev 20986)
@@ -3,20 +3,22 @@
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.jface.wizard.WizardDialog;
import org.eclipse.ui.IActionDelegate;
import org.eclipse.ui.IObjectActionDelegate;
import org.eclipse.ui.IWorkbenchPart;
import org.guvnor.tools.Activator;
import org.guvnor.tools.utils.GuvnorMetadataUtils;
+import org.guvnor.tools.utils.PlatformUtils;
+import org.guvnor.tools.wizards.AddResourceWizard;
public class AddAction implements IObjectActionDelegate {
- private IFile selectedFile;
-
+ private IStructuredSelection sel;
+ private IWorkbenchPart targetPart;
+
/**
* Constructor for Action1.
*/
@@ -28,34 +30,37 @@
* @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",
- "Show History was executed.");
+ assert(targetPart != null && sel != null);
+ AddResourceWizard wiz = new AddResourceWizard();
+ wiz.init(Activator.getDefault().getWorkbench(), sel);
+ WizardDialog dialog = new WizardDialog(targetPart.getSite().getShell(), wiz);
+ dialog.create();
+ if (dialog.open() == WizardDialog.OK) {
+ PlatformUtils.refreshRepositoryView();
+ }
}
-
+
/**
* @see IActionDelegate#selectionChanged(IAction, ISelection)
*/
public void selectionChanged(IAction action, ISelection selection) {
// Reset state to default
- selectedFile = null;
+ sel = null;
action.setEnabled(false);
// See if we should enable for the selection
try {
if (selection instanceof IStructuredSelection) {
- IStructuredSelection sel = (IStructuredSelection)selection;
+ sel = (IStructuredSelection)selection;
if (sel.getFirstElement() instanceof IFile) {
IFile mdFile = GuvnorMetadataUtils.findGuvnorMetadata((IFile)sel.getFirstElement());
if (mdFile == null) {
- selectedFile = (IFile)sel.getFirstElement();
action.setEnabled(true);
}
}
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-09 19:28:20 UTC (rev 20985)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/actions/CompareVersionAction.java 2008-07-09 21:11:42 UTC (rev 20986)
@@ -54,7 +54,8 @@
try {
if (selection instanceof IStructuredSelection) {
IStructuredSelection sel = (IStructuredSelection)selection;
- if (sel.getFirstElement() instanceof IFile) {
+ if (sel.getFirstElement() instanceof IFile
+ && sel.size() == 1) {
props = GuvnorMetadataUtils.getGuvnorMetadata((IFile)sel.getFirstElement());
if (props != null) {
selectedFile = (IFile)sel.getFirstElement();
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-09 19:28:20 UTC (rev 20985)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/actions/ShowHistoryAction.java 2008-07-09 21:11:42 UTC (rev 20986)
@@ -1,21 +1,33 @@
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.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.ResourceHistoryView;
+import org.guvnor.tools.views.model.TreeObject;
public class ShowHistoryAction implements IObjectActionDelegate {
private IFile selectedFile;
+ private TreeObject selectedNode;
private GuvnorMetadataProps props;
/**
@@ -35,35 +47,89 @@
* @see IActionDelegate#run(IAction)
*/
public void run(IAction action) {
- Shell shell = new Shell();
- MessageDialog.openInformation(
- shell,
- "JBoss Guvnor Tools Plug-in",
- "Show History was executed.");
+ String repositoryLoc = null;
+ String fullPath = null;
+
+ if (selectedNode != null) {
+ repositoryLoc = selectedNode.getGuvnorRepository().getLocation();
+ fullPath = selectedNode.getFullPath();
+ } else {
+ if (selectedFile == null
+ || props == null) {
+ return;
+ }
+ repositoryLoc = props.getRepository();
+ fullPath = props.getFullpath();
+ }
+
+ try {
+ IWebDavClient client = WebDavServerCache.getWebDavClient(repositoryLoc);
+ if (client == null) {
+ client = WebDavClientFactory.createClient(new URL(repositoryLoc));
+ WebDavServerCache.cacheWebDavClient(repositoryLoc, client);
+ }
+ InputStream ins = null;
+ try {
+ ins = client.getResourceVersions(fullPath);
+ } 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(repositoryLoc, client);
+ if (retry) {
+ ins = client.getResourceVersions(fullPath);
+ }
+ }
+ if (ins != null) {
+ Properties verProps = new Properties();
+ verProps.load(ins);
+ ResourceHistoryView view = PlatformUtils.getResourceHistoryView();
+ if (view != null) {
+ view.setEntries(verProps);
+ }
+ }
+ } catch (Exception e) {
+ Activator.getDefault().writeLog(IStatus.ERROR, e.getMessage(), e);
+ }
}
/**
* @see IActionDelegate#selectionChanged(IAction, ISelection)
- */
+ */
public void selectionChanged(IAction action, ISelection selection) {
// Reset state to default
selectedFile = null;
+ selectedNode = null;
props = null;
action.setEnabled(false);
- // See if we should enable for the selection
- try {
- if (selection instanceof IStructuredSelection) {
- IStructuredSelection sel = (IStructuredSelection)selection;
- if (sel.getFirstElement() instanceof IFile) {
- props = GuvnorMetadataUtils.getGuvnorMetadata((IFile)sel.getFirstElement());
- if (props != null) {
- selectedFile = (IFile)sel.getFirstElement();
- action.setEnabled(true);
- }
+
+ if (!(selection instanceof IStructuredSelection)) {
+ return;
+ }
+
+ IStructuredSelection sel = (IStructuredSelection)selection;
+ if (sel.size() != 1) {
+ return;
+ }
+
+ if (sel.getFirstElement() instanceof IFile) {
+ try {
+ props = GuvnorMetadataUtils.getGuvnorMetadata((IFile)sel.getFirstElement());
+ if (props != null) {
+ selectedFile = (IFile)sel.getFirstElement();
+ action.setEnabled(true);
}
- }
- } catch (Exception e) {
- Activator.getDefault().writeLog(IStatus.ERROR, e.getMessage(), e);
+ } catch (Exception e) {
+ Activator.getDefault().writeLog(IStatus.ERROR, e.getMessage(), e);
+ }
}
+ if (sel.getFirstElement() instanceof TreeObject) {
+ if (((TreeObject)sel.getFirstElement()).getNodeType() == TreeObject.Type.RESOURCE) {
+ selectedNode = (TreeObject)sel.getFirstElement();
+ action.setEnabled(true);
+ }
+ }
}
}
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-09 19:28:20 UTC (rev 20985)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/actions/SwitchVersionAction.java 2008-07-09 21:11:42 UTC (rev 20986)
@@ -54,7 +54,8 @@
try {
if (selection instanceof IStructuredSelection) {
IStructuredSelection sel = (IStructuredSelection)selection;
- if (sel.getFirstElement() instanceof IFile) {
+ if (sel.getFirstElement() instanceof IFile
+ && sel.size() == 1) {
props = GuvnorMetadataUtils.getGuvnorMetadata((IFile)sel.getFirstElement());
if (props != null) {
selectedFile = (IFile)sel.getFirstElement();
Modified: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/actions/UpdateAction.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/actions/UpdateAction.java 2008-07-09 19:28:20 UTC (rev 20985)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/actions/UpdateAction.java 2008-07-09 21:11:42 UTC (rev 20986)
@@ -57,7 +57,7 @@
}
InputStream ins = null;
try {
- ins = client.getInputStream(props.getFullpath());
+ ins = client.getResourceInputStream(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
@@ -66,7 +66,7 @@
boolean retry = PlatformUtils.getInstance().
authenticateForServer(props.getRepository(), client);
if (retry) {
- ins = client.getInputStream(props.getFullpath());
+ ins = client.getResourceInputStream(props.getFullpath());
}
}
if (ins != null) {
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-09 19:28:20 UTC (rev 20985)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/AuthenticationPromptDialog.java 2008-07-09 21:11:42 UTC (rev 20986)
@@ -38,6 +38,8 @@
private String password;
private boolean saveInfo;
+ private Label warningLabel;
+
public AuthenticationPromptDialog(Shell parentShell, String serverName) {
super(parentShell);
super.setShellStyle(getShellStyle() | SWT.RESIZE);
@@ -78,6 +80,7 @@
public void widgetSelected(SelectionEvent e) {
saveInfo = cbSavePassword.getSelection();
+ warningLabel.setEnabled(saveInfo);
}
});
@@ -89,7 +92,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.");
return super.createDialogArea(parent);
}
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-09 19:28:20 UTC (rev 20985)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/PlatformUtils.java 2008-07-09 21:11:42 UTC (rev 20986)
@@ -23,6 +23,9 @@
import org.guvnor.tools.utils.webdav.WebDavClientFactory;
import org.guvnor.tools.utils.webdav.WebDavServerCache;
import org.guvnor.tools.utils.webdav.WebDavSessionAuthenticator;
+import org.guvnor.tools.views.IGuvnorConstants;
+import org.guvnor.tools.views.RepositoryView;
+import org.guvnor.tools.views.ResourceHistoryView;
/**
* A set of utilities for interacting with the Eclipse platform.
@@ -44,11 +47,54 @@
return instance;
}
+ /**
+ * Causes the platform to update Guvnor decoration notions.
+ */
public static void updateDecoration() {
IDecoratorManager manager = Activator.getDefault().getWorkbench().getDecoratorManager();
manager.update(GuvnorDecorator.DECORATOR_ID);
}
+
/**
+ * Causes the Repository view to refresh, if it is open.
+ */
+ public static void refreshRepositoryView() {
+ IWorkbenchWindow activeWindow = Activator.getDefault().
+ getWorkbench().getActiveWorkbenchWindow();
+ // If there is no active workbench window, then there can be no Repository view
+ if (activeWindow == null) {
+ return;
+ }
+ // If there is no active workbench page, then there can be no Repository view
+ IWorkbenchPage page = activeWindow.getActivePage();
+ if (page == null) {
+ return;
+ }
+ RepositoryView view = (RepositoryView)page.findView(IGuvnorConstants.REPVIEW_ID);
+ if (view != null) {
+ view.refresh();
+ }
+ }
+
+ /**
+ * Tries to find the Resource History view, attempting to open it if necessary.
+ */
+ public static ResourceHistoryView getResourceHistoryView() throws Exception {
+ IWorkbenchWindow activeWindow = Activator.getDefault().
+ getWorkbench().getActiveWorkbenchWindow();
+ // If there is no active workbench window, then there can be no Repository History view
+ if (activeWindow == null) {
+ return null;
+ }
+ // If there is no active workbench page, then there can be no Repository History view
+ IWorkbenchPage page = activeWindow.getActivePage();
+ if (page == null) {
+ return null;
+ }
+ return (ResourceHistoryView)page.showView(IGuvnorConstants.RESHISTORYVIEW_ID);
+ }
+
+ /**
* Opens a read-only, in-memory editor.
* @param contents The contents for the editor
* @param name The name of the file. Will be used to determine
@@ -83,7 +129,6 @@
WebDavSessionAuthenticator authen = new WebDavSessionAuthenticator();
authen.addAuthenticationInfo(new URL(server), "", "basic", res.getAuthInfo());
client.setSessionAuthenticator(authen);
- client.setSessionAuthentication(true);
}
return true;
} else {
@@ -109,7 +154,6 @@
WebDavSessionAuthenticator authen = new WebDavSessionAuthenticator();
authen.addAuthenticationInfo(new URL(server), "", "basic", info);
client.setSessionAuthenticator(authen);
- client.setSessionAuthentication(true);
}
}
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-09 19:28:20 UTC (rev 20985)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/webdav/IWebDavClient.java 2008-07-09 21:11:42 UTC (rev 20986)
@@ -14,25 +14,13 @@
public interface IWebDavClient {
/**
* Tell the client to use the supplied authenticator, instead
- * of one tied to the platform key ring.
+ * of one tied to the platform key ring. If the authenticator is
+ * null, the client defaults back to the platform key ring authenticator.
* @param sessionAuthen The authenticator
*/
public void setSessionAuthenticator(IAuthenticator sessionAuthen);
/**
- * Answers whether a session-oriented authenticator is in use or not.
- */
- public boolean isUsingSessionAuthenication();
-
- /**
- * Tell the client to use a session authenticator or not.
- * @param useSession true to use session authentication, false for default authentication
- * @return false if a session authenticator is not registered but the request is
- * to use session authentication.
- */
- public boolean setSessionAuthentication(boolean useSession);
-
- /**
* Provides access to the underlying RemoteDAVClient.
* @return The client associated with the current repository connection.
*/
@@ -74,9 +62,24 @@
* @return An code>InputStream</code> for the resource
* @throws Exception Various WebDav errors can occur (See IResponse for details)
*/
- public InputStream getInputStream(String resource) throws Exception;
+ public InputStream getResourceInputStream(String resource) throws Exception;
/**
+ * Same as createResource(resource, is, true)
+ */
+ public boolean createResource(String resource, InputStream is) throws Exception;
+
+ /**
+ * Creates a file in the WebDav repository
+ * @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
+ * @return false if the file exists and overwrite = false
+ * @throws Exception Various WebDav errors can occur (See IResponse for details)
+ */
+ public boolean createResource(String resource, InputStream is, boolean overwrite) throws Exception;
+
+ /**
* Write a file to the WebDav repository
* @param resource The path and name of the resource
* @param is A stream to the file contents
@@ -85,6 +88,14 @@
public void putResource(String resource, InputStream is) throws Exception;
/**
+ * Gets all the version information for a resource
+ * @param resource The file to get version information about
+ * @return A stream to the version properties
+ * @throws Exception Various WebDav errors can occur (See IResponse for details)
+ */
+ public InputStream getResourceVersions(String resource) throws Exception;
+
+ /**
* <b>Must</b> be called after server operation methods to ensure
* resource clean up.
*/
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-09 19:28:20 UTC (rev 20985)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/webdav/WebDavClient.java 2008-07-09 21:11:42 UTC (rev 20986)
@@ -18,12 +18,11 @@
*
*/
public class WebDavClient implements IWebDavClient {
+
private RemoteDAVClient client;
- private WebDavAuthenticator authen;
- private IAuthenticator sessionAuthen;
- private HttpClient hClient;
- private boolean usingSessionAuthen;
+ private WebDavAuthenticator platformAuthenticator;
+ private HttpClient httpClient;
private IResponse response;
@@ -32,10 +31,10 @@
* @param serverUrl The WebDav repository location (server)
*/
/** package */ WebDavClient(URL serverUrl) {
- authen = new WebDavAuthenticator(serverUrl);
- hClient = new HttpClient();
- hClient.setAuthenticator(authen);
- client = new RemoteDAVClient(new WebDAVFactory(), hClient);
+ platformAuthenticator = new WebDavAuthenticator(serverUrl);
+ httpClient = new HttpClient();
+ httpClient.setAuthenticator(platformAuthenticator);
+ client = new RemoteDAVClient(new WebDAVFactory(), httpClient);
}
/*
@@ -43,29 +42,10 @@
* @see org.guvnor.tools.utils.webdav.IWebDavClient#setSessionAuthenticator(org.eclipse.webdav.http.client.IAuthenticator)
*/
public void setSessionAuthenticator(IAuthenticator sessionAuthen) {
- this.sessionAuthen = sessionAuthen;
- }
-
- /*
- * (non-Javadoc)
- * @see org.guvnor.tools.utils.webdav.IWebDavClient#isUsingSessionAuthenication()
- */
- public boolean isUsingSessionAuthenication() {
- return usingSessionAuthen;
- }
-
- /*
- * (non-Javadoc)
- * @see org.guvnor.tools.utils.webdav.IWebDavClient#setSessionAuthentication(boolean)
- */
- public boolean setSessionAuthentication(boolean useSession) {
- // We can't use session authenticator, if a session authenticator isn't present
- if (useSession && sessionAuthen == null) {
- usingSessionAuthen = false;
- return false;
+ if (sessionAuthen != null) {
+ httpClient.setAuthenticator(sessionAuthen);
} else {
- usingSessionAuthen = useSession;
- return true;
+ httpClient.setAuthenticator(platformAuthenticator);
}
}
@@ -82,7 +62,10 @@
* @see org.guvnor.tools.utils.webdav.IWebDavClient#createContext()
*/
public IContext createContext() {
- return WebDAVFactory.contextFactory.newContext();
+ IContext context = WebDAVFactory.contextFactory.newContext();
+ // Need to make sure the USER-AGENT header is present for Guvnor
+ context.put("USER-AGENT", "guvnor");
+ return context;
}
/*
@@ -90,28 +73,15 @@
* @see org.guvnor.tools.utils.webdav.IWebDavClient#listDirectory(java.lang.String)
*/
public Map<String, ResourceProperties> listDirectory(String path) throws Exception {
- if (isUsingSessionAuthenication()) {
- if (sessionAuthen != null) {
- hClient.setAuthenticator(sessionAuthen);
- } else {
- setSessionAuthentication(false);
- }
+ IContext context = createContext();
+ context.put("Depth", "1");
+ ILocator locator = WebDAVFactory.locatorFactory.newLocator(path);
+ response = client.propfind(locator, context, null);
+ if (response.getStatusCode() != IResponse.SC_MULTI_STATUS) {
+ throw new WebDavException("WebDav error: " + response.getStatusCode(),
+ response.getStatusCode());
}
- try {
- IContext context = createContext();
- context.put("Depth", "1");
- ILocator locator = WebDAVFactory.locatorFactory.newLocator(path);
- response = client.propfind(locator, context, null);
- if (response.getStatusCode() != IResponse.SC_MULTI_STATUS) {
- throw new WebDavException("WebDav error: " + response.getStatusCode(),
- response.getStatusCode());
- }
- return StreamProcessingUtils.parseListing(path, response.getInputStream());
- } finally {
- if (isUsingSessionAuthenication()) {
- hClient.setAuthenticator(authen);
- }
- }
+ return StreamProcessingUtils.parseListing(path, response.getInputStream());
}
/*
@@ -119,33 +89,21 @@
* @see org.guvnor.tools.utils.webdav.IWebDavClient#queryProperties(java.lang.String)
*/
public ResourceProperties queryProperties(String resource) throws Exception {
- if (isUsingSessionAuthenication()) {
- if (sessionAuthen != null) {
- hClient.setAuthenticator(sessionAuthen);
- } else {
- setSessionAuthentication(false);
- }
+ IContext context = createContext();
+ context.put("Depth", "1");
+ ILocator locator = WebDAVFactory.locatorFactory.newLocator(resource);
+ response = client.propfind(locator, context, null);
+ if (response.getStatusCode() != IResponse.SC_MULTI_STATUS
+ && response.getStatusCode() != IResponse.SC_OK) {
+ throw new WebDavException("WebDav error: " + response.getStatusCode(),
+ response.getStatusCode());
}
- try {
- IContext context = createContext();
- context.put("Depth", "1");
- ILocator locator = WebDAVFactory.locatorFactory.newLocator(resource);
- response = client.propfind(locator, context, null);
- if (response.getStatusCode() != IResponse.SC_MULTI_STATUS) {
- throw new WebDavException("WebDav error: " + response.getStatusCode(),
- response.getStatusCode());
- }
- Map<String, ResourceProperties> props =
- StreamProcessingUtils.parseListing("", response.getInputStream());
- if (props.keySet().size() != 1) {
- throw new Exception(props.keySet().size() + " entries found for " + resource);
- }
- return props.get(props.keySet().iterator().next());
- } finally {
- if (isUsingSessionAuthenication()) {
- hClient.setAuthenticator(authen);
- }
+ Map<String, ResourceProperties> props =
+ StreamProcessingUtils.parseListing("", response.getInputStream());
+ if (props.keySet().size() != 1) {
+ throw new Exception(props.keySet().size() + " entries found for " + resource);
}
+ return props.get(props.keySet().iterator().next());
}
/*
@@ -153,21 +111,14 @@
* @see org.guvnor.tools.utils.webdav.IWebDavClient#getResourceContents(java.lang.String)
*/
public String getResourceContents(String resource) throws Exception {
- return StreamProcessingUtils.getStreamContents(getInputStream(resource));
+ return StreamProcessingUtils.getStreamContents(getResourceInputStream(resource));
}
/*
* (non-Javadoc)
* @see org.guvnor.tools.utils.webdav.IWebDavClient#getInputStream(java.lang.String)
*/
- public InputStream getInputStream(String resource) throws Exception {
- if (isUsingSessionAuthenication()) {
- if (sessionAuthen != null) {
- hClient.setAuthenticator(sessionAuthen);
- } else {
- setSessionAuthentication(false);
- }
- }
+ public InputStream getResourceInputStream(String resource) throws Exception {
ILocator locator = WebDAVFactory.locatorFactory.newLocator(resource);
IResponse response = client.get(locator, createContext());
if (response.getStatusCode() != IResponse.SC_OK) {
@@ -179,16 +130,48 @@
/*
* (non-Javadoc)
- * @see org.guvnor.tools.utils.webdav.IWebDavClient#putResource(java.lang.String, java.io.InputStream)
+ * @see org.guvnor.tools.utils.webdav.IWebDavClient#createResource(java.lang.String, java.io.InputStream)
*/
- public void putResource(String resource, InputStream is) throws Exception {
- if (isUsingSessionAuthenication()) {
- if (sessionAuthen != null) {
- hClient.setAuthenticator(sessionAuthen);
- } else {
- setSessionAuthentication(false);
+ public boolean createResource(String resource, InputStream is) throws Exception {
+ return createResource(resource, is, true);
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.guvnor.tools.utils.webdav.IWebDavClient#createResource(java.lang.String, java.io.InputStream, boolean)
+ */
+ public boolean createResource(String resource, InputStream is, boolean overwrite) throws Exception {
+ boolean res = true;
+ if (!overwrite) {
+ try {
+ if (queryProperties(resource) != null) {
+ res = false;
+ }
+ } catch (Exception e) {
+ if (response.getStatusCode() != IResponse.SC_NOT_FOUND) {
+ closeResponse();
+ throw e;
+ }
}
+ closeResponse();
}
+ if (res) {
+ ILocator locator = WebDAVFactory.locatorFactory.newLocator(resource);
+ IResponse response = client.put(locator, createContext(), is);
+ if (response.getStatusCode() != IResponse.SC_OK
+ && response.getStatusCode() != IResponse.SC_CREATED) {
+ throw new WebDavException("WebDav error: " + response.getStatusCode(),
+ response.getStatusCode());
+ }
+ }
+ return res;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.guvnor.tools.utils.webdav.IWebDavClient#putResource(java.lang.String, java.io.InputStream)
+ */
+ public void putResource(String resource, InputStream is) throws Exception {
ILocator locator = WebDAVFactory.locatorFactory.newLocator(resource);
IResponse response = client.put(locator, createContext(), is);
if (response.getStatusCode() != IResponse.SC_OK
@@ -200,6 +183,19 @@
/*
* (non-Javadoc)
+ * @see org.guvnor.tools.utils.webdav.IWebDavClient#getResourceVersions(java.lang.String)
+ */
+ public InputStream getResourceVersions(String resource) throws Exception {
+ String apiVer = changeToAPICall(resource) + "?version=all";
+ return getResourceInputStream(apiVer);
+ }
+
+ private String changeToAPICall(String path) {
+ return path.replaceFirst("/webdav/", "/api/");
+ }
+
+ /*
+ * (non-Javadoc)
* @see org.guvnor.tools.utils.webdav.IWebDavClient#closeResponse()
*/
public void closeResponse() throws Exception {
Modified: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/views/RepositoryContentProvider.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/views/RepositoryContentProvider.java 2008-07-09 19:28:20 UTC (rev 20985)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/views/RepositoryContentProvider.java 2008-07-09 21:11:42 UTC (rev 20986)
@@ -21,14 +21,28 @@
private String repUrl;
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
+ */
public void inputChanged(Viewer v, Object oldInput, Object newInput) {
if (v instanceof AbstractTreeViewer) {
viewer = (AbstractTreeViewer)v;
manager = new DeferredTreeContentManager(this, viewer);
}
}
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.jface.viewers.IContentProvider#dispose()
+ */
public void dispose() {
}
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
+ */
public Object[] getElements(Object parent) {
if (parent.equals(viewer)) {
if (invisibleRoot == null) initialize();
@@ -36,12 +50,22 @@
}
return getChildren(parent);
}
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.jface.viewers.ITreeContentProvider#getParent(java.lang.Object)
+ */
public Object getParent(Object child) {
if (child instanceof TreeObject) {
return ((TreeObject)child).getParent();
}
return null;
}
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java.lang.Object)
+ */
public Object [] getChildren(Object parent) {
if (parent == invisibleRoot) {
return ((TreeParent)invisibleRoot).getChildren();
@@ -50,6 +74,11 @@
}
return new Object[0];
}
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.Object)
+ */
public boolean hasChildren(Object parent) {
if (parent instanceof TreeParent) {
return manager.mayHaveChildren(parent);
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-09 19:28:20 UTC (rev 20985)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/views/RepositoryView.java 2008-07-09 21:11:42 UTC (rev 20986)
@@ -95,7 +95,11 @@
addDragDropSupport();
}
-
+
+ public void refresh() {
+ viewer.refresh();
+ }
+
private void addDragDropSupport() {
// TODO: Support drag and drop of multiple files, directories, etc.
Transfer[] transfers = new Transfer[] { FileTransfer.getInstance()};
@@ -307,17 +311,6 @@
return res;
}
-// private void putResource(TreeParent node, String name, InputStream is) throws Exception {
-// GuvnorRepository rep = node.getGuvnorRepository();
-// WebDavClient webdav = WebDavServerCache.getWebDavClient(rep.getLocation());
-// if (webdav == null) {
-// webdav = new WebDavClient(new URL(rep.getLocation()),
-// rep.getUsername(), rep.getPassword());
-// WebDavServerCache.cacheWebDavClient(rep.getLocation(), webdav);
-// }
-// webdav.putResource(node.getFullPath(), name, is);
-// }
-
/*
* (non-Javadoc)
* @see org.eclipse.ui.part.WorkbenchPart#setFocus()
Added: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/views/ResourceHistoryLabelProvider.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/views/ResourceHistoryLabelProvider.java (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/views/ResourceHistoryLabelProvider.java 2008-07-09 21:11:42 UTC (rev 20986)
@@ -0,0 +1,57 @@
+package org.guvnor.tools.views;
+
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.jface.viewers.ITableLabelProvider;
+import org.eclipse.swt.graphics.Image;
+import org.guvnor.tools.views.model.ResourceHistoryEntry;
+/**
+ * Label provider for the Resource History view.
+ * @author jgraham
+ *
+ */
+public class ResourceHistoryLabelProvider implements ITableLabelProvider {
+
+ public Image getColumnImage(Object element, int columnIndex) {
+ return null;
+ }
+
+ public String getColumnText(Object element, int columnIndex) {
+ if (!(element instanceof ResourceHistoryEntry)) {
+ return element.toString();
+ }
+ ResourceHistoryEntry entry = (ResourceHistoryEntry) element;
+ String res = null;
+ switch (columnIndex) {
+ case 0:
+ res = entry.getRevision();
+ break;
+ case 1:
+ res = entry.getDate();
+ break;
+ case 2:
+ res = entry.getAuthor();
+ break;
+ case 3:
+ res = entry.getComment();
+ break;
+ default:
+ res = entry.toString();
+ break;
+ }
+ return res;
+
+ }
+
+ public void addListener(ILabelProviderListener listener) {
+ }
+
+ public void dispose() {
+ }
+
+ public boolean isLabelProperty(Object element, String property) {
+ return false;
+ }
+
+ public void removeListener(ILabelProviderListener listener) {
+ }
+}
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-09 19:28:20 UTC (rev 20985)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/views/ResourceHistoryView.java 2008-07-09 21:11:42 UTC (rev 20986)
@@ -1,231 +1,121 @@
package org.guvnor.tools.views;
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.action.IMenuListener;
-import org.eclipse.jface.action.IMenuManager;
-import org.eclipse.jface.action.IToolBarManager;
-import org.eclipse.jface.action.MenuManager;
-import org.eclipse.jface.action.Separator;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.jface.viewers.DoubleClickEvent;
-import org.eclipse.jface.viewers.IDoubleClickListener;
-import org.eclipse.jface.viewers.ISelection;
+import java.util.Enumeration;
+import java.util.NoSuchElementException;
+import java.util.Properties;
+import java.util.StringTokenizer;
+
import org.eclipse.jface.viewers.IStructuredContentProvider;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.ITableLabelProvider;
-import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.jface.viewers.ViewerSorter;
import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.SashForm;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.SelectionListener;
-import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Menu;
-import org.eclipse.swt.widgets.Text;
-import org.eclipse.ui.IActionBars;
-import org.eclipse.ui.ISharedImages;
-import org.eclipse.ui.IWorkbenchActionConstants;
-import org.eclipse.ui.PlatformUI;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.ui.part.ViewPart;
+import org.guvnor.tools.views.model.ResourceHistoryEntry;
public class ResourceHistoryView extends ViewPart {
private TableViewer viewer;
- private Text verNotes;
- private Text verOwner;
- private Action action1;
- private Action action2;
- private Action doubleClickAction;
-
- class ViewContentProvider implements IStructuredContentProvider {
- public void inputChanged(Viewer v, Object oldInput, Object newInput) {
- }
- public void dispose() {
- }
- public Object[] getElements(Object parent) {
- return new Object[] { };
-// return new String[] { "v20080522", "v20080516", "v20080424" };
- }
- }
- class ViewLabelProvider extends LabelProvider implements ITableLabelProvider {
- public String getColumnText(Object obj, int index) {
- return getText(obj);
- }
- public Image getColumnImage(Object obj, int index) {
- return getImage(obj);
- }
- public Image getImage(Object obj) {
- return PlatformUI.getWorkbench().
- getSharedImages().getImage(ISharedImages.IMG_OBJ_FILE);
- }
- }
- class NameSorter extends ViewerSorter {
- }
-
+ private ResourceHistoryEntry[] entries;
+
/**
* The constructor.
*/
public ResourceHistoryView() {
+ entries = new ResourceHistoryEntry[0];
}
- private void updateDetails(String selection) {
- //TODO: Need a model for version entries, comments, etc.
-// if (selection.equals("v20080522")) {
-// verNotes.setText("Remove dead code");
-// verOwner.setText("jgraham");
-// }
-// if (selection.equals("v20080516")) {
-// verNotes.setText("Add new branch");
-// verOwner.setText("tyler");
-// }
-// if (selection.equals("v20080424")) {
-// verNotes.setText("Inital check in");
-// verOwner.setText("ygm");
-// }
- }
-
public void createPartControl(Composite parent) {
- Composite composite = createComposite(parent, 1);
-
- viewer = new TableViewer(composite, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
+ viewer = new TableViewer(createTable(parent));
viewer.getTable().setLayoutData(new GridData(GridData.FILL_BOTH));
- viewer.setContentProvider(new ViewContentProvider());
- viewer.setLabelProvider(new ViewLabelProvider());
- viewer.setSorter(new NameSorter());
- viewer.setInput(getViewSite());
- viewer.getTable().addSelectionListener(new SelectionListener() {
- public void widgetDefaultSelected(SelectionEvent e) { }
-
- public void widgetSelected(SelectionEvent e) {
- updateDetails(viewer.getTable().getSelection()[0].getText());
- }
- });
-
- SashForm sash = new SashForm(composite, SWT.HORIZONTAL);
- sash.setLayoutData(new GridData(GridData.FILL_BOTH));
-
- verNotes = new Text(sash, SWT.BORDER | SWT.MULTI);
- verNotes.setLayoutData(new GridData(GridData.FILL_BOTH));
-
- verOwner = new Text(sash, SWT.BORDER | SWT.MULTI);
- verOwner.setLayoutData(new GridData(GridData.FILL_BOTH));
-
- sash.setWeights(new int[]{70, 30});
-
- makeActions();
- hookContextMenu();
- hookDoubleClickAction();
- contributeToActionBars();
-
- if (viewer.getTable().getItemCount() > 0) {
- viewer.getTable().setSelection(0);
- updateDetails(viewer.getTable().getSelection()[0].getText());
- }
+ viewer.setContentProvider(new ResourceHistoryViewContentProvider());
+ viewer.setLabelProvider(new ResourceHistoryLabelProvider());
+ viewer.setInput(getViewSite());
}
- private Composite createComposite(Composite parent, int numColumns) {
- Composite composite = new Composite(parent, SWT.NULL);
+ 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);
- GridLayout layout = new GridLayout();
- layout.numColumns = numColumns;
- composite.setLayout(layout);
- composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
- return composite;
- }
-
- private void hookContextMenu() {
- MenuManager menuMgr = new MenuManager("#PopupMenu");
- menuMgr.setRemoveAllWhenShown(true);
- menuMgr.addMenuListener(new IMenuListener() {
- public void menuAboutToShow(IMenuManager manager) {
- ResourceHistoryView.this.fillContextMenu(manager);
- }
- });
- Menu menu = menuMgr.createContextMenu(viewer.getControl());
- viewer.getControl().setMenu(menu);
- getSite().registerContextMenu(menuMgr, viewer);
- }
+ GridData gridData = new GridData(GridData.FILL_BOTH);
+ gridData.grabExcessVerticalSpace = true;
+ gridData.horizontalSpan = 3;
+ table.setLayoutData(gridData);
+
+ table.setLinesVisible(true);
+ table.setHeaderVisible(true);
- private void contributeToActionBars() {
- IActionBars bars = getViewSite().getActionBars();
- fillLocalPullDown(bars.getMenuManager());
- fillLocalToolBar(bars.getToolBarManager());
- }
+ 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);
- private void fillLocalPullDown(IMenuManager manager) {
- manager.add(action1);
- manager.add(new Separator());
- manager.add(action2);
- }
-
- private void fillContextMenu(IMenuManager manager) {
- manager.add(action1);
- manager.add(action2);
- // Other plug-ins can contribute there actions here
- manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
- }
-
- private void fillLocalToolBar(IToolBarManager manager) {
- manager.add(action1);
- manager.add(action2);
- }
-
- private void makeActions() {
- action1 = new Action() {
- public void run() {
- showMessage("Action 1 executed");
- }
- };
- action1.setText("Action 1");
- action1.setToolTipText("Action 1 tooltip");
- action1.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().
- getImageDescriptor(ISharedImages.IMG_OBJS_INFO_TSK));
+ 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);
- action2 = new Action() {
- public void run() {
- showMessage("Action 2 executed");
- }
- };
- action2.setText("Action 2");
- action2.setToolTipText("Action 2 tooltip");
- action2.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().
- getImageDescriptor(ISharedImages.IMG_OBJS_INFO_TSK));
- doubleClickAction = new Action() {
- public void run() {
- ISelection selection = viewer.getSelection();
- Object obj = ((IStructuredSelection)selection).getFirstElement();
- showMessage("Double-click detected on "+obj.toString());
- }
- };
+ return table;
}
- private void hookDoubleClickAction() {
- viewer.addDoubleClickListener(new IDoubleClickListener() {
- public void doubleClick(DoubleClickEvent event) {
- doubleClickAction.run();
- }
- });
- }
- private void showMessage(String message) {
- MessageDialog.openInformation(
- viewer.getControl().getShell(),
- "Resource History View",
- message);
- }
-
/**
* Passing the focus request to the viewer's control.
*/
public void setFocus() {
viewer.getControl().setFocus();
}
+
+ 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());
+ 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
Added: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/views/model/ResourceHistoryEntry.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/views/model/ResourceHistoryEntry.java (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/views/model/ResourceHistoryEntry.java 2008-07-09 21:11:42 UTC (rev 20986)
@@ -0,0 +1,34 @@
+package org.guvnor.tools.views.model;
+
+/**
+ * A model for resource history data.
+ * @author jgraham
+ *
+ */
+public class ResourceHistoryEntry {
+ private String revision;
+ private String date;
+ private String author;
+ private String comment;
+
+ public ResourceHistoryEntry(String revision, String date,
+ String author, String comment) {
+ this.revision = revision;
+ this.date = date;
+ this.author = author;
+ this.comment = comment;
+ }
+
+ public String getRevision() {
+ return revision != null?revision:"";
+ }
+ public String getDate() {
+ return date != null?date:"";
+ }
+ public String getAuthor() {
+ return author != null?author:"";
+ }
+ public String getComment() {
+ return comment != null?comment:"";
+ }
+}
Modified: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/views/model/TreeParent.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/views/model/TreeParent.java 2008-07-09 19:28:20 UTC (rev 20985)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/views/model/TreeParent.java 2008-07-09 21:11:42 UTC (rev 20986)
@@ -60,6 +60,7 @@
monitor.beginTask("Pending...", reps.size());
for (int i = 0; i < reps.size(); i++) {
TreeParent p = new TreeParent(reps.get(i).getLocation(), Type.REPOSITORY);
+ p.setParent(node);
p.setGuvnorRepository(reps.get(i));
ResourceProperties props = new ResourceProperties();
props.setBase("");
@@ -121,6 +122,7 @@
}
o.setGuvnorRepository(rep);
o.setResourceProps(resProps);
+ node.addChild(o);
collector.add(o, monitor);
}
}
Added: 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 (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/AddResourceWizard.java 2008-07-09 21:11:42 UTC (rev 20986)
@@ -0,0 +1,147 @@
+package org.guvnor.tools.wizards;
+
+import java.net.URL;
+
+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.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 {
+
+ private IFile selectedFile;
+
+ private SelectGuvnorRepPage selectRepPage;
+ private GuvnorMainConfigPage mainConfigPage;
+ private SelectGuvnorFolderPage selectFolderPage;
+
+ private GuvWizardModel model;
+
+ public AddResourceWizard() {
+ model = new GuvWizardModel();
+ }
+
+ public GuvWizardModel getModel() {
+ return model;
+ }
+
+ public void init(IWorkbench workbench, IStructuredSelection selection) {
+ if (selection instanceof IStructuredSelection) {
+ IStructuredSelection sel = (IStructuredSelection)selection;
+ if (sel.getFirstElement() instanceof IFile) {
+ selectedFile = (IFile)sel.getFirstElement();
+ }
+ }
+ }
+
+ @Override
+ public void addPages() {
+ selectRepPage = new SelectGuvnorRepPage("select_rep_page", "Select Guvnor repository location",
+ Activator.getImageDescriptor(Activator.IMG_GUVREPWIZBAN));
+ selectRepPage.setDescription("Select an existing Guvnor repository location or create a new one");
+ super.addPage(selectRepPage);
+
+ mainConfigPage = new GuvnorMainConfigPage("config_page", "New Guvnor repository location",
+ Activator.getImageDescriptor(Activator.IMG_GUVREPWIZBAN));
+ mainConfigPage.setDescription("Creates a connection to a Guvnor repository");
+ super.addPage(mainConfigPage);
+
+ selectFolderPage = new SelectGuvnorFolderPage("select_folder_page", "Select folder",
+ Activator.getImageDescriptor(Activator.IMG_GUVREPWIZBAN));
+ selectFolderPage.setDescription("Select the target folder in the Guvnor repository");
+ super.addPage(selectFolderPage);
+
+ super.addPages();
+ }
+
+ @Override
+ public IWizardPage getNextPage(IWizardPage page) {
+ if (page.getName().equals("select_rep_page")) {
+ if (model.shouldCreateNewRep()) {
+ return mainConfigPage;
+ } else {
+ return selectFolderPage;
+ }
+ }
+ if (page.getName().equals("config_page")) {
+ return selectFolderPage;
+ }
+ return null;
+ }
+
+ private void setDuplicateFileError() {
+ selectFolderPage.setErrorMessage(selectedFile.getName() +
+ " already exists in folder " +
+ model.getTargetLocation());
+ model.setTargetLocation(null);
+ super.getContainer().updateButtons();
+ }
+
+ @Override
+ public boolean performFinish() {
+ assert(selectedFile != null);
+ 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);
+ client.closeResponse();
+ if (!res) {
+ setDuplicateFileError();
+ }
+ } 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());
+ client.closeResponse();
+ if (!res) {
+ setDuplicateFileError();
+ }
+ }
+ }
+ if (res) {
+ GuvnorMetadataUtils.markCurrentGuvnorResource(selectedFile);
+ ResourceProperties resProps = client.queryProperties(fullPath);
+ client.closeResponse();
+ GuvnorMetadataProps mdProps =
+ new GuvnorMetadataProps(selectedFile.getName(),
+ model.getRepLocation(),
+ fullPath, resProps.getLastModifiedDate());
+ GuvnorMetadataUtils.setGuvnorMetadataProps(selectedFile.getFullPath(), mdProps);
+ PlatformUtils.updateDecoration();
+ }
+ } catch (Exception e) {
+ Activator.getDefault().writeLog(IStatus.ERROR, e.getMessage(), e);
+ }
+ return res;
+ }
+
+ @Override
+ public boolean canFinish() {
+ return model.getRepLocation() != null
+ && model.getTargetLocation() != null;
+ }
+}
Modified: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/CheckoutWizard.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/CheckoutWizard.java 2008-07-09 19:28:20 UTC (rev 20985)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/CheckoutWizard.java 2008-07-09 21:11:42 UTC (rev 20986)
@@ -7,6 +7,7 @@
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Path;
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;
@@ -70,6 +71,24 @@
}
@Override
+ public IWizardPage getNextPage(IWizardPage page) {
+ if (page.getName().equals("select_rep_page")) {
+ if (model.shouldCreateNewRep()) {
+ return mainConfigPage;
+ } else {
+ return selectResPage;
+ }
+ }
+ if (page.getName().equals("config_page")) {
+ return selectResPage;
+ }
+ if (page.getName().equals("select_res_page")) {
+ return selectLocalTargetPage;
+ }
+ return null;
+ }
+
+ @Override
public boolean performFinish() {
try {
IWebDavClient webdav = WebDavServerCache.getWebDavClient(model.getRepLocation());
@@ -116,7 +135,9 @@
}
@Override
- public boolean canFinish() {
- return model.isModelComplete();
+ public boolean canFinish() {
+ return model.getRepLocation() != null
+ && model.getTargetLocation() != null
+ && model.getResources() != null;
}
}
Modified: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/GuvWizardModel.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/GuvWizardModel.java 2008-07-09 19:28:20 UTC (rev 20985)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/GuvWizardModel.java 2008-07-09 21:11:42 UTC (rev 20986)
@@ -62,10 +62,4 @@
public void setVersion(String version) {
this.version = version;
}
-
- public boolean isModelComplete() {
- return this.repLocation != null &&
- this.targetLocation != null &&
- this.resources != null;
- }
}
Added: 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 (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/SelectGuvnorFolderPage.java 2008-07-09 21:11:42 UTC (rev 20986)
@@ -0,0 +1,138 @@
+package org.guvnor.tools.wizards;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.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.views.RepositoryContentProvider;
+import org.guvnor.tools.views.RepositoryLabelProvider;
+import org.guvnor.tools.views.model.TreeObject;
+import org.guvnor.tools.views.model.TreeParent;
+
+public class SelectGuvnorFolderPage extends WizardPage {
+
+ private TreeViewer viewer;
+ private String previousSelection;
+
+ public SelectGuvnorFolderPage(String pageName) {
+ super(pageName);
+ }
+
+ public SelectGuvnorFolderPage(String pageName, String title, ImageDescriptor titleImage) {
+ super(pageName, title, titleImage);
+ }
+
+ public void createControl(Composite parent) {
+ Composite composite = createComposite(parent, 1);
+ new Label(composite, SWT.NONE).setText("Select folder:");
+
+ viewer = new TreeViewer(composite, SWT.BORDER | SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL);
+ viewer.getTree().setLayoutData(new GridData(GridData.FILL_BOTH));
+ viewer.setLabelProvider(new RepositoryLabelProvider());
+ viewer.addPostSelectionChangedListener(new ISelectionChangedListener() {
+ public void selectionChanged(SelectionChangedEvent event) {
+ updateModel();
+ }
+ });
+ super.setControl(composite);
+ }
+
+ private void handleRepositoryCreation() {
+ // First we'll see if the repository already exists
+ GuvWizardModel model = ((IGuvnorWizard)super.getWizard()).getModel();
+ if (model.shouldCreateNewRep()
+ && model.getRepLocation() != null) {
+ GuvnorRepository theRep = Activator.getLocationManager().
+ findRepository(model.getRepLocation());
+ if (theRep != null) {
+ // The repository already exists, nothing to do
+ return;
+ }
+ try {
+ WizardUtils.createGuvnorRepository(model);
+ } catch (Exception e) {
+ super.setErrorMessage(e.getMessage());
+ Activator.getDefault().writeLog(IStatus.ERROR, e.getMessage(), e);
+ }
+ }
+ }
+
+ @Override
+ public void setVisible(boolean visible) {
+ if (visible) {
+ // Need to filter repository list based on currently selected repository
+ // Will also keep track of which filter is applied, so we don't create
+ // additional content providers unnecessarily.
+ GuvWizardModel model = ((IGuvnorWizard)super.getWizard()).getModel();
+ String currentSelection = model.getRepLocation();
+ // Not supposed to use this page without setting the target repository in the model
+ assert(currentSelection != null);
+ // If we had a repository selection before that is different from the current selection
+ if (previousSelection != null
+ && !currentSelection.equals(previousSelection)) {
+ handleRepositoryCreation();
+ RepositoryContentProvider cp = new RepositoryContentProvider();
+ cp.setRepositorySelection(currentSelection);
+ viewer.setContentProvider(cp);
+ viewer.setInput(viewer);
+ previousSelection = currentSelection;
+ } else {
+ // If we didn't have a repository selection before (first time this page is loaded)
+ if (previousSelection == null) {
+ handleRepositoryCreation();
+ RepositoryContentProvider cp = new RepositoryContentProvider();
+ cp.setRepositorySelection(currentSelection);
+ viewer.setContentProvider(cp);
+ viewer.setInput(viewer);
+ previousSelection = currentSelection;
+ }
+ }
+ }
+ super.setVisible(visible);
+ }
+
+ private Composite createComposite(Composite parent, int numColumns) {
+ Composite composite = new Composite(parent, SWT.NULL);
+
+ GridLayout layout = new GridLayout();
+ layout.numColumns = numColumns;
+ composite.setLayout(layout);
+ composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ return composite;
+ }
+
+ @SuppressWarnings("unchecked")
+ private void updateModel() {
+ if (super.getErrorMessage() != null) {
+ super.setErrorMessage(null);
+ }
+ IStructuredSelection selection = (IStructuredSelection)viewer.getSelection();
+ GuvWizardModel model = ((IGuvnorWizard)super.getWizard()).getModel();
+ if (selection.getFirstElement() instanceof TreeParent) {
+ TreeParent node = (TreeParent)selection.getFirstElement();
+ if (node.getNodeType() == TreeObject.Type.PACKAGE
+ || node.getNodeType() == TreeObject.Type.REPOSITORY) {
+ viewer.expandToLevel(node, 1);
+ String base = node.getFullPath().endsWith("/")?node.getFullPath():node.getFullPath() + "/";
+ model.setTargetLocation(base);
+ super.getWizard().getContainer().updateButtons();
+ } else {
+ model.setTargetLocation(null);
+ super.getWizard().getContainer().updateButtons();
+ }
+ } else {
+ model.setTargetLocation(null);
+ super.getWizard().getContainer().updateButtons();
+ }
+ }
+}
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-09 19:28:20 UTC (rev 20985)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/SelectGuvnorRepPage.java 2008-07-09 21:11:42 UTC (rev 20986)
@@ -1,7 +1,6 @@
package org.guvnor.tools.wizards;
import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.jface.wizard.IWizardPage;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
@@ -42,6 +41,7 @@
public void widgetSelected(SelectionEvent e) {
repLocations.setEnabled(existingRep.getSelection());
+ updateModel();
}
});
@@ -54,6 +54,7 @@
public void widgetSelected(SelectionEvent e) {
repLocations.setEnabled(existingRep.getSelection());
+ updateModel();
}
});
@@ -93,21 +94,18 @@
private void updateModel() {
GuvWizardModel model = ((IGuvnorWizard)super.getWizard()).getModel();
- String selected = null;
- if (repLocations.getSelection().length > 0) {
- selected = repLocations.getSelection()[0];
- }
- if (selected != null) {
- model.setRepLocation(repLocations.getSelection()[0]);
- }
- }
-
- @Override
- public IWizardPage getNextPage() {
if (createRep.getSelection()) {
- return getWizard().getPage("config_page");
+ model.setCreateNewRep(true);
+ model.setRepLocation(null);
} else {
- return getWizard().getPage("select_res_page");
+ model.setCreateNewRep(false);
+ String selected = null;
+ if (repLocations.getSelection().length > 0) {
+ selected = repLocations.getSelection()[0];
+ }
+ if (selected != null) {
+ model.setRepLocation(repLocations.getSelection()[0]);
+ }
}
}
}
Modified: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/WizardUtils.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/WizardUtils.java 2008-07-09 19:28:20 UTC (rev 20985)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/WizardUtils.java 2008-07-09 21:11:42 UTC (rev 20986)
@@ -27,7 +27,6 @@
WebDavSessionAuthenticator authen = new WebDavSessionAuthenticator();
authen.addAuthenticationInfo(serverUrl, "", "basic", info);
client.setSessionAuthenticator(authen);
- client.setSessionAuthentication(true);
}
}
}
More information about the jboss-svn-commits
mailing list