* [EGIT PATCH 2/2] Initial wizard step for Robin's fetch functionality.
@ 2008-02-10 23:32 Roger C. Soares
2008-02-11 6:02 ` Robin Rosenberg
0 siblings, 1 reply; 2+ messages in thread
From: Roger C. Soares @ 2008-02-10 23:32 UTC (permalink / raw)
To: git; +Cc: robin.rosenberg, Roger C. Soares
not to be commited.
---
Hi Robin,
This is what I understood from your dialog. You can use this in part and/or
integrate with your patch the way you think is best. Hope it helps.
[]s,
Roger.
.../egit/ui/internal/wizards/GitCloneWizard.java | 252 ++++++++++++++++++--
1 files changed, 230 insertions(+), 22 deletions(-)
diff --git a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/wizards/GitCloneWizard.java b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/wizards/GitCloneWizard.java
index e8ba87e..d2763b3 100644
--- a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/wizards/GitCloneWizard.java
+++ b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/wizards/GitCloneWizard.java
@@ -20,10 +20,17 @@ import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.wizard.Wizard;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.events.KeyAdapter;
+import org.eclipse.swt.events.KeyEvent;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.IImportWizard;
import org.eclipse.ui.IWorkbench;
import org.spearce.egit.ui.UIIcons;
@@ -32,7 +39,7 @@ import org.spearce.egit.ui.UIIcons;
* Import Git Repository Wizard. A front end to a git clone operation.
*/
public class GitCloneWizard extends Wizard implements IImportWizard {
- private WarningPage warning;
+ private CloneInputPage cloneInput;
public void init(IWorkbench arg0, IStructuredSelection arg1) {
// Empty
@@ -40,44 +47,245 @@ public class GitCloneWizard extends Wizard implements IImportWizard {
@Override
public void addPages() {
- warning = new WarningPage();
- addPage(warning);
+ cloneInput = new CloneInputPage();
+ addPage(cloneInput);
}
@Override
public boolean performFinish() {
+ System.out.println("fetch uri: " + cloneInput.getUri());
return true;
}
}
-class WarningPage extends WizardPage {
- private Composite container;
+class CloneInputPage extends WizardPage {
+ /** No authentication requested */
+ public static final int AUTH_NONE = 0;
+
+ /** User and password authentication requested */
+ public static final int AUTH_USER_PASS = 1;
+
+ /** SSH public key authentication requested */
+ public static final int AUTH_SSH_PUBLIC_KEY = 2;
+
+ private Composite localComposite;
+
+ private String[] authItems = new String[] { "None", "User/Password",
+ "SSH public key" };
+
+ private Combo authCombo;
+
+ private Text uriText;
+
+ private Text userText;
+
+ private Text passText;
+
+ private Text keyText;
/**
- * Warning message for new users alerting on how to use egit.
+ * Wizard page that allows the user entering the location of a repository to
+ * be cloned.
*/
- public WarningPage() {
- super("Warning Page", "Warning", UIIcons.WIZBAN_IMPORT_REPO);
- setDescription("Git Import is not ready yet.");
+ public CloneInputPage() {
+ super("Clone Input Page", "Import Git Repository",
+ UIIcons.WIZBAN_IMPORT_REPO);
+ setDescription("Enter the location of the repository to be cloned.");
}
public void createControl(Composite parent) {
- container = new Composite(parent, SWT.NULL);
- FillLayout layout = new FillLayout();
- container.setLayout(layout);
- Label label1 = new Label(container, SWT.NULL);
- label1.setText("\nUse Git (THE Git) to create or clone your repo."
- + "\nSelect the project in the navigator and"
- + "\ngo to the context menu's Team item and"
- + "\nbelow it you will find \"Share Project\"."
- + "\nSelect it and the rest is self explanatory.");
-
- setControl(container);
+ localComposite = new Composite(parent, SWT.NULL);
+ GridLayout layout = new GridLayout();
+ layout.numColumns = 2;
+ localComposite.setLayout(layout);
+
+ Label uriLabel = new Label(localComposite, SWT.NULL);
+ uriLabel.setText("Location:");
+
+ uriText = new Text(localComposite, SWT.BORDER);
+ uriText.setText("");
+ GridData uriTextData = new GridData(SWT.FILL, SWT.DEFAULT, true, false);
+ uriText.setLayoutData(uriTextData);
+
+ Label authLabel = new Label(localComposite, SWT.NULL);
+ authLabel.setText("Authentication:");
+
+ authCombo = new Combo(localComposite, SWT.DROP_DOWN | SWT.READ_ONLY);
+ authCombo.setItems(authItems);
+ authCombo.select(0);
+
+ final Label userLabel = new Label(localComposite, SWT.NULL);
+ userLabel.setText("User:");
+ final GridData userLabelData = new GridData();
+ userLabelData.exclude = true;
+ userLabel.setLayoutData(userLabelData);
+
+ userText = new Text(localComposite, SWT.BORDER);
+ userText.setText("");
+ final GridData userTextData = new GridData(SWT.FILL, SWT.DEFAULT, true,
+ false);
+ userTextData.exclude = true;
+ userText.setLayoutData(userTextData);
+
+ final Label passLabel = new Label(localComposite, SWT.NULL);
+ passLabel.setText("Password:");
+ final GridData passLabelData = new GridData();
+ passLabelData.exclude = true;
+ passLabel.setLayoutData(passLabelData);
+
+ passText = new Text(localComposite, SWT.BORDER | SWT.PASSWORD);
+ passText.setText("");
+ final GridData passTextData = new GridData(SWT.FILL, SWT.DEFAULT, true,
+ false);
+ passTextData.exclude = true;
+ passText.setLayoutData(passTextData);
+
+ final Label keyLabel = new Label(localComposite, SWT.NULL);
+ keyLabel.setText("SSH public key:");
+ final GridData keyLabelData = new GridData();
+ keyLabelData.exclude = true;
+ keyLabel.setLayoutData(keyLabelData);
+
+ keyText = new Text(localComposite, SWT.BORDER | SWT.WRAP);
+ keyText.setText("");
+ final GridData keyTextData = new GridData(SWT.FILL, SWT.DEFAULT, true,
+ false);
+ keyTextData.exclude = true;
+ keyTextData.heightHint = 100;
+ keyText.setLayoutData(keyTextData);
+
+ KeyAdapter completeListener = new KeyAdapter() {
+ public void keyReleased(KeyEvent e) {
+ enableDisableFinish();
+ }
+ };
+
+ uriText.addKeyListener(completeListener);
+ userText.addKeyListener(completeListener);
+ passText.addKeyListener(completeListener);
+ keyText.addKeyListener(completeListener);
+
+ authCombo.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ int authRequested = getAuthRequested();
+ hideAll();
+ if (authRequested == AUTH_USER_PASS) {
+ userLabelData.exclude = false;
+ userLabel.setVisible(true);
+ userTextData.exclude = false;
+ userText.setVisible(true);
+
+ passLabelData.exclude = false;
+ passLabel.setVisible(true);
+ passTextData.exclude = false;
+ passText.setVisible(true);
+ } else if (authRequested == AUTH_SSH_PUBLIC_KEY) {
+ keyLabelData.exclude = false;
+ keyLabel.setVisible(true);
+ keyTextData.exclude = false;
+ keyText.setVisible(true);
+ }
+ localComposite.layout(false);
+ enableDisableFinish();
+ }
+
+ private void hideAll() {
+ userLabelData.exclude = true;
+ userLabel.setVisible(false);
+ userTextData.exclude = true;
+ userText.setVisible(false);
+
+ passLabelData.exclude = true;
+ passLabel.setVisible(false);
+ passTextData.exclude = true;
+ passText.setVisible(false);
+
+ keyLabelData.exclude = true;
+ keyLabel.setVisible(false);
+ keyTextData.exclude = true;
+ keyText.setVisible(false);
+ }
+ });
+
+ setControl(localComposite);
setPageComplete(false);
}
+ private void enableDisableFinish() {
+ boolean isComplete = false;
+ if (uriText.getText().length() > 0) {
+ isComplete = true;
+ }
+ int authRequested = getAuthRequested();
+ if (authRequested == AUTH_USER_PASS) {
+ if (userText.getText().length() == 0
+ || passText.getText().length() == 0) {
+ isComplete = false;
+ }
+ } else if (authRequested == AUTH_SSH_PUBLIC_KEY) {
+ if (keyText.getText().length() == 0) {
+ isComplete = false;
+ }
+ }
+ setPageComplete(isComplete);
+ }
+
@Override
public Control getControl() {
- return container;
+ return localComposite;
+ }
+
+ /**
+ * Returns authentication method entered in the Wizard page.
+ *
+ * @return String the authentication method chosen: <code>AUTH_NONE</code>,
+ * <code>AUTH_USER_PASS</code> or <code>AUTH_SSH_PUBLIC_KEY</code>.
+ */
+ public int getAuthRequested() {
+ String text = authCombo.getText();
+ if (authItems[1].equals(text)) {
+ return AUTH_USER_PASS;
+ } else if (authItems[2].equals(text)) {
+ return AUTH_SSH_PUBLIC_KEY;
+ }
+
+ return AUTH_NONE;
+ }
+
+ /**
+ * Returns the URI entered in the Wizard page.
+ *
+ * @return String the URI entered in the Wizard page.
+ */
+ public String getUri() {
+ return uriText.getText();
+ }
+
+ /**
+ * Returns the user entered in the Wizard page.
+ *
+ * @return String the user entered in the Wizard page.
+ */
+ public String getUser() {
+ return userText.getText();
+ }
+
+ /**
+ * Returns the password entered in the Wizard page.
+ *
+ * @return String the password entered in the Wizard page.
+ */
+ public String getPassword() {
+ return passText.getText();
+ }
+
+ /**
+ * Returns the SSH public key entered in the Wizard page.
+ *
+ * @return String the SSH public key entered in the Wizard page.
+ */
+ public String getSshPublicKey() {
+ return keyText.getText();
}
}
--
1.5.3.8
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [EGIT PATCH 2/2] Initial wizard step for Robin's fetch functionality.
2008-02-10 23:32 [EGIT PATCH 2/2] Initial wizard step for Robin's fetch functionality Roger C. Soares
@ 2008-02-11 6:02 ` Robin Rosenberg
0 siblings, 0 replies; 2+ messages in thread
From: Robin Rosenberg @ 2008-02-11 6:02 UTC (permalink / raw)
To: Roger C. Soares; +Cc: git
måndagen den 11 februari 2008 skrev Roger C. Soares:
> not to be commited.
> ---
> Hi Robin,
>
> This is what I understood from your dialog. You can use this in part and/or
> integrate with your patch the way you think is best. Hope it helps.
This looks about right, to start with at least. Thanks.
-- robin
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2008-02-11 6:02 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-02-10 23:32 [EGIT PATCH 2/2] Initial wizard step for Robin's fetch functionality Roger C. Soares
2008-02-11 6:02 ` Robin Rosenberg
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).