Package bndtools.bndplugins.repo.git

Source Code of bndtools.bndplugins.repo.git.GitCredentialsProvider

package bndtools.bndplugins.repo.git;

import java.awt.GraphicsEnvironment;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JCheckBox;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPasswordField;
import javax.swing.JTextField;

import org.eclipse.jgit.errors.UnsupportedCredentialItem;
import org.eclipse.jgit.transport.CredentialItem;
import org.eclipse.jgit.transport.CredentialsProvider;
import org.eclipse.jgit.transport.URIish;

import bndtools.bndplugins.repo.git.GitOBRRepo.Mapping;

public class GitCredentialsProvider extends CredentialsProvider {

    private final GitOBRRepo repo;

    private static final String CRED_ITEM = "credentialItem";

    public GitCredentialsProvider(GitOBRRepo repo) {
        this.repo = repo;
    }

    @Override
    public boolean get(URIish uri, CredentialItem... items) throws UnsupportedCredentialItem {
        Mapping mapping = repo.findMapping(uri.toString());
        if (mapping != null) {
            for (CredentialItem item : items) {
                if (item instanceof CredentialItem.Username) {
                    ((CredentialItem.Username) item).setValue(mapping.user);
                    continue;
                }
                if (item instanceof CredentialItem.Password) {
                    ((CredentialItem.Password) item).setValue(mapping.pass);
                    continue;
                }
                // Usually Passphrase
                if (item instanceof CredentialItem.StringType && item.isValueSecure()) {
                    ((CredentialItem.StringType) item).setValue(new String(mapping.pass));
                    continue;
                }
            }
            return true;
        }
        if (isInteractive()) {

            JComponent[] inputs = getSwingUI(items);
            int result = JOptionPane.showConfirmDialog(null, inputs, "Enter credentials for " + repo.getName(), JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE);
            if (result != JOptionPane.OK_OPTION) {
                return false;
            }
            updateCredentialItems(inputs);
            return true;
        }
        return false;
    }

    @Override
    public boolean isInteractive() {
        if (repo.containsMappings()) {
            return false;
        }
        return !GraphicsEnvironment.isHeadless();
    }

    @Override
    public boolean supports(CredentialItem... items) {
        return true;
    }

    private static JComponent[] getSwingUI(CredentialItem... items) {
        List<JComponent> components = new ArrayList<JComponent>();

        for (CredentialItem item : items) {

            if (item instanceof CredentialItem.Username) {
                components.add(new JLabel(item.getPromptText()));
                JTextField field = new JTextField();
                field.putClientProperty(CRED_ITEM, item);
                components.add(field);
                continue;
            }
            if (item instanceof CredentialItem.Password) {
                components.add(new JLabel(item.getPromptText()));
                JTextField field = new JPasswordField();
                field.putClientProperty(CRED_ITEM, item);
                components.add(field);
                continue;
            }
            if (item instanceof CredentialItem.StringType) {
                components.add(new JLabel(item.getPromptText()));
                JTextField field;
                if (item.isValueSecure()) {
                    field = new JPasswordField();
                } else {
                    field = new JTextField();
                }
                field.putClientProperty(CRED_ITEM, item);
                components.add(field);
                continue;
            }
            if (item instanceof CredentialItem.InformationalMessage) {
                components.add(new JLabel(item.getPromptText()));
                continue;
            }
            if (item instanceof CredentialItem.YesNoType) {
                JCheckBox field = new JCheckBox(item.getPromptText(), ((CredentialItem.YesNoType) item).getValue());
                field.putClientProperty(CRED_ITEM, item);
                components.add(field);
                continue;
            }
        }
        return components.toArray(new JComponent[components.size()]);
    }

    private static void updateCredentialItems(JComponent[] components) {
        for (JComponent component : components) {
            CredentialItem item = (CredentialItem) component.getClientProperty(CRED_ITEM);
            if (item == null) {
                continue;
            }
            if (item instanceof CredentialItem.Username) {
                JTextField field = (JTextField) component;
                ((CredentialItem.Username) item).setValue(field.getText());
                continue;
            }
            if (item instanceof CredentialItem.Password) {
                JPasswordField field = (JPasswordField) component;
                ((CredentialItem.Password) item).setValue(field.getPassword());
                continue;
            }
            if (item instanceof CredentialItem.StringType) {
                if (item.isValueSecure()) {
                    JPasswordField field = (JPasswordField) component;
                    ((CredentialItem.StringType) item).setValue(new String(field.getPassword()));
                    continue;
                }
                JTextField field = (JTextField) component;
                ((CredentialItem.Username) item).setValue(field.getText());
                continue;
            }
            if (item instanceof CredentialItem.YesNoType) {
                JCheckBox field = (JCheckBox) component;
                ((CredentialItem.YesNoType) item).setValue(field.isSelected());
                continue;
            }
        }
    }
}
TOP

Related Classes of bndtools.bndplugins.repo.git.GitCredentialsProvider

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.