1 /*******************************************************************************
2 * Copyright (c) 2010, 2015 Ericsson
4 * All rights reserved. This program and the accompanying materials are
5 * made available under the terms of the Eclipse Public License v1.0 which
6 * accompanies this distribution, and is available at
7 * http://www.eclipse.org/legal/epl-v10.html
10 * Yuriy Vashchuk (yvashchuk@gmail.com) - Initial API and implementation
11 * Patrick Tasse - Update filter nodes
12 *******************************************************************************/
14 package org
.eclipse
.tracecompass
.tmf
.core
.filter
.xml
;
18 import javax
.xml
.parsers
.DocumentBuilder
;
19 import javax
.xml
.parsers
.DocumentBuilderFactory
;
20 import javax
.xml
.parsers
.ParserConfigurationException
;
21 import javax
.xml
.transform
.Transformer
;
22 import javax
.xml
.transform
.TransformerConfigurationException
;
23 import javax
.xml
.transform
.TransformerException
;
24 import javax
.xml
.transform
.TransformerFactory
;
25 import javax
.xml
.transform
.dom
.DOMSource
;
26 import javax
.xml
.transform
.stream
.StreamResult
;
28 import org
.eclipse
.tracecompass
.tmf
.core
.filter
.model
.ITmfFilterTreeNode
;
29 import org
.eclipse
.tracecompass
.tmf
.core
.filter
.model
.TmfFilterAndNode
;
30 import org
.eclipse
.tracecompass
.tmf
.core
.filter
.model
.TmfFilterCompareNode
;
31 import org
.eclipse
.tracecompass
.tmf
.core
.filter
.model
.TmfFilterContainsNode
;
32 import org
.eclipse
.tracecompass
.tmf
.core
.filter
.model
.TmfFilterEqualsNode
;
33 import org
.eclipse
.tracecompass
.tmf
.core
.filter
.model
.TmfFilterMatchesFieldNode
;
34 import org
.eclipse
.tracecompass
.tmf
.core
.filter
.model
.TmfFilterMatchesNode
;
35 import org
.eclipse
.tracecompass
.tmf
.core
.filter
.model
.TmfFilterNode
;
36 import org
.eclipse
.tracecompass
.tmf
.core
.filter
.model
.TmfFilterOrNode
;
37 import org
.eclipse
.tracecompass
.tmf
.core
.filter
.model
.TmfFilterTraceTypeNode
;
38 import org
.w3c
.dom
.Document
;
39 import org
.w3c
.dom
.Element
;
42 * The SAX based XML writer
45 * @author Yuriy Vashchuk
46 * @author Patrick Tasse
48 public class TmfFilterXMLWriter
{
50 private Document document
= null;
53 * The XMLParser constructor
55 * @param root The tree root
56 * @throws ParserConfigurationException if a DocumentBuilder
57 * cannot be created which satisfies the configuration requested.
59 public TmfFilterXMLWriter(final ITmfFilterTreeNode root
) throws ParserConfigurationException
{
60 DocumentBuilderFactory documentBuilderFactory
= DocumentBuilderFactory
.newInstance();
61 DocumentBuilder documentBuilder
= documentBuilderFactory
.newDocumentBuilder();
62 document
= documentBuilder
.newDocument();
64 Element rootElement
= document
.createElement(root
.getNodeName());
65 document
.appendChild(rootElement
);
67 for (ITmfFilterTreeNode node
: root
.getChildren()) {
68 buildXMLTree(document
, node
, rootElement
);
73 * The Tree to XML parser
75 * @param document The XML document
76 * @param treenode The node to write
77 * @param parentElement The XML element of the parent
79 public static void buildXMLTree(final Document document
, final ITmfFilterTreeNode treenode
, Element parentElement
) {
80 Element element
= document
.createElement(treenode
.getNodeName());
82 if (treenode
instanceof TmfFilterNode
) {
84 TmfFilterNode node
= (TmfFilterNode
) treenode
;
85 element
.setAttribute(TmfFilterNode
.NAME_ATTR
, node
.getFilterName());
87 } else if (treenode
instanceof TmfFilterTraceTypeNode
) {
89 TmfFilterTraceTypeNode node
= (TmfFilterTraceTypeNode
) treenode
;
90 element
.setAttribute(TmfFilterTraceTypeNode
.TYPE_ATTR
, node
.getTraceTypeId());
91 element
.setAttribute(TmfFilterTraceTypeNode
.NAME_ATTR
, node
.getName());
93 } else if (treenode
instanceof TmfFilterAndNode
) {
95 TmfFilterAndNode node
= (TmfFilterAndNode
) treenode
;
96 element
.setAttribute(TmfFilterAndNode
.NOT_ATTR
, Boolean
.toString(node
.isNot()));
98 } else if (treenode
instanceof TmfFilterOrNode
) {
100 TmfFilterOrNode node
= (TmfFilterOrNode
) treenode
;
101 element
.setAttribute(TmfFilterOrNode
.NOT_ATTR
, Boolean
.toString(node
.isNot()));
103 } else if (treenode
instanceof TmfFilterContainsNode
) {
105 TmfFilterContainsNode node
= (TmfFilterContainsNode
) treenode
;
106 element
.setAttribute(TmfFilterContainsNode
.NOT_ATTR
, Boolean
.toString(node
.isNot()));
107 element
.setAttribute(TmfFilterContainsNode
.FIELD_ATTR
, node
.getField());
108 element
.setAttribute(TmfFilterContainsNode
.VALUE_ATTR
, node
.getValue());
109 element
.setAttribute(TmfFilterContainsNode
.IGNORECASE_ATTR
, Boolean
.toString(node
.isIgnoreCase()));
111 } else if (treenode
instanceof TmfFilterEqualsNode
) {
113 TmfFilterEqualsNode node
= (TmfFilterEqualsNode
) treenode
;
114 element
.setAttribute(TmfFilterEqualsNode
.NOT_ATTR
, Boolean
.toString(node
.isNot()));
115 element
.setAttribute(TmfFilterEqualsNode
.FIELD_ATTR
, node
.getField());
116 element
.setAttribute(TmfFilterEqualsNode
.VALUE_ATTR
, node
.getValue());
117 element
.setAttribute(TmfFilterEqualsNode
.IGNORECASE_ATTR
, Boolean
.toString(node
.isIgnoreCase()));
119 } else if (treenode
instanceof TmfFilterMatchesFieldNode
) {
121 TmfFilterMatchesFieldNode node
= (TmfFilterMatchesFieldNode
) treenode
;
122 element
.setAttribute(TmfFilterMatchesNode
.NOT_ATTR
, Boolean
.toString(node
.isNot()));
123 element
.setAttribute(TmfFilterMatchesFieldNode
.FIELD_ATTR
, node
.getField());
124 element
.setAttribute(TmfFilterMatchesNode
.REGEX_ATTR
, node
.getRegex());
126 } else if (treenode
instanceof TmfFilterCompareNode
) {
128 TmfFilterCompareNode node
= (TmfFilterCompareNode
) treenode
;
129 element
.setAttribute(TmfFilterCompareNode
.NOT_ATTR
, Boolean
.toString(node
.isNot()));
130 element
.setAttribute(TmfFilterCompareNode
.FIELD_ATTR
, node
.getField());
131 element
.setAttribute(TmfFilterCompareNode
.RESULT_ATTR
, Integer
.toString(node
.getResult()));
132 element
.setAttribute(TmfFilterCompareNode
.TYPE_ATTR
, node
.getType().toString());
133 element
.setAttribute(TmfFilterCompareNode
.VALUE_ATTR
, node
.getValue());
137 parentElement
.appendChild(element
);
139 for (int i
= 0; i
< treenode
.getChildrenCount(); i
++) {
140 buildXMLTree(document
, treenode
.getChild(i
), element
);
147 * @param uri The new Filter XML path
149 public void saveTree(final String uri
) {
150 TransformerFactory transformerFactory
= TransformerFactory
.newInstance();
153 Transformer transformer
= transformerFactory
.newTransformer();
154 DOMSource source
= new DOMSource(document
);
155 StreamResult result
= new StreamResult(new File(uri
));
156 transformer
.transform(source
, result
);
157 } catch (TransformerConfigurationException e
) {
159 } catch (TransformerException e
) {