Commit | Line | Data |
---|---|---|
e8d771d5 BH |
1 | /*******************************************************************************\r |
2 | * Copyright (c) 2011 Ericsson\r | |
3 | * \r | |
4 | * All rights reserved. This program and the accompanying materials are\r | |
5 | * made available under the terms of the Eclipse Public License v1.0 which\r | |
6 | * accompanies this distribution, and is available at\r | |
7 | * http://www.eclipse.org/legal/epl-v10.html\r | |
8 | * \r | |
9 | * Contributors:\r | |
10 | * Bernd Hufmann - Initial API and implementation\r | |
11 | * \r | |
12 | *******************************************************************************/\r | |
638eac44 | 13 | package org.eclipse.linuxtools.internal.lttng.ui.tracecontrol.wizards;\r |
e8d771d5 BH |
14 | \r |
15 | import java.io.File;\r | |
16 | \r | |
17 | import org.eclipse.jface.wizard.WizardPage;\r | |
5945cec9 FC |
18 | import org.eclipse.linuxtools.internal.lttng.core.tracecontrol.model.TraceResource;\r |
19 | import org.eclipse.linuxtools.internal.lttng.core.tracecontrol.model.TraceResource.TraceState;\r | |
20 | import org.eclipse.linuxtools.internal.lttng.core.tracecontrol.model.config.TraceConfig;\r | |
638eac44 FC |
21 | import org.eclipse.linuxtools.internal.lttng.ui.tracecontrol.Messages;\r |
22 | import org.eclipse.linuxtools.internal.lttng.ui.tracecontrol.TraceControlConstants;\r | |
23 | import org.eclipse.linuxtools.internal.lttng.ui.tracecontrol.subsystems.TraceSubSystem;\r | |
e8d771d5 BH |
24 | import org.eclipse.rse.services.clientserver.messages.SystemMessageException;\r |
25 | import org.eclipse.rse.ui.SystemBasePlugin;\r | |
26 | import org.eclipse.swt.SWT;\r | |
27 | import org.eclipse.swt.events.VerifyEvent;\r | |
28 | import org.eclipse.swt.events.VerifyListener;\r | |
29 | import org.eclipse.swt.layout.GridData;\r | |
30 | import org.eclipse.swt.layout.GridLayout;\r | |
31 | import org.eclipse.swt.widgets.Button;\r | |
32 | import org.eclipse.swt.widgets.Composite;\r | |
33 | import org.eclipse.swt.widgets.DirectoryDialog;\r | |
34 | import org.eclipse.swt.widgets.Display;\r | |
35 | import org.eclipse.swt.widgets.Event;\r | |
36 | import org.eclipse.swt.widgets.Group;\r | |
37 | import org.eclipse.swt.widgets.Label;\r | |
38 | import org.eclipse.swt.widgets.Listener;\r | |
39 | import org.eclipse.swt.widgets.Text;\r | |
40 | \r | |
41 | /**\r | |
42 | * <b><u>UstTraceChannelConfigurationPage</u></b>\r | |
43 | * <p>\r | |
44 | * Wizard page implementation to configure a trace (Kernel and UST).\r | |
45 | * </p>\r | |
46 | */\r | |
47 | public class TraceConfigurationPage extends WizardPage {\r | |
48 | \r | |
49 | // ------------------------------------------------------------------------\r | |
50 | // Attributes\r | |
51 | // ------------------------------------------------------------------------\r | |
52 | private ConfigureTraceWizard fWizard;\r | |
53 | private String fTraceName;\r | |
54 | private String fTraceTransport;\r | |
55 | private String fTracePath;\r | |
56 | private int fMode;\r | |
57 | private int fNumChannel;\r | |
a79913eb FC |
58 | private boolean fIsAppend;\r |
59 | private boolean fIsNetwork;\r | |
e8d771d5 BH |
60 | private Text fNameText;\r |
61 | private Text fTransportText;\r | |
62 | private Text fPathText;\r | |
a79913eb FC |
63 | private Text fNumLttdThreadsText;\r |
64 | private Button fHostButton;\r | |
65 | private Button fTargetButton;\r | |
e8d771d5 | 66 | private Button fIsAppendButton;\r |
e8d771d5 BH |
67 | private Button fFlightRecorderButton;\r |
68 | private Button fNormalButton;\r | |
69 | private Display fDisplay;\r | |
70 | private String fTraceNameError;\r | |
71 | private String fTracePathError;\r | |
72 | private Button fBrowseButton;\r | |
73 | \r | |
74 | private TraceResource fTraceResource;\r | |
75 | private TraceConfig fOldTraceConfig;\r | |
76 | private TraceSubSystem fSubSystem;\r | |
77 | \r | |
78 | // ------------------------------------------------------------------------\r | |
79 | // Constructors\r | |
80 | // ------------------------------------------------------------------------\r | |
81 | \r | |
82 | /**\r | |
83 | * Constructore\r | |
84 | * \r | |
85 | * @param wizard\r | |
86 | */\r | |
87 | public TraceConfigurationPage(ConfigureTraceWizard wizard) {\r | |
88 | super("TraceConfigurationPage"); //$NON-NLS-1$\r | |
89 | setTitle(Messages.ConfigureTraceDialog_Title);\r | |
90 | // setDescription("set description..."); \r | |
91 | this.fWizard = wizard;\r | |
92 | setPageComplete(false);\r | |
93 | fTraceNameError = ""; //$NON-NLS-1$\r | |
94 | fTracePathError = ""; //$NON-NLS-1$\r | |
95 | fTraceResource = this.fWizard.getSelectedTrace();\r | |
96 | fOldTraceConfig = fTraceResource.getTraceConfig();\r | |
97 | fSubSystem = (TraceSubSystem)this.fWizard.getSelectedTrace().getSubSystem();\r | |
98 | }\r | |
99 | \r | |
100 | // ------------------------------------------------------------------------\r | |
101 | // Operations\r | |
102 | // ------------------------------------------------------------------------\r | |
103 | \r | |
104 | /*\r | |
105 | * (non-Javadoc)\r | |
106 | * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)\r | |
107 | */\r | |
108 | @Override\r | |
109 | public void createControl(Composite parent) {\r | |
110 | GridData griddata = new GridData();\r | |
111 | \r | |
112 | griddata = new GridData();\r | |
113 | Composite composite1 = new Composite(parent, SWT.NONE);\r | |
114 | GridLayout compositeLayout1 = new GridLayout(4, false);\r | |
115 | composite1.setSize(520, 300);\r | |
116 | composite1.setLayout(compositeLayout1);\r | |
117 | griddata.horizontalSpan = 3;\r | |
118 | griddata.widthHint = 520;\r | |
119 | griddata.minimumWidth = 520;\r | |
120 | composite1.setLayoutData(griddata);\r | |
121 | fDisplay = this.getShell().getDisplay();\r | |
122 | setControl(composite1);\r | |
123 | Label nameLabel = new Label(composite1, SWT.NULL);\r | |
124 | nameLabel.setText(Messages.NewTraceDialog_TraceName + ":"); //$NON-NLS-1$\r | |
125 | griddata = new GridData();\r | |
126 | griddata.verticalIndent = 20;\r | |
127 | nameLabel.setLayoutData(griddata);\r | |
128 | \r | |
129 | fNameText = new Text(composite1, SWT.SINGLE | SWT.BORDER);\r | |
130 | if (fTraceResource.isUst()) {\r | |
131 | fNameText.setText(TraceControlConstants.Lttng_Ust_TraceName);\r | |
132 | fNameText.setEnabled(false);\r | |
133 | }\r | |
134 | \r | |
135 | griddata = new GridData();\r | |
136 | griddata.horizontalAlignment = SWT.FILL;\r | |
137 | griddata.grabExcessHorizontalSpace = true;\r | |
138 | griddata.verticalIndent = 20;\r | |
139 | griddata.horizontalSpan = 3;\r | |
140 | fNameText.setLayoutData(griddata);\r | |
e8d771d5 BH |
141 | fNameText.setText(fTraceResource.getName());\r |
142 | fNameText.setEnabled(false);\r | |
143 | \r | |
144 | Label transportLabel = new Label(composite1, SWT.NULL);\r | |
145 | transportLabel.setText(Messages.ConfigureTraceDialog_Trace_Transport + ":"); //$NON-NLS-1$\r | |
146 | griddata = new GridData();\r | |
147 | transportLabel.setLayoutData(griddata);\r | |
148 | \r | |
149 | fTransportText = new Text(composite1, SWT.SINGLE | SWT.BORDER);\r | |
150 | griddata = new GridData();\r | |
151 | griddata.horizontalAlignment = SWT.FILL;\r | |
152 | griddata.grabExcessHorizontalSpace = true;\r | |
153 | griddata.horizontalSpan = 3;\r | |
154 | fTransportText.setLayoutData(griddata);\r | |
e8d771d5 BH |
155 | fTransportText.setText(TraceControlConstants.Lttng_Trace_Transport_Relay);\r |
156 | fTransportText.setEnabled(false); // relay is the only allowed value\r | |
157 | if (fOldTraceConfig != null) {\r | |
158 | fTransportText.setText(fOldTraceConfig.getTraceTransport());\r | |
159 | }\r | |
160 | \r | |
161 | griddata = new GridData();\r | |
162 | Group composite21 = new Group(composite1, SWT.SHADOW_OUT);\r | |
163 | composite21.setSize(300, 300);\r | |
164 | composite21.setText(Messages.ConfigureTraceDialog_Trace_Location);\r | |
165 | griddata.horizontalAlignment = SWT.FILL;\r | |
166 | griddata.horizontalSpan = 4;\r | |
167 | griddata.verticalIndent = 10;\r | |
168 | griddata.widthHint = 300;\r | |
169 | griddata.minimumWidth = 300;\r | |
170 | composite21.setLayoutData(griddata);\r | |
171 | GridLayout compositeLayout21 = new GridLayout(4, false);\r | |
172 | composite21.setLayout(compositeLayout21);\r | |
a79913eb FC |
173 | fTargetButton = new Button(composite21, SWT.RADIO);\r |
174 | fTargetButton.setText(Messages.ConfigureTraceDialog_Target);\r | |
175 | fTargetButton.setSelection(true);\r | |
176 | fIsNetwork = false;\r | |
177 | fHostButton = new Button(composite21, SWT.RADIO);\r | |
178 | fHostButton.setText(Messages.ConfigureTraceDialog_Host);\r | |
e8d771d5 BH |
179 | griddata = new GridData();\r |
180 | griddata.horizontalSpan = 3;\r | |
a79913eb FC |
181 | fHostButton.setLayoutData(griddata);\r |
182 | fHostButton.addListener(SWT.Selection, new Listener() {\r | |
e8d771d5 BH |
183 | @Override\r |
184 | public void handleEvent(Event e) {\r | |
a79913eb | 185 | if (fHostButton.getSelection()) {\r |
e8d771d5 BH |
186 | fBrowseButton.setEnabled(true);\r |
187 | } else {\r | |
e8d771d5 BH |
188 | fBrowseButton.setEnabled(false);\r |
189 | }\r | |
a79913eb | 190 | fIsNetwork = fHostButton.getSelection();\r |
e8d771d5 BH |
191 | validatePathName(fPathText.getText());\r |
192 | validate();\r | |
193 | }\r | |
194 | });\r | |
195 | \r | |
196 | Label pathLabel = new Label(composite21, SWT.NULL);\r | |
197 | pathLabel.setText(Messages.ConfigureTraceDialog_Trace_Path);\r | |
198 | griddata = new GridData();\r | |
199 | griddata.verticalIndent = 10;\r | |
200 | pathLabel.setLayoutData(griddata);\r | |
201 | \r | |
202 | fPathText = new Text(composite21, SWT.SINGLE | SWT.BORDER);\r | |
203 | griddata = new GridData();\r | |
204 | griddata.horizontalAlignment = SWT.FILL;\r | |
205 | griddata.grabExcessHorizontalSpace = true;\r | |
206 | griddata.verticalIndent = 10;\r | |
207 | fPathText.setLayoutData(griddata);\r | |
208 | fPathText.setData(""); //$NON-NLS-1$\r | |
209 | \r | |
210 | fBrowseButton = new Button(composite21, SWT.PUSH);\r | |
211 | fBrowseButton.setText(Messages.ConfigureTraceDialog_Browse + "..."); //$NON-NLS-1$\r | |
212 | griddata = new GridData();\r | |
213 | griddata.grabExcessHorizontalSpace = false;\r | |
214 | griddata.widthHint = 100;\r | |
215 | griddata.verticalIndent = 10;\r | |
216 | fBrowseButton.setLayoutData(griddata);\r | |
217 | fBrowseButton.setEnabled(false);\r | |
218 | fBrowseButton.addListener(SWT.Selection, new Listener() {\r | |
219 | @Override\r | |
220 | public void handleEvent(Event event) {\r | |
221 | DirectoryDialog dialog = new DirectoryDialog(fDisplay.getActiveShell());\r | |
222 | String newPath = dialog.open();\r | |
223 | if (newPath != null) {\r | |
224 | fPathText.setText(newPath);\r | |
225 | }\r | |
226 | }\r | |
227 | });\r | |
228 | \r | |
229 | fNameText.addListener(SWT.Modify, new Listener() {\r | |
230 | @Override\r | |
231 | public void handleEvent(Event event) {\r | |
232 | validateTraceName(fNameText.getText());\r | |
233 | validate();\r | |
234 | }\r | |
235 | });\r | |
236 | \r | |
237 | fTransportText.addListener(SWT.Modify, new Listener() {\r | |
238 | @Override\r | |
239 | public void handleEvent(Event event) {\r | |
240 | validate();\r | |
241 | }\r | |
242 | });\r | |
243 | \r | |
244 | fPathText.addListener(SWT.Modify, new Listener() {\r | |
245 | @Override\r | |
246 | public void handleEvent(Event event) {\r | |
247 | if (!fPathText.isEnabled()) {\r | |
248 | return;\r | |
249 | }\r | |
250 | validatePathName(fPathText.getText());\r | |
251 | validate();\r | |
252 | }\r | |
253 | });\r | |
254 | \r | |
255 | griddata = new GridData();\r | |
256 | Composite composite2 = new Composite(composite1, SWT.NONE);\r | |
257 | GridLayout compositeLayout2 = new GridLayout(2, false);\r | |
258 | composite2.setLayout(compositeLayout2);\r | |
259 | griddata.horizontalSpan = 4;\r | |
260 | griddata.widthHint = 500;\r | |
261 | griddata.minimumWidth = 500;\r | |
262 | composite2.setLayoutData(griddata);\r | |
263 | \r | |
a79913eb FC |
264 | Label numLttdThreadsLabel = new Label(composite2, SWT.NULL);\r |
265 | numLttdThreadsLabel.setText(Messages.ConfigureTraceDialog_Num_Lttd_Threads + ":"); //$NON-NLS-1$);\r | |
e8d771d5 BH |
266 | griddata = new GridData();\r |
267 | griddata.verticalIndent = 10;\r | |
a79913eb | 268 | numLttdThreadsLabel.setLayoutData(griddata);\r |
e8d771d5 | 269 | \r |
a79913eb | 270 | fNumLttdThreadsText = new Text(composite2, SWT.SINGLE | SWT.BORDER);\r |
e8d771d5 BH |
271 | griddata = new GridData();\r |
272 | griddata.horizontalAlignment = SWT.BEGINNING;\r | |
273 | griddata.verticalIndent = 10;\r | |
274 | griddata.widthHint = 50;\r | |
275 | griddata.minimumWidth = 50;\r | |
a79913eb | 276 | fNumLttdThreadsText.setLayoutData(griddata);\r |
e8d771d5 | 277 | if (fTraceResource.isUst()) {\r |
a79913eb FC |
278 | fNumLttdThreadsText.setText("1"); //$NON-NLS-1$\r |
279 | fNumLttdThreadsText.setEnabled(false);\r | |
e8d771d5 | 280 | } else {\r |
a79913eb | 281 | fNumLttdThreadsText.setText("2"); //$NON-NLS-1$\r |
e8d771d5 BH |
282 | }\r |
283 | \r | |
a79913eb | 284 | fNumLttdThreadsText.addVerifyListener(new VerifyListener() {\r |
e8d771d5 BH |
285 | @Override\r |
286 | public void verifyText(VerifyEvent e) {\r | |
287 | e.doit = e.text.matches("[0-9]*"); //$NON-NLS-1$\r | |
288 | }\r | |
289 | });\r | |
290 | \r | |
a79913eb | 291 | fNumLttdThreadsText.addListener(SWT.Modify, new Listener() {\r |
e8d771d5 BH |
292 | @Override\r |
293 | public void handleEvent(Event event) {\r | |
294 | validate();\r | |
295 | }\r | |
296 | });\r | |
297 | \r | |
298 | fIsAppendButton = new Button(composite1, SWT.CHECK);\r | |
299 | fIsAppendButton.setText(Messages.ConfigureTraceDialog_Append);\r | |
300 | griddata = new GridData();\r | |
301 | griddata.horizontalAlignment = SWT.BEGINNING;\r | |
302 | griddata.horizontalSpan = 4;\r | |
303 | griddata.verticalIndent = 10;\r | |
304 | fIsAppendButton.setLayoutData(griddata);\r | |
a79913eb | 305 | fIsAppend = false;\r |
e8d771d5 BH |
306 | fIsAppendButton.addListener(SWT.Selection, new Listener() {\r |
307 | @Override\r | |
308 | public void handleEvent(Event e) {\r | |
a79913eb | 309 | fIsAppend = fIsAppendButton.getSelection();\r |
e8d771d5 BH |
310 | }\r |
311 | });\r | |
312 | if (fTraceResource.isUst()) {\r | |
313 | fIsAppendButton.setEnabled(false);\r | |
314 | }\r | |
315 | \r | |
316 | griddata = new GridData();\r | |
317 | Group composite22 = new Group(composite1, SWT.SHADOW_OUT);\r | |
318 | composite22.setText(Messages.ConfigureTraceDialog_Trace_Mode);\r | |
319 | griddata.horizontalSpan = 4;\r | |
320 | griddata.verticalIndent = 10;\r | |
321 | composite22.setLayoutData(griddata);\r | |
a79913eb | 322 | GridLayout compositeLayout22 = new GridLayout(2, false);\r |
e8d771d5 | 323 | composite22.setLayout(compositeLayout22);\r |
e8d771d5 BH |
324 | fNormalButton = new Button(composite22, SWT.RADIO);\r |
325 | fNormalButton.setText(Messages.ConfigureTraceDialog_Mode_Normal);\r | |
a79913eb FC |
326 | fFlightRecorderButton = new Button(composite22, SWT.RADIO);\r |
327 | fFlightRecorderButton.setText(Messages.ConfigureTraceDialog_Mode_Flight_Recorder);\r | |
328 | fMode = TraceConfig.NORMAL_MODE;\r | |
329 | fNormalButton.setSelection(true);\r | |
330 | fNormalButton.addListener(SWT.Selection, new Listener() {\r | |
331 | @Override\r | |
332 | public void handleEvent(Event e) {\r | |
333 | if (fNormalButton.getSelection()) {\r | |
334 | fMode = TraceConfig.NORMAL_MODE;\r | |
335 | }\r | |
336 | }\r | |
e8d771d5 BH |
337 | });\r |
338 | fFlightRecorderButton.addListener(SWT.Selection, new Listener() {\r | |
339 | @Override\r | |
340 | public void handleEvent(Event e) {\r | |
341 | if (fFlightRecorderButton.getSelection()) {\r | |
342 | fMode = TraceConfig.FLIGHT_RECORDER_MODE;\r | |
343 | }\r | |
344 | }\r | |
345 | });\r | |
e8d771d5 | 346 | if (fTraceResource.isUst()) {\r |
e8d771d5 BH |
347 | fFlightRecorderButton.setEnabled(false);\r |
348 | fNormalButton.setEnabled(false);\r | |
349 | }\r | |
350 | \r | |
351 | if(fOldTraceConfig != null) {\r | |
352 | fPathText.setText(fOldTraceConfig.getTracePath());\r | |
a79913eb FC |
353 | fTargetButton.setSelection(!fOldTraceConfig.isNetworkTrace());\r |
354 | fHostButton.setSelection(fOldTraceConfig.isNetworkTrace());\r | |
355 | fIsNetwork = fOldTraceConfig.isNetworkTrace();\r | |
e8d771d5 | 356 | fBrowseButton.setEnabled(true);\r |
a79913eb FC |
357 | fNumLttdThreadsText.setText(String.valueOf(fOldTraceConfig.getNumChannel()));\r |
358 | fIsAppendButton.setSelection(fOldTraceConfig.getIsAppend());\r | |
e8d771d5 | 359 | fIsAppend = fOldTraceConfig.getIsAppend();\r |
e8d771d5 BH |
360 | fFlightRecorderButton.setSelection(fOldTraceConfig.getMode() == TraceConfig.FLIGHT_RECORDER_MODE);\r |
361 | fNormalButton.setSelection(fOldTraceConfig.getMode() == TraceConfig.NORMAL_MODE);\r | |
e8d771d5 BH |
362 | }\r |
363 | \r | |
364 | // Depending on the state disable fields, it's only informational then\r | |
365 | if ((fTraceResource.getTraceState() == TraceState.STARTED) || (fTraceResource.getTraceState() == TraceState.PAUSED)) {\r | |
366 | fPathText.setEnabled(false);\r | |
367 | fBrowseButton.setEnabled(false);\r | |
a79913eb FC |
368 | fTargetButton.setEnabled(false);\r |
369 | fHostButton.setEnabled(false);\r | |
e8d771d5 | 370 | fIsAppendButton.setEnabled(false);\r |
a79913eb | 371 | fNumLttdThreadsText.setEnabled(false);\r |
e8d771d5 BH |
372 | fFlightRecorderButton.setEnabled(false);\r |
373 | fNormalButton.setEnabled(false);\r | |
e8d771d5 BH |
374 | }\r |
375 | \r | |
376 | validate();\r | |
377 | \r | |
378 | fDisplay.getActiveShell().addListener(SWT.Traverse, new Listener() {\r | |
379 | @Override\r | |
380 | public void handleEvent(Event event) {\r | |
381 | if (event.detail == SWT.TRAVERSE_ESCAPE) {\r | |
382 | event.doit = false;\r | |
383 | }\r | |
384 | }\r | |
385 | });\r | |
386 | }\r | |
387 | \r | |
388 | /*\r | |
389 | * (non-Javadoc)\r | |
390 | * @see org.eclipse.jface.dialogs.DialogPage#dispose()\r | |
391 | */\r | |
392 | @Override\r | |
393 | public void dispose() {\r | |
394 | super.dispose();\r | |
395 | }\r | |
396 | \r | |
397 | /* (non-Javadoc)\r | |
398 | * @see org.eclipse.jface.dialogs.DialogPage#setVisible(boolean)\r | |
399 | */\r | |
400 | @Override\r | |
401 | public void setVisible(boolean visible) {\r | |
402 | if (visible) {\r | |
403 | validate();\r | |
404 | }\r | |
405 | super.setVisible(visible);\r | |
406 | }\r | |
407 | \r | |
408 | /*\r | |
409 | * Validates the trace name which has to be unique.\r | |
410 | */\r | |
411 | protected boolean validateTraceName(String name) {\r | |
412 | if (name.length() > 0) {\r | |
413 | TraceResource[] traces = new TraceResource[0];\r | |
414 | try {\r | |
415 | traces = fSubSystem.getAllTraces();\r | |
416 | } catch (SystemMessageException e) {\r | |
417 | SystemBasePlugin.logError("TraceConfigurationPage ", e); //$NON-NLS-1$\r | |
418 | }\r | |
419 | for (int i = 0; i < traces.length; i++) {\r | |
420 | if (traces[i].getName().compareTo(name) == 0) {\r | |
421 | fTraceNameError = Messages.NewTraceDialog_Error_Already_Exists;\r | |
422 | setErrorMessage(fTraceNameError);\r | |
423 | return false;\r | |
424 | }\r | |
425 | }\r | |
426 | final char[] chars = name.toCharArray();\r | |
427 | for (int x = 0; x < chars.length; x++) {\r | |
428 | final char c = chars[x];\r | |
429 | if ((x == 0) && !(((c >= 'a') && (c <= 'z')) || ((c >= 'A') && (c <= 'Z')))) {\r | |
430 | fTraceNameError = Messages.NewTraceDialog_Error_Invalid_First_Char;\r | |
431 | setErrorMessage(fTraceNameError);\r | |
432 | return false;\r | |
433 | } else if (x != 0) {\r | |
434 | if (!((c >= 'a') && (c <= 'z')) && !((c >= 'A') && (c <= 'Z')) && !((c >= '0') && (c <= '9'))) {\r | |
435 | fTraceNameError = Messages.NewTraceDialog_Error_Invalid_Name;\r | |
436 | setErrorMessage(fTraceNameError);\r | |
437 | return false;\r | |
438 | }\r | |
439 | }\r | |
440 | }\r | |
441 | }\r | |
442 | if (fTracePathError.length() > 0) {\r | |
443 | setErrorMessage(fTracePathError);\r | |
444 | } else {\r | |
445 | setErrorMessage(null);\r | |
446 | }\r | |
447 | fTraceNameError = ""; //$NON-NLS-1$\r | |
448 | return true;\r | |
449 | }\r | |
450 | \r | |
451 | /*\r | |
452 | * Validates the trace path.\r | |
453 | */\r | |
454 | private boolean validatePathName(String path) {\r | |
455 | if (path.length() > 0) {\r | |
456 | final char c0 = path.charAt(0);\r | |
457 | if (c0 != '/') {\r | |
458 | fTracePathError = Messages.ConfigureTraceDialog_Error_Invalid_Path;\r | |
459 | setErrorMessage(fTracePathError);\r | |
460 | return false;\r | |
461 | } else {\r | |
462 | String[] folders = path.split("/"); //$NON-NLS-1$\r | |
463 | for (int i = 0; i < folders.length; i++) {\r | |
464 | final char[] chars = folders[i].toCharArray();\r | |
465 | for (int x = 0; x < chars.length; x++) {\r | |
466 | final char c = chars[x];\r | |
467 | if ((c >= 'a') && (c <= 'z')) {\r | |
468 | continue; // lowercase\r | |
469 | }\r | |
470 | if ((c >= 'A') && (c <= 'Z')) {\r | |
471 | continue; // uppercase\r | |
472 | }\r | |
473 | if ((c >= '0') && (c <= '9')) {\r | |
474 | continue; // numeric\r | |
475 | }\r | |
476 | fTracePathError = Messages.ConfigureTraceDialog_Error_Invalid_Folder;\r | |
477 | setErrorMessage(fTracePathError);\r | |
478 | return false;\r | |
479 | }\r | |
480 | }\r | |
481 | if (path.length() > 1) {\r | |
482 | for (int i = 0; i < path.length() - 1; i++) {\r | |
483 | if ((path.charAt(i) == '/') && (path.charAt(i + 1) == '/')) {\r | |
484 | fTracePathError = Messages.ConfigureTraceDialog_Error_Multiple_Seps;\r | |
485 | setErrorMessage(fTracePathError);\r | |
486 | return false;\r | |
487 | }\r | |
488 | }\r | |
489 | }\r | |
490 | }\r | |
a79913eb | 491 | if (fHostButton.getSelection()) {\r |
e8d771d5 BH |
492 | File file = new File(path);\r |
493 | if (file.isFile()) {\r | |
494 | fTracePathError = Messages.ConfigureTraceDialog_Error_File_Exists;\r | |
495 | setErrorMessage(fTracePathError);\r | |
496 | return false;\r | |
497 | }\r | |
498 | if (path.length() > 1 && !file.getParentFile().canWrite()) {\r | |
499 | fTracePathError = Messages.ConfigureTraceDialog_Error_Can_Not_Write;\r | |
500 | setErrorMessage(fTracePathError);\r | |
501 | return false;\r | |
502 | }\r | |
503 | }\r | |
504 | }\r | |
505 | if (fTraceNameError.length() > 0) {\r | |
506 | setErrorMessage(fTraceNameError);\r | |
507 | } else {\r | |
508 | setErrorMessage(null);\r | |
509 | }\r | |
510 | fTracePathError = ""; //$NON-NLS-1$\r | |
511 | return true;\r | |
512 | }\r | |
513 | \r | |
514 | /*\r | |
515 | * Validates all input values.\r | |
516 | */\r | |
517 | private void validate() {\r | |
518 | if ((fNameText.getText() == null) || (fTransportText.getText() == null) || (fTransportText.getText().length() == 0) || (fNameText.getText().length() == 0)\r | |
a79913eb | 519 | || (fNumLttdThreadsText.getText().length() == 0) || (fNumLttdThreadsText.getText().length() == 0)) {\r |
e8d771d5 BH |
520 | setPageComplete(false);\r |
521 | return;\r | |
522 | }\r | |
523 | if (fPathText.getText().length() == 0) {\r | |
524 | setPageComplete(false);\r | |
525 | return;\r | |
526 | }\r | |
527 | if ((fTracePathError.length() > 0) || (fTraceNameError.length() > 0)) {\r | |
528 | setPageComplete(false);\r | |
529 | return;\r | |
530 | }\r | |
531 | fTraceName = fNameText.getText();\r | |
532 | fTraceTransport = fTransportText.getText();\r | |
533 | fTracePath = fPathText.getText();\r | |
a79913eb | 534 | fNumChannel = Integer.parseInt(fNumLttdThreadsText.getText());\r |
e8d771d5 BH |
535 | \r |
536 | if (fTraceNameError.length() == 0) {\r | |
537 | setErrorMessage(null);\r | |
538 | setPageComplete(true);\r | |
539 | } else {\r | |
540 | setErrorMessage(fTraceNameError);\r | |
541 | setPageComplete(false);\r | |
542 | }\r | |
543 | }\r | |
544 | \r | |
545 | /**\r | |
546 | * Gets the trace configuration. \r | |
547 | * \r | |
548 | * @return trace configuration\r | |
549 | */\r | |
550 | public TraceConfig getTraceConfig() {\r | |
551 | TraceConfig newTraceConfig = new TraceConfig();\r | |
552 | newTraceConfig.setTraceName(fTraceName);\r | |
553 | newTraceConfig.setTraceTransport(fTraceTransport);\r | |
554 | newTraceConfig.setTracePath(fTracePath);\r | |
a79913eb | 555 | newTraceConfig.setNetworkTrace(fIsNetwork);\r |
e8d771d5 BH |
556 | newTraceConfig.setIsAppend(fIsAppend);\r |
557 | newTraceConfig.setMode(fMode);\r | |
558 | newTraceConfig.setNumChannel(fNumChannel);\r | |
559 | \r | |
560 | return newTraceConfig;\r | |
561 | }\r | |
562 | \r | |
563 | /**\r | |
564 | * Gets if trace is a local trace (i.e. if trace output is stored on host \r | |
565 | * where client is running)\r | |
566 | * \r | |
567 | * @return isLocalTrace\r | |
568 | */\r | |
569 | public boolean isLocalTrace() {\r | |
a79913eb | 570 | return fHostButton.getSelection();\r |
e8d771d5 BH |
571 | }\r |
572 | }\r |