fill all necessary default values for DBG in launch configuration
[phpeclipse.git] / net.sourceforge.phpeclipse.debug.ui / src / net / sourceforge / phpdt / internal / debug / ui / launcher / PHPEntryPointTab.java
1 package net.sourceforge.phpdt.internal.debug.ui.launcher;
2
3 import net.sourceforge.phpdt.internal.debug.ui.PHPDebugUiMessages;
4 import net.sourceforge.phpdt.internal.debug.ui.PHPDebugUiPlugin;
5 import net.sourceforge.phpdt.internal.launching.PHPLaunchConfigurationAttribute;
6 import net.sourceforge.phpdt.internal.ui.PHPUiImages;
7 import net.sourceforge.phpdt.internal.ui.util.PHPFileSelector;
8 import net.sourceforge.phpdt.internal.ui.util.PHPProjectSelector;
9
10 import org.eclipse.core.resources.IFile;
11 import org.eclipse.core.resources.IResource;
12 import org.eclipse.core.runtime.CoreException;
13 import org.eclipse.core.runtime.Path;
14 import org.eclipse.debug.core.ILaunchConfiguration;
15 import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
16 import org.eclipse.debug.ui.AbstractLaunchConfigurationTab;
17 import org.eclipse.jface.viewers.ISelection;
18 import org.eclipse.jface.viewers.IStructuredSelection;
19 import org.eclipse.swt.SWT;
20 import org.eclipse.swt.events.ModifyEvent;
21 import org.eclipse.swt.events.ModifyListener;
22 import org.eclipse.swt.graphics.Image;
23 import org.eclipse.swt.layout.GridData;
24 import org.eclipse.swt.layout.GridLayout;
25 import org.eclipse.swt.widgets.Composite;
26 import org.eclipse.swt.widgets.Label;
27 import org.eclipse.ui.IEditorInput;
28 import org.eclipse.ui.IEditorPart;
29 import org.eclipse.ui.IWorkbenchPage;
30
31 public class PHPEntryPointTab extends AbstractLaunchConfigurationTab {
32         protected String originalFileName, originalProjectName;
33
34         protected PHPProjectSelector projectSelector;
35
36         protected PHPFileSelector fileSelector;
37
38         public PHPEntryPointTab() {
39                 super();
40         }
41
42         public void createControl(Composite parent) {
43                 Composite composite = createPageRoot(parent);
44
45                 new Label(composite, SWT.NONE).setText(PHPDebugUiMessages.getString("LaunchConfigurationTab.PHPEntryPoint.projectLabel"));
46                 projectSelector = new PHPProjectSelector(composite);
47                 projectSelector.setBrowseDialogMessage(PHPDebugUiMessages
48                                 .getString("LaunchConfigurationTab.PHPEntryPoint.projectSelectorMessage"));
49                 projectSelector.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
50                 projectSelector.addModifyListener(new ModifyListener() {
51                         public void modifyText(ModifyEvent evt) {
52                                 updateLaunchConfigurationDialog();
53                         }
54                 });
55
56                 new Label(composite, SWT.NONE).setText(PHPDebugUiMessages.getString("LaunchConfigurationTab.PHPEntryPoint.fileLabel"));
57                 fileSelector = new PHPFileSelector(composite, projectSelector);
58                 fileSelector.setBrowseDialogMessage(PHPDebugUiMessages.getString("LaunchConfigurationTab.PHPEntryPoint.fileSelectorMessage"));
59                 fileSelector.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
60                 fileSelector.addModifyListener(new ModifyListener() {
61                         public void modifyText(ModifyEvent evt) {
62                                 updateLaunchConfigurationDialog();
63                         }
64                 });
65         }
66
67         protected IResource getContext() {
68                 IWorkbenchPage page = PHPDebugUiPlugin.getActivePage();
69                 if (page != null) {
70                         ISelection selection = page.getSelection();
71                         if (selection instanceof IStructuredSelection) {
72                                 IStructuredSelection ss = (IStructuredSelection) selection;
73                                 if (!ss.isEmpty()) {
74                                         Object obj = ss.getFirstElement();
75                                         if (obj instanceof IResource)
76                                                 return ((IResource) obj);
77                                 }
78                         }
79                         IEditorPart part = page.getActiveEditor();
80                         if (part != null) {
81                                 IEditorInput input = part.getEditorInput();
82                                 IResource file = (IResource) input.getAdapter(IResource.class);
83                                 if (file != null) {
84                                         return file;
85                                 }
86                         }
87                 }
88                 return null;
89         }
90
91         public void setDefaults(ILaunchConfigurationWorkingCopy configuration) {
92                 IResource file = getContext();
93                 if (file != null) {
94                         configuration.setAttribute(PHPLaunchConfigurationAttribute.PROJECT_NAME, file.getProject().getName());
95                         configuration.setAttribute(PHPLaunchConfigurationAttribute.FILE_NAME,file.getProjectRelativePath().toOSString());
96                 }
97         }
98
99         public void initializeFrom(ILaunchConfiguration configuration) {
100                 try {
101                         originalProjectName = configuration.getAttribute(PHPLaunchConfigurationAttribute.PROJECT_NAME, "");
102                         originalFileName = configuration.getAttribute(PHPLaunchConfigurationAttribute.FILE_NAME, "");
103                 } catch (CoreException e) {
104                         log(e);
105                 }
106
107                 projectSelector.setSelectionText(originalProjectName);
108                 if (!"".equals(originalFileName))
109                         fileSelector.setSelectionText(new Path(originalFileName).toOSString());
110         }
111
112         public void performApply(ILaunchConfigurationWorkingCopy configuration) {
113                 configuration.setAttribute(PHPLaunchConfigurationAttribute.PROJECT_NAME, projectSelector.getSelectionText());
114                 IFile file = fileSelector.getSelection();
115                 configuration.setAttribute(PHPLaunchConfigurationAttribute.FILE_NAME, file == null ? "" : file.getProjectRelativePath()
116                                 .toString());
117         }
118
119         protected Composite createPageRoot(Composite parent) {
120                 Composite composite = new Composite(parent, SWT.NONE);
121                 GridLayout layout = new GridLayout();
122                 layout.marginWidth = 0;
123                 composite.setLayout(layout);
124
125                 setControl(composite);
126                 return composite;
127         }
128
129         public String getName() {
130                 return PHPDebugUiMessages.getString("LaunchConfigurationTab.PHPEntryPoint.name");
131         }
132
133         public boolean isValid(ILaunchConfiguration launchConfig) {
134                 try {
135
136                         String projectName = launchConfig.getAttribute(PHPLaunchConfigurationAttribute.PROJECT_NAME, "");
137                         if (projectName.length() == 0) {
138                                 setErrorMessage(PHPDebugUiMessages.getString("LaunchConfigurationTab.PHPEntryPoint.invalidProjectSelectionMessage"));
139                                 return false;
140                         }
141
142                         String fileName = launchConfig.getAttribute(PHPLaunchConfigurationAttribute.FILE_NAME, "");
143                         if (fileName.length() == 0) {
144                                 setErrorMessage(PHPDebugUiMessages.getString("LaunchConfigurationTab.PHPEntryPoint.invalidFileSelectionMessage"));
145                                 return false;
146                         }
147                 } catch (CoreException e) {
148                         log(e);
149                 }
150
151                 setErrorMessage(null);
152                 return true;
153         }
154
155         protected void log(Throwable t) {
156                 PHPDebugUiPlugin.log(t);
157         }
158
159         public boolean canSave() {
160                 return getErrorMessage() == null;
161         }
162
163         public Image getImage() {
164                 return PHPUiImages.get(PHPUiImages.IMG_CTOOLS_PHP_PAGE);
165         }
166
167 }