/*******************************************************************************
* Copyright (c) 2011, 2014 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.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.TypedEvent;
import org.eclipse.tcf.protocol.IPeer;
import org.eclipse.tcf.te.runtime.interfaces.properties.IPropertiesContainer;
import org.eclipse.tcf.te.tcf.core.interfaces.IPeerProperties;
import org.eclipse.tcf.te.tcf.ui.nls.Messages;
import org.eclipse.tcf.te.ui.controls.BaseDialogPageControl;
import org.eclipse.tcf.te.ui.controls.validator.NameOrIPValidator;
import org.eclipse.tcf.te.ui.controls.validator.Validator;
import org.eclipse.tcf.te.ui.controls.wire.network.NetworkAddressControl;
import org.eclipse.tcf.te.ui.controls.wire.network.NetworkCablePanel;
import org.eclipse.tcf.te.ui.controls.wire.network.NetworkPortControl;
import org.eclipse.tcf.te.ui.jface.interfaces.IValidatingContainer;
/**
* TCP transport type wizard configuration panel.
*/
public class TcpTransportPanel extends NetworkCablePanel {
/**
* Local address control implementation.
*/
protected class MyNetworkAddressControl extends NetworkAddressControl {
/**
* Constructor.
*
* @param networkPanel The parent network cable. Must not be <code>null</code>.
*/
public MyNetworkAddressControl(NetworkCablePanel networkPanel) {
super(networkPanel);
setEditFieldLabel(Messages.MyNetworkAddressControl_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.MyNetworkAddressControl_information_missingTargetNameAddress);
validator.setMessageText(NameOrIPValidator.ERROR_INVALID_NAME_OR_IP, Messages.MyNetworkAddressControl_error_invalidTargetNameAddress);
validator.setMessageText(NameOrIPValidator.ERROR_INVALID_NAME, Messages.MyNetworkAddressControl_error_invalidTargetNameAddress);
validator.setMessageText(NameOrIPValidator.ERROR_INVALID_IP, Messages.MyNetworkAddressControl_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.MyNetworkAddressControl_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);
}
}
}
/**
* Constructor.
*
* @param parentPageControl The parent control. Must not be <code>null</code>!
*/
public TcpTransportPanel(BaseDialogPageControl parentPageControl) {
super(parentPageControl);
}
/* (non-Javadoc)
* @see org.eclipse.tcf.te.ui.controls.wire.network.NetworkCablePanel#doCreateAddressControl(org.eclipse.tcf.te.ui.controls.wire.network.NetworkCablePanel)
*/
@Override
protected NetworkAddressControl doCreateAddressControl(NetworkCablePanel parentPanel) {
return new MyNetworkAddressControl(parentPanel);
}
/* (non-Javadoc)
* @see org.eclipse.tcf.te.ui.controls.wire.network.NetworkCablePanel#getDefaultPort()
*/
@Override
protected String getDefaultPort() {
return "1534"; //$NON-NLS-1$
}
/* (non-Javadoc)
* @see org.eclipse.tcf.te.ui.controls.wire.network.NetworkCablePanel#dataChanged(org.eclipse.tcf.te.runtime.interfaces.properties.IPropertiesContainer, org.eclipse.swt.events.TypedEvent)
*/
@Override
public boolean dataChanged(IPropertiesContainer data, TypedEvent e) {
Assert.isNotNull(data);
boolean isDirty = false;
NetworkAddressControl addressControl = getAddressControl();
if (addressControl != null) {
String address = addressControl.getEditFieldControlText();
if (address != null) {
if ("".equals(address)) { //$NON-NLS-1$
isDirty |= data.getStringProperty(IPeer.ATTR_IP_HOST) != null && !address.equals(data.getStringProperty(IPeer.ATTR_IP_HOST));
} else {
isDirty |= !address.equals(data.getStringProperty(IPeer.ATTR_IP_HOST));
}
}
}
NetworkPortControl portControl = getPortControl();
if (portControl != null) {
String port = portControl.getEditFieldControlText();
String oldPort = data.getStringProperty(IPeer.ATTR_IP_PORT);
isDirty |= !port.equals(oldPort != null ? oldPort : ""); //$NON-NLS-1$
}
boolean autoPort = data.getBooleanProperty(IPeerProperties.PROP_IP_PORT_IS_AUTO);
isDirty |= isAutoPort() != autoPort;
return isDirty;
}
/* (non-Javadoc)
* @see org.eclipse.tcf.te.ui.controls.wire.network.NetworkCablePanel#setupData(org.eclipse.tcf.te.runtime.interfaces.properties.IPropertiesContainer)
*/
@Override
public void setupData(IPropertiesContainer data) {
if (data == null) return;
boolean isAutoPort = data.getBooleanProperty(IPeerProperties.PROP_IP_PORT_IS_AUTO);
NetworkAddressControl addressControl = getAddressControl();
if (addressControl != null) {
addressControl.setEditFieldControlText(data.getStringProperty(IPeer.ATTR_IP_HOST));
}
NetworkPortControl portControl = getPortControl();
if (portControl != null) {
String port = data.getStringProperty(IPeer.ATTR_IP_PORT);
portControl.setEditFieldControlText(port != null ? port : ""); //$NON-NLS-1$
}
setIsAutoPort(isAutoPort);
}
/* (non-Javadoc)
* @see org.eclipse.tcf.te.ui.controls.wire.network.NetworkCablePanel#extractData(org.eclipse.tcf.te.runtime.interfaces.properties.IPropertiesContainer)
*/
@Override
public void extractData(IPropertiesContainer data) {
if (data == null) return;
boolean isAutoPort = isAutoPort();
NetworkAddressControl addressControl = getAddressControl();
if (addressControl != null) {
String host = addressControl.getEditFieldControlText();
data.setProperty(IPeer.ATTR_IP_HOST, !"".equals(host) ? host : null); //$NON-NLS-1$
}
NetworkPortControl portControl = getPortControl();
if (portControl != null) {
String port = portControl.getEditFieldControlText();
if (isAutoPort) {
data.setProperty(IPeer.ATTR_IP_PORT, null);
}
else {
data.setProperty(IPeer.ATTR_IP_PORT, !"".equals(port) ? port : null); //$NON-NLS-1$
}
}
if (isAutoPort) {
data.setProperty(IPeerProperties.PROP_IP_PORT_IS_AUTO, Boolean.TRUE.toString());
} else {
data.setProperty(IPeerProperties.PROP_IP_PORT_IS_AUTO, null);
}
}
/* (non-Javadoc)
* @see org.eclipse.tcf.te.ui.controls.wire.network.NetworkCablePanel#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);
data.setProperty(IPeerProperties.PROP_IP_PORT_IS_AUTO, null);
}
/* (non-Javadoc)
* @see org.eclipse.tcf.te.ui.controls.wire.network.NetworkCablePanel#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));
dst.setProperty(IPeerProperties.PROP_IP_PORT_IS_AUTO, src.getStringProperty(IPeerProperties.PROP_IP_PORT_IS_AUTO));
}
}