1 package org
.argeo
.slc
.ide
.ui
.launch
.osgi
;
3 import org
.argeo
.slc
.ide
.ui
.SlcIdeUiPlugin
;
4 import org
.eclipse
.core
.runtime
.CoreException
;
5 import org
.eclipse
.debug
.core
.ILaunchConfiguration
;
6 import org
.eclipse
.debug
.core
.ILaunchConfigurationWorkingCopy
;
7 import org
.eclipse
.debug
.ui
.AbstractLaunchConfigurationTab
;
8 import org
.eclipse
.jface
.dialogs
.Dialog
;
9 import org
.eclipse
.swt
.SWT
;
10 import org
.eclipse
.swt
.events
.ModifyEvent
;
11 import org
.eclipse
.swt
.events
.ModifyListener
;
12 import org
.eclipse
.swt
.events
.SelectionAdapter
;
13 import org
.eclipse
.swt
.events
.SelectionEvent
;
14 import org
.eclipse
.swt
.graphics
.Image
;
15 import org
.eclipse
.swt
.layout
.GridData
;
16 import org
.eclipse
.swt
.layout
.GridLayout
;
17 import org
.eclipse
.swt
.widgets
.Button
;
18 import org
.eclipse
.swt
.widgets
.Composite
;
19 import org
.eclipse
.swt
.widgets
.Group
;
20 import org
.eclipse
.swt
.widgets
.Label
;
21 import org
.eclipse
.swt
.widgets
.Text
;
23 /** Main tab of OSGiBoot launch configuration UI. */
24 public class OsgiBootMainTab
extends AbstractLaunchConfigurationTab
implements
25 OsgiLauncherConstants
{
26 private Listener listener
= new Listener();
28 private Button syncBundles
;
29 private Button clearDataDirectory
;
31 private Button addJvmPaths
;
32 private Text additionalVmArgs
;
34 private Text additionalProgramArgs
;
36 // private final Boolean isEclipse;
38 public OsgiBootMainTab(Boolean isEclipse
) {
40 // this.isEclipse = isEclipse;
43 public void createControl(Composite parent
) {
44 Composite container
= new Composite(parent
, SWT
.NONE
);
45 container
.setLayout(new GridLayout());
46 container
.setLayoutData(new GridData(GridData
.FILL_BOTH
));
48 createAdditionalProgramArgs(container
);
49 createAdditionalVmArgumentBlock(container
);
50 createAdvanced(container
);
51 Dialog
.applyDialogFont(container
);
52 setControl(container
);
55 /** Init UI for programs arguments */
56 protected void createAdditionalProgramArgs(Composite parent
) {
57 Group container
= new Group(parent
, SWT
.NONE
);
58 container
.setText("Additional Program Arguments");
59 GridLayout layout
= new GridLayout();
60 layout
.numColumns
= 2;
61 container
.setLayout(layout
);
62 container
.setLayoutData(new GridData(GridData
.FILL_HORIZONTAL
));
64 additionalProgramArgs
= new Text(container
, SWT
.MULTI
| SWT
.WRAP
65 | SWT
.BORDER
| SWT
.V_SCROLL
);
66 GridData gd
= new GridData(GridData
.FILL_BOTH
);
69 gd
.horizontalSpan
= 2;
70 additionalProgramArgs
.setLayoutData(gd
);
71 additionalProgramArgs
.addModifyListener(listener
);
74 /** Init UI for VM arguments */
75 protected void createAdditionalVmArgumentBlock(Composite parent
) {
76 Group container
= new Group(parent
, SWT
.NONE
);
77 container
.setText("Additional VM Arguments");
78 GridLayout layout
= new GridLayout();
79 layout
.numColumns
= 2;
80 container
.setLayout(layout
);
81 container
.setLayoutData(new GridData(GridData
.FILL_HORIZONTAL
));
83 additionalVmArgs
= new Text(container
, SWT
.MULTI
| SWT
.WRAP
84 | SWT
.BORDER
| SWT
.V_SCROLL
);
85 GridData gd
= new GridData(GridData
.FILL_BOTH
);
88 gd
.horizontalSpan
= 2;
89 additionalVmArgs
.setLayoutData(gd
);
90 additionalVmArgs
.addModifyListener(listener
);
94 /** Init UI for Advanced section */
95 protected void createAdvanced(Composite parent
) {
96 Group container
= new Group(parent
, SWT
.NONE
);
97 container
.setText("Advanced");
98 GridLayout layout
= new GridLayout();
99 layout
.numColumns
= 2;
100 container
.setLayout(layout
);
101 container
.setLayoutData(new GridData(GridData
.FILL_HORIZONTAL
));
103 syncBundles
= new Button(container
, SWT
.CHECK
);
104 syncBundles
.addSelectionListener(listener
);
105 new Label(container
, SWT
.NONE
)
106 .setText("Keep bundles in line with target platform and workspace (recommended)");
107 clearDataDirectory
= new Button(container
, SWT
.CHECK
);
108 clearDataDirectory
.addSelectionListener(listener
);
109 new Label(container
, SWT
.NONE
)
110 .setText("Clear data directory before launch");
112 addJvmPaths
= new Button(container
, SWT
.CHECK
);
113 addJvmPaths
.addSelectionListener(listener
);
114 new Label(container
, SWT
.NONE
)
115 .setText("Add workspace JVM paths as non-standard system properties");
119 public String
getName() {
124 public Image
getImage() {
125 return SlcIdeUiPlugin
.getDefault().getImage("icons/slc-launch.gif");
128 public void initializeFrom(ILaunchConfiguration configuration
) {
129 // System.out.println("initializeFrom");
131 syncBundles
.setSelection(configuration
.getAttribute(
132 ATTR_SYNC_BUNDLES
, true));
133 clearDataDirectory
.setSelection(configuration
.getAttribute(
134 ATTR_CLEAR_DATA_DIRECTORY
, false));
136 additionalProgramArgs
.setText(configuration
.getAttribute(
137 ATTR_ADDITIONAL_PROGRAM_ARGS
, ""));
138 addJvmPaths
.setSelection(configuration
.getAttribute(
139 ATTR_ADD_JVM_PATHS
, false));
140 additionalVmArgs
.setText(configuration
.getAttribute(
141 ATTR_ADDITIONAL_VM_ARGS
, ""));
142 // readProperties(configuration);
143 } catch (CoreException e
) {
148 public void performApply(ILaunchConfigurationWorkingCopy configuration
) {
149 // System.out.println("performApply");
150 configuration
.setAttribute(ATTR_SYNC_BUNDLES
,
151 syncBundles
.getSelection());
152 configuration
.setAttribute(ATTR_CLEAR_DATA_DIRECTORY
,
153 clearDataDirectory
.getSelection());
155 configuration
.setAttribute(ATTR_ADDITIONAL_PROGRAM_ARGS
,
156 additionalProgramArgs
.getText());
157 configuration
.setAttribute(ATTR_ADDITIONAL_VM_ARGS
,
158 additionalVmArgs
.getText());
159 configuration
.setAttribute(ATTR_ADD_JVM_PATHS
,
160 addJvmPaths
.getSelection());
161 // writeProperties(configuration);
163 // OsgiLaunchHelper.updateLaunchConfiguration(configuration, isEclipse);
166 public void setDefaults(ILaunchConfigurationWorkingCopy configuration
) {
167 // System.out.println("setDefaults");
168 configuration
.setAttribute(ATTR_SYNC_BUNDLES
, true);
169 configuration
.setAttribute(ATTR_CLEAR_DATA_DIRECTORY
, false);
170 configuration
.setAttribute(ATTR_ADD_JVM_PATHS
, false);
171 configuration
.setAttribute(ATTR_ADDITIONAL_VM_ARGS
, "-Xmx128m");
172 configuration
.setAttribute(ATTR_ADDITIONAL_PROGRAM_ARGS
, "-console");
176 public void activated(ILaunchConfigurationWorkingCopy workingCopy
) {
177 initializeFrom(workingCopy
);
179 workingCopy
.doSave();
180 } catch (CoreException e
) {
186 public void deactivated(ILaunchConfigurationWorkingCopy workingCopy
) {
190 class Listener
extends SelectionAdapter
implements ModifyListener
{
191 public void widgetSelected(SelectionEvent e
) {
192 // Object source = e.getSource();
194 updateLaunchConfigurationDialog();
197 public void modifyText(ModifyEvent e
) {
198 // System.out.println("modifyText : " + e);
200 updateLaunchConfigurationDialog();
204 // private void readProperties(ILaunchConfiguration configuration) {
205 // BufferedReader reader = null;
207 // IFile propertiesFile = (IFile) configuration.getMappedResources()[0];
208 // propertiesFile.refreshLocal(IResource.DEPTH_ONE, null);
209 // reader = new BufferedReader(new InputStreamReader(propertiesFile
211 // String line = null;
212 // StringBuffer buf = new StringBuffer("");
213 // while ((line = reader.readLine()) != null) {
217 // propertiesText.setText(buf.toString());
218 // } catch (CoreException e) {
219 // ErrorDialog.openError(Display.getCurrent().getActiveShell(),
220 // "Error", "Cannot read properties", e.getStatus());
222 // } catch (Exception e) {
223 // ErrorDialog.openError(Display.getCurrent().getActiveShell(),
224 // "Error", "Cannot read properties",
225 // new Status(IStatus.ERROR, SlcIdeUiPlugin.ID,
226 // e.getMessage(), e));
229 // if (reader != null)
232 // } catch (IOException e) {
239 // private void writeProperties(ILaunchConfiguration configuration) {
240 // InputStream in = null;
241 // IFile propertiesFile = null;
243 // propertiesFile = (IFile) configuration.getMappedResources()[0];
244 // in = new ByteArrayInputStream(propertiesText.getText().getBytes());
245 // propertiesFile.setContents(in, true, true, null);
246 // propertiesFile.refreshLocal(IResource.DEPTH_ONE, null);
247 // } catch (CoreException e) {
248 // ErrorDialog.openError(Display.getCurrent().getActiveShell(),
249 // "Error", "Cannot write properties", e.getStatus());
251 // } catch (Exception e) {
252 // ErrorDialog.openError(Display.getCurrent().getActiveShell(),
253 // "Error", "Cannot write properties",
254 // new Status(IStatus.ERROR, SlcIdeUiPlugin.ID,
255 // e.getMessage(), e));
261 // } catch (IOException e) {