/* * 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.datatools.connectivity.ui; import java.util.ArrayList; import java.util.Enumeration; import java.util.List; import java.util.Properties; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import org.eclipse.datatools.connectivity.ConnectionProfileConstants; import org.eclipse.datatools.connectivity.internal.ui.ConnectivityUIPlugin; import org.eclipse.datatools.connectivity.internal.ui.DriverListCombo; import org.eclipse.datatools.connectivity.internal.ui.IHelpConstants; import org.eclipse.datatools.connectivity.internal.ui.wizards.DriverUIContributorComposite; import org.eclipse.datatools.connectivity.sqm.core.SQMServices; import org.eclipse.datatools.connectivity.ui.wizards.ConnectionProfileDetailsPage; import org.eclipse.datatools.connectivity.ui.wizards.ExtensibleNewConnectionProfileWizard; import org.eclipse.datatools.connectivity.ui.wizards.IDriverUIContributorInformation; import org.eclipse.datatools.help.HelpUtil; import org.eclipse.jface.dialogs.IMessageProvider; import org.eclipse.jface.wizard.IWizard; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; /** * This class pulls in the code from ExtensibleProfileDetailsWizardPage * so that we can access and set the driver displayed in the driverCombo * * @since 8.0 */ public class TeiidProfileDetailsWizardPage extends ConnectionProfileDetailsPage implements IDriverUIContributorInformation { private String driverCategoryID = ""; //$NON-NLS-1$ private DriverListCombo driverCombo = null; private DriverUIContributorComposite contributedUIComposite = null; private Properties properties = null; private ChangeListener driverChangeListener; public TeiidProfileDetailsWizardPage(String wizardPageName, String driverCategoryID) { super(wizardPageName); this.driverCategoryID = driverCategoryID; setTitle(ConnectivityUIPlugin.getDefault().getResourceString( "ExtensibleProfileDetailsWizardPage.title")); //$NON-NLS-1$ setDescription(ConnectivityUIPlugin.getDefault().getResourceString( "ExtensibleProfileDetailsWizardPage.description")); //$NON-NLS-1$ } public TeiidProfileDetailsWizardPage( String pageName, IWizard wizard) { super(pageName); this.driverCategoryID = ITeiidDriverConstants.TEIID_CATEGORY; setTitle(ConnectivityUIPlugin.getDefault().getResourceString( "ExtensibleProfileDetailsWizardPage.title")); //$NON-NLS-1$ setDescription(ConnectivityUIPlugin.getDefault().getResourceString( "ExtensibleProfileDetailsWizardPage.description")); //$NON-NLS-1$ setWizard(wizard); } @Override public void createCustomControl(Composite parent) { /* * This bit of code uses the new provider ID mapping functionality added * as an experimental API in DTP 1.7. * <p><strong>EXPERIMENTAL</strong>. This code has been added as * part of a work in progress. There is no guarantee that this API will * work or that it will remain the same. Please do not use this API without * consulting with the DTP Connectivity team.</p> */ IWizard wiz = getWizard(); if (wiz instanceof ExtensibleNewConnectionProfileWizard) { ExtensibleNewConnectionProfileWizard wizard = (ExtensibleNewConnectionProfileWizard) wiz; String tempDriverCategoryID = SQMServices.getProviderIDMappingRegistry().getCategoryIDforProviderID(wizard.getProfileProviderID()); if (tempDriverCategoryID != null && tempDriverCategoryID.trim().length() > 0) this.driverCategoryID = tempDriverCategoryID; } parent.setLayout(new GridLayout()); driverCombo = new DriverListCombo(); driverCombo .setLabelText(ConnectivityUIPlugin .getDefault() .getResourceString( "ExtensibleProfileDetailsWizardPage.driverCombo.label")); //$NON-NLS-1$ driverCombo.setCategory(this.driverCategoryID); driverCombo.setNullDriverIsValid(false); driverCombo.createContents(parent); contributedUIComposite = new DriverUIContributorComposite(parent, this, this, false); driverChangeListener = new ChangeListener() { @Override public void stateChanged(ChangeEvent e) { handleDriverComboSelectionChangeEvent(e); } }; driverCombo.addChangeListener(driverChangeListener); if (driverCombo.getErrorMessage() != null) { setMessage(driverCombo.getErrorMessage(), IMessageProvider.INFORMATION);//ErrorMessage(driverCombo.getErrorMessage()); } } @Override public void createControl(Composite parent) { super.createControl(parent); HelpUtil.setHelp( getControl(), HelpUtil.getContextId(IHelpConstants.GENERIC_DB_PROFILE_WIZARD_PAGE, ConnectivityUIPlugin.getDefault().getBundle().getSymbolicName())); } private void handleDriverComboSelectionChangeEvent(ChangeEvent e) { if (driverCombo.getErrorMessage() != null) { setErrorMessage(driverCombo.getErrorMessage()); } else { setMessage(null); } if (driverCombo.getSelectedDriverInstance() != null) { this.properties = copyProperties(driverCombo .getSelectedDriverInstance().getPropertySet() .getBaseProperties()); this.properties.setProperty( ConnectionProfileConstants.PROP_DRIVER_DEFINITION_ID, driverCombo.getSelectedDriverID()); if(getWizard().getContainer() instanceof IDriverUIContributorInformation) { IDriverUIContributorInformation info = (IDriverUIContributorInformation) getWizard().getContainer(); this.properties.putAll(info.getProperties()); } } contributedUIComposite.setDriverTemplateID(driverCombo .getSelectedDriverID()); } public boolean determinePageCompletion() { boolean isComplete = contributedUIComposite != null && contributedUIComposite.determineContributorCompletion(); if (isComplete) { setErrorMessage(null); } this.setPingButtonEnabled(isComplete); this.setPageComplete(isComplete); return isComplete; } @Override public Properties getProperties() { return this.properties; } @Override public void setProperties(Properties properties) { this.properties = properties; setPageComplete(determinePageCompletion()); } @Override public List getSummaryData() { List summaryData = new ArrayList(); summaryData = contributedUIComposite.getSummaryData(); return summaryData; } private Properties copyProperties(Properties properties) { Properties copy = new Properties(); Enumeration propertyKeys = properties.keys(); while (propertyKeys.hasMoreElements()) { Object key = propertyKeys.nextElement(); copy.put(key, properties.get(key)); } return copy; } @Override public boolean isPageComplete() { if (driverCombo == null) // means this control hasn't been instantiated yet return false; if (driverCombo != null && driverCombo.getSelectedDriverID() == null) return false; if (getErrorMessage() != null) return false; return super.isPageComplete(); } @Override public void dispose() { if (this.driverCombo != null) { this.driverCombo.dispose(); } super.dispose(); } public void setDriver(String driverID) { driverCombo.removeChangeListener(driverChangeListener); driverCombo.setSelectionToID(driverID); driverCombo.addChangeListener(driverChangeListener); } }