]> git.argeo.org Git - gpl/argeo-slc.git/blob - eclipse/plugins/org.argeo.slc.ide.ui/src/main/java/org/argeo/slc/ide/ui/launch/osgi/OsgiBootMainTab.java
Improve SLC launch plugin
[gpl/argeo-slc.git] / eclipse / plugins / org.argeo.slc.ide.ui / src / main / java / org / argeo / slc / ide / ui / launch / osgi / OsgiBootMainTab.java
1 package org.argeo.slc.ide.ui.launch.osgi;
2
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;
22
23 /** Main tab of OSGiBoot launch configuration UI. */
24 public class OsgiBootMainTab extends AbstractLaunchConfigurationTab implements
25 OsgiLauncherConstants {
26 private Listener listener = new Listener();
27
28 private Button syncBundles;
29 private Button clearDataDirectory;
30
31 private Button addJvmPaths;
32 private Text additionalVmArgs;
33
34 private Text additionalProgramArgs;
35
36 private final Boolean isEclipse;
37
38 public OsgiBootMainTab(Boolean isEclipse) {
39 super();
40 this.isEclipse = isEclipse;
41 }
42
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));
47
48 createAdditionalProgramArgs(container);
49 createAdditionalVmArgumentBlock(container);
50 createAdvanced(container);
51 Dialog.applyDialogFont(container);
52 setControl(container);
53 }
54
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));
63
64 additionalProgramArgs = new Text(container, SWT.MULTI | SWT.WRAP
65 | SWT.BORDER | SWT.V_SCROLL);
66 GridData gd = new GridData(GridData.FILL_BOTH);
67 gd.heightHint = 60;
68 gd.widthHint = 100;
69 gd.horizontalSpan = 2;
70 additionalProgramArgs.setLayoutData(gd);
71 additionalProgramArgs.addModifyListener(listener);
72 }
73
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));
82
83 additionalVmArgs = new Text(container, SWT.MULTI | SWT.WRAP
84 | SWT.BORDER | SWT.V_SCROLL);
85 GridData gd = new GridData(GridData.FILL_BOTH);
86 gd.heightHint = 60;
87 gd.widthHint = 100;
88 gd.horizontalSpan = 2;
89 additionalVmArgs.setLayoutData(gd);
90 additionalVmArgs.addModifyListener(listener);
91
92 }
93
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));
102
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");
111
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");
116
117 }
118
119 public String getName() {
120 return "OSGi Boot";
121 }
122
123 @Override
124 public Image getImage() {
125 return SlcIdeUiPlugin.getDefault().getImage("icons/slc-launch.gif");
126 }
127
128 public void initializeFrom(ILaunchConfiguration configuration) {
129 // System.out.println("initializeFrom");
130 try {
131 syncBundles.setSelection(configuration.getAttribute(
132 ATTR_SYNC_BUNDLES, true));
133 clearDataDirectory.setSelection(configuration.getAttribute(
134 ATTR_CLEAR_DATA_DIRECTORY, false));
135
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) {
144 e.printStackTrace();
145 }
146 }
147
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());
154
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);
162
163 OsgiLaunchHelper.updateLaunchConfiguration(configuration, isEclipse);
164 }
165
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");
173 }
174
175 @Override
176 public void activated(ILaunchConfigurationWorkingCopy workingCopy) {
177 initializeFrom(workingCopy);
178 try {
179 workingCopy.doSave();
180 } catch (CoreException e) {
181 e.printStackTrace();
182 }
183 }
184
185 @Override
186 public void deactivated(ILaunchConfigurationWorkingCopy workingCopy) {
187 // do nothing
188 }
189
190 class Listener extends SelectionAdapter implements ModifyListener {
191 public void widgetSelected(SelectionEvent e) {
192 // Object source = e.getSource();
193 // setDirty(true);
194 updateLaunchConfigurationDialog();
195 }
196
197 public void modifyText(ModifyEvent e) {
198 // System.out.println("modifyText : " + e);
199 // setDirty(true);
200 updateLaunchConfigurationDialog();
201 }
202 }
203
204 // private void readProperties(ILaunchConfiguration configuration) {
205 // BufferedReader reader = null;
206 // try {
207 // IFile propertiesFile = (IFile) configuration.getMappedResources()[0];
208 // propertiesFile.refreshLocal(IResource.DEPTH_ONE, null);
209 // reader = new BufferedReader(new InputStreamReader(propertiesFile
210 // .getContents()));
211 // String line = null;
212 // StringBuffer buf = new StringBuffer("");
213 // while ((line = reader.readLine()) != null) {
214 // buf.append(line);
215 // buf.append("\n");
216 // }
217 // propertiesText.setText(buf.toString());
218 // } catch (CoreException e) {
219 // ErrorDialog.openError(Display.getCurrent().getActiveShell(),
220 // "Error", "Cannot read properties", e.getStatus());
221 // return;
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));
227 // return;
228 // } finally {
229 // if (reader != null)
230 // try {
231 // reader.close();
232 // } catch (IOException e) {
233 // // silent
234 // }
235 // }
236 //
237 // }
238 //
239 // private void writeProperties(ILaunchConfiguration configuration) {
240 // InputStream in = null;
241 // IFile propertiesFile = null;
242 // try {
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());
250 // return;
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));
256 // return;
257 // } finally {
258 // if (in != null)
259 // try {
260 // in.close();
261 // } catch (IOException e) {
262 // // silent
263 // }
264 // }
265 //
266 // }
267
268 }