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 createGeneral(container
);
49 createAdditionalProgramArgs(container
);
50 createAdditionalVmArgumentBlock(container
);
51 Dialog
.applyDialogFont(container
);
52 setControl(container
);
55 protected void createGeneral(Composite parent
) {
56 Group container
= new Group(parent
, SWT
.NONE
);
57 container
.setText("General");
58 GridLayout layout
= new GridLayout();
59 layout
.numColumns
= 2;
60 container
.setLayout(layout
);
61 container
.setLayoutData(new GridData(GridData
.FILL_HORIZONTAL
));
63 syncBundles
= new Button(container
, SWT
.CHECK
);
64 syncBundles
.addSelectionListener(listener
);
65 new Label(container
, SWT
.NONE
)
66 .setText("Keep bundles in line with target platform and workspace (recommended)");
67 clearDataDirectory
= new Button(container
, SWT
.CHECK
);
68 clearDataDirectory
.addSelectionListener(listener
);
69 new Label(container
, SWT
.NONE
)
70 .setText("Clear data directory before launch");
73 protected void createAdditionalProgramArgs(Composite parent
) {
74 Group container
= new Group(parent
, SWT
.NONE
);
75 container
.setText("Additional Program Arguments");
76 GridLayout layout
= new GridLayout();
77 layout
.numColumns
= 2;
78 container
.setLayout(layout
);
79 container
.setLayoutData(new GridData(GridData
.FILL_HORIZONTAL
));
81 additionalProgramArgs
= new Text(container
, SWT
.MULTI
| SWT
.WRAP
82 | SWT
.BORDER
| SWT
.V_SCROLL
);
83 GridData gd
= new GridData(GridData
.FILL_BOTH
);
86 gd
.horizontalSpan
= 2;
87 additionalProgramArgs
.setLayoutData(gd
);
88 additionalProgramArgs
.addModifyListener(listener
);
91 protected void createAdditionalVmArgumentBlock(Composite parent
) {
92 Group container
= new Group(parent
, SWT
.NONE
);
93 container
.setText("Additional VM Arguments");
94 GridLayout layout
= new GridLayout();
95 layout
.numColumns
= 2;
96 container
.setLayout(layout
);
97 container
.setLayoutData(new GridData(GridData
.FILL_HORIZONTAL
));
99 additionalVmArgs
= new Text(container
, SWT
.MULTI
| SWT
.WRAP
100 | SWT
.BORDER
| SWT
.V_SCROLL
);
101 GridData gd
= new GridData(GridData
.FILL_BOTH
);
104 gd
.horizontalSpan
= 2;
105 additionalVmArgs
.setLayoutData(gd
);
106 additionalVmArgs
.addModifyListener(listener
);
108 addJvmPaths
= new Button(container
, SWT
.CHECK
);
109 addJvmPaths
.addSelectionListener(listener
);
110 new Label(container
, SWT
.NONE
)
111 .setText("Add workspace JVM paths as non-standard system properties");
115 public String
getName() {
120 public Image
getImage() {
121 return SlcIdeUiPlugin
.getDefault().getImage("icons/slc-launch.gif");
124 public void initializeFrom(ILaunchConfiguration configuration
) {
125 // System.out.println("initializeFrom");
127 syncBundles
.setSelection(configuration
.getAttribute(
128 ATTR_SYNC_BUNDLES
, true));
129 clearDataDirectory
.setSelection(configuration
.getAttribute(
130 ATTR_CLEAR_DATA_DIRECTORY
, false));
132 additionalProgramArgs
.setText(configuration
.getAttribute(
133 ATTR_ADDITIONAL_PROGRAM_ARGS
, ""));
134 addJvmPaths
.setSelection(configuration
.getAttribute(
135 ATTR_ADD_JVM_PATHS
, false));
136 additionalVmArgs
.setText(configuration
.getAttribute(
137 ATTR_ADDITIONAL_VM_ARGS
, ""));
138 // readProperties(configuration);
139 } catch (CoreException e
) {
144 public void performApply(ILaunchConfigurationWorkingCopy configuration
) {
145 // System.out.println("performApply");
146 configuration
.setAttribute(ATTR_SYNC_BUNDLES
,
147 syncBundles
.getSelection());
148 configuration
.setAttribute(ATTR_CLEAR_DATA_DIRECTORY
,
149 clearDataDirectory
.getSelection());
151 configuration
.setAttribute(ATTR_ADDITIONAL_PROGRAM_ARGS
,
152 additionalProgramArgs
.getText());
153 configuration
.setAttribute(ATTR_ADDITIONAL_VM_ARGS
,
154 additionalVmArgs
.getText());
155 configuration
.setAttribute(ATTR_ADD_JVM_PATHS
,
156 addJvmPaths
.getSelection());
157 // writeProperties(configuration);
159 OsgiLaunchHelper
.updateLaunchConfiguration(configuration
, isEclipse
);
162 public void setDefaults(ILaunchConfigurationWorkingCopy configuration
) {
163 // System.out.println("setDefaults");
164 configuration
.setAttribute(ATTR_SYNC_BUNDLES
, true);
165 configuration
.setAttribute(ATTR_CLEAR_DATA_DIRECTORY
, false);
166 configuration
.setAttribute(ATTR_ADD_JVM_PATHS
, false);
167 configuration
.setAttribute(ATTR_ADDITIONAL_VM_ARGS
, "-Xmx128m");
168 configuration
.setAttribute(ATTR_ADDITIONAL_PROGRAM_ARGS
, "-console");
172 public void activated(ILaunchConfigurationWorkingCopy workingCopy
) {
173 initializeFrom(workingCopy
);
175 workingCopy
.doSave();
176 } catch (CoreException e
) {
182 public void deactivated(ILaunchConfigurationWorkingCopy workingCopy
) {
186 class Listener
extends SelectionAdapter
implements ModifyListener
{
187 public void widgetSelected(SelectionEvent e
) {
188 // Object source = e.getSource();
190 updateLaunchConfigurationDialog();
193 public void modifyText(ModifyEvent e
) {
194 // System.out.println("modifyText : " + e);
196 updateLaunchConfigurationDialog();
200 // private void readProperties(ILaunchConfiguration configuration) {
201 // BufferedReader reader = null;
203 // IFile propertiesFile = (IFile) configuration.getMappedResources()[0];
204 // propertiesFile.refreshLocal(IResource.DEPTH_ONE, null);
205 // reader = new BufferedReader(new InputStreamReader(propertiesFile
207 // String line = null;
208 // StringBuffer buf = new StringBuffer("");
209 // while ((line = reader.readLine()) != null) {
213 // propertiesText.setText(buf.toString());
214 // } catch (CoreException e) {
215 // ErrorDialog.openError(Display.getCurrent().getActiveShell(),
216 // "Error", "Cannot read properties", e.getStatus());
218 // } catch (Exception e) {
219 // ErrorDialog.openError(Display.getCurrent().getActiveShell(),
220 // "Error", "Cannot read properties",
221 // new Status(IStatus.ERROR, SlcIdeUiPlugin.ID,
222 // e.getMessage(), e));
225 // if (reader != null)
228 // } catch (IOException e) {
235 // private void writeProperties(ILaunchConfiguration configuration) {
236 // InputStream in = null;
237 // IFile propertiesFile = null;
239 // propertiesFile = (IFile) configuration.getMappedResources()[0];
240 // in = new ByteArrayInputStream(propertiesText.getText().getBytes());
241 // propertiesFile.setContents(in, true, true, null);
242 // propertiesFile.refreshLocal(IResource.DEPTH_ONE, null);
243 // } catch (CoreException e) {
244 // ErrorDialog.openError(Display.getCurrent().getActiveShell(),
245 // "Error", "Cannot write properties", e.getStatus());
247 // } catch (Exception e) {
248 // ErrorDialog.openError(Display.getCurrent().getActiveShell(),
249 // "Error", "Cannot write properties",
250 // new Status(IStatus.ERROR, SlcIdeUiPlugin.ID,
251 // e.getMessage(), e));
257 // } catch (IOException e) {