org.jboss.tools.foundation.ui.credentials.internal.NewCredentialDomainDialog.java Source code

Java tutorial

Introduction

Here is the source code for org.jboss.tools.foundation.ui.credentials.internal.NewCredentialDomainDialog.java

Source

/******************************************************************************* 
 * Copyright (c) 2015 Red Hat, Inc. 
 * Distributed under license by Red Hat, Inc. All rights reserved. 
 * This program is 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 
 * 
 * Contributors: 
 * Red Hat, Inc. - initial API and implementation 
 ******************************************************************************/
package org.jboss.tools.foundation.ui.credentials.internal;

import java.util.Arrays;

import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.IMessageProvider;
import org.eclipse.jface.dialogs.TitleAreaDialog;
import org.eclipse.swt.SWT;
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.FormLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.jboss.tools.foundation.core.credentials.ICredentialDomain;
import org.jboss.tools.foundation.core.credentials.ICredentialsModel;
import org.jboss.tools.foundation.ui.util.FormDataUtility;

public class NewCredentialDomainDialog extends TitleAreaDialog {

    private ICredentialsModel model;
    private String domainName;

    // Used when editing a domain instead of creating a new one
    private ICredentialDomain domain;
    private String defaultUser;

    private Combo defaultUserCombo;
    private Text domainText;

    public NewCredentialDomainDialog(Shell parentShell, ICredentialsModel model) {
        super(parentShell);
        this.model = model;
    }

    /*
     * Edit an existing domain
     */
    public NewCredentialDomainDialog(Shell parentShell, ICredentialsModel model, ICredentialDomain domain) {
        super(parentShell);
        this.model = model;
        this.domain = domain;
    }

    @Override
    protected void configureShell(Shell shell) {
        super.configureShell(shell);
        Shell s2 = shell.getParent().getShell();
        if (s2 != null)
            shell.setLocation(s2.getLocation());
        shell.setBounds(shell.getLocation().x, shell.getLocation().y, 550, 500);
        if (domain == null)
            shell.setText(CredentialMessages.AddACredentialDomain);
        else {
            shell.setText(CredentialMessages.EditACredentialDomain);
        }
    }

    @Override
    protected int getShellStyle() {
        int ret = super.getShellStyle();
        return ret | SWT.RESIZE;
    }

    @Override
    protected Control createContents(Composite parent) {
        Control control = super.createContents(parent);
        validate();
        return control;
    }

    @Override
    protected Control createDialogArea(Composite parent) {
        Composite main = new Composite((Composite) super.createDialogArea(parent), SWT.NONE);
        main.setLayoutData(new GridData(GridData.FILL_BOTH));
        main.setLayout(new FormLayout());

        domainText = new Text(main, SWT.SINGLE | SWT.BORDER);
        Label l = new Label(main, SWT.NONE);
        l.setText(CredentialMessages.NewDomainNameLabel);

        l.setLayoutData(new FormDataUtility().createFormData(0, 4, null, 0, 0, 5, null, 0));
        domainText.setLayoutData(new FormDataUtility().createFormData(null, 0, null, 0, l, 5, 100, -5));

        if (domain == null) {
            setTitle(CredentialMessages.AddACredentialDomain);
        } else {
            setTitle(CredentialMessages.EditACredentialDomain);
            addDefaultUsernameCombo(main, domainText);
            ;
            domainText.setEnabled(false);
        }

        addListeners();
        return main;
    }

    private void addListeners() {
        domainText.addModifyListener(new ModifyListener() {
            public void modifyText(ModifyEvent e) {
                domainName = domainText.getText();
                validate();
            }
        });

        if (defaultUserCombo != null) {
            defaultUserCombo.addSelectionListener(new SelectionAdapter() {
                public void widgetSelected(SelectionEvent e) {
                    int sel = defaultUserCombo.getSelectionIndex();
                    if (sel != -1) {
                        defaultUser = defaultUserCombo.getItem(sel);
                    }
                }
            });
        }
    }

    void validate() {
        if (domain == null) {
            boolean valid = checkValid();
            getButton(IDialogConstants.OK_ID).setEnabled(valid);
        }
    }

    boolean checkValid() {
        if (domainName == null || domainName.isEmpty()) {
            setMessage(CredentialMessages.DomainNameIsEmpty);
            return false;
        } else {
            ICredentialDomain[] domains = model.getDomains();
            for (int i = 0; i < domains.length; i++) {
                if (domains[i].getName().equals(domainName)) {
                    setMessage(CredentialMessages.DomainNameExists, IMessageProvider.ERROR);
                    return false;
                }
                if (domains[i].getId().equals(domainName)) {
                    setMessage(CredentialMessages.DomainIdExists, IMessageProvider.ERROR);
                    return false;
                }
            }
        }
        setMessage(null, IMessageProvider.NONE);
        return true;
    }

    private void addDefaultUsernameCombo(Composite main, Text domainText) {
        // We're editing an existing domain
        domainText.setText(domain.getName());
        String[] users = domain.getUsernames();
        if (users.length > 0) {
            domainText.setEnabled(false);
            defaultUser = domain.getDefaultUsername();
            // We should show a combo here to select the default user
            Label comboLabel = new Label(main, SWT.NONE);
            comboLabel.setText("Default user: ");
            comboLabel.setLayoutData(new FormDataUtility().createFormData(domainText, 8, null, 0, 0, 5, null, 0));

            defaultUserCombo = new Combo(main, SWT.READ_ONLY);
            defaultUserCombo.setItems(domain.getUsernames());
            defaultUserCombo.setLayoutData(
                    new FormDataUtility().createFormData(domainText, 5, null, 0, comboLabel, 5, 100, -5));

            int toSelect = defaultUser == null ? -1 : Arrays.asList(users).indexOf(defaultUser);
            if (toSelect != -1) {
                defaultUserCombo.select(toSelect);
            }
        }
    }

    public String getDefaultUser() {
        return defaultUser;
    }

    public String getDomainName() {
        return domainName;
    }
}