Commit | Line | Data |
---|---|---|
d34665f9 | 1 | package org.eclipse.linuxtools.internal.tmf.ui.parsers.wizards;\r |
c3c5c786 FC |
2 | \r |
3 | import java.io.File;\r | |
c3c5c786 FC |
4 | import java.io.FileWriter;\r |
5 | import java.io.IOException;\r | |
6 | import java.util.ArrayList;\r | |
7 | import java.util.Iterator;\r | |
8 | import java.util.List;\r | |
9 | \r | |
10 | import org.eclipse.jface.wizard.WizardPage;\r | |
8fd82db5 | 11 | import org.eclipse.linuxtools.internal.tmf.ui.Activator;\r |
6256d8ad | 12 | import org.eclipse.linuxtools.internal.tmf.ui.Messages;\r |
d34665f9 FC |
13 | import org.eclipse.linuxtools.internal.tmf.ui.parsers.custom.CustomEventsTable;\r |
14 | import org.eclipse.linuxtools.internal.tmf.ui.parsers.custom.CustomTraceDefinition;\r | |
25e48683 | 15 | import org.eclipse.linuxtools.internal.tmf.ui.parsers.custom.CustomTraceDefinition.OutputColumn;\r |
d34665f9 FC |
16 | import org.eclipse.linuxtools.internal.tmf.ui.parsers.custom.CustomXmlTrace;\r |
17 | import org.eclipse.linuxtools.internal.tmf.ui.parsers.custom.CustomXmlTraceDefinition;\r | |
b4f71e4a | 18 | import org.eclipse.linuxtools.tmf.core.exceptions.TmfTraceException;\r |
6c13869b | 19 | import org.eclipse.linuxtools.tmf.core.trace.ITmfTrace;\r |
c3c5c786 FC |
20 | import org.eclipse.swt.SWT;\r |
21 | import org.eclipse.swt.custom.SashForm;\r | |
22 | import org.eclipse.swt.custom.ScrolledComposite;\r | |
23 | import org.eclipse.swt.events.SelectionAdapter;\r | |
24 | import org.eclipse.swt.events.SelectionEvent;\r | |
25 | import org.eclipse.swt.graphics.Image;\r | |
26 | import org.eclipse.swt.layout.GridData;\r | |
27 | import org.eclipse.swt.layout.GridLayout;\r | |
28 | import org.eclipse.swt.widgets.Button;\r | |
29 | import org.eclipse.swt.widgets.Composite;\r | |
30 | import org.eclipse.swt.widgets.Text;\r | |
31 | \r | |
32 | public class CustomXmlParserOutputWizardPage extends WizardPage {\r | |
33 | \r | |
8fd82db5 FC |
34 | private static final Image upImage = Activator.getDefault().getImageFromPath("/icons/elcl16/up_button.gif"); //$NON-NLS-1$\r |
35 | private static final Image downImage = Activator.getDefault().getImageFromPath("/icons/elcl16/down_button.gif"); //$NON-NLS-1$\r | |
25e48683 | 36 | private final CustomXmlParserWizard wizard;\r |
c3c5c786 | 37 | private CustomXmlTraceDefinition definition;\r |
9fa32496 | 38 | List<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 |
6256d8ad | 91 | if (wizard.definition != null) {\r |
c3c5c786 | 92 | loadDefinition(wizard.definition);\r |
6256d8ad | 93 | }\r |
c3c5c786 | 94 | setControl(container);\r |
25e48683 | 95 | \r |
c3c5c786 FC |
96 | }\r |
97 | \r | |
98 | @Override\r | |
99 | public void dispose() {\r | |
100 | previewTable.dispose();\r | |
101 | super.dispose();\r | |
102 | }\r | |
103 | \r | |
25e48683 FC |
104 | private void loadDefinition(final CustomTraceDefinition definition) {\r |
105 | for (final OutputColumn outputColumn : definition.outputs) {\r | |
106 | final Output output = new Output(outputsContainer, outputColumn.name);\r | |
c3c5c786 FC |
107 | outputs.add(output);\r |
108 | }\r | |
109 | }\r | |
110 | \r | |
111 | /* (non-Javadoc)\r | |
112 | * @see org.eclipse.jface.dialogs.DialogPage#setVisible(boolean)\r | |
113 | */\r | |
114 | @Override\r | |
25e48683 | 115 | public void setVisible(final boolean visible) {\r |
c3c5c786 FC |
116 | if (visible) {\r |
117 | this.definition = wizard.inputPage.getDefinition();\r | |
25e48683 FC |
118 | final List<String> outputNames = wizard.inputPage.getInputNames();\r |
119 | \r | |
c3c5c786 | 120 | // dispose outputs that have been removed in the input page\r |
25e48683 | 121 | final Iterator<Output> iter = outputs.iterator();\r |
c3c5c786 | 122 | while (iter.hasNext()) {\r |
25e48683 | 123 | final Output output = iter.next();\r |
c3c5c786 | 124 | boolean found = false;\r |
6256d8ad | 125 | for (final String name : outputNames) {\r |
c3c5c786 FC |
126 | if (output.name.equals(name)) {\r |
127 | found = true;\r | |
128 | break;\r | |
129 | }\r | |
6256d8ad | 130 | }\r |
c3c5c786 FC |
131 | if (!found) {\r |
132 | output.dispose();\r | |
133 | iter.remove();\r | |
134 | }\r | |
135 | }\r | |
25e48683 | 136 | \r |
c3c5c786 | 137 | // create outputs that have been added in the input page\r |
25e48683 | 138 | for (final String name : outputNames) {\r |
c3c5c786 | 139 | boolean found = false;\r |
6256d8ad | 140 | for (final Output output : outputs) {\r |
c3c5c786 FC |
141 | if (output.name.equals(name)) {\r |
142 | found = true;\r | |
143 | break;\r | |
144 | }\r | |
6256d8ad AM |
145 | }\r |
146 | if (!found) {\r | |
c3c5c786 | 147 | outputs.add(new Output(outputsContainer, name));\r |
6256d8ad | 148 | }\r |
c3c5c786 | 149 | }\r |
25e48683 | 150 | \r |
c3c5c786 FC |
151 | outputsContainer.layout();\r |
152 | outputsScrolledComposite.setMinSize(outputsContainer.computeSize(SWT.DEFAULT, SWT.DEFAULT).x, outputsContainer.computeSize(SWT.DEFAULT, SWT.DEFAULT).y-5);\r | |
153 | updatePreviewTable();\r | |
6256d8ad | 154 | if (sash.getSize().y > outputsContainer.computeSize(SWT.DEFAULT, SWT.DEFAULT).y + previewTable.getTable().getItemHeight()) {\r |
c3c5c786 | 155 | sash.setWeights(new int[] {outputsContainer.computeSize(SWT.DEFAULT, SWT.DEFAULT).y, sash.getSize().y - outputsContainer.computeSize(SWT.DEFAULT, SWT.DEFAULT).y});\r |
6256d8ad | 156 | } else {\r |
c3c5c786 | 157 | sash.setWeights(new int[] {outputsContainer.computeSize(SWT.DEFAULT, SWT.DEFAULT).y, previewTable.getTable().getItemHeight()});\r |
6256d8ad | 158 | }\r |
c3c5c786 | 159 | setPageComplete(true);\r |
6256d8ad | 160 | } else {\r |
c3c5c786 | 161 | setPageComplete(false);\r |
6256d8ad | 162 | }\r |
c3c5c786 FC |
163 | super.setVisible(visible);\r |
164 | }\r | |
165 | \r | |
25e48683 FC |
166 | private void moveBefore(final Output moved) {\r |
167 | final int i = outputs.indexOf(moved);\r | |
c3c5c786 | 168 | if (i > 0) {\r |
25e48683 | 169 | final Output previous = outputs.get(i-1);\r |
c3c5c786 FC |
170 | moved.enabledButton.moveAbove(previous.enabledButton);\r |
171 | moved.nameLabel.moveBelow(moved.enabledButton);\r | |
172 | moved.upButton.moveBelow(moved.nameLabel);\r | |
173 | moved.downButton.moveBelow(moved.upButton);\r | |
174 | outputs.add(i-1, outputs.remove(i));\r | |
175 | outputsContainer.layout();\r | |
176 | outputsScrolledComposite.setMinSize(outputsContainer.computeSize(SWT.DEFAULT, SWT.DEFAULT).x, outputsContainer.computeSize(SWT.DEFAULT, SWT.DEFAULT).y-5);\r | |
177 | container.layout();\r | |
178 | updatePreviewTable();\r | |
179 | }\r | |
180 | }\r | |
25e48683 FC |
181 | \r |
182 | private void moveAfter(final Output moved) {\r | |
183 | final int i = outputs.indexOf(moved);\r | |
c3c5c786 | 184 | if (i+1 < outputs.size()) {\r |
25e48683 | 185 | final Output next = outputs.get(i+1);\r |
c3c5c786 FC |
186 | moved.enabledButton.moveBelow(next.downButton);\r |
187 | moved.nameLabel.moveBelow(moved.enabledButton);\r | |
188 | moved.upButton.moveBelow(moved.nameLabel);\r | |
189 | moved.downButton.moveBelow(moved.upButton);\r | |
190 | outputs.add(i+1, outputs.remove(i));\r | |
191 | outputsContainer.layout();\r | |
192 | outputsScrolledComposite.setMinSize(outputsContainer.computeSize(SWT.DEFAULT, SWT.DEFAULT).x, outputsContainer.computeSize(SWT.DEFAULT, SWT.DEFAULT).y-5);\r | |
193 | container.layout();\r | |
194 | updatePreviewTable();\r | |
195 | }\r | |
196 | }\r | |
25e48683 | 197 | \r |
c3c5c786 | 198 | private void updatePreviewTable() {\r |
4bf17f4a | 199 | final int CACHE_SIZE = 50;\r |
c3c5c786 FC |
200 | definition.outputs = extractOutputs();\r |
201 | \r | |
202 | try {\r | |
8fd82db5 | 203 | tmpFile = Activator.getDefault().getStateLocation().addTrailingSeparator().append("customwizard.tmp").toFile(); //$NON-NLS-1$\r |
25e48683 | 204 | final FileWriter writer = new FileWriter(tmpFile);\r |
c3c5c786 FC |
205 | writer.write(wizard.inputPage.getInputText());\r |
206 | writer.close();\r | |
25e48683 | 207 | \r |
6256d8ad | 208 | final ITmfTrace trace = new CustomXmlTrace(null, definition, tmpFile.getAbsolutePath(), CACHE_SIZE);\r |
c3c5c786 | 209 | previewTable.dispose();\r |
4bf17f4a | 210 | previewTable = new CustomEventsTable(definition, tableContainer, CACHE_SIZE);\r |
d7fcacc9 | 211 | previewTable.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));\r |
529ee6a9 | 212 | previewTable.setTrace(trace, true);\r |
b4f71e4a | 213 | } catch (final TmfTraceException e) {\r |
8fd82db5 | 214 | Activator.getDefault().logError("Error creating CustomXmlTrace. File:" + tmpFile.getAbsolutePath(), e); //$NON-NLS-1$\r |
25e48683 | 215 | } catch (final IOException e) {\r |
8fd82db5 | 216 | Activator.getDefault().logError("Error creating CustomXmlTrace. File:" + tmpFile.getAbsolutePath(), e); //$NON-NLS-1$\r |
c3c5c786 | 217 | }\r |
25e48683 | 218 | \r |
c3c5c786 FC |
219 | tableContainer.layout();\r |
220 | container.layout();\r | |
221 | }\r | |
222 | \r | |
223 | public List<OutputColumn> extractOutputs() {\r | |
224 | int numColumns = 0;\r | |
6256d8ad AM |
225 | for (int i = 0; i < outputs.size(); i++) {\r |
226 | if (outputs.get(i).enabledButton.getSelection()) {\r | |
c3c5c786 | 227 | numColumns++;\r |
6256d8ad AM |
228 | }\r |
229 | }\r | |
25e48683 | 230 | final List<OutputColumn> outputColumns = new ArrayList<OutputColumn>(numColumns);\r |
c3c5c786 FC |
231 | numColumns = 0;\r |
232 | for (int i = 0; i < outputs.size(); i++) {\r | |
25e48683 | 233 | final Output output = outputs.get(i);\r |
c3c5c786 | 234 | if (output.enabledButton.getSelection()) {\r |
25e48683 | 235 | final OutputColumn column = new OutputColumn();\r |
c3c5c786 | 236 | column.name = output.nameLabel.getText();\r |
25e48683 | 237 | outputColumns.add(column);\r |
c3c5c786 FC |
238 | }\r |
239 | }\r | |
240 | return outputColumns;\r | |
241 | }\r | |
242 | \r | |
243 | private class Output {\r | |
244 | String name;\r | |
245 | Button enabledButton;\r | |
246 | Text nameLabel;\r | |
247 | Button upButton;\r | |
248 | Button downButton;\r | |
25e48683 FC |
249 | \r |
250 | public Output(final Composite parent, final String name) {\r | |
c3c5c786 | 251 | this.name = name;\r |
25e48683 | 252 | \r |
c3c5c786 | 253 | enabledButton = new Button(parent, SWT.CHECK);\r |
3b38ea61 | 254 | enabledButton.setToolTipText(Messages.CustomXmlParserOutputWizardPage_visible);\r |
c3c5c786 FC |
255 | enabledButton.setSelection(true);\r |
256 | enabledButton.addSelectionListener(new SelectionAdapter() {\r | |
25e48683 FC |
257 | @Override\r |
258 | public void widgetSelected(final SelectionEvent e) {\r | |
c3c5c786 FC |
259 | updatePreviewTable();\r |
260 | }\r | |
261 | });\r | |
25e48683 FC |
262 | // if (messageOutput != null) {\r |
263 | // enabledButton.moveAbove(messageOutput.enabledButton);\r | |
264 | // }\r | |
265 | \r | |
c3c5c786 FC |
266 | nameLabel = new Text(parent, SWT.BORDER | SWT.READ_ONLY | SWT.SINGLE);\r |
267 | nameLabel.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false));\r | |
268 | nameLabel.setText(name);\r | |
269 | nameLabel.moveBelow(enabledButton);\r | |
270 | \r | |
271 | upButton = new Button(parent, SWT.PUSH);\r | |
272 | upButton.setImage(upImage);\r | |
3b38ea61 | 273 | upButton.setToolTipText(Messages.CustomXmlParserOutputWizardPage_moveBefore);\r |
c3c5c786 | 274 | upButton.addSelectionListener(new SelectionAdapter() {\r |
25e48683 FC |
275 | @Override\r |
276 | public void widgetSelected(final SelectionEvent e) {\r | |
c3c5c786 FC |
277 | moveBefore(Output.this);\r |
278 | }\r | |
279 | });\r | |
280 | upButton.moveBelow(nameLabel);\r | |
25e48683 | 281 | \r |
c3c5c786 FC |
282 | downButton = new Button(parent, SWT.PUSH);\r |
283 | downButton.setImage(downImage);\r | |
3b38ea61 | 284 | downButton.setToolTipText(Messages.CustomXmlParserOutputWizardPage_moveAfter);\r |
c3c5c786 | 285 | downButton.addSelectionListener(new SelectionAdapter() {\r |
25e48683 FC |
286 | @Override\r |
287 | public void widgetSelected(final SelectionEvent e) {\r | |
c3c5c786 FC |
288 | moveAfter(Output.this);\r |
289 | }\r | |
290 | });\r | |
291 | downButton.moveBelow(upButton);\r | |
292 | }\r | |
293 | \r | |
294 | private void dispose() {\r | |
295 | enabledButton.dispose();\r | |
296 | nameLabel.dispose();\r | |
297 | upButton.dispose();\r | |
298 | downButton.dispose();\r | |
299 | }\r | |
300 | }\r | |
25e48683 | 301 | \r |
c3c5c786 FC |
302 | public CustomXmlTraceDefinition getDefinition() {\r |
303 | return definition;\r | |
304 | }\r | |
25e48683 | 305 | \r |
c3c5c786 | 306 | }\r |