[jboss-svn-commits] JBL Code SVN: r20833 - in labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools: META-INF and 5 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Fri Jun 27 17:17:13 EDT 2008
Author: john.graham at jboss.org
Date: 2008-06-27 17:17:13 -0400 (Fri, 27 Jun 2008)
New Revision: 20833
Added:
labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/actions/
labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/actions/RepositoryElementPropsAction.java
labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/properties/
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
Modified:
labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/META-INF/MANIFEST.MF
labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/plugin.properties
labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/plugin.xml
labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/PlatformUtils.java
labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/GuvWizardModel.java
labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/GuvnorMainConfigPage.java
labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/NewRepLocationWizard.java
Log:
Break out host, repository location and port fields in "new location" wizard. Add parse handling for paste/drop of complete urls.
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-06-27 16:11:00 UTC (rev 20832)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/META-INF/MANIFEST.MF 2008-06-27 21:17:13 UTC (rev 20833)
@@ -2,7 +2,7 @@
Bundle-ManifestVersion: 2
Bundle-Name: %plugin.name
Bundle-SymbolicName: org.guvnor.tools;singleton:=true
-Bundle-Version: 0.5.0.200806261455
+Bundle-Version: 0.5.0.200806271630
Bundle-Activator: org.guvnor.tools.Activator
Bundle-Vendor: %plugin.provider
Bundle-Localization: plugin
Modified: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/plugin.properties
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/plugin.properties 2008-06-27 16:11:00 UTC (rev 20832)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/plugin.properties 2008-06-27 21:17:13 UTC (rev 20833)
@@ -9,4 +9,7 @@
wiz.new.repository.location = Guvnor repository location
wiz.new.repository.location.desc = New Guvnor repository location
-persp.name = Guvnor Repository Exploring
\ No newline at end of file
+persp.name = Guvnor Repository Exploring
+
+action.properties = Properties
+action.properties.tooltip = Show properties for the selected element
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/plugin.xml
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/plugin.xml 2008-06-27 16:11:00 UTC (rev 20832)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/plugin.xml 2008-06-27 21:17:13 UTC (rev 20833)
@@ -78,4 +78,23 @@
class="org.guvnor.tools.perspectives.GuvnorRepExplorerPerspective"
id="org.guvnor.tools.perspectives.GuvnorRepExplorerPerspective"/>
</extension>
+
+ <extension point="org.eclipse.ui.popupMenus">
+ <objectContribution objectClass="org.guvnor.tools.views.model.TreeObject"
+ adaptable="true"
+ id="org.guvnor.tools.view.model.actions">
+ <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>
+ </objectContribution>
+ </extension>
+
+ <extension point = "org.eclipse.ui.propertyPages">
+ <page id="org.guvnor.tools.proppage.ifile"
+ name="%category.name"
+ class="org.guvnor.tools.properties.GuvnorWorkspaceFilePage"/>
+ </extension>
</plugin>
Added: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/actions/RepositoryElementPropsAction.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/actions/RepositoryElementPropsAction.java (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/actions/RepositoryElementPropsAction.java 2008-06-27 21:17:13 UTC (rev 20833)
@@ -0,0 +1,52 @@
+package org.guvnor.tools.actions;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.IViewActionDelegate;
+import org.eclipse.ui.IViewPart;
+import org.eclipse.ui.PlatformUI;
+import org.guvnor.tools.Activator;
+import org.guvnor.tools.properties.RepositoryElementPropsDialog;
+import org.guvnor.tools.utils.PlatformUtils;
+import org.guvnor.tools.views.model.TreeObject;
+
+public class RepositoryElementPropsAction implements IViewActionDelegate {
+
+ private TreeObject node;
+
+ public void init(IViewPart view) { }
+
+ public void run(IAction action) {
+ if (node == null) {
+ return;
+ }
+
+ Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().
+ getActivePage().getActivePart().getSite().getShell();
+ RepositoryElementPropsDialog diag = new RepositoryElementPropsDialog(shell, node);
+ if (diag.open() == Dialog.OK
+ && diag.wereSecuritySettingModified()) {
+ // Have to update security settings for this repository
+ try {
+ PlatformUtils.getInstance().
+ updateAuthentication(node.getGuvnorRepository().getLocation(),
+ diag.getUsername(), diag.getPassword(), diag.saveAuthenInfo());
+ } catch (Exception e) {
+ Activator.getDefault().writeLog(IStatus.ERROR, e.getMessage(), e);
+ }
+ }
+ }
+
+ public void selectionChanged(IAction action, ISelection selection) {
+ if (selection instanceof IStructuredSelection) {
+ IStructuredSelection sel = (IStructuredSelection)selection;
+ if (sel.getFirstElement() instanceof TreeObject) {
+ node = (TreeObject)sel.getFirstElement();
+ }
+ }
+ }
+}
Added: 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 (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/properties/GuvnorWorkspaceFilePage.java 2008-06-27 21:17:13 UTC (rev 20833)
@@ -0,0 +1,97 @@
+package org.guvnor.tools.properties;
+
+import java.util.Properties;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.IPath;
+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;
+import org.eclipse.ui.IWorkbenchPropertyPage;
+import org.eclipse.ui.dialogs.PropertyPage;
+
+public class GuvnorWorkspaceFilePage extends PropertyPage implements IWorkbenchPropertyPage {
+
+ public GuvnorWorkspaceFilePage() {
+
+ }
+
+ @Override
+ protected Control createContents(Composite parent) {
+ Composite composite = createComposite(parent, 2);
+ IResource resource = (IResource)super.getElement().getAdapter(IResource.class);
+ if (resource != null) {
+ displayGuvnorProperties(composite, findGuvnorMetadata(resource));
+ } else {
+ indicateNotGuvnorAssociated(composite);
+ }
+ return composite;
+ }
+
+ private void displayGuvnorProperties(Composite composite, IFile md) {
+ if (md == null) {
+ indicateNotGuvnorAssociated(composite);
+ } else {
+ try {
+ Properties props = new Properties();
+ props.load(md.getContents());
+ addGuvnorProperties(composite, props);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ private void addGuvnorProperties(Composite composite, Properties props) {
+ new Label(composite, SWT.NONE).setText("Local name:");
+ Label l = new Label(composite, SWT.NONE);
+ String val = props.getProperty("filename") != null?props.getProperty("filename"):"";
+ l.setText(val);
+
+ new Label(composite, SWT.NONE).setText("Repository:");
+ l = new Label(composite, SWT.NONE);
+ val = props.getProperty("repository") != null?props.getProperty("repository"):"";
+ l.setText(val);
+
+ new Label(composite, SWT.NONE).setText("Repository Path:");
+ l = new Label(composite, SWT.NONE);
+ val = props.getProperty("fullpath") != null?props.getProperty("fullpath"):"";
+ l.setText(val);
+
+ new Label(composite, SWT.NONE).setText("Repository Version:");
+ l = new Label(composite, SWT.NONE);
+ val = props.getProperty("lastmodified") != null?props.getProperty("lastmodified"):"";
+ l.setText(val);
+ }
+
+ private void indicateNotGuvnorAssociated(Composite composite) {
+ new Label(composite, SWT.NONE).setText("(Not associated with Guvnor)");
+ }
+
+ private IFile findGuvnorMetadata(IResource resource) {
+ IFile res = null;
+ IPath dir = resource.getFullPath().removeLastSegments(1);
+ IPath mdpath = dir.append(".guvnorinfo").append(resource.getName());
+ IResource mdResource = resource.getWorkspace().getRoot().findMember(mdpath);
+ if (mdResource != null
+ && mdResource.exists()
+ && mdResource instanceof IFile) {
+ res = (IFile)mdResource;
+ }
+ return res;
+ }
+
+ 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;
+ }
+}
Added: 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 (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/properties/RepositoryElementPropsDialog.java 2008-06-27 21:17:13 UTC (rev 20833)
@@ -0,0 +1,195 @@
+package org.guvnor.tools.properties;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.Map;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.jface.dialogs.TitleAreaDialog;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionEvent;
+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;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.TabFolder;
+import org.eclipse.swt.widgets.TabItem;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.views.properties.IPropertyDescriptor;
+import org.eclipse.ui.views.properties.IPropertySource;
+import org.eclipse.ui.views.properties.TextPropertyDescriptor;
+import org.guvnor.tools.Activator;
+import org.guvnor.tools.views.model.TreeObject;
+
+public class RepositoryElementPropsDialog extends TitleAreaDialog {
+
+ private static final int INITIAL_WIDTH = 780;
+ private static final int INITIAL_HEIGHT = 400;
+
+ private TreeObject node;
+ private Text unField;
+ private Text pwField;
+ private Button cbSavePassword;
+ private String username;
+ private String password;
+ private boolean saveInfo;
+
+ public RepositoryElementPropsDialog(Shell parentShell, TreeObject node) {
+ super(parentShell);
+ super.setShellStyle(getShellStyle() | SWT.RESIZE);
+ this.node = node;
+ }
+
+ @Override
+ protected Control createDialogArea(Composite parent) {
+ super.setTitle("Guvnor Repository Element");
+ super.setMessage("Properties for element: " + node.getName());
+ super.setTitleImage(Activator.getImageDescriptor(Activator.IMG_GUVREPWIZBAN).createImage());
+
+ TabFolder folder = new TabFolder(parent, SWT.TOP);
+ folder.setLayoutData(new GridData(GridData.FILL_BOTH));
+ TabItem tab = new TabItem(folder, SWT.NONE);
+ tab.setText("Basic");
+ Composite composite = createComposite(folder, 2);
+ tab.setControl(composite);
+ addElementProperties(composite);
+
+ tab = new TabItem(folder, SWT.NONE);
+ tab.setText("Security");
+ composite = createComposite(folder, 2);
+ tab.setControl(composite);
+ addSecurityProperties(composite);
+
+ return super.createDialogArea(parent);
+ }
+
+ private void addElementProperties(Composite composite) {
+ IPropertySource ps = (IPropertySource)node.getAdapter(IPropertySource.class);
+ if (ps == null) {
+ return;
+ }
+ IPropertyDescriptor[] desc = ps.getPropertyDescriptors();
+ for (int i = 0; i < desc.length; i++) {
+ if (desc[i] instanceof TextPropertyDescriptor) {
+ TextPropertyDescriptor oneDesc = (TextPropertyDescriptor)desc[i];
+ new Label(composite, SWT.NONE).setText(oneDesc.getDisplayName() + ":");
+ String val = ps.getPropertyValue(oneDesc.getId()) != null?
+ (String)ps.getPropertyValue(oneDesc.getId()):"";
+ new Label(composite, SWT.NONE).setText(val);
+ }
+ }
+ }
+
+ private void addSecurityProperties(Composite composite) {
+ new Label(composite, SWT.NONE).setText("User Name: ");
+ unField = new Text(composite, SWT.SINGLE | SWT.BORDER);
+ unField.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ unField.addModifyListener(new ModifyListener() {
+ public void modifyText(ModifyEvent e) {
+ username = unField.getText();
+ }
+ });
+
+ new Label(composite, SWT.NONE).setText("Password: ");
+ pwField = new Text(composite, SWT.SINGLE | SWT.BORDER | SWT.PASSWORD);
+ pwField.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ pwField.addModifyListener(new ModifyListener() {
+ public void modifyText(ModifyEvent e) {
+ password = pwField.getText();
+ }
+ });
+
+ new Label(composite, SWT.NONE).setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+ Composite pwgroup = createComposite(composite, 2);
+ cbSavePassword = new Button(pwgroup, SWT.CHECK);
+ cbSavePassword.addSelectionListener(new SelectionListener() {
+
+ public void widgetDefaultSelected(SelectionEvent e) { }
+
+ public void widgetSelected(SelectionEvent e) {
+ saveInfo = cbSavePassword.getSelection();
+ }
+
+ });
+
+ 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.");
+
+ populateSecuritySettings();
+ if (unField.getText().trim().length() == 0) {
+ cbSavePassword.setSelection(false);
+ } else {
+ // WTF? setSelection(true) is not picked up by the control, so we have to set
+ // this initial value explicitly. After that toggle seems to work...
+ saveInfo = true;
+ cbSavePassword.setSelection(true);
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ private void populateSecuritySettings() {
+ try {
+ Map info = Platform.getAuthorizationInfo(
+ new URL(node.getGuvnorRepository().getLocation()), "", "basic");
+ if (info == null) {
+ return;
+ }
+ String un = (String)info.get("username");
+ if (un != null) {
+ unField.setText(un);
+ }
+ String pw = (String)info.get("password");
+ if (pw != null) {
+ pwField.setText(pw);
+ }
+ } catch (MalformedURLException e) {
+ Activator.getDefault().writeLog(IStatus.ERROR, e.getMessage(), e);
+ }
+ }
+
+ @Override
+ protected Point getInitialSize() {
+ // 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;
+ }
+
+ public String getPassword() {
+ return password;
+ }
+
+ public boolean saveAuthenInfo() {
+ return saveInfo;
+ }
+
+ public boolean wereSecuritySettingModified() {
+ // If username or password is not null,
+ // then the user changed the text in at least
+ // one of those boxes.
+ return username != null || password != null;
+ }
+}
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-06-27 16:11:00 UTC (rev 20832)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/PlatformUtils.java 2008-06-27 21:17:13 UTC (rev 20833)
@@ -18,6 +18,8 @@
import org.eclipse.ui.PlatformUI;
import org.guvnor.tools.Activator;
import org.guvnor.tools.utils.webdav.IWebDavClient;
+import org.guvnor.tools.utils.webdav.WebDavClientFactory;
+import org.guvnor.tools.utils.webdav.WebDavServerCache;
import org.guvnor.tools.utils.webdav.WebDavSessionAuthenticator;
/**
@@ -83,6 +85,28 @@
}
}
+ public void updateAuthentication(String server, String username,
+ String password, boolean saveInfo) throws Exception {
+ Map<String, String> info = new HashMap<String, String>();
+ info.put("username", username);
+ info.put("password", password);
+ URL serverUrl = new URL(server);
+ IWebDavClient client = WebDavServerCache.getWebDavClient(server);
+ if (client == null) {
+ client = WebDavClientFactory.createClient(serverUrl);
+ WebDavServerCache.cacheWebDavClient(server, client);
+ }
+ if (saveInfo) {
+ Platform.flushAuthorizationInfo(serverUrl, "", "basic");
+ Platform.addAuthorizationInfo(serverUrl, "", "basic", info);
+ } else {
+ WebDavSessionAuthenticator authen = new WebDavSessionAuthenticator();
+ authen.addAuthenticationInfo(new URL(server), "", "basic", info);
+ client.setSessionAuthenticator(authen);
+ client.setSessionAuthentication(true);
+ }
+ }
+
/**
* Convenience method for reporting log in failure
*/
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-06-27 16:11:00 UTC (rev 20832)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/GuvWizardModel.java 2008-06-27 21:17:13 UTC (rev 20833)
@@ -7,6 +7,7 @@
private String username;
private String password;
private boolean createNewRep;
+ private boolean saveAuthInfo;
private String targetProject;
private boolean createNewProj;
@@ -21,13 +22,13 @@
this.repLocation = repLocation;
}
public String getUsername() {
- return username;
+ return username != null?username:"";
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
- return password;
+ return password != null?password:"";
}
public void setPassword(String password) {
this.password = password;
@@ -47,9 +48,15 @@
public boolean isCreateNewProj() {
return createNewProj;
}
+ public boolean shouldSaveAuthInfo() {
+ return saveAuthInfo;
+ }
public void setCreateNewProj(boolean createNewProj) {
this.createNewProj = createNewProj;
}
+ public void setSaveAuthInfo(boolean saveAuthInfo) {
+ this.saveAuthInfo = saveAuthInfo;
+ }
public List<String> getResources() {
return resources;
}
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-06-27 16:11:00 UTC (rev 20832)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/GuvnorMainConfigPage.java 2008-06-27 21:17:13 UTC (rev 20833)
@@ -1,22 +1,41 @@
package org.guvnor.tools.wizards;
+import java.net.MalformedURLException;
+import java.net.URL;
+
+import org.eclipse.core.runtime.IStatus;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.DropTarget;
+import org.eclipse.swt.dnd.DropTargetEvent;
+import org.eclipse.swt.dnd.DropTargetListener;
+import org.eclipse.swt.dnd.TextTransfer;
+import org.eclipse.swt.dnd.Transfer;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
+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;
public class GuvnorMainConfigPage extends WizardPage {
- private Text locationField;
+ private Text serverField;
+ private Text portField;
+ private Text replocField;
private Text unField;
private Text pwField;
+ private Button cbSavePassword;
+ private boolean saveAuthInfo;
+
public GuvnorMainConfigPage(String pageName) {
super(pageName);
}
@@ -29,21 +48,33 @@
Composite composite = createComposite(parent, 2);
new Label(composite, SWT.NONE).setText("Location: ");
- locationField = new Text(composite, SWT.SINGLE | SWT.BORDER);
- locationField.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
- locationField.addModifyListener(new ModifyListener() {
-
+ serverField = new Text(composite, SWT.SINGLE | SWT.BORDER);
+ serverField.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ serverField.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
- if (locationField.getText().trim().length() > 0) {
- GuvnorMainConfigPage.super.setPageComplete(true);
- } else {
- GuvnorMainConfigPage.super.setPageComplete(false);
- }
updateModel();
}
-
});
+ addDropSupport(serverField);
+ new Label(composite, SWT.NONE).setText("Port: ");
+ portField = new Text(composite, SWT.SINGLE | SWT.BORDER);
+ portField.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ portField.addModifyListener(new ModifyListener() {
+ public void modifyText(ModifyEvent e) {
+ updateModel();
+ }
+ });
+
+ new Label(composite, SWT.NONE).setText("Repository: ");
+ replocField = new Text(composite, SWT.SINGLE | SWT.BORDER);
+ replocField.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ replocField.addModifyListener(new ModifyListener() {
+ public void modifyText(ModifyEvent e) {
+ updateModel();
+ }
+ });
+
new Label(composite, SWT.NONE).setText("User Name: ");
unField = new Text(composite, SWT.SINGLE | SWT.BORDER);
unField.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
@@ -63,11 +94,84 @@
});
new Label(composite, SWT.NONE).setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+ Composite pwgroup = 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();
+ updateModel();
+ }
+
+ });
+ // WTF? setSelection(true) is not picked up by the control, so we have to set
+ // this initial value explicitly. After that toggle seems to work...
+ saveAuthInfo = true;
+ cbSavePassword.setSelection(true);
+
+ 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.");
super.setControl(composite);
}
+ private void addDropSupport(Text field) {
+ int operations = DND.DROP_COPY | DND.DROP_DEFAULT;
+ DropTarget target = new DropTarget(field, operations);
+ final TextTransfer textTransfer = TextTransfer.getInstance();
+ Transfer[] types = new Transfer[] { textTransfer };
+ target.setTransfer(types);
+ target.addDropListener(new DropTargetListener() {
+ public void dragEnter(DropTargetEvent event) {
+ if (event.detail == DND.DROP_DEFAULT) {
+ if ((event.operations & DND.DROP_COPY) != 0) {
+ event.detail = DND.DROP_COPY;
+ } else {
+ event.detail = DND.DROP_NONE;
+ }
+ }
+ }
+
+ public void dragLeave(DropTargetEvent event) { }
+
+ public void dragOperationChanged(DropTargetEvent event) {
+ if (event.detail == DND.DROP_DEFAULT) {
+ if ((event.operations & DND.DROP_COPY) != 0) {
+ event.detail = DND.DROP_COPY;
+ } else {
+ event.detail = DND.DROP_NONE;
+ }
+ }
+ }
+
+ public void dragOver(DropTargetEvent event) {
+ event.feedback = DND.FEEDBACK_SELECT | DND.FEEDBACK_SCROLL;
+ }
+
+ public void drop(DropTargetEvent event) {
+ if (textTransfer.isSupportedType(event.currentDataType)) {
+ parseCandidateUrl((String)event.data);
+ }
+ }
+
+ public void dropAccept(DropTargetEvent event) { }
+ });
+ }
+
+ private void parseCandidateUrl(String dropped) {
+ try {
+ URL server = new URL(dropped);
+ serverField.setText(server.getHost());
+ portField.setText(String.valueOf(server.getPort()));
+ replocField.setText(server.getFile());
+ } catch (MalformedURLException e) {
+ Activator.getDefault().writeLog(IStatus.ERROR, e.getMessage(), e);
+ }
+ }
+
private Composite createComposite(Composite parent, int numColumns) {
Composite composite = new Composite(parent, SWT.NULL);
@@ -80,9 +184,55 @@
private void updateModel() {
GuvWizardModel model = ((IGuvnorWizard)super.getWizard()).getModel();
- model.setRepLocation(locationField.getText());
- model.setUsername(unField.getText());
- model.setPassword(pwField.getText());
- model.setCreateNewRep(true);
+ try {
+ URL server = validateUrl();
+ model.setRepLocation(server.toString());
+ model.setUsername(unField.getText());
+ model.setPassword(pwField.getText());
+ model.setSaveAuthInfo(saveAuthInfo);
+ model.setCreateNewRep(true);
+ GuvnorMainConfigPage.super.setPageComplete(true);
+ } catch (Exception e) {
+ GuvnorMainConfigPage.super.setPageComplete(false);
+ }
}
+
+ private URL validateUrl() throws Exception {
+ // First we'll test if the server text box is a complete
+ // URL in itself. If so, we'll parse it out into the other
+ // fields and leave early
+ URL res = testCompleteField();
+ if (res != null) {
+ return res;
+ }
+ // Try to construct a valid URL from the text boxes
+ String repPath = null;
+ if (replocField.getText().trim().length() > 0) {
+ if (replocField.getText().startsWith("/")) {
+ repPath = replocField.getText();
+ } else {
+ repPath = "/" + replocField.getText();
+ }
+ } else {
+ repPath = "";
+ }
+ if (portField.getText().trim().length() > 0) {
+ int port = Integer.parseInt(portField.getText());
+ res = new URL("http", serverField.getText(), port, repPath);
+ } else {
+ res = new URL("http", serverField.getText(), repPath);
+ }
+ return res;
+ }
+
+ private URL testCompleteField() {
+ URL res = null;
+ try {
+ res = new URL(serverField.getText());
+ parseCandidateUrl(res.toString());
+ } catch (MalformedURLException e) {
+ // If it is not a valid URL, we just move along...
+ }
+ return res;
+ }
}
Modified: labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/NewRepLocationWizard.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/NewRepLocationWizard.java 2008-06-27 16:11:00 UTC (rev 20832)
+++ labs/jbossrules/trunk/drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/wizards/NewRepLocationWizard.java 2008-06-27 21:17:13 UTC (rev 20833)
@@ -12,6 +12,10 @@
import org.eclipse.ui.IWorkbench;
import org.guvnor.tools.Activator;
import org.guvnor.tools.GuvnorRepository;
+import org.guvnor.tools.utils.webdav.IWebDavClient;
+import org.guvnor.tools.utils.webdav.WebDavClientFactory;
+import org.guvnor.tools.utils.webdav.WebDavServerCache;
+import org.guvnor.tools.utils.webdav.WebDavSessionAuthenticator;
public class NewRepLocationWizard extends Wizard implements INewWizard, IGuvnorWizard {
@@ -28,6 +32,7 @@
public void addPages() {
mainPage = new GuvnorMainConfigPage("config_page", "New Guvnor location",
Activator.getImageDescriptor(Activator.IMG_GUVLOCADD));
+ mainPage.setDescription("Create a new Guvnor repository connection");
super.addPage(mainPage);
super.addPages();
}
@@ -40,11 +45,20 @@
public boolean performFinish() {
try {
Activator.getLocationManager().addRepository(new GuvnorRepository(model.getRepLocation()));
+ URL serverUrl = new URL(model.getRepLocation());
Map<String, String> info = new HashMap<String, String>();
- //TODO: Deal with case where un or password are not specified
info.put("username", model.getUsername());
info.put("password", model.getPassword());
- Platform.addAuthorizationInfo(new URL(model.getRepLocation()), "", "basic", info);
+ if (model.shouldSaveAuthInfo()) {
+ Platform.addAuthorizationInfo(serverUrl, "", "basic", info);
+ } else {
+ IWebDavClient client = WebDavClientFactory.createClient(serverUrl);
+ WebDavServerCache.cacheWebDavClient(serverUrl.toString(), client);
+ WebDavSessionAuthenticator authen = new WebDavSessionAuthenticator();
+ authen.addAuthenticationInfo(serverUrl, "", "basic", info);
+ client.setSessionAuthenticator(authen);
+ client.setSessionAuthentication(true);
+ }
} catch (Exception e) {
Activator.getDefault().writeLog(IStatus.ERROR, e.getMessage(), e);
}
More information about the jboss-svn-commits
mailing list