/******************************************************************************* * Copyright (c) 2013 Robin Stocker <robin@nibor.org> and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html *******************************************************************************/ package org.eclipse.egit.ui.internal.push; import java.util.Set; import org.eclipse.egit.ui.internal.UIText; import org.eclipse.egit.ui.internal.components.RepositorySelectionPage; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.jgit.lib.ConfigConstants; import org.eclipse.jgit.lib.Constants; import org.eclipse.jgit.lib.Repository; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; /** * Wizard page for adding a new remote (and setting its name). */ public class AddRemotePage extends RepositorySelectionPage { private final Repository repository; private Text remoteNameText; /** * @param repository */ public AddRemotePage(Repository repository) { super(false, null); this.repository = repository; } /** * @return the remote name entered by the user */ public String getRemoteName() { return remoteNameText.getText(); } @Override protected void createRemoteNamePanel(Composite panel) { Composite remoteNamePanel = new Composite(panel, SWT.NONE); remoteNamePanel.setLayout(new GridLayout(2, false)); GridDataFactory.fillDefaults().grab(true, false).applyTo(remoteNamePanel); Label remoteNameLabel = new Label(remoteNamePanel, SWT.NONE); remoteNameLabel.setText(UIText.AddRemotePage_RemoteNameLabel); remoteNameText = new Text(remoteNamePanel, SWT.BORDER); GridDataFactory.fillDefaults().grab(true, false) .applyTo(remoteNameText); if (!getExistingRemotes().contains(Constants.DEFAULT_REMOTE_NAME)) { remoteNameText.setText(Constants.DEFAULT_REMOTE_NAME); remoteNameText.setSelection(remoteNameText.getText().length()); } else setMessage(UIText.AddRemotePage_EnterRemoteNameMessage); remoteNameText.addModifyListener(new ModifyListener() { @Override public void modifyText(ModifyEvent e) { checkPage(); } }); } @Override protected void checkPage() { String remoteName = getRemoteName(); if (remoteName.length() == 0) { setErrorMessage(UIText.AddRemotePage_RemoteNameEmptyError); setPageComplete(false); } else if (!isValidRemoteName(remoteName)) { setErrorMessage(UIText.AddRemotePage_RemoteNameInvalidError); setPageComplete(false); } else if (getExistingRemotes().contains(remoteName)) { setErrorMessage(UIText.AddRemotePage_RemoteNameAlreadyExistsError); setPageComplete(false); } else { super.checkPage(); } } @Override public void setVisible(boolean visible) { super.setVisible(visible); if (visible) remoteNameText.setFocus(); } private Set<String> getExistingRemotes() { return repository.getConfig().getSubsections(ConfigConstants.CONFIG_REMOTE_SECTION); } private static boolean isValidRemoteName(String remoteName) { String testRef = Constants.R_REMOTES + remoteName + "/test"; //$NON-NLS-1$ return Repository.isValidRefName(testRef); } }