Implement TmfTrace changes - introduce TmfTraceException
[deliverable/tracecompass.git] / org.eclipse.linuxtools.tmf.ui / src / org / eclipse / linuxtools / internal / tmf / ui / parsers / wizards / CustomXmlParserOutputWizardPage.java
CommitLineData
d34665f9 1package org.eclipse.linuxtools.internal.tmf.ui.parsers.wizards;\r
c3c5c786
FC
2\r
3import java.io.File;\r
c3c5c786
FC
4import java.io.FileWriter;\r
5import java.io.IOException;\r
6import java.util.ArrayList;\r
7import java.util.Iterator;\r
8import java.util.List;\r
9\r
10import org.eclipse.jface.wizard.WizardPage;\r
d34665f9
FC
11import org.eclipse.linuxtools.internal.tmf.ui.Messages;\r
12import org.eclipse.linuxtools.internal.tmf.ui.TmfUiPlugin;\r
13import org.eclipse.linuxtools.internal.tmf.ui.parsers.custom.CustomEventsTable;\r
14import org.eclipse.linuxtools.internal.tmf.ui.parsers.custom.CustomTraceDefinition;\r
25e48683 15import org.eclipse.linuxtools.internal.tmf.ui.parsers.custom.CustomTraceDefinition.OutputColumn;\r
d34665f9
FC
16import org.eclipse.linuxtools.internal.tmf.ui.parsers.custom.CustomXmlTrace;\r
17import org.eclipse.linuxtools.internal.tmf.ui.parsers.custom.CustomXmlTraceDefinition;\r
b4f71e4a 18import org.eclipse.linuxtools.tmf.core.exceptions.TmfTraceException;\r
6c13869b 19import org.eclipse.linuxtools.tmf.core.trace.ITmfTrace;\r
c3c5c786
FC
20import org.eclipse.swt.SWT;\r
21import org.eclipse.swt.custom.SashForm;\r
22import org.eclipse.swt.custom.ScrolledComposite;\r
23import org.eclipse.swt.events.SelectionAdapter;\r
24import org.eclipse.swt.events.SelectionEvent;\r
25import org.eclipse.swt.graphics.Image;\r
26import org.eclipse.swt.layout.GridData;\r
27import org.eclipse.swt.layout.GridLayout;\r
28import org.eclipse.swt.widgets.Button;\r
29import org.eclipse.swt.widgets.Composite;\r
30import org.eclipse.swt.widgets.Text;\r
31\r
32public class CustomXmlParserOutputWizardPage extends WizardPage {\r
33\r
d7fcacc9
FC
34 private static final Image upImage = TmfUiPlugin.getDefault().getImageFromPath("/icons/elcl16/up_button.gif"); //$NON-NLS-1$\r
35 private static final Image downImage = TmfUiPlugin.getDefault().getImageFromPath("/icons/elcl16/down_button.gif"); //$NON-NLS-1$\r
25e48683 36 private final CustomXmlParserWizard wizard;\r
c3c5c786
FC
37 private CustomXmlTraceDefinition definition;\r
38 ArrayList<Output> outputs = new ArrayList<Output>();\r
25e48683 39 // Output messageOutput;\r
c3c5c786
FC
40 Composite container;\r
41 SashForm sash;\r
25e48683
FC
42 // Text timestampFormatText;\r
43 // Text timestampPreviewText;\r
c3c5c786
FC
44 ScrolledComposite outputsScrolledComposite;\r
45 Composite outputsContainer;\r
25e48683 46 // ScrolledComposite inputScrolledComposite;\r
c3c5c786
FC
47 Composite tableContainer;\r
48 CustomEventsTable previewTable;\r
49 File tmpFile;\r
25e48683
FC
50\r
51 protected CustomXmlParserOutputWizardPage(final CustomXmlParserWizard wizard) {\r
3b38ea61 52 super("CustomParserOutputWizardPage"); //$NON-NLS-1$\r
c3c5c786 53 setTitle(wizard.inputPage.getTitle());\r
3b38ea61 54 setDescription(Messages.CustomXmlParserOutputWizardPage_description);\r
c3c5c786
FC
55 this.wizard = wizard;\r
56 setPageComplete(false);\r
57 }\r
58\r
d4011df2 59 @Override\r
25e48683 60 public void createControl(final Composite parent) {\r
c3c5c786
FC
61 container = new Composite(parent, SWT.NULL);\r
62 container.setLayout(new GridLayout());\r
63\r
64 sash = new SashForm(container, SWT.VERTICAL);\r
65 sash.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));\r
66 sash.setBackground(sash.getDisplay().getSystemColor(SWT.COLOR_GRAY));\r
25e48683 67\r
c3c5c786
FC
68 outputsScrolledComposite = new ScrolledComposite(sash, SWT.V_SCROLL);\r
69 outputsScrolledComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));\r
70 outputsContainer = new Composite(outputsScrolledComposite, SWT.NONE);\r
25e48683 71 final GridLayout outputsLayout = new GridLayout(4, false);\r
c3c5c786
FC
72 outputsLayout.marginHeight = 10;\r
73 outputsLayout.marginWidth = 0;\r
74 outputsContainer.setLayout(outputsLayout);\r
75 outputsScrolledComposite.setContent(outputsContainer);\r
76 outputsScrolledComposite.setExpandHorizontal(true);\r
77 outputsScrolledComposite.setExpandVertical(true);\r
78\r
79 outputsContainer.layout();\r
25e48683 80\r
c3c5c786
FC
81 outputsScrolledComposite.setMinSize(outputsContainer.computeSize(SWT.DEFAULT, SWT.DEFAULT).x, outputsContainer.computeSize(SWT.DEFAULT, SWT.DEFAULT).y-5);\r
82\r
83 tableContainer = new Composite(sash, SWT.NONE);\r
25e48683 84 final GridLayout tableLayout = new GridLayout();\r
c3c5c786
FC
85 tableLayout.marginHeight = 0;\r
86 tableLayout.marginWidth = 0;\r
87 tableContainer.setLayout(tableLayout);\r
88 previewTable = new CustomEventsTable(new CustomXmlTraceDefinition(), tableContainer, 0);\r
d7fcacc9 89 previewTable.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));\r
c3c5c786 90\r
25e48683 91 if (wizard.definition != null)\r
c3c5c786 92 loadDefinition(wizard.definition);\r
c3c5c786 93 setControl(container);\r
25e48683 94\r
c3c5c786
FC
95 }\r
96\r
97 @Override\r
98 public void dispose() {\r
99 previewTable.dispose();\r
100 super.dispose();\r
101 }\r
102\r
25e48683
FC
103 private void loadDefinition(final CustomTraceDefinition definition) {\r
104 for (final OutputColumn outputColumn : definition.outputs) {\r
105 final Output output = new Output(outputsContainer, outputColumn.name);\r
c3c5c786
FC
106 outputs.add(output);\r
107 }\r
108 }\r
109\r
110 /* (non-Javadoc)\r
111 * @see org.eclipse.jface.dialogs.DialogPage#setVisible(boolean)\r
112 */\r
113 @Override\r
25e48683 114 public void setVisible(final boolean visible) {\r
c3c5c786
FC
115 if (visible) {\r
116 this.definition = wizard.inputPage.getDefinition();\r
25e48683
FC
117 final List<String> outputNames = wizard.inputPage.getInputNames();\r
118\r
c3c5c786 119 // dispose outputs that have been removed in the input page\r
25e48683 120 final Iterator<Output> iter = outputs.iterator();\r
c3c5c786 121 while (iter.hasNext()) {\r
25e48683 122 final Output output = iter.next();\r
c3c5c786 123 boolean found = false;\r
25e48683 124 for (final String name : outputNames)\r
c3c5c786
FC
125 if (output.name.equals(name)) {\r
126 found = true;\r
127 break;\r
128 }\r
c3c5c786
FC
129 if (!found) {\r
130 output.dispose();\r
131 iter.remove();\r
132 }\r
133 }\r
25e48683 134\r
c3c5c786 135 // create outputs that have been added in the input page\r
25e48683 136 for (final String name : outputNames) {\r
c3c5c786 137 boolean found = false;\r
25e48683 138 for (final Output output : outputs)\r
c3c5c786
FC
139 if (output.name.equals(name)) {\r
140 found = true;\r
141 break;\r
142 }\r
25e48683 143 if (!found)\r
c3c5c786 144 outputs.add(new Output(outputsContainer, name));\r
c3c5c786 145 }\r
25e48683 146\r
c3c5c786
FC
147 outputsContainer.layout();\r
148 outputsScrolledComposite.setMinSize(outputsContainer.computeSize(SWT.DEFAULT, SWT.DEFAULT).x, outputsContainer.computeSize(SWT.DEFAULT, SWT.DEFAULT).y-5);\r
149 updatePreviewTable();\r
25e48683 150 if (sash.getSize().y > outputsContainer.computeSize(SWT.DEFAULT, SWT.DEFAULT).y + previewTable.getTable().getItemHeight())\r
c3c5c786 151 sash.setWeights(new int[] {outputsContainer.computeSize(SWT.DEFAULT, SWT.DEFAULT).y, sash.getSize().y - outputsContainer.computeSize(SWT.DEFAULT, SWT.DEFAULT).y});\r
25e48683 152 else\r
c3c5c786 153 sash.setWeights(new int[] {outputsContainer.computeSize(SWT.DEFAULT, SWT.DEFAULT).y, previewTable.getTable().getItemHeight()});\r
c3c5c786 154 setPageComplete(true);\r
25e48683 155 } else\r
c3c5c786 156 setPageComplete(false);\r
c3c5c786
FC
157 super.setVisible(visible);\r
158 }\r
159\r
25e48683
FC
160 private void moveBefore(final Output moved) {\r
161 final int i = outputs.indexOf(moved);\r
c3c5c786 162 if (i > 0) {\r
25e48683 163 final Output previous = outputs.get(i-1);\r
c3c5c786
FC
164 moved.enabledButton.moveAbove(previous.enabledButton);\r
165 moved.nameLabel.moveBelow(moved.enabledButton);\r
166 moved.upButton.moveBelow(moved.nameLabel);\r
167 moved.downButton.moveBelow(moved.upButton);\r
168 outputs.add(i-1, outputs.remove(i));\r
169 outputsContainer.layout();\r
170 outputsScrolledComposite.setMinSize(outputsContainer.computeSize(SWT.DEFAULT, SWT.DEFAULT).x, outputsContainer.computeSize(SWT.DEFAULT, SWT.DEFAULT).y-5);\r
171 container.layout();\r
172 updatePreviewTable();\r
173 }\r
174 }\r
25e48683
FC
175\r
176 private void moveAfter(final Output moved) {\r
177 final int i = outputs.indexOf(moved);\r
c3c5c786 178 if (i+1 < outputs.size()) {\r
25e48683 179 final Output next = outputs.get(i+1);\r
c3c5c786
FC
180 moved.enabledButton.moveBelow(next.downButton);\r
181 moved.nameLabel.moveBelow(moved.enabledButton);\r
182 moved.upButton.moveBelow(moved.nameLabel);\r
183 moved.downButton.moveBelow(moved.upButton);\r
184 outputs.add(i+1, outputs.remove(i));\r
185 outputsContainer.layout();\r
186 outputsScrolledComposite.setMinSize(outputsContainer.computeSize(SWT.DEFAULT, SWT.DEFAULT).x, outputsContainer.computeSize(SWT.DEFAULT, SWT.DEFAULT).y-5);\r
187 container.layout();\r
188 updatePreviewTable();\r
189 }\r
190 }\r
25e48683 191\r
c3c5c786 192 private void updatePreviewTable() {\r
4bf17f4a 193 final int CACHE_SIZE = 50;\r
c3c5c786
FC
194 definition.outputs = extractOutputs();\r
195\r
196 try {\r
3b38ea61 197 tmpFile = TmfUiPlugin.getDefault().getStateLocation().addTrailingSeparator().append("customwizard.tmp").toFile(); //$NON-NLS-1$\r
25e48683 198 final FileWriter writer = new FileWriter(tmpFile);\r
c3c5c786
FC
199 writer.write(wizard.inputPage.getInputText());\r
200 writer.close();\r
25e48683
FC
201\r
202 final ITmfTrace<?> trace = new CustomXmlTrace(null, definition, tmpFile.getAbsolutePath(), CACHE_SIZE);\r
c3c5c786 203 previewTable.dispose();\r
4bf17f4a 204 previewTable = new CustomEventsTable(definition, tableContainer, CACHE_SIZE);\r
d7fcacc9 205 previewTable.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));\r
529ee6a9 206 previewTable.setTrace(trace, true);\r
b4f71e4a 207 } catch (final TmfTraceException e) {\r
c3c5c786 208 e.printStackTrace();\r
25e48683 209 } catch (final IOException e) {\r
c3c5c786
FC
210 e.printStackTrace();\r
211 }\r
25e48683 212\r
c3c5c786
FC
213 tableContainer.layout();\r
214 container.layout();\r
215 }\r
216\r
217 public List<OutputColumn> extractOutputs() {\r
218 int numColumns = 0;\r
25e48683
FC
219 for (int i = 0; i < outputs.size(); i++)\r
220 if (outputs.get(i).enabledButton.getSelection())\r
c3c5c786 221 numColumns++;\r
25e48683 222 final List<OutputColumn> outputColumns = new ArrayList<OutputColumn>(numColumns);\r
c3c5c786
FC
223 numColumns = 0;\r
224 for (int i = 0; i < outputs.size(); i++) {\r
25e48683 225 final Output output = outputs.get(i);\r
c3c5c786 226 if (output.enabledButton.getSelection()) {\r
25e48683 227 final OutputColumn column = new OutputColumn();\r
c3c5c786 228 column.name = output.nameLabel.getText();\r
25e48683 229 outputColumns.add(column);\r
c3c5c786
FC
230 }\r
231 }\r
232 return outputColumns;\r
233 }\r
234\r
235 private class Output {\r
236 String name;\r
237 Button enabledButton;\r
238 Text nameLabel;\r
239 Button upButton;\r
240 Button downButton;\r
25e48683
FC
241\r
242 public Output(final Composite parent, final String name) {\r
c3c5c786 243 this.name = name;\r
25e48683 244\r
c3c5c786 245 enabledButton = new Button(parent, SWT.CHECK);\r
3b38ea61 246 enabledButton.setToolTipText(Messages.CustomXmlParserOutputWizardPage_visible);\r
c3c5c786
FC
247 enabledButton.setSelection(true);\r
248 enabledButton.addSelectionListener(new SelectionAdapter() {\r
25e48683
FC
249 @Override\r
250 public void widgetSelected(final SelectionEvent e) {\r
c3c5c786
FC
251 updatePreviewTable();\r
252 }\r
253 });\r
25e48683
FC
254 // if (messageOutput != null) {\r
255 // enabledButton.moveAbove(messageOutput.enabledButton);\r
256 // }\r
257\r
c3c5c786
FC
258 nameLabel = new Text(parent, SWT.BORDER | SWT.READ_ONLY | SWT.SINGLE);\r
259 nameLabel.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false));\r
260 nameLabel.setText(name);\r
261 nameLabel.moveBelow(enabledButton);\r
262\r
263 upButton = new Button(parent, SWT.PUSH);\r
264 upButton.setImage(upImage);\r
3b38ea61 265 upButton.setToolTipText(Messages.CustomXmlParserOutputWizardPage_moveBefore);\r
c3c5c786 266 upButton.addSelectionListener(new SelectionAdapter() {\r
25e48683
FC
267 @Override\r
268 public void widgetSelected(final SelectionEvent e) {\r
c3c5c786
FC
269 moveBefore(Output.this);\r
270 }\r
271 });\r
272 upButton.moveBelow(nameLabel);\r
25e48683 273\r
c3c5c786
FC
274 downButton = new Button(parent, SWT.PUSH);\r
275 downButton.setImage(downImage);\r
3b38ea61 276 downButton.setToolTipText(Messages.CustomXmlParserOutputWizardPage_moveAfter);\r
c3c5c786 277 downButton.addSelectionListener(new SelectionAdapter() {\r
25e48683
FC
278 @Override\r
279 public void widgetSelected(final SelectionEvent e) {\r
c3c5c786
FC
280 moveAfter(Output.this);\r
281 }\r
282 });\r
283 downButton.moveBelow(upButton);\r
284 }\r
285\r
286 private void dispose() {\r
287 enabledButton.dispose();\r
288 nameLabel.dispose();\r
289 upButton.dispose();\r
290 downButton.dispose();\r
291 }\r
292 }\r
25e48683 293\r
c3c5c786
FC
294 public CustomXmlTraceDefinition getDefinition() {\r
295 return definition;\r
296 }\r
25e48683 297\r
c3c5c786 298}\r
This page took 0.047848 seconds and 5 git commands to generate.