/*******************************************************************************
* Copyright (c) 2015 Zend Technologies 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:
* Zend Technologies - initial API and implementation
*******************************************************************************/
package org.eclipse.php.internal.debug.ui.wizards;
import static org.eclipse.php.internal.debug.core.xdebug.dbgp.XDebugDebuggerSettingsConstants.PROP_CLIENT_PORT;
import static org.eclipse.php.internal.debug.core.xdebug.dbgp.XDebugDebuggerSettingsConstants.PROP_PROXY_ADDRESS;
import static org.eclipse.php.internal.debug.core.xdebug.dbgp.XDebugDebuggerSettingsConstants.PROP_PROXY_ENABLE;
import static org.eclipse.php.internal.debug.core.xdebug.dbgp.XDebugDebuggerSettingsConstants.PROP_PROXY_IDE_KEY;
import java.text.MessageFormat;
import org.eclipse.jface.dialogs.IMessageProvider;
import org.eclipse.php.internal.debug.core.debugger.IDebuggerSettingsWorkingCopy;
import org.eclipse.php.internal.debug.core.launching.PHPLaunchUtilities;
import org.eclipse.php.internal.debug.core.xdebug.communication.XDebugCommunicationDaemon;
import org.eclipse.php.internal.debug.core.xdebug.dbgp.DBGpProxyHandlersManager;
import org.eclipse.php.internal.ui.wizards.CompositeFragment;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.*;
/**
* XDebug debugger settings section for PHP server.
*
* @author Bartlomiej Laczkowski
*/
@SuppressWarnings("restriction")
public class XDebugDebuggerServerSettingsSection implements IDebuggerSettingsSection {
protected IDebuggerSettingsWorkingCopy settingsWorkingCopy;
protected CompositeFragment compositeFragment;
protected Composite settingsComposite;
/**
* Creates new section.
*/
public XDebugDebuggerServerSettingsSection(final CompositeFragment compositeFragment,
final Composite debuggerSettingsComposite, final IDebuggerSettingsWorkingCopy settingsWorkingCopy) {
this.settingsWorkingCopy = settingsWorkingCopy;
this.compositeFragment = compositeFragment;
this.settingsComposite = debuggerSettingsComposite;
createContents();
}
/*
* (non-Javadoc)
*
* @see org.eclipse.php.internal.debug.ui.wizards.IDebuggerSettingsSection#
* performOK ()
*/
@Override
public boolean performOK() {
DBGpProxyHandlersManager.INSTANCE.registerHandler(settingsWorkingCopy.getOwnerId());
return true;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.php.internal.debug.ui.wizards.IDebuggerSettingsSection#
* performCancel()
*/
@Override
public boolean performCancel() {
return true;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.php.internal.debug.ui.wizards.IDebuggerSettingsSection#
* validate ()
*/
public void validate() {
// Reset state
compositeFragment.setMessage(compositeFragment.getDescription(), IMessageProvider.NONE);
// Check errors
String clientPort = (String) settingsWorkingCopy.getAttribute(PROP_CLIENT_PORT);
if (clientPort == null || clientPort.isEmpty()) {
compositeFragment.setMessage(Messages.XDebugDebuggerSettingsSection_Client_port_is_missing,
IMessageProvider.ERROR);
return;
}
int port = Integer.valueOf(clientPort);
if (!PHPLaunchUtilities.isPortAvailable(port)
&& !PHPLaunchUtilities.isDebugDaemonActive(port, XDebugCommunicationDaemon.XDEBUG_DEBUGGER_ID)) {
compositeFragment.setMessage(
MessageFormat.format(Messages.DebuggerCommonSettingsSection_Port_is_already_in_use, clientPort),
IMessageProvider.WARNING);
return;
}
boolean isProxyEnabled = Boolean.valueOf(settingsWorkingCopy.getAttribute(PROP_PROXY_ENABLE));
if (isProxyEnabled) {
String proxyIdeKey = settingsWorkingCopy.getAttribute(PROP_PROXY_IDE_KEY);
if (proxyIdeKey == null || proxyIdeKey.isEmpty()) {
compositeFragment.setMessage(Messages.XDebugDebuggerServerSettingsSection_IDE_key_is_missing,
IMessageProvider.ERROR);
return;
}
String proxyAddress = settingsWorkingCopy.getAttribute(PROP_PROXY_ADDRESS);
if (proxyAddress == null || proxyAddress.isEmpty()) {
compositeFragment.setMessage(Messages.XDebugDebuggerServerSettingsSection_Proxy_address_is_missing,
IMessageProvider.ERROR);
return;
}
}
}
/*
* (non-Javadoc)
*
* @see org.eclipse.php.internal.debug.ui.wizards.IDebuggerSettingsSection#
* canTest ()
*/
@Override
public boolean canTest() {
// Maybe in the future...
return false;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.php.internal.debug.ui.wizards.IDebuggerSettingsSection#
* performTest()
*/
@Override
public void performTest() {
// Nothing to perform yet
}
protected void createContents() {
// Connection group
Group connectionGroup = new Group(settingsComposite, SWT.NONE);
connectionGroup.setFont(compositeFragment.getFont());
GridLayout cgLayout = new GridLayout(2, false);
connectionGroup.setLayout(cgLayout);
GridData cgGridData = new GridData(GridData.FILL_HORIZONTAL);
connectionGroup.setLayoutData(cgGridData);
connectionGroup.setText(Messages.XDebugDebuggerSettingsSection_Connection_settings);
// Client port
Label clientPortLabel = new Label(connectionGroup, SWT.None);
clientPortLabel.setText(Messages.XDebugDebuggerSettingsSection_Client_port);
final Text clientPortText = new Text(connectionGroup, SWT.BORDER);
GridData cptLayoutData = new GridData(GridData.FILL_HORIZONTAL);
clientPortText.setLayoutData(cptLayoutData);
clientPortText.setText(settingsWorkingCopy.getAttribute(PROP_CLIENT_PORT));
clientPortText.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
String port = clientPortText.getText();
settingsWorkingCopy.setAttribute(PROP_CLIENT_PORT, port);
validate();
}
});
// Advanced sub-group
Group advancedSubGroup = new Group(connectionGroup, SWT.NONE);
advancedSubGroup.setLayout(new GridLayout(2, false));
GridData dbgpGridData = new GridData(GridData.FILL_HORIZONTAL);
dbgpGridData.horizontalSpan = 2;
advancedSubGroup.setLayoutData(dbgpGridData);
advancedSubGroup.setText(Messages.XDebugDebuggerSettingsSection_Advanced_group);
// Enable DBGp proxy
final Button enableProxy = new Button(advancedSubGroup, SWT.CHECK);
GridData epGridData = new GridData(SWT.LEFT, SWT.CENTER, true, false);
epGridData.horizontalSpan = 2;
enableProxy.setLayoutData(epGridData);
enableProxy.setText(Messages.XDebugDebuggerSettingsSection_Enable_DBGp_proxy);
// Proxy IDE key
Label proxyIdeKeyLabel = new Label(advancedSubGroup, SWT.None);
proxyIdeKeyLabel.setText(Messages.XDebugDebuggerSettingsSection_Proxy_ide_key);
final Text proxyIdeKeyText = new Text(advancedSubGroup, SWT.BORDER);
GridData pikLayoutData = new GridData(GridData.FILL_HORIZONTAL);
proxyIdeKeyText.setLayoutData(pikLayoutData);
proxyIdeKeyText.setText(settingsWorkingCopy.getAttribute(PROP_PROXY_IDE_KEY));
proxyIdeKeyText.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
String ideKey = proxyIdeKeyText.getText();
settingsWorkingCopy.setAttribute(PROP_PROXY_IDE_KEY, ideKey);
validate();
}
});
// Proxy address
Label proxyAddressLabel = new Label(advancedSubGroup, SWT.None);
proxyAddressLabel.setText(Messages.XDebugDebuggerSettingsSection_Proxy_address);
final Text proxyAddressText = new Text(advancedSubGroup, SWT.BORDER);
GridData patLayoutData = new GridData(GridData.FILL_HORIZONTAL);
proxyAddressText.setLayoutData(patLayoutData);
proxyAddressText.setText(settingsWorkingCopy.getAttribute(PROP_PROXY_ADDRESS));
proxyAddressText.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
String proxyAddress = proxyAddressText.getText();
settingsWorkingCopy.setAttribute(PROP_PROXY_ADDRESS, proxyAddress);
validate();
}
});
// Set up enabled/disabled for proxy
enableProxy.addSelectionListener(new SelectionListener() {
@Override
public void widgetSelected(SelectionEvent e) {
widgetDefaultSelected(e);
}
@Override
public void widgetDefaultSelected(SelectionEvent e) {
proxyIdeKeyText.setEnabled(enableProxy.getSelection());
proxyAddressText.setEnabled(enableProxy.getSelection());
settingsWorkingCopy.setAttribute(PROP_PROXY_ENABLE, String.valueOf(enableProxy.getSelection()));
validate();
}
});
boolean isProxyEnabled = Boolean.valueOf(settingsWorkingCopy.getAttribute(PROP_PROXY_ENABLE));
enableProxy.setSelection(isProxyEnabled);
proxyIdeKeyText.setEnabled(isProxyEnabled);
proxyAddressText.setEnabled(isProxyEnabled);
}
}