/*******************************************************************************
* This file is part of the Symfony eclipse plugin.
*
* (c) Robert Gruendler <r.gruendler@gmail.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
******************************************************************************/
package com.dubture.symfony.debug.launch;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.php.internal.debug.ui.Logger;
import org.eclipse.php.internal.debug.ui.PHPDebugUIPlugin;
import org.eclipse.php.internal.server.core.Server;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Point;
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.Group;
import com.dubture.symfony.debug.server.SymfonyServer;
import com.dubture.symfony.index.model.Route;
import com.dubture.symfony.index.model.RouteParameter;
/**
* A Launch dialog to offer the possibility of altering the route parameters of a Launch URL.
*
*
*
*
* @author Robert Gruendler <r.gruendler@gmail.com>
*
*/
@SuppressWarnings("restriction")
public class SymfonyURLLaunchDialog extends MessageDialog {
private static Set<String> previousURLs = new TreeSet<String>();
private Combo combo;
private ILaunchConfigurationWorkingCopy launchConfiguration;
private Route route;
public SymfonyURLLaunchDialog(ILaunchConfigurationWorkingCopy launchConfiguration,String title, Route route) {
super(PHPDebugUIPlugin.getActiveWorkbenchShell(), title, null, "",
INFORMATION, new String[] { IDialogConstants.OK_LABEL,
IDialogConstants.CANCEL_LABEL }, 0);
this.launchConfiguration = launchConfiguration;
this.route = route;
message = "Note that no files will be published to the server.";
}
@Override
protected Control createCustomArea(Composite parent) {
Group group = new Group(parent, SWT.NONE);
group.setText("Launch URL");
group.setLayout(new GridLayout(1, true));
group.setLayoutData(new GridData(GridData.FILL, GridData.FILL, true,
false));
combo = new Combo(group, SWT.SINGLE | SWT.BORDER);
GridData data = new GridData(GridData.FILL, GridData.FILL, true, false,
1, 1);
data.widthHint = convertWidthInCharsToPixels(80);
combo.setLayoutData(data);
Object[] urls = previousURLs.toArray();
for (Object element : urls) {
combo.add(element.toString());
}
try {
String selectedURL = launchConfiguration.getAttribute(
Server.BASE_URL, "");
int comboIndex = combo.indexOf(selectedURL);
if (comboIndex > -1) {
combo.select(comboIndex);
} else {
combo.add(selectedURL, 0);
combo.select(0);
}
Map<String, RouteParameter> params = route.getParameters();
if (params.size() == 1) {
RouteParameter param = params.entrySet().iterator().next().getValue();
int start = selectedURL.indexOf(param.getName());
if (start > 0) {
Point point = new Point(start, param.getName().length() + start);
combo.setSelection(point);
}
}
} catch (CoreException e) {
Logger.logException(e);
}
return parent;
}
/**
* Override the okPressed to save the URL to the URLs history for this PHP
* IDE session. Also, add the URL to the launch configuration attributes.
*/
protected void buttonPressed(int buttonId) {
if (buttonId == OK) {
String url = combo.getText().trim();
previousURLs.add(url);
launchConfiguration.setAttribute(Server.BASE_URL, url);
launchConfiguration.setAttribute(SymfonyServer.URL, url);
}
super.buttonPressed(buttonId);
}
}