2010-11-18 Francois Chouinard <fchouinard@gmail.com> Contribution for Bug315307
[deliverable/tracecompass.git] / org.eclipse.linuxtools.tmf.ui / src / org / eclipse / linuxtools / tmf / ui / dialogs / ManageCustomParsersDialog.java
CommitLineData
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
13package org.eclipse.linuxtools.tmf.ui.dialogs;\r
14\r
15import java.io.File;\r
16\r
17import org.eclipse.core.resources.IFile;\r
18import org.eclipse.core.resources.IWorkspace;\r
19import org.eclipse.core.resources.ResourcesPlugin;\r
20import org.eclipse.core.runtime.CoreException;\r
21import org.eclipse.core.runtime.IPath;\r
22import org.eclipse.core.runtime.Path;\r
23import org.eclipse.jface.dialogs.Dialog;\r
24import org.eclipse.jface.dialogs.IDialogConstants;\r
25import org.eclipse.jface.dialogs.MessageDialog;\r
26import org.eclipse.jface.wizard.WizardDialog;\r
27import org.eclipse.linuxtools.tmf.ui.TmfUiPlugin;\r
28import org.eclipse.linuxtools.tmf.ui.editors.TmfEventsEditor;\r
29import org.eclipse.linuxtools.tmf.ui.parsers.ParserProviderManager;\r
30import org.eclipse.linuxtools.tmf.ui.parsers.custom.CustomTraceDefinition;\r
31import org.eclipse.linuxtools.tmf.ui.parsers.custom.CustomTxtTrace;\r
32import org.eclipse.linuxtools.tmf.ui.parsers.custom.CustomTxtTraceDefinition;\r
33import org.eclipse.linuxtools.tmf.ui.parsers.custom.CustomXmlTrace;\r
34import org.eclipse.linuxtools.tmf.ui.parsers.custom.CustomXmlTraceDefinition;\r
35import org.eclipse.linuxtools.tmf.ui.views.project.ProjectView;\r
36import org.eclipse.linuxtools.tmf.ui.wizards.CustomTxtParserWizard;\r
37import org.eclipse.linuxtools.tmf.ui.wizards.CustomXmlParserWizard;\r
38import org.eclipse.swt.SWT;\r
39import org.eclipse.swt.events.SelectionEvent;\r
40import org.eclipse.swt.events.SelectionListener;\r
41import org.eclipse.swt.graphics.Image;\r
42import org.eclipse.swt.layout.GridData;\r
43import org.eclipse.swt.layout.GridLayout;\r
44import org.eclipse.swt.widgets.Button;\r
45import org.eclipse.swt.widgets.Composite;\r
46import org.eclipse.swt.widgets.Control;\r
47import org.eclipse.swt.widgets.Display;\r
48import org.eclipse.swt.widgets.FileDialog;\r
49import org.eclipse.swt.widgets.Label;\r
50import org.eclipse.swt.widgets.List;\r
51import org.eclipse.swt.widgets.Shell;\r
52import org.eclipse.ui.IEditorInput;\r
53import org.eclipse.ui.IEditorPart;\r
54import org.eclipse.ui.IReusableEditor;\r
55import org.eclipse.ui.IWorkbench;\r
56import org.eclipse.ui.IWorkbenchPage;\r
57import org.eclipse.ui.PlatformUI;\r
58import org.eclipse.ui.part.FileEditorInput;\r
59\r
60public 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
This page took 0.185422 seconds and 5 git commands to generate.