]> 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
NEW - bug 11: Introduce a simplified launch for RCP
[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 createGeneral(container);
49 createAdditionalProgramArgs(container);
50 createAdditionalVmArgumentBlock(container);
51 Dialog.applyDialogFont(container);
52 setControl(container);
53 }
54
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));
62
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");
71 }
72
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));
80
81 additionalProgramArgs = new Text(container, SWT.MULTI | SWT.WRAP
82 | SWT.BORDER | SWT.V_SCROLL);
83 GridData gd = new GridData(GridData.FILL_BOTH);
84 gd.heightHint = 60;
85 gd.widthHint = 100;
86 gd.horizontalSpan = 2;
87 additionalProgramArgs.setLayoutData(gd);
88 additionalProgramArgs.addModifyListener(listener);
89 }
90
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));
98
99 additionalVmArgs = new Text(container, SWT.MULTI | SWT.WRAP
100 | SWT.BORDER | SWT.V_SCROLL);
101 GridData gd = new GridData(GridData.FILL_BOTH);
102 gd.heightHint = 60;
103 gd.widthHint = 100;
104 gd.horizontalSpan = 2;
105 additionalVmArgs.setLayoutData(gd);
106 additionalVmArgs.addModifyListener(listener);
107
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");
112
113 }
114
115 public String getName() {
116 return "OSGi Boot";
117 }
118
119 @Override
120 public Image getImage() {
121 return SlcIdeUiPlugin.getDefault().getImage("icons/slc-launch.gif");
122 }
123
124 public void initializeFrom(ILaunchConfiguration configuration) {
125 // System.out.println("initializeFrom");
126 try {
127 syncBundles.setSelection(configuration.getAttribute(
128 ATTR_SYNC_BUNDLES, true));
129 clearDataDirectory.setSelection(configuration.getAttribute(
130 ATTR_CLEAR_DATA_DIRECTORY, false));
131
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) {
140 e.printStackTrace();
141 }
142 }
143
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());
150
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);
158
159 OsgiLaunchHelper.updateLaunchConfiguration(configuration, isEclipse);
160 }
161
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");
169 }
170
171 @Override
172 public void activated(ILaunchConfigurationWorkingCopy workingCopy) {
173 initializeFrom(workingCopy);
174 try {
175 workingCopy.doSave();
176 } catch (CoreException e) {
177 e.printStackTrace();
178 }
179 }
180
181 @Override
182 public void deactivated(ILaunchConfigurationWorkingCopy workingCopy) {
183 // do nothing
184 }
185
186 class Listener extends SelectionAdapter implements ModifyListener {
187 public void widgetSelected(SelectionEvent e) {
188 // Object source = e.getSource();
189 // setDirty(true);
190 updateLaunchConfigurationDialog();
191 }
192
193 public void modifyText(ModifyEvent e) {
194 // System.out.println("modifyText : " + e);
195 // setDirty(true);
196 updateLaunchConfigurationDialog();
197 }
198 }
199
200 // private void readProperties(ILaunchConfiguration configuration) {
201 // BufferedReader reader = null;
202 // try {
203 // IFile propertiesFile = (IFile) configuration.getMappedResources()[0];
204 // propertiesFile.refreshLocal(IResource.DEPTH_ONE, null);
205 // reader = new BufferedReader(new InputStreamReader(propertiesFile
206 // .getContents()));
207 // String line = null;
208 // StringBuffer buf = new StringBuffer("");
209 // while ((line = reader.readLine()) != null) {
210 // buf.append(line);
211 // buf.append("\n");
212 // }
213 // propertiesText.setText(buf.toString());
214 // } catch (CoreException e) {
215 // ErrorDialog.openError(Display.getCurrent().getActiveShell(),
216 // "Error", "Cannot read properties", e.getStatus());
217 // return;
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));
223 // return;
224 // } finally {
225 // if (reader != null)
226 // try {
227 // reader.close();
228 // } catch (IOException e) {
229 // // silent
230 // }
231 // }
232 //
233 // }
234 //
235 // private void writeProperties(ILaunchConfiguration configuration) {
236 // InputStream in = null;
237 // IFile propertiesFile = null;
238 // try {
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());
246 // return;
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));
252 // return;
253 // } finally {
254 // if (in != null)
255 // try {
256 // in.close();
257 // } catch (IOException e) {
258 // // silent
259 // }
260 // }
261 //
262 // }
263
264 }