/* * JBoss, Home of Professional Open Source. * * See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing. * * See the AUTHORS.txt file distributed with this work for a full listing of individual contributors. */ package org.teiid.designer.runtime.ui.server; import java.util.Collection; import java.util.HashMap; import java.util.Map; import org.eclipse.jface.dialogs.TitleAreaDialog; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Shell; import org.teiid.core.designer.event.IChangeListener; import org.teiid.core.designer.event.IChangeNotifier; import org.teiid.core.designer.util.I18nUtil; import org.teiid.designer.runtime.DqpPlugin; import org.teiid.designer.runtime.spi.ITeiidServer; import org.teiid.designer.runtime.ui.DqpUiConstants; import org.teiid.designer.ui.common.util.WidgetUtil; /** * @since 8.0 */ public class ServerSelectionDialog extends TitleAreaDialog implements DqpUiConstants, IChangeListener { private static final String PREFIX = I18nUtil.getPropertyPrefix(ServerSelectionDialog.class); private static final String NO_DEFAULT = "No Default"; //$NON-NLS-1$ private ITeiidServer selectedServer; private Combo serversCombo; private boolean includeNoDefaultOption = false; private Map<String, ITeiidServer> serverMap = new HashMap<String, ITeiidServer>(); /** * Constructor * @param parentShell the parent shell * @param includeNoDefaultOption 'true' includes a 'No Default' option in addition to available servers */ public ServerSelectionDialog(Shell parentShell, boolean includeNoDefaultOption) { super(parentShell); setShellStyle(getShellStyle() | SWT.RESIZE); this.includeNoDefaultOption = includeNoDefaultOption; } /** * @see org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets.Shell) * @since 5.5.3 */ @Override protected void configureShell(Shell shell) { super.configureShell(shell); shell.setText(UTIL.getString(PREFIX + "title")); //$NON-NLS-1$ } /** * @see org.eclipse.jface.dialogs.Dialog#createButtonBar(org.eclipse.swt.widgets.Composite) * @since 5.5.3 */ @Override protected Control createButtonBar(Composite parent) { Control buttonBar = super.createButtonBar(parent); getButton(OK).setEnabled(true); // set the first selection so that initial validation state is set // (doing it here since the selection handler uses OK // button) return buttonBar; } /** * @see org.eclipse.jface.dialogs.TitleAreaDialog#createDialogArea(org.eclipse.swt.widgets.Composite) * @since 5.5.3 */ @SuppressWarnings("unused") @Override protected Control createDialogArea(Composite parent) { Composite pnlOuter = (Composite) super.createDialogArea(parent); Composite panel = new Composite(pnlOuter, SWT.NONE); GridLayout gridLayout = new GridLayout(); gridLayout.numColumns = 2; gridLayout.marginTop = 25; gridLayout.marginLeft = 10; gridLayout.marginRight = 10; panel.setLayout(gridLayout); panel.setLayoutData(new GridData(GridData.FILL_BOTH)); // set title setTitle(UTIL.getString(PREFIX + "title")); //$NON-NLS-1$ setMessage(UTIL.getString(PREFIX + "initialMessage")); //$NON-NLS-1$ ACTION_COMBO: { serversCombo = new Combo(panel, SWT.NONE | SWT.READ_ONLY); GridData gd = new GridData(GridData.FILL_HORIZONTAL); gd.horizontalSpan = 2; serversCombo.setLayoutData(gd); serversCombo.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent ev) { selectedServer = null; String serverName = serversCombo.getItem(serversCombo.getSelectionIndex()); selectedServer = serverMap.get(serverName); updateState(); } }); Collection<ITeiidServer> teiidServers = DqpPlugin.getInstance().getServerManager().getServers(); ITeiidServer currentDefault = DqpPlugin.getInstance().getServerManager().getDefaultServer(); String currentServerStr = null; if(currentDefault==null) { currentServerStr = NO_DEFAULT; } else { currentServerStr = currentDefault.toString(); } // Add NO_DEFAULT option if desired if(this.includeNoDefaultOption) serverMap.put(NO_DEFAULT, null); // Add remaining servers from DQP Plugin for( ITeiidServer teiidServer : teiidServers ) { serverMap.put(teiidServer.toString(), teiidServer); } WidgetUtil.setComboItems(serversCombo, serverMap.keySet(), null, true); // Set initial selection boolean setInitial = false; for(int i=0; i<serversCombo.getItemCount(); i++) { String serverName = serversCombo.getItem(i); if(serverName!=null && serverName.equalsIgnoreCase(currentServerStr)) { serversCombo.select(i); selectedServer = serverMap.get(serverName); setInitial = true; break; } } // If initial selection was not found, set to first item. if(!setInitial && serversCombo.getItemCount()>0) serversCombo.select(0); } return panel; } /** * Get the selected server * @return the selected server */ public ITeiidServer getServer() { return this.selectedServer; } /** * @see org.teiid.core.designer.event.IChangeListener#stateChanged(org.teiid.core.designer.event.IChangeNotifier) * @since 5.5.3 */ @Override public void stateChanged(IChangeNotifier theSource) { updateState(); } private void updateState() { // selectedServer == null is a valid choice (No Default) getButton(OK).setEnabled(true); if(!this.includeNoDefaultOption && this.serversCombo.getItemCount()==0) { getButton(OK).setEnabled(false); setErrorMessage(UTIL.getString(PREFIX + "noServersExistMessage")); //$NON-NLS-1$ return; } if(this.includeNoDefaultOption && this.serversCombo.getItemCount()==1) { setErrorMessage(null); setMessage(UTIL.getString(PREFIX + "noServersExistMessage")); //$NON-NLS-1$ } } }