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 public class OsgiBootMainTab
extends AbstractLaunchConfigurationTab
implements
24 OsgiLauncherConstants
{
25 private Listener listener
= new Listener();
27 private Button syncBundles
;
28 private Button clearDataDirectory
;
30 private Button addJvmPaths
;
31 private Text additionalVmArgs
;
33 private Text additionalProgramArgs
;
35 public void createControl(Composite parent
) {
36 Composite container
= new Composite(parent
, SWT
.NONE
);
37 container
.setLayout(new GridLayout());
38 container
.setLayoutData(new GridData(GridData
.FILL_BOTH
));
40 createGeneral(container
);
41 createAdditionalProgramArgs(container
);
42 createAdditionalVmArgumentBlock(container
);
43 Dialog
.applyDialogFont(container
);
44 setControl(container
);
47 protected void createGeneral(Composite parent
) {
48 Group container
= new Group(parent
, SWT
.NONE
);
49 container
.setText("General");
50 GridLayout layout
= new GridLayout();
51 layout
.numColumns
= 2;
52 container
.setLayout(layout
);
53 container
.setLayoutData(new GridData(GridData
.FILL_HORIZONTAL
));
55 syncBundles
= new Button(container
, SWT
.CHECK
);
56 syncBundles
.addSelectionListener(listener
);
57 new Label(container
, SWT
.NONE
)
58 .setText("Always keep bundle in line with the target platform");
59 clearDataDirectory
= new Button(container
, SWT
.CHECK
);
60 clearDataDirectory
.addSelectionListener(listener
);
61 new Label(container
, SWT
.NONE
)
62 .setText("Clear data directory before launch");
65 protected void createAdditionalProgramArgs(Composite parent
) {
66 Group container
= new Group(parent
, SWT
.NONE
);
67 container
.setText("Additional Program Arguments");
68 GridLayout layout
= new GridLayout();
69 layout
.numColumns
= 2;
70 container
.setLayout(layout
);
71 container
.setLayoutData(new GridData(GridData
.FILL_HORIZONTAL
));
73 additionalProgramArgs
= new Text(container
, SWT
.MULTI
| SWT
.WRAP
74 | SWT
.BORDER
| SWT
.V_SCROLL
);
75 GridData gd
= new GridData(GridData
.FILL_BOTH
);
78 gd
.horizontalSpan
= 2;
79 additionalProgramArgs
.setLayoutData(gd
);
80 additionalProgramArgs
.addModifyListener(listener
);
83 protected void createAdditionalVmArgumentBlock(Composite parent
) {
84 Group container
= new Group(parent
, SWT
.NONE
);
85 container
.setText("Additional VM Arguments");
86 GridLayout layout
= new GridLayout();
87 layout
.numColumns
= 2;
88 container
.setLayout(layout
);
89 container
.setLayoutData(new GridData(GridData
.FILL_HORIZONTAL
));
91 additionalVmArgs
= new Text(container
, SWT
.MULTI
| SWT
.WRAP
92 | SWT
.BORDER
| SWT
.V_SCROLL
);
93 GridData gd
= new GridData(GridData
.FILL_BOTH
);
96 gd
.horizontalSpan
= 2;
97 additionalVmArgs
.setLayoutData(gd
);
98 additionalVmArgs
.addModifyListener(listener
);
100 addJvmPaths
= new Button(container
, SWT
.CHECK
);
101 addJvmPaths
.addSelectionListener(listener
);
102 new Label(container
, SWT
.NONE
)
103 .setText("Add workspace JVM paths as non-standard system properties");
107 public String
getName() {
112 public Image
getImage() {
113 return SlcIdeUiPlugin
.getDefault().getImage("icons/slc-launch.gif");
116 public void initializeFrom(ILaunchConfiguration configuration
) {
117 // System.out.println("initializeFrom");
119 syncBundles
.setSelection(configuration
.getAttribute(
120 ATTR_SYNC_BUNDLES
, true));
121 clearDataDirectory
.setSelection(configuration
.getAttribute(
122 ATTR_CLEAR_DATA_DIRECTORY
, false));
124 additionalProgramArgs
.setText(configuration
.getAttribute(
125 ATTR_ADDITIONAL_PROGRAM_ARGS
, ""));
126 addJvmPaths
.setSelection(configuration
.getAttribute(
127 ATTR_ADD_JVM_PATHS
, false));
128 additionalVmArgs
.setText(configuration
.getAttribute(
129 ATTR_ADDITIONAL_VM_ARGS
, ""));
130 // readProperties(configuration);
131 } catch (CoreException e
) {
136 public void performApply(ILaunchConfigurationWorkingCopy configuration
) {
137 // System.out.println("performApply");
138 configuration
.setAttribute(ATTR_SYNC_BUNDLES
, syncBundles
140 configuration
.setAttribute(ATTR_CLEAR_DATA_DIRECTORY
,
141 clearDataDirectory
.getSelection());
143 configuration
.setAttribute(ATTR_ADDITIONAL_PROGRAM_ARGS
,
144 additionalProgramArgs
.getText());
145 configuration
.setAttribute(ATTR_ADDITIONAL_VM_ARGS
, additionalVmArgs
147 configuration
.setAttribute(ATTR_ADD_JVM_PATHS
, addJvmPaths
149 // writeProperties(configuration);
151 OsgiLaunchHelper
.updateLaunchConfiguration(configuration
);
154 public void setDefaults(ILaunchConfigurationWorkingCopy configuration
) {
155 // System.out.println("setDefaults");
156 configuration
.setAttribute(ATTR_SYNC_BUNDLES
, true);
157 configuration
.setAttribute(ATTR_CLEAR_DATA_DIRECTORY
, false);
158 configuration
.setAttribute(ATTR_ADD_JVM_PATHS
, false);
159 configuration
.setAttribute(ATTR_ADDITIONAL_VM_ARGS
, "-Xmx128m");
160 configuration
.setAttribute(ATTR_ADDITIONAL_PROGRAM_ARGS
, "-console");
164 public void activated(ILaunchConfigurationWorkingCopy workingCopy
) {
165 initializeFrom(workingCopy
);
167 workingCopy
.doSave();
168 } catch (CoreException e
) {
174 public void deactivated(ILaunchConfigurationWorkingCopy workingCopy
) {
178 class Listener
extends SelectionAdapter
implements ModifyListener
{
179 public void widgetSelected(SelectionEvent e
) {
180 // Object source = e.getSource();
182 updateLaunchConfigurationDialog();
185 public void modifyText(ModifyEvent e
) {
186 // System.out.println("modifyText : " + e);
188 updateLaunchConfigurationDialog();
192 // private void readProperties(ILaunchConfiguration configuration) {
193 // BufferedReader reader = null;
195 // IFile propertiesFile = (IFile) configuration.getMappedResources()[0];
196 // propertiesFile.refreshLocal(IResource.DEPTH_ONE, null);
197 // reader = new BufferedReader(new InputStreamReader(propertiesFile
199 // String line = null;
200 // StringBuffer buf = new StringBuffer("");
201 // while ((line = reader.readLine()) != null) {
205 // propertiesText.setText(buf.toString());
206 // } catch (CoreException e) {
207 // ErrorDialog.openError(Display.getCurrent().getActiveShell(),
208 // "Error", "Cannot read properties", e.getStatus());
210 // } catch (Exception e) {
211 // ErrorDialog.openError(Display.getCurrent().getActiveShell(),
212 // "Error", "Cannot read properties",
213 // new Status(IStatus.ERROR, SlcIdeUiPlugin.ID,
214 // e.getMessage(), e));
217 // if (reader != null)
220 // } catch (IOException e) {
227 // private void writeProperties(ILaunchConfiguration configuration) {
228 // InputStream in = null;
229 // IFile propertiesFile = null;
231 // propertiesFile = (IFile) configuration.getMappedResources()[0];
232 // in = new ByteArrayInputStream(propertiesText.getText().getBytes());
233 // propertiesFile.setContents(in, true, true, null);
234 // propertiesFile.refreshLocal(IResource.DEPTH_ONE, null);
235 // } catch (CoreException e) {
236 // ErrorDialog.openError(Display.getCurrent().getActiveShell(),
237 // "Error", "Cannot write properties", e.getStatus());
239 // } catch (Exception e) {
240 // ErrorDialog.openError(Display.getCurrent().getActiveShell(),
241 // "Error", "Cannot write properties",
242 // new Status(IStatus.ERROR, SlcIdeUiPlugin.ID,
243 // e.getMessage(), e));
249 // } catch (IOException e) {