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
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
;
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
;
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
) {
60 configurePushSpecPage
.setConfigName(myRemoteName
);
61 configurePushSpecPage
.setSelection(new RepositorySelection(
62 configurePushUriPage
.getUris().get(0), null));
65 return super.getNextPage(page
);
69 public boolean canFinish() {
71 return super.canFinish();
80 public ConfigureRemoteWizard(Repository repository
, String remoteName
,
83 myConfiguration
= repository
.getConfig();
84 myRemoteName
= remoteName
;
88 myRemoteConfiguration
= new RemoteConfig(myConfiguration
,
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
95 myRemoteConfiguration
= new RemoteConfig(myConfiguration
,
97 } catch (URISyntaxException e1
) {
99 throw new IllegalStateException(e1
.getMessage());
103 configureFetchUriPage
= new ConfigureUriPage(true,
104 myRemoteConfiguration
);
106 addPage(configureFetchUriPage
);
108 configureFetchSpecPage
= new RefSpecPage(repository
, false);
110 addPage(configureFetchSpecPage
);
112 configurePushUriPage
= new ConfigureUriPage(false,
113 myRemoteConfiguration
);
115 addPage(configurePushUriPage
);
117 configurePushSpecPage
= new RefSpecPage(repository
, true);
119 addPage(configurePushSpecPage
);
121 setWindowTitle(NLS
.bind(
122 UIText
.ConfigureRemoteWizard_WizardTitle_Change
, myRemoteName
));
127 * @return the configuration
130 public RepositoryConfig
getConfiguration() {
131 return myConfiguration
;
135 public boolean performFinish() {
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
146 while (!myRemoteConfiguration
.getURIs().isEmpty())
147 myRemoteConfiguration
.removeURI(myRemoteConfiguration
.getURIs()
149 myRemoteConfiguration
.addURI(configureFetchUriPage
.getUri());
150 myRemoteConfiguration
.setFetchRefSpecs(configureFetchSpecPage
152 myRemoteConfiguration
.setTagOpt(configureFetchSpecPage
.getTagOpt());
155 myRemoteConfiguration
.update(myConfiguration
);
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());
170 } catch (IOException e
) {
171 // TODO better Exception handling