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