org.eclipse.egit.ui.internal.push.AddRemotePage.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.egit.ui.internal.push.AddRemotePage.java

Source

/*******************************************************************************
 * 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);
    }
}