/******************************************************************************* * Copyright (c) 2011, 2012 Wind River Systems, Inc. and others. All rights reserved. * This program and the accompanying materials are 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: * Wind River Systems - initial API and implementation *******************************************************************************/ package org.eclipse.tcf.te.tcf.ui.controls; import org.eclipse.core.runtime.Assert; import org.eclipse.jface.dialogs.IDialogPage; import org.eclipse.jface.dialogs.IDialogSettings; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.TypedEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.tcf.protocol.IPeer; import org.eclipse.tcf.te.runtime.interfaces.properties.IPropertiesContainer; import org.eclipse.tcf.te.tcf.ui.nls.Messages; import org.eclipse.tcf.te.ui.controls.BaseDialogPageControl; import org.eclipse.tcf.te.ui.controls.net.RemoteHostAddressControl; import org.eclipse.tcf.te.ui.controls.net.RemoteHostPortControl; import org.eclipse.tcf.te.ui.controls.panels.AbstractWizardConfigurationPanel; import org.eclipse.tcf.te.ui.controls.validator.NameOrIPValidator; import org.eclipse.tcf.te.ui.controls.validator.Validator; import org.eclipse.tcf.te.ui.interfaces.data.IDataExchangeNode3; import org.eclipse.tcf.te.ui.jface.interfaces.IValidatingContainer; import org.eclipse.tcf.te.ui.swt.SWTControlUtil; import org.eclipse.ui.forms.widgets.FormToolkit; /** * TCP transport type wizard configuration panel. */ public class TcpTransportPanel extends AbstractWizardConfigurationPanel implements IDataExchangeNode3 { private RemoteHostAddressControl addressControl = null; private RemoteHostPortControl portControl = null; /** * Local remote host address control implementation. */ protected class MyRemoteHostAddressControl extends RemoteHostAddressControl { /** * Constructor. * * @param parentPage The parent dialog page this control is embedded in. Must not be null! */ public MyRemoteHostAddressControl(IDialogPage parentPage) { super(parentPage); setEditFieldLabel(Messages.MyRemoteHostAddressControl_label); } /* (non-Javadoc) * @see org.eclipse.tcf.te.ui.controls.net.RemoteHostAddressControl#configureEditFieldValidator(org.eclipse.tcf.te.ui.controls.validator.Validator) */ @Override protected void configureEditFieldValidator(Validator validator) { if (validator instanceof NameOrIPValidator) { validator.setMessageText(NameOrIPValidator.INFO_MISSING_NAME_OR_IP, Messages.MyRemoteHostAddressControl_information_missingTargetNameAddress); validator.setMessageText(NameOrIPValidator.ERROR_INVALID_NAME_OR_IP, Messages.MyRemoteHostAddressControl_error_invalidTargetNameAddress); validator.setMessageText(NameOrIPValidator.ERROR_INVALID_NAME, Messages.MyRemoteHostAddressControl_error_invalidTargetNameAddress); validator.setMessageText(NameOrIPValidator.ERROR_INVALID_IP, Messages.MyRemoteHostAddressControl_error_invalidTargetIpAddress); validator.setMessageText(NameOrIPValidator.INFO_CHECK_NAME, getUserInformationTextCheckNameAddress()); } } /* (non-Javadoc) * @see org.eclipse.tcf.te.ui.controls.net.RemoteHostAddressControl#getUserInformationTextCheckNameAddress() */ @Override protected String getUserInformationTextCheckNameAddress() { return Messages.MyRemoteHostAddressControl_information_checkNameAddressUserInformation; } /* (non-Javadoc) * @see org.eclipse.tcf.te.ui.controls.BaseDialogPageControl#getValidatingContainer() */ @Override public IValidatingContainer getValidatingContainer() { return TcpTransportPanel.this.getParentControl().getValidatingContainer(); } /* (non-Javadoc) * @see org.eclipse.tcf.te.ui.controls.BaseEditBrowseTextControl#modifyText(org.eclipse.swt.events.ModifyEvent) */ @Override public void modifyText(ModifyEvent e) { super.modifyText(e); if (TcpTransportPanel.this.getParentControl() instanceof ModifyListener) { ((ModifyListener)TcpTransportPanel.this.getParentControl()).modifyText(e); } } } /** * Local remote host port control implementation. */ protected class MyRemoteHostPortControl extends RemoteHostPortControl { /** * Constructor. * * @param parentPage The parent dialog page this control is embedded in. Must not be null! */ public MyRemoteHostPortControl(IDialogPage parentPage) { super(parentPage); } /* (non-Javadoc) * @see org.eclipse.tcf.te.ui.controls.BaseDialogPageControl#getValidatingContainer() */ @Override public IValidatingContainer getValidatingContainer() { return TcpTransportPanel.this.getParentControl().getValidatingContainer(); } /* (non-Javadoc) * @see org.eclipse.tcf.te.ui.controls.BaseEditBrowseTextControl#modifyText(org.eclipse.swt.events.ModifyEvent) */ @Override public void modifyText(ModifyEvent e) { super.modifyText(e); if (TcpTransportPanel.this.getParentControl() instanceof ModifyListener) { ((ModifyListener)TcpTransportPanel.this.getParentControl()).modifyText(e); } } } /** * Constructor. * * @param parentPageControl The parent control. Must not be null! */ public TcpTransportPanel(BaseDialogPageControl parentPageControl) { super(parentPageControl); } /* (non-Javadoc) * @see org.eclipse.tcf.te.ui.controls.panels.AbstractWizardConfigurationPanel#dispose() */ @Override public void dispose() { if (addressControl != null) { addressControl.dispose(); addressControl = null; } if (portControl != null) { portControl.dispose(); portControl = null; } super.dispose(); } /* (non-Javadoc) * @see org.eclipse.tcf.te.ui.controls.interfaces.IWizardConfigurationPanel#setupPanel(org.eclipse.swt.widgets.Composite, org.eclipse.ui.forms.widgets.FormToolkit) */ @Override public void setupPanel(Composite parent, FormToolkit toolkit) { Assert.isNotNull(parent); Assert.isNotNull(toolkit); boolean adjustBackgroundColor = getParentControl().getParentPage() != null; Composite panel = toolkit.createComposite(parent); GridLayout layout = new GridLayout(); layout.marginHeight = 0; layout.marginWidth = 0; panel.setLayout(layout); panel.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); if (adjustBackgroundColor) panel.setBackground(parent.getBackground()); setControl(panel); addressControl = doCreateAddressControl(getParentControl().getParentPage()); addressControl.setupPanel(panel); portControl = doCreatePortControl(getParentControl().getParentPage()); portControl.setParentControlIsInnerPanel(true); portControl.setupPanel(addressControl.getInnerPanelComposite()); portControl.setEditFieldControlText("1534"); //$NON-NLS-1$ } /** * Creates the address control instance. * * @param parentPage The parent dialog page or null. * @return The address control instance. */ protected RemoteHostAddressControl doCreateAddressControl(IDialogPage parentPage) { return new MyRemoteHostAddressControl(parentPage); } /** * Creates the port control instance. * * @param parentPage The parent dialog page or null. * @return The port control instance. */ protected RemoteHostPortControl doCreatePortControl(IDialogPage parentPage) { return new MyRemoteHostPortControl(parentPage); } /* (non-Javadoc) * @see org.eclipse.tcf.te.ui.controls.panels.AbstractWizardConfigurationPanel#isValid() */ @Override public boolean isValid() { boolean valid = super.isValid(); if (!valid) return false; valid = addressControl.isValid(); setMessage(addressControl.getMessage(), addressControl.getMessageType()); valid &= portControl.isValid(); if (portControl.getMessageType() > getMessageType()) { setMessage(portControl.getMessage(), portControl.getMessageType()); } return valid; } /* (non-Javadoc) * @see org.eclipse.tcf.te.ui.controls.interfaces.IWizardConfigurationPanel#dataChanged(org.eclipse.tcf.te.runtime.interfaces.nodes.IPropertiesContainer, org.eclipse.swt.events.TypedEvent) */ @Override public boolean dataChanged(IPropertiesContainer data, TypedEvent e) { Assert.isNotNull(data); boolean isDirty = false; if (addressControl != null) { String address = addressControl.getEditFieldControlText(); if (address != null) isDirty |= !address.equals(data.getStringProperty(IPeer.ATTR_IP_HOST)); } if (portControl != null) { String port = portControl.getEditFieldControlText(); if (port != null) isDirty |= !port.equals(data.getStringProperty(IPeer.ATTR_IP_PORT)); } return isDirty; } /* (non-Javadoc) * @see org.eclipse.tcf.te.ui.wizards.interfaces.ISharedDataExchangeNode#setupData(org.eclipse.tcf.te.runtime.interfaces.nodes.IPropertiesContainer) */ @Override public void setupData(IPropertiesContainer data) { if (data == null) return; if (addressControl != null) { addressControl.setEditFieldControlText(data.getStringProperty(IPeer.ATTR_IP_HOST)); } if (portControl != null) { portControl.setEditFieldControlText(data.getStringProperty(IPeer.ATTR_IP_PORT)); } } /* (non-Javadoc) * @see org.eclipse.tcf.te.ui.wizards.interfaces.ISharedDataExchangeNode#extractData(org.eclipse.tcf.te.runtime.interfaces.nodes.IPropertiesContainer) */ @Override public void extractData(IPropertiesContainer data) { if (data == null) return; if (addressControl != null) { String host = addressControl.getEditFieldControlText(); data.setProperty(IPeer.ATTR_IP_HOST, !"".equals(host) ? host : null); //$NON-NLS-1$ } if (portControl != null) { String port = portControl.getEditFieldControlText(); data.setProperty(IPeer.ATTR_IP_PORT, !"".equals(port) ? port : null); //$NON-NLS-1$ } } /* (non-Javadoc) * @see org.eclipse.tcf.te.ui.interfaces.data.IDataExchangeNode2#initializeData(org.eclipse.tcf.te.runtime.interfaces.properties.IPropertiesContainer) */ @Override public void initializeData(IPropertiesContainer data) { } /* (non-Javadoc) * @see org.eclipse.tcf.te.ui.interfaces.data.IDataExchangeNode3#removeData(org.eclipse.tcf.te.runtime.interfaces.properties.IPropertiesContainer) */ @Override public void removeData(IPropertiesContainer data) { if (data == null) return; data.setProperty(IPeer.ATTR_IP_HOST, null); data.setProperty(IPeer.ATTR_IP_PORT, null); } /* (non-Javadoc) * @see org.eclipse.tcf.te.ui.interfaces.data.IDataExchangeNode3#copyData(org.eclipse.tcf.te.runtime.interfaces.properties.IPropertiesContainer, org.eclipse.tcf.te.runtime.interfaces.properties.IPropertiesContainer) */ @Override public void copyData(IPropertiesContainer src, IPropertiesContainer dst) { Assert.isNotNull(src); Assert.isNotNull(dst); dst.setProperty(IPeer.ATTR_IP_HOST, src.getStringProperty(IPeer.ATTR_IP_HOST)); dst.setProperty(IPeer.ATTR_IP_PORT, src.getStringProperty(IPeer.ATTR_IP_PORT)); } /* (non-Javadoc) * @see org.eclipse.tcf.te.ui.controls.panels.AbstractWizardConfigurationPanel#doSaveWidgetValues(org.eclipse.jface.dialogs.IDialogSettings, java.lang.String) */ @Override public void doSaveWidgetValues(IDialogSettings settings, String idPrefix) { super.doSaveWidgetValues(settings, idPrefix); if (addressControl != null) addressControl.doSaveWidgetValues(settings, idPrefix); if (portControl != null) portControl.doSaveWidgetValues(settings, idPrefix); } /* (non-Javadoc) * @see org.eclipse.tcf.te.ui.controls.panels.AbstractWizardConfigurationPanel#doRestoreWidgetValues(org.eclipse.jface.dialogs.IDialogSettings, java.lang.String) */ @Override public void doRestoreWidgetValues(IDialogSettings settings, String idPrefix) { super.doRestoreWidgetValues(settings, idPrefix); if (addressControl != null) addressControl.doRestoreWidgetValues(settings, idPrefix); if (portControl != null) portControl.doRestoreWidgetValues(settings, idPrefix); } /* (non-Javadoc) * @see org.eclipse.tcf.te.ui.controls.panels.AbstractWizardConfigurationPanel#setEnabled(boolean) */ @Override public void setEnabled(boolean enabled) { if (addressControl != null) { SWTControlUtil.setEnabled(addressControl.getEditFieldControl(), enabled); SWTControlUtil.setEnabled(addressControl.getButtonControl(), enabled); } if (portControl != null) { SWTControlUtil.setEnabled(portControl.getEditFieldControl(), enabled); } } }