1 package org
.eclipse
.linuxtools
.tmf
.ui
.parsers
.wizards
;
4 import java
.io
.FileNotFoundException
;
5 import java
.io
.FileWriter
;
6 import java
.io
.IOException
;
7 import java
.util
.ArrayList
;
8 import java
.util
.Iterator
;
11 import org
.eclipse
.jface
.wizard
.WizardPage
;
12 import org
.eclipse
.linuxtools
.tmf
.trace
.ITmfTrace
;
13 import org
.eclipse
.linuxtools
.tmf
.ui
.TmfUiPlugin
;
14 import org
.eclipse
.linuxtools
.tmf
.ui
.internal
.Messages
;
15 import org
.eclipse
.linuxtools
.tmf
.ui
.parsers
.custom
.CustomEventsTable
;
16 import org
.eclipse
.linuxtools
.tmf
.ui
.parsers
.custom
.CustomTraceDefinition
;
17 import org
.eclipse
.linuxtools
.tmf
.ui
.parsers
.custom
.CustomTraceDefinition
.OutputColumn
;
18 import org
.eclipse
.linuxtools
.tmf
.ui
.parsers
.custom
.CustomXmlTrace
;
19 import org
.eclipse
.linuxtools
.tmf
.ui
.parsers
.custom
.CustomXmlTraceDefinition
;
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
;
32 public class CustomXmlParserOutputWizardPage
extends WizardPage
{
34 private static final Image upImage
= TmfUiPlugin
.getDefault().getImageFromPath("/icons/elcl16/up_button.gif"); //$NON-NLS-1$
35 private static final Image downImage
= TmfUiPlugin
.getDefault().getImageFromPath("/icons/elcl16/down_button.gif"); //$NON-NLS-1$
36 private CustomXmlParserWizard wizard
;
37 private CustomXmlTraceDefinition definition
;
38 ArrayList
<Output
> outputs
= new ArrayList
<Output
>();
42 Text timestampFormatText
;
43 Text timestampPreviewText
;
44 ScrolledComposite outputsScrolledComposite
;
45 Composite outputsContainer
;
46 ScrolledComposite inputScrolledComposite
;
47 Composite tableContainer
;
48 CustomEventsTable previewTable
;
51 protected CustomXmlParserOutputWizardPage(CustomXmlParserWizard wizard
) {
52 super("CustomParserOutputWizardPage"); //$NON-NLS-1$
53 setTitle(wizard
.inputPage
.getTitle());
54 setDescription(Messages
.CustomXmlParserOutputWizardPage_description
);
56 setPageComplete(false);
60 public void createControl(Composite parent
) {
61 container
= new Composite(parent
, SWT
.NULL
);
62 container
.setLayout(new GridLayout());
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
));
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 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);
79 outputsContainer
.layout();
81 outputsScrolledComposite
.setMinSize(outputsContainer
.computeSize(SWT
.DEFAULT
, SWT
.DEFAULT
).x
, outputsContainer
.computeSize(SWT
.DEFAULT
, SWT
.DEFAULT
).y
-5);
83 tableContainer
= new Composite(sash
, SWT
.NONE
);
84 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));
91 if (wizard
.definition
!= null) {
92 loadDefinition(wizard
.definition
);
94 setControl(container
);
99 public void dispose() {
100 previewTable
.dispose();
104 private void loadDefinition(CustomTraceDefinition definition
) {
105 for (OutputColumn outputColumn
: definition
.outputs
) {
106 Output output
= new Output(outputsContainer
, outputColumn
.name
);
112 * @see org.eclipse.jface.dialogs.DialogPage#setVisible(boolean)
115 public void setVisible(boolean visible
) {
117 this.definition
= wizard
.inputPage
.getDefinition();
118 List
<String
> outputNames
= wizard
.inputPage
.getInputNames();
120 // dispose outputs that have been removed in the input page
121 Iterator
<Output
> iter
= outputs
.iterator();
122 while (iter
.hasNext()) {
123 Output output
= iter
.next();
124 boolean found
= false;
125 for (String name
: outputNames
) {
126 if (output
.name
.equals(name
)) {
137 // create outputs that have been added in the input page
138 for (String name
: outputNames
) {
139 boolean found
= false;
140 for (Output output
: outputs
) {
141 if (output
.name
.equals(name
)) {
147 outputs
.add(new Output(outputsContainer
, name
));
151 outputsContainer
.layout();
152 outputsScrolledComposite
.setMinSize(outputsContainer
.computeSize(SWT
.DEFAULT
, SWT
.DEFAULT
).x
, outputsContainer
.computeSize(SWT
.DEFAULT
, SWT
.DEFAULT
).y
-5);
153 updatePreviewTable();
154 if (sash
.getSize().y
> outputsContainer
.computeSize(SWT
.DEFAULT
, SWT
.DEFAULT
).y
+ previewTable
.getTable().getItemHeight()) {
155 sash
.setWeights(new int[] {outputsContainer
.computeSize(SWT
.DEFAULT
, SWT
.DEFAULT
).y
, sash
.getSize().y
- outputsContainer
.computeSize(SWT
.DEFAULT
, SWT
.DEFAULT
).y
});
157 sash
.setWeights(new int[] {outputsContainer
.computeSize(SWT
.DEFAULT
, SWT
.DEFAULT
).y
, previewTable
.getTable().getItemHeight()});
159 setPageComplete(true);
161 setPageComplete(false);
163 super.setVisible(visible
);
166 private void moveBefore(Output moved
) {
167 int i
= outputs
.indexOf(moved
);
169 Output previous
= outputs
.get(i
-1);
170 moved
.enabledButton
.moveAbove(previous
.enabledButton
);
171 moved
.nameLabel
.moveBelow(moved
.enabledButton
);
172 moved
.upButton
.moveBelow(moved
.nameLabel
);
173 moved
.downButton
.moveBelow(moved
.upButton
);
174 outputs
.add(i
-1, outputs
.remove(i
));
175 outputsContainer
.layout();
176 outputsScrolledComposite
.setMinSize(outputsContainer
.computeSize(SWT
.DEFAULT
, SWT
.DEFAULT
).x
, outputsContainer
.computeSize(SWT
.DEFAULT
, SWT
.DEFAULT
).y
-5);
178 updatePreviewTable();
182 private void moveAfter(Output moved
) {
183 int i
= outputs
.indexOf(moved
);
184 if (i
+1 < outputs
.size()) {
185 Output next
= outputs
.get(i
+1);
186 moved
.enabledButton
.moveBelow(next
.downButton
);
187 moved
.nameLabel
.moveBelow(moved
.enabledButton
);
188 moved
.upButton
.moveBelow(moved
.nameLabel
);
189 moved
.downButton
.moveBelow(moved
.upButton
);
190 outputs
.add(i
+1, outputs
.remove(i
));
191 outputsContainer
.layout();
192 outputsScrolledComposite
.setMinSize(outputsContainer
.computeSize(SWT
.DEFAULT
, SWT
.DEFAULT
).x
, outputsContainer
.computeSize(SWT
.DEFAULT
, SWT
.DEFAULT
).y
-5);
194 updatePreviewTable();
198 private void updatePreviewTable() {
199 final int CACHE_SIZE
= 50;
200 definition
.outputs
= extractOutputs();
203 tmpFile
= TmfUiPlugin
.getDefault().getStateLocation().addTrailingSeparator().append("customwizard.tmp").toFile(); //$NON-NLS-1$
204 FileWriter writer
= new FileWriter(tmpFile
);
205 writer
.write(wizard
.inputPage
.getInputText());
208 ITmfTrace
<?
> trace
= new CustomXmlTrace(tmpFile
.getName(), definition
, tmpFile
.getAbsolutePath(), CACHE_SIZE
);
209 previewTable
.dispose();
210 previewTable
= new CustomEventsTable(definition
, tableContainer
, CACHE_SIZE
);
211 previewTable
.setLayoutData(new GridData(SWT
.FILL
, SWT
.FILL
, true, true));
212 previewTable
.setTrace(trace
, true);
213 } catch (FileNotFoundException e
) {
215 } catch (IOException e
) {
219 tableContainer
.layout();
223 public List
<OutputColumn
> extractOutputs() {
225 for (int i
= 0; i
< outputs
.size(); i
++) {
226 if (outputs
.get(i
).enabledButton
.getSelection()) {
230 List
<OutputColumn
> outputColumns
= new ArrayList
<OutputColumn
>(numColumns
);
232 for (int i
= 0; i
< outputs
.size(); i
++) {
233 Output output
= outputs
.get(i
);
234 if (output
.enabledButton
.getSelection()) {
235 OutputColumn column
= new OutputColumn();
236 column
.name
= output
.nameLabel
.getText();
237 outputColumns
.add(column
);
240 return outputColumns
;
243 private class Output
{
245 Button enabledButton
;
250 public Output(Composite parent
, String name
) {
253 enabledButton
= new Button(parent
, SWT
.CHECK
);
254 enabledButton
.setToolTipText(Messages
.CustomXmlParserOutputWizardPage_visible
);
255 enabledButton
.setSelection(true);
256 enabledButton
.addSelectionListener(new SelectionAdapter() {
258 public void widgetSelected(SelectionEvent e
) {
259 updatePreviewTable();
262 if (messageOutput
!= null) {
263 enabledButton
.moveAbove(messageOutput
.enabledButton
);
266 nameLabel
= new Text(parent
, SWT
.BORDER
| SWT
.READ_ONLY
| SWT
.SINGLE
);
267 nameLabel
.setLayoutData(new GridData(SWT
.FILL
, SWT
.CENTER
, false, false));
268 nameLabel
.setText(name
);
269 nameLabel
.moveBelow(enabledButton
);
271 upButton
= new Button(parent
, SWT
.PUSH
);
272 upButton
.setImage(upImage
);
273 upButton
.setToolTipText(Messages
.CustomXmlParserOutputWizardPage_moveBefore
);
274 upButton
.addSelectionListener(new SelectionAdapter() {
276 public void widgetSelected(SelectionEvent e
) {
277 moveBefore(Output
.this);
280 upButton
.moveBelow(nameLabel
);
282 downButton
= new Button(parent
, SWT
.PUSH
);
283 downButton
.setImage(downImage
);
284 downButton
.setToolTipText(Messages
.CustomXmlParserOutputWizardPage_moveAfter
);
285 downButton
.addSelectionListener(new SelectionAdapter() {
287 public void widgetSelected(SelectionEvent e
) {
288 moveAfter(Output
.this);
291 downButton
.moveBelow(upButton
);
294 private void dispose() {
295 enabledButton
.dispose();
298 downButton
.dispose();
302 public CustomXmlTraceDefinition
getDefinition() {