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