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