The "Add Repositories" dialog should not scan automatically
[egit.git] / org.eclipse.egit.ui / src / org / eclipse / egit / ui / internal / repository / ConfigureRemoteWizard.java
blobb128ec7de2034f4562262a3a83a3d3cbd6be94af
1 /*******************************************************************************
2 * Copyright (c) 2010 SAP AG.
3 * All rights reserved. This program and the accompanying materials
4 * are made available under the terms of the Eclipse Public License v1.0
5 * which accompanies this distribution, and is available at
6 * http://www.eclipse.org/legal/epl-v10.html
8 * Contributors:
9 * Mathias Kinzler (SAP AG) - initial implementation
10 *******************************************************************************/
11 package org.eclipse.egit.ui.internal.repository;
13 import java.io.IOException;
14 import java.net.URISyntaxException;
16 import org.eclipse.egit.ui.UIText;
17 import org.eclipse.egit.ui.internal.components.RefSpecPage;
18 import org.eclipse.egit.ui.internal.components.RepositorySelection;
19 import org.eclipse.egit.ui.internal.components.RepositorySelectionPage;
20 import org.eclipse.jface.wizard.IWizardPage;
21 import org.eclipse.jface.wizard.Wizard;
22 import org.eclipse.jgit.lib.Repository;
23 import org.eclipse.jgit.lib.RepositoryConfig;
24 import org.eclipse.jgit.transport.RemoteConfig;
25 import org.eclipse.jgit.transport.URIish;
26 import org.eclipse.osgi.util.NLS;
28 /**
31 class ConfigureRemoteWizard extends Wizard {
33 final RepositoryConfig myConfiguration;
35 RemoteConfig myRemoteConfiguration;
37 final boolean pushMode;
39 final String myRemoteName;
41 private ConfigureUriPage configureFetchUriPage;
43 private RefSpecPage configureFetchSpecPage;
45 private ConfigureUriPage configurePushUriPage;
47 private RefSpecPage configurePushSpecPage;
49 @Override
50 public IWizardPage getNextPage(IWizardPage page) {
52 if (page == configureFetchUriPage) {
53 configureFetchSpecPage.setConfigName(myRemoteName);
54 configureFetchSpecPage.setSelection(new RepositorySelection(
55 configureFetchUriPage.getUri(), null));
58 if (page == configurePushUriPage) {
59 // use the first URI
60 configurePushSpecPage.setConfigName(myRemoteName);
61 configurePushSpecPage.setSelection(new RepositorySelection(
62 configurePushUriPage.getUris().get(0), null));
65 return super.getNextPage(page);
68 @Override
69 public boolean canFinish() {
71 return super.canFinish();
74 /**
76 * @param repository
77 * @param remoteName
78 * @param push
80 public ConfigureRemoteWizard(Repository repository, String remoteName,
81 boolean push) {
83 myConfiguration = repository.getConfig();
84 myRemoteName = remoteName;
85 pushMode = push;
87 try {
88 myRemoteConfiguration = new RemoteConfig(myConfiguration,
89 remoteName);
90 } catch (URISyntaxException e) {
91 // handle this by trying to cleanup the configuration entries
92 myConfiguration.unsetSection("remote", remoteName); //$NON-NLS-1$
93 // TODO Exception handling
94 try {
95 myRemoteConfiguration = new RemoteConfig(myConfiguration,
96 remoteName);
97 } catch (URISyntaxException e1) {
98 // panic
99 throw new IllegalStateException(e1.getMessage());
103 configureFetchUriPage = new ConfigureUriPage(true,
104 myRemoteConfiguration);
105 if (!pushMode)
106 addPage(configureFetchUriPage);
108 configureFetchSpecPage = new RefSpecPage(repository, false);
109 if (!pushMode)
110 addPage(configureFetchSpecPage);
112 configurePushUriPage = new ConfigureUriPage(false,
113 myRemoteConfiguration);
114 if (pushMode)
115 addPage(configurePushUriPage);
117 configurePushSpecPage = new RefSpecPage(repository, true);
118 if (pushMode)
119 addPage(configurePushSpecPage);
121 setWindowTitle(NLS.bind(
122 UIText.ConfigureRemoteWizard_WizardTitle_Change, myRemoteName));
127 * @return the configuration
130 public RepositoryConfig getConfiguration() {
131 return myConfiguration;
134 @Override
135 public boolean performFinish() {
137 if (pushMode) {
138 while (!myRemoteConfiguration.getPushURIs().isEmpty())
139 myRemoteConfiguration.removePushURI(myRemoteConfiguration
140 .getPushURIs().get(0));
141 for (URIish uri : configurePushUriPage.getUris())
142 myRemoteConfiguration.addPushURI(uri);
143 myRemoteConfiguration.setPushRefSpecs(configurePushSpecPage
144 .getRefSpecs());
145 } else {
146 while (!myRemoteConfiguration.getURIs().isEmpty())
147 myRemoteConfiguration.removeURI(myRemoteConfiguration.getURIs()
148 .get(0));
149 myRemoteConfiguration.addURI(configureFetchUriPage.getUri());
150 myRemoteConfiguration.setFetchRefSpecs(configureFetchSpecPage
151 .getRefSpecs());
152 myRemoteConfiguration.setTagOpt(configureFetchSpecPage.getTagOpt());
155 myRemoteConfiguration.update(myConfiguration);
157 try {
158 myConfiguration.save();
160 // Save the uris in the RepositorySelectionPage preferences
162 for (URIish uri: myRemoteConfiguration.getURIs())
163 RepositorySelectionPage.saveUriInPrefs(uri.toPrivateString());
165 for (URIish uri: myRemoteConfiguration.getPushURIs())
166 RepositorySelectionPage.saveUriInPrefs(uri.toPrivateString());
169 return true;
170 } catch (IOException e) {
171 // TODO better Exception handling
172 return false;