Package org.eclipse.egit.ui.internal.dialogs

Source Code of org.eclipse.egit.ui.internal.dialogs.BasicConfigurationDialog

/*******************************************************************************
* Copyright (c) 2011 Mathias Kinzler <mathias.kinzler@sap.com>
* Copyright (c) 2011 Matthias Sohn <matthias.sohn@sap.com>
*
* 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.dialogs;

import java.io.IOException;

import org.eclipse.egit.ui.Activator;
import org.eclipse.egit.ui.UIPreferences;
import org.eclipse.egit.ui.internal.UIText;
import org.eclipse.egit.ui.internal.preferences.GlobalConfigurationPreferencePage;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.TitleAreaDialog;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.window.Window;
import org.eclipse.jgit.errors.ConfigInvalidException;
import org.eclipse.jgit.lib.ConfigConstants;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.lib.StoredConfig;
import org.eclipse.jgit.lib.UserConfig;
import org.eclipse.jgit.util.FS;
import org.eclipse.jgit.util.SystemReader;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CLabel;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Link;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.dialogs.PreferencesUtil;

/**
* Dialog for basic configuration (User name, e-mail)
*
*/
public class BasicConfigurationDialog extends TitleAreaDialog {
  private Button dontShowAgain;

  private StoredConfig userScopedConfig;

  private Text email;

  private Text userName;

  private boolean needsUpdate = false;

  /**
   * Opens the dialog if the {@link UIPreferences#SHOW_INITIAL_CONFIG_DIALOG}
   * is true and author or committer identity is based on implicit data
   *
   * @param repositories
   *            if called from repository context otherwise null
   */
  public static void show(Repository... repositories) {
    if (Activator.getDefault().getPreferenceStore()
        .getBoolean(UIPreferences.SHOW_INITIAL_CONFIG_DIALOG)
        && isImplicitUserConfig(repositories))
      PlatformUI.getWorkbench().getDisplay().syncExec(new Runnable() {
        public void run() {
          new BasicConfigurationDialog(PlatformUI.getWorkbench()
              .getDisplay().getActiveShell()).open();
        }
      });
  }

  private static boolean isImplicitUserConfig(Repository... repositories) {
    if (repositories == null)
      return false;

    for (Repository repository : repositories) {
      UserConfig uc = loadRepoScopedConfig(repository)
          .get(UserConfig.KEY);
      if (uc.isAuthorNameImplicit() //
          || uc.isAuthorEmailImplicit()
          || uc.isCommitterNameImplicit()
          || uc.isCommitterEmailImplicit())
        return true;
    }
    return false;
  }

  private static StoredConfig loadUserScopedConfig() {
    StoredConfig c = SystemReader.getInstance().openUserConfig(null,
        FS.DETECTED);
    try {
      c.load();
    } catch (IOException e) {
      Activator.handleError(e.getMessage(), e, true);
    } catch (ConfigInvalidException e) {
      Activator.handleError(e.getMessage(), e, true);
    }
    return c;
  }

  private static StoredConfig loadRepoScopedConfig(Repository repo) {
    StoredConfig c = repo.getConfig();
    try {
      c.load();
    } catch (IOException e) {
      Activator.handleError(e.getMessage(), e, true);
    } catch (ConfigInvalidException e) {
      Activator.handleError(e.getMessage(), e, true);
    }
    return c;
  }

  /**
   * @param parentShell
   */
  public BasicConfigurationDialog(Shell parentShell) {
    super(parentShell);
    setHelpAvailable(false);
  }

  @Override
  protected Control createDialogArea(Composite parent) {
    userScopedConfig = loadUserScopedConfig();

    UserConfig userConfig = userScopedConfig.get(UserConfig.KEY);
    Composite main = new Composite(parent, SWT.NONE);
    main.setLayout(new GridLayout(2, false));
    GridDataFactory.fillDefaults().grab(true, true).applyTo(main);

    // user name
    Label userNameLabel = new Label(main, SWT.NONE);
    userNameLabel.setText(UIText.BasicConfigurationDialog_UserNameLabel);
    userName = new Text(main, SWT.BORDER);
    GridDataFactory.fillDefaults().grab(true, false).applyTo(userName);
    String currentName = null;
    if (userConfig != null)
      currentName = userConfig.getAuthorName();
    if (currentName != null)
      userName.setText(currentName);
    userName.addModifyListener(new ModifyListener() {
      public void modifyText(ModifyEvent e) {
        needsUpdate = true;
      }
    });

    // user email
    Label emailLabel = new Label(main, SWT.NONE);
    emailLabel.setText(UIText.BasicConfigurationDialog_UserEmailLabel);
    email = new Text(main, SWT.BORDER);
    GridDataFactory.fillDefaults().grab(true, false).applyTo(email);
    String currentMail = null;
    if (userConfig != null)
      currentMail = userConfig.getAuthorEmail();
    if (currentMail != null)
      email.setText(currentMail);
    email.addModifyListener(new ModifyListener() {
      public void modifyText(ModifyEvent e) {
        needsUpdate = true;
      }
    });

    CLabel configLocationInfoLabel = new CLabel(main, SWT.NONE);
    configLocationInfoLabel.setImage(JFaceResources
        .getImage(Dialog.DLG_IMG_MESSAGE_INFO));
    configLocationInfoLabel
        .setText(UIText.BasicConfigurationDialog_ConfigLocationInfo);
    GridDataFactory.fillDefaults().span(2, 1)
        .applyTo(configLocationInfoLabel);

    dontShowAgain = new Button(main, SWT.CHECK);
    GridDataFactory.fillDefaults().span(2, 1).applyTo(dontShowAgain);
    dontShowAgain.setText(UIText.BasicConfigurationDialog_DontShowAgain);
    dontShowAgain.setSelection(true);

    Link link = new Link(main, SWT.UNDERLINE_LINK);
    GridDataFactory.fillDefaults().span(2, 1).applyTo(link);
    link.setText(UIText.BasicConfigurationDialog_OpenPreferencePage);
    link.addSelectionListener(new SelectionAdapter() {
      @Override
      public void widgetSelected(SelectionEvent e) {
        PreferencesUtil.createPreferenceDialogOn(getShell(),
            GlobalConfigurationPreferencePage.ID, null, null)
            .open();
      }
    });
    applyDialogFont(main);
    return main;
  }

  @Override
  public void create() {
    super.create();
    setTitle(UIText.BasicConfigurationDialog_DialogTitle);
    setMessage(UIText.BasicConfigurationDialog_DialogMessage);
  }

  @Override
  protected void configureShell(Shell newShell) {
    super.configureShell(newShell);
    newShell.setText(UIText.BasicConfigurationDialog_WindowTitle);
  }

  @Override
  protected void buttonPressed(int buttonId) {
    if (buttonId == Window.OK) {
      if (needsUpdate) {
        userScopedConfig.setString(ConfigConstants.CONFIG_USER_SECTION,
            null, ConfigConstants.CONFIG_KEY_NAME, userName
                .getText());
        userScopedConfig
            .setString(ConfigConstants.CONFIG_USER_SECTION, null,
                ConfigConstants.CONFIG_KEY_EMAIL, email
                    .getText());
        try {
          userScopedConfig.save();
        } catch (IOException e) {
          Activator.handleError(e.getMessage(), e, true);
        }
      }
      if (dontShowAgain.getSelection())
        Activator.getDefault().getPreferenceStore().setValue(
            UIPreferences.SHOW_INITIAL_CONFIG_DIALOG, false);
    }
    super.buttonPressed(buttonId);
  }
}
TOP

Related Classes of org.eclipse.egit.ui.internal.dialogs.BasicConfigurationDialog

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.