]> 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
c52c767cc3c23b1258f1744f30f51886aaceb36a
[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 public class OsgiBootMainTab extends AbstractLaunchConfigurationTab implements
24 OsgiLauncherConstants {
25 private Listener listener = new Listener();
26
27 private Button syncBundles;
28 private Button clearDataDirectory;
29
30 private Button addJvmPaths;
31 private Text additionalVmArgs;
32
33 private Text additionalProgramArgs;
34
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));
39
40 createGeneral(container);
41 createAdditionalProgramArgs(container);
42 createAdditionalVmArgumentBlock(container);
43 Dialog.applyDialogFont(container);
44 setControl(container);
45 }
46
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));
54
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");
63 }
64
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));
72
73 additionalProgramArgs = new Text(container, SWT.MULTI | SWT.WRAP
74 | SWT.BORDER | SWT.V_SCROLL);
75 GridData gd = new GridData(GridData.FILL_BOTH);
76 gd.heightHint = 60;
77 gd.widthHint = 100;
78 gd.horizontalSpan = 2;
79 additionalProgramArgs.setLayoutData(gd);
80 additionalProgramArgs.addModifyListener(listener);
81 }
82
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));
90
91 additionalVmArgs = new Text(container, SWT.MULTI | SWT.WRAP
92 | SWT.BORDER | SWT.V_SCROLL);
93 GridData gd = new GridData(GridData.FILL_BOTH);
94 gd.heightHint = 60;
95 gd.widthHint = 100;
96 gd.horizontalSpan = 2;
97 additionalVmArgs.setLayoutData(gd);
98 additionalVmArgs.addModifyListener(listener);
99
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");
104
105 }
106
107 public String getName() {
108 return "OSGi Boot";
109 }
110
111 @Override
112 public Image getImage() {
113 return SlcIdeUiPlugin.getDefault().getImage("icons/slc-launch.gif");
114 }
115
116 public void initializeFrom(ILaunchConfiguration configuration) {
117 // System.out.println("initializeFrom");
118 try {
119 syncBundles.setSelection(configuration.getAttribute(
120 ATTR_SYNC_BUNDLES, true));
121 clearDataDirectory.setSelection(configuration.getAttribute(
122 ATTR_CLEAR_DATA_DIRECTORY, false));
123
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) {
132 e.printStackTrace();
133 }
134 }
135
136 public void performApply(ILaunchConfigurationWorkingCopy configuration) {
137 // System.out.println("performApply");
138 configuration.setAttribute(ATTR_SYNC_BUNDLES, syncBundles
139 .getSelection());
140 configuration.setAttribute(ATTR_CLEAR_DATA_DIRECTORY,
141 clearDataDirectory.getSelection());
142
143 configuration.setAttribute(ATTR_ADDITIONAL_PROGRAM_ARGS,
144 additionalProgramArgs.getText());
145 configuration.setAttribute(ATTR_ADDITIONAL_VM_ARGS, additionalVmArgs
146 .getText());
147 configuration.setAttribute(ATTR_ADD_JVM_PATHS, addJvmPaths
148 .getSelection());
149 // writeProperties(configuration);
150
151 OsgiLaunchHelper.updateLaunchConfiguration(configuration);
152 }
153
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");
161 }
162
163 @Override
164 public void activated(ILaunchConfigurationWorkingCopy workingCopy) {
165 initializeFrom(workingCopy);
166 try {
167 workingCopy.doSave();
168 } catch (CoreException e) {
169 e.printStackTrace();
170 }
171 }
172
173 @Override
174 public void deactivated(ILaunchConfigurationWorkingCopy workingCopy) {
175 // do nothing
176 }
177
178 class Listener extends SelectionAdapter implements ModifyListener {
179 public void widgetSelected(SelectionEvent e) {
180 // Object source = e.getSource();
181 // setDirty(true);
182 updateLaunchConfigurationDialog();
183 }
184
185 public void modifyText(ModifyEvent e) {
186 // System.out.println("modifyText : " + e);
187 // setDirty(true);
188 updateLaunchConfigurationDialog();
189 }
190 }
191
192 // private void readProperties(ILaunchConfiguration configuration) {
193 // BufferedReader reader = null;
194 // try {
195 // IFile propertiesFile = (IFile) configuration.getMappedResources()[0];
196 // propertiesFile.refreshLocal(IResource.DEPTH_ONE, null);
197 // reader = new BufferedReader(new InputStreamReader(propertiesFile
198 // .getContents()));
199 // String line = null;
200 // StringBuffer buf = new StringBuffer("");
201 // while ((line = reader.readLine()) != null) {
202 // buf.append(line);
203 // buf.append("\n");
204 // }
205 // propertiesText.setText(buf.toString());
206 // } catch (CoreException e) {
207 // ErrorDialog.openError(Display.getCurrent().getActiveShell(),
208 // "Error", "Cannot read properties", e.getStatus());
209 // return;
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));
215 // return;
216 // } finally {
217 // if (reader != null)
218 // try {
219 // reader.close();
220 // } catch (IOException e) {
221 // // silent
222 // }
223 // }
224 //
225 // }
226 //
227 // private void writeProperties(ILaunchConfiguration configuration) {
228 // InputStream in = null;
229 // IFile propertiesFile = null;
230 // try {
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());
238 // return;
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));
244 // return;
245 // } finally {
246 // if (in != null)
247 // try {
248 // in.close();
249 // } catch (IOException e) {
250 // // silent
251 // }
252 // }
253 //
254 // }
255
256 }