Commit | Line | Data |
---|---|---|
c3c5c786 FC |
1 | /*******************************************************************************\r |
2 | * Copyright (c) 2010 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 | * Patrick Tasse - Initial API and implementation\r | |
11 | *******************************************************************************/\r | |
12 | \r | |
13 | package org.eclipse.linuxtools.tmf.ui.dialogs;\r | |
14 | \r | |
15 | import java.io.File;\r | |
16 | \r | |
17 | import org.eclipse.core.resources.IFile;\r | |
18 | import org.eclipse.core.resources.IWorkspace;\r | |
19 | import org.eclipse.core.resources.ResourcesPlugin;\r | |
20 | import org.eclipse.core.runtime.CoreException;\r | |
21 | import org.eclipse.core.runtime.IPath;\r | |
22 | import org.eclipse.core.runtime.Path;\r | |
23 | import org.eclipse.jface.dialogs.Dialog;\r | |
24 | import org.eclipse.jface.dialogs.IDialogConstants;\r | |
25 | import org.eclipse.jface.dialogs.MessageDialog;\r | |
26 | import org.eclipse.jface.wizard.WizardDialog;\r | |
27 | import org.eclipse.linuxtools.tmf.ui.TmfUiPlugin;\r | |
28 | import org.eclipse.linuxtools.tmf.ui.editors.TmfEventsEditor;\r | |
29 | import org.eclipse.linuxtools.tmf.ui.parsers.ParserProviderManager;\r | |
30 | import org.eclipse.linuxtools.tmf.ui.parsers.custom.CustomTraceDefinition;\r | |
31 | import org.eclipse.linuxtools.tmf.ui.parsers.custom.CustomTxtTrace;\r | |
32 | import org.eclipse.linuxtools.tmf.ui.parsers.custom.CustomTxtTraceDefinition;\r | |
33 | import org.eclipse.linuxtools.tmf.ui.parsers.custom.CustomXmlTrace;\r | |
34 | import org.eclipse.linuxtools.tmf.ui.parsers.custom.CustomXmlTraceDefinition;\r | |
35 | import org.eclipse.linuxtools.tmf.ui.views.project.ProjectView;\r | |
36 | import org.eclipse.linuxtools.tmf.ui.wizards.CustomTxtParserWizard;\r | |
37 | import org.eclipse.linuxtools.tmf.ui.wizards.CustomXmlParserWizard;\r | |
38 | import org.eclipse.swt.SWT;\r | |
39 | import org.eclipse.swt.events.SelectionEvent;\r | |
40 | import org.eclipse.swt.events.SelectionListener;\r | |
41 | import org.eclipse.swt.graphics.Image;\r | |
42 | import org.eclipse.swt.layout.GridData;\r | |
43 | import org.eclipse.swt.layout.GridLayout;\r | |
44 | import org.eclipse.swt.widgets.Button;\r | |
45 | import org.eclipse.swt.widgets.Composite;\r | |
46 | import org.eclipse.swt.widgets.Control;\r | |
47 | import org.eclipse.swt.widgets.Display;\r | |
48 | import org.eclipse.swt.widgets.FileDialog;\r | |
49 | import org.eclipse.swt.widgets.Label;\r | |
50 | import org.eclipse.swt.widgets.List;\r | |
51 | import org.eclipse.swt.widgets.Shell;\r | |
52 | import org.eclipse.ui.IEditorInput;\r | |
53 | import org.eclipse.ui.IEditorPart;\r | |
54 | import org.eclipse.ui.IReusableEditor;\r | |
55 | import org.eclipse.ui.IWorkbench;\r | |
56 | import org.eclipse.ui.IWorkbenchPage;\r | |
57 | import org.eclipse.ui.PlatformUI;\r | |
58 | import org.eclipse.ui.part.FileEditorInput;\r | |
59 | \r | |
60 | public class ManageCustomParsersDialog extends Dialog {\r | |
61 | \r | |
3b38ea61 | 62 | private static final Image image = TmfUiPlugin.getDefault().getImageFromPath("/icons/customparser_wizard.gif"); //$NON-NLS-1$\r |
c3c5c786 FC |
63 | \r |
64 | Button txtButton;\r | |
65 | Button xmlButton;\r | |
66 | List parserList;\r | |
67 | Button newButton;\r | |
68 | Button editButton;\r | |
69 | Button deleteButton;\r | |
70 | Button importButton;\r | |
71 | Button exportButton;\r | |
72 | Button parseButton;\r | |
73 | \r | |
74 | public ManageCustomParsersDialog(Shell parent) {\r | |
75 | super(parent);\r | |
76 | setShellStyle(SWT.RESIZE | SWT.MAX | getShellStyle());\r | |
77 | }\r | |
78 | \r | |
79 | /* (non-Javadoc)\r | |
80 | * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)\r | |
81 | */\r | |
82 | @Override\r | |
83 | protected Control createDialogArea(Composite parent) {\r | |
b9763f53 | 84 | getShell().setText(Messages.ManageCustomParsersDialog_DialogHeader);\r |
c3c5c786 FC |
85 | getShell().setImage(image);\r |
86 | \r | |
87 | Composite composite = (Composite) super.createDialogArea(parent);\r | |
88 | composite.setLayout(new GridLayout(2, false));\r | |
89 | \r | |
90 | Composite listContainer = new Composite(composite, SWT.NONE);\r | |
91 | listContainer.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));\r | |
92 | GridLayout lcgl = new GridLayout();\r | |
93 | lcgl.marginHeight = 0;\r | |
94 | lcgl.marginWidth = 0;\r | |
95 | listContainer.setLayout(lcgl);\r | |
96 | \r | |
97 | Composite radioContainer = new Composite(listContainer, SWT.NONE);\r | |
98 | GridLayout rcgl = new GridLayout(2, true);\r | |
99 | rcgl.marginHeight = 0;\r | |
100 | rcgl.marginWidth = 0;\r | |
101 | radioContainer.setLayout(rcgl);\r | |
102 | \r | |
103 | txtButton = new Button(radioContainer, SWT.RADIO);\r | |
b9763f53 | 104 | txtButton.setText(Messages.ManageCustomParsersDialog_TextButtonLabel);\r |
c3c5c786 FC |
105 | txtButton.setSelection(true);\r |
106 | txtButton.addSelectionListener(new SelectionListener(){\r | |
d4011df2 FC |
107 | @Override\r |
108 | public void widgetDefaultSelected(SelectionEvent e) {}\r | |
109 | @Override\r | |
110 | public void widgetSelected(SelectionEvent e) {\r | |
c3c5c786 FC |
111 | fillParserList();\r |
112 | }});\r | |
113 | \r | |
114 | xmlButton = new Button(radioContainer, SWT.RADIO);\r | |
3b38ea61 | 115 | xmlButton.setText("XML"); //$NON-NLS-1$\r |
c3c5c786 | 116 | xmlButton.addSelectionListener(new SelectionListener(){\r |
d4011df2 FC |
117 | @Override\r |
118 | public void widgetDefaultSelected(SelectionEvent e) {}\r | |
119 | @Override\r | |
120 | public void widgetSelected(SelectionEvent e) {\r | |
c3c5c786 FC |
121 | fillParserList();\r |
122 | }});\r | |
123 | \r | |
124 | parserList = new List(listContainer, SWT.SINGLE | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);\r | |
125 | parserList.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));\r | |
126 | parserList.addSelectionListener(new SelectionListener(){\r | |
d4011df2 FC |
127 | @Override\r |
128 | public void widgetDefaultSelected(SelectionEvent e) {}\r | |
129 | @Override\r | |
130 | public void widgetSelected(SelectionEvent e) {\r | |
c3c5c786 FC |
131 | if (parserList.getSelectionCount() == 0) {\r |
132 | editButton.setEnabled(false);\r | |
133 | deleteButton.setEnabled(false);\r | |
134 | exportButton.setEnabled(false);\r | |
135 | parseButton.setEnabled(false);\r | |
136 | } else {\r | |
137 | editButton.setEnabled(true);\r | |
138 | deleteButton.setEnabled(true);\r | |
139 | exportButton.setEnabled(true);\r | |
140 | parseButton.setEnabled(true);\r | |
141 | }\r | |
142 | }});\r | |
143 | \r | |
144 | Composite buttonContainer = new Composite(composite, SWT.NULL);\r | |
145 | buttonContainer.setLayout(new GridLayout());\r | |
146 | buttonContainer.setLayoutData(new GridData(SWT.CENTER, SWT.TOP, false, false));\r | |
147 | \r | |
148 | newButton = new Button(buttonContainer, SWT.PUSH);\r | |
149 | newButton.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false));\r | |
b9763f53 | 150 | newButton.setText(Messages.ManageCustomParsersDialog_NewButtonLabel);\r |
c3c5c786 | 151 | newButton.addSelectionListener(new SelectionListener(){\r |
d4011df2 FC |
152 | @Override\r |
153 | public void widgetDefaultSelected(SelectionEvent e) {}\r | |
154 | @Override\r | |
155 | public void widgetSelected(SelectionEvent e) {\r | |
c3c5c786 FC |
156 | WizardDialog dialog = null;\r |
157 | if (txtButton.getSelection()) {\r | |
158 | dialog = new WizardDialog(getShell(), new CustomTxtParserWizard());\r | |
159 | } else if (xmlButton.getSelection()) {\r | |
160 | dialog = new WizardDialog(getShell(), new CustomXmlParserWizard());\r | |
161 | }\r | |
162 | dialog.open();\r | |
163 | if (dialog.getReturnCode() == Dialog.OK) {\r | |
164 | fillParserList();\r | |
165 | }\r | |
166 | }});\r | |
167 | \r | |
168 | editButton = new Button(buttonContainer, SWT.PUSH);\r | |
169 | editButton.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false));\r | |
b9763f53 | 170 | editButton.setText(Messages.ManageCustomParsersDialog_EditButtonLabel);\r |
c3c5c786 FC |
171 | editButton.setEnabled(false);\r |
172 | editButton.addSelectionListener(new SelectionListener(){\r | |
d4011df2 FC |
173 | @Override\r |
174 | public void widgetDefaultSelected(SelectionEvent e) {}\r | |
175 | @Override\r | |
176 | public void widgetSelected(SelectionEvent e) {\r | |
c3c5c786 FC |
177 | WizardDialog dialog = null;\r |
178 | if (txtButton.getSelection()) {\r | |
179 | dialog = new WizardDialog(getShell(),\r | |
180 | new CustomTxtParserWizard(CustomTxtTraceDefinition.load(parserList.getSelection()[0])));\r | |
181 | } else if (xmlButton.getSelection()) {\r | |
182 | dialog = new WizardDialog(getShell(),\r | |
183 | new CustomXmlParserWizard(CustomXmlTraceDefinition.load(parserList.getSelection()[0])));\r | |
184 | }\r | |
185 | dialog.open();\r | |
186 | if (dialog.getReturnCode() == Dialog.OK) {\r | |
187 | fillParserList();\r | |
188 | }\r | |
189 | }});\r | |
190 | \r | |
191 | deleteButton = new Button(buttonContainer, SWT.PUSH);\r | |
192 | deleteButton.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false));\r | |
b9763f53 | 193 | deleteButton.setText(Messages.ManageCustomParsersDialog_DeleteButtonLabel);\r |
c3c5c786 FC |
194 | deleteButton.setEnabled(false);\r |
195 | deleteButton.addSelectionListener(new SelectionListener(){\r | |
d4011df2 FC |
196 | @Override\r |
197 | public void widgetDefaultSelected(SelectionEvent e) {}\r | |
198 | @Override\r | |
199 | public void widgetSelected(SelectionEvent e) {\r | |
c3c5c786 FC |
200 | boolean confirm = MessageDialog.openQuestion(\r |
201 | getShell(),\r | |
b9763f53 FC |
202 | Messages.ManageCustomParsersDialog_DeleteParserDialogHeader,\r |
203 | Messages.ManageCustomParsersDialog_DeleteConfirmation + parserList.getSelection()[0] + "?"); //$NON-NLS-1$\r | |
c3c5c786 FC |
204 | if (confirm) {\r |
205 | if (txtButton.getSelection()) {\r | |
206 | CustomTxtTraceDefinition.delete(parserList.getSelection()[0]);\r | |
207 | } else if (xmlButton.getSelection()) {\r | |
208 | CustomXmlTraceDefinition.delete(parserList.getSelection()[0]);\r | |
209 | }\r | |
210 | fillParserList();\r | |
211 | }\r | |
212 | }});\r | |
213 | \r | |
214 | new Label(buttonContainer, SWT.NONE); // filler\r | |
215 | \r | |
216 | importButton = new Button(buttonContainer, SWT.PUSH);\r | |
217 | importButton.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false));\r | |
b9763f53 | 218 | importButton.setText(Messages.ManageCustomParsersDialog_ImportButtonLabel);\r |
c3c5c786 | 219 | importButton.addSelectionListener(new SelectionListener(){\r |
d4011df2 FC |
220 | @Override\r |
221 | public void widgetDefaultSelected(SelectionEvent e) {}\r | |
222 | @Override\r | |
223 | public void widgetSelected(SelectionEvent e) {\r | |
c3c5c786 | 224 | FileDialog dialog = new FileDialog(Display.getCurrent().getActiveShell(), SWT.OPEN);\r |
b9763f53 | 225 | dialog.setText(Messages.ManageCustomParsersDialog_ImportParserSelection);\r |
3b38ea61 | 226 | dialog.setFilterExtensions(new String[] {"*.xml", "*"}); //$NON-NLS-1$ //$NON-NLS-2$\r |
c3c5c786 FC |
227 | String path = dialog.open();\r |
228 | if (path != null) {\r | |
229 | CustomTraceDefinition[] defs = null;\r | |
230 | if (txtButton.getSelection()) {\r | |
231 | defs = CustomTxtTraceDefinition.loadAll(path);\r | |
232 | } else if (xmlButton.getSelection()) {\r | |
233 | defs = CustomXmlTraceDefinition.loadAll(path);\r | |
234 | }\r | |
235 | if (defs != null && defs.length > 0) {\r | |
236 | for (CustomTraceDefinition def : defs) {\r | |
237 | def.save();\r | |
238 | }\r | |
239 | fillParserList();\r | |
240 | }\r | |
241 | }\r | |
242 | }});\r | |
243 | \r | |
244 | exportButton = new Button(buttonContainer, SWT.PUSH);\r | |
245 | exportButton.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false));\r | |
b9763f53 | 246 | exportButton.setText(Messages.ManageCustomParsersDialog_ExportButtonLabel);\r |
c3c5c786 FC |
247 | exportButton.setEnabled(false);\r |
248 | exportButton.addSelectionListener(new SelectionListener(){\r | |
d4011df2 FC |
249 | @Override\r |
250 | public void widgetDefaultSelected(SelectionEvent e) {}\r | |
251 | @Override\r | |
252 | public void widgetSelected(SelectionEvent e) {\r | |
c3c5c786 | 253 | FileDialog dialog = new FileDialog(Display.getCurrent().getActiveShell(), SWT.SAVE);\r |
b9763f53 | 254 | dialog.setText(Messages.ManageCustomParsersDialog_ExportParserSelection + parserList.getSelection()[0]);\r |
3b38ea61 | 255 | dialog.setFilterExtensions(new String[] {"*.xml", "*"}); //$NON-NLS-1$ //$NON-NLS-2$\r |
c3c5c786 FC |
256 | String path = dialog.open();\r |
257 | if (path != null) {\r | |
258 | CustomTraceDefinition def = null;\r | |
259 | if (txtButton.getSelection()) {\r | |
260 | def = CustomTxtTraceDefinition.load(parserList.getSelection()[0]);\r | |
261 | } else if (xmlButton.getSelection()) {\r | |
262 | def = CustomXmlTraceDefinition.load(parserList.getSelection()[0]);\r | |
263 | }\r | |
264 | if (def != null) {\r | |
265 | def.save(path);\r | |
266 | }\r | |
267 | }\r | |
268 | }});\r | |
269 | \r | |
270 | parseButton = new Button(buttonContainer, SWT.PUSH);\r | |
271 | parseButton.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false));\r | |
b9763f53 | 272 | parseButton.setText(Messages.ManageCustomParsersDialog_ParseButtonLabel);\r |
c3c5c786 FC |
273 | parseButton.setEnabled(false);\r |
274 | parseButton.addSelectionListener(new SelectionListener(){\r | |
d4011df2 FC |
275 | @Override\r |
276 | public void widgetDefaultSelected(SelectionEvent e) {}\r | |
277 | @Override\r | |
278 | public void widgetSelected(SelectionEvent e) {\r | |
c3c5c786 | 279 | FileDialog dialog = new FileDialog(Display.getCurrent().getActiveShell(), SWT.OPEN);\r |
b9763f53 | 280 | dialog.setText(Messages.ManageCustomParsersDialog_TraceSelection + parserList.getSelection()[0]);\r |
c3c5c786 | 281 | if (xmlButton.getSelection()) {\r |
3b38ea61 | 282 | dialog.setFilterExtensions(new String[] {"*.xml", "*"}); //$NON-NLS-1$ //$NON-NLS-2$\r |
c3c5c786 FC |
283 | }\r |
284 | String path = dialog.open();\r | |
285 | String parser = null;\r | |
286 | if (path != null) {\r | |
287 | CustomTraceDefinition def = null;\r | |
288 | if (txtButton.getSelection()) {\r | |
289 | def = CustomTxtTraceDefinition.load(parserList.getSelection()[0]);\r | |
3b38ea61 | 290 | parser = CustomTxtTrace.class.getCanonicalName() + "." + def.definitionName; //$NON-NLS-1$\r |
c3c5c786 FC |
291 | } else if (xmlButton.getSelection()) {\r |
292 | def = CustomXmlTraceDefinition.load(parserList.getSelection()[0]);\r | |
3b38ea61 | 293 | parser = CustomXmlTrace.class.getCanonicalName() + "." + def.definitionName; //$NON-NLS-1$\r |
c3c5c786 FC |
294 | }\r |
295 | if (def != null) {\r | |
296 | try {\r | |
297 | IWorkspace workspace = ResourcesPlugin.getWorkspace();\r | |
298 | IPath location = Path.fromOSString(path);\r | |
299 | IFile file = workspace.getRoot().getFileForLocation(location);\r | |
300 | if (file == null) {\r | |
301 | file = ProjectView.createLink(new File(location.toPortableString()).toURI());\r | |
302 | }\r | |
303 | file.setPersistentProperty(ParserProviderManager.PARSER_PROPERTY, parser);\r | |
304 | IEditorInput editorInput = new FileEditorInput(file);\r | |
305 | IWorkbench wb = PlatformUI.getWorkbench();\r | |
306 | IWorkbenchPage activePage = wb.getActiveWorkbenchWindow().getActivePage();\r | |
307 | \r | |
308 | String editorId = TmfEventsEditor.ID;\r | |
309 | IEditorPart editor = activePage.findEditor(editorInput);\r | |
310 | if (editor != null && editor instanceof IReusableEditor) {\r | |
311 | activePage.reuseEditor((IReusableEditor)editor, editorInput);\r | |
312 | activePage.activate(editor);\r | |
313 | } else {\r | |
314 | editor = activePage.openEditor(editorInput, editorId);\r | |
315 | }\r | |
316 | } catch (CoreException e1) {\r | |
b9763f53 | 317 | MessageDialog.openError(getShell(), "Parse Error", e1.getMessage()); //$NON-NLS-1$\r |
c3c5c786 FC |
318 | }\r |
319 | }\r | |
320 | }\r | |
321 | }});\r | |
322 | \r | |
323 | fillParserList();\r | |
324 | \r | |
325 | getShell().setMinimumSize(300, 275);\r | |
326 | return composite;\r | |
327 | }\r | |
328 | \r | |
329 | /* (non-Javadoc)\r | |
330 | * @see org.eclipse.jface.dialogs.Dialog#createButtonsForButtonBar(org.eclipse.swt.widgets.Composite)\r | |
331 | */\r | |
332 | @Override\r | |
333 | protected void createButtonsForButtonBar(Composite parent) {\r | |
334 | createButton(parent, IDialogConstants.OK_ID, IDialogConstants.CLOSE_LABEL, false);\r | |
335 | }\r | |
336 | \r | |
337 | private void fillParserList() {\r | |
338 | parserList.removeAll();\r | |
339 | if (txtButton.getSelection()) {\r | |
340 | for (CustomTxtTraceDefinition def : CustomTxtTraceDefinition.loadAll()) {\r | |
341 | parserList.add(def.definitionName);\r | |
342 | }\r | |
343 | } else if (xmlButton.getSelection()) {\r | |
344 | for (CustomXmlTraceDefinition def : CustomXmlTraceDefinition.loadAll()) {\r | |
345 | parserList.add(def.definitionName);\r | |
346 | }\r | |
347 | }\r | |
348 | editButton.setEnabled(false);\r | |
349 | deleteButton.setEnabled(false);\r | |
350 | exportButton.setEnabled(false);\r | |
351 | parseButton.setEnabled(false);\r | |
352 | }\r | |
353 | \r | |
354 | }\r |