~ubuntu-branches/ubuntu/trusty/eclipse-linuxtools/trusty

« back to all changes in this revision

Viewing changes to lttng/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/internal/tmf/ui/parsers/wizards/CustomXmlParserOutputWizardPage.java

  • Committer: Package Import Robot
  • Author(s): tony mancill
  • Date: 2013-05-13 21:43:22 UTC
  • mfrom: (1.2.1) (2.1.2 experimental)
  • Revision ID: package-import@ubuntu.com-20130513214322-6frgd9du1n0w2uo7
Tags: 1.2.1-1
* Team upload.
* New upstream release.

Show diffs side-by-side

added added

removed removed

Lines of Context:
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
 
}
 
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
}