Copyright header update, 2015 edition
[deliverable/tracecompass.git] / org.eclipse.tracecompass.tmf.core / src / org / eclipse / tracecompass / tmf / core / filter / xml / TmfFilterXMLWriter.java
CommitLineData
be222f56 1/*******************************************************************************
ed902a2b 2 * Copyright (c) 2010, 2014 Ericsson
be222f56
PT
3 *
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
8 *
9 * Contributors:
10 * Yuriy Vashchuk (yvashchuk@gmail.com) - Initial API and implementation
11 *******************************************************************************/
12
2bdf0193 13package org.eclipse.tracecompass.tmf.core.filter.xml;
be222f56
PT
14
15import java.io.File;
16
17import javax.xml.parsers.DocumentBuilder;
18import javax.xml.parsers.DocumentBuilderFactory;
19import javax.xml.parsers.ParserConfigurationException;
20import javax.xml.transform.Transformer;
21import javax.xml.transform.TransformerConfigurationException;
22import javax.xml.transform.TransformerException;
23import javax.xml.transform.TransformerFactory;
24import javax.xml.transform.dom.DOMSource;
25import javax.xml.transform.stream.StreamResult;
26
2bdf0193
AM
27import org.eclipse.tracecompass.tmf.core.filter.model.ITmfFilterTreeNode;
28import org.eclipse.tracecompass.tmf.core.filter.model.TmfFilterAndNode;
29import org.eclipse.tracecompass.tmf.core.filter.model.TmfFilterCompareNode;
30import org.eclipse.tracecompass.tmf.core.filter.model.TmfFilterContainsNode;
31import org.eclipse.tracecompass.tmf.core.filter.model.TmfFilterEqualsNode;
32import org.eclipse.tracecompass.tmf.core.filter.model.TmfFilterEventTypeNode;
d9b1b4ed 33import org.eclipse.tracecompass.tmf.core.filter.model.TmfFilterMatchesFieldNode;
2bdf0193
AM
34import org.eclipse.tracecompass.tmf.core.filter.model.TmfFilterMatchesNode;
35import org.eclipse.tracecompass.tmf.core.filter.model.TmfFilterNode;
36import org.eclipse.tracecompass.tmf.core.filter.model.TmfFilterOrNode;
be222f56
PT
37import org.w3c.dom.Document;
38import org.w3c.dom.Element;
39
40/**
41 * The SAX based XML writer
42 *
43 * @version 1.0
44 * @author Yuriy Vashchuk
45 * @author Patrick Tasse
46 */
47public class TmfFilterXMLWriter {
48
d5efe032 49 private Document document = null;
be222f56 50
d5efe032
AF
51 /**
52 * The XMLParser constructor
53 *
be222f56 54 * @param root The tree root
d5efe032 55 * @throws ParserConfigurationException if a DocumentBuilder
be222f56 56 * cannot be created which satisfies the configuration requested.
d5efe032
AF
57 */
58 public TmfFilterXMLWriter(final ITmfFilterTreeNode root) throws ParserConfigurationException {
59 DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
60 DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
61 document = documentBuilder.newDocument();
62
63 Element rootElement = document.createElement(root.getNodeName());
64 document.appendChild(rootElement);
65
66 for (ITmfFilterTreeNode node : root.getChildren()) {
67 buildXMLTree(document, node, rootElement);
68 }
69 }
70
71 /**
72 * The Tree to XML parser
73 *
74 * @param document The XML document
75 * @param treenode The node to write
76 * @param parentElement The XML element of the parent
77 */
78 public static void buildXMLTree(final Document document, final ITmfFilterTreeNode treenode, Element parentElement) {
79 Element element = document.createElement(treenode.getNodeName());
80
81 if (treenode instanceof TmfFilterNode) {
82
83 TmfFilterNode node = (TmfFilterNode) treenode;
84 element.setAttribute(TmfFilterNode.NAME_ATTR, node.getFilterName());
85
86 } else if (treenode instanceof TmfFilterEventTypeNode) {
87
88 TmfFilterEventTypeNode node = (TmfFilterEventTypeNode) treenode;
89 element.setAttribute(TmfFilterEventTypeNode.TYPE_ATTR, node.getEventType());
90 element.setAttribute(TmfFilterEventTypeNode.NAME_ATTR, node.getName());
91
92 } else if (treenode instanceof TmfFilterAndNode) {
93
94 TmfFilterAndNode node = (TmfFilterAndNode) treenode;
95 element.setAttribute(TmfFilterAndNode.NOT_ATTR, Boolean.toString(node.isNot()));
96
97 } else if (treenode instanceof TmfFilterOrNode) {
98
99 TmfFilterOrNode node = (TmfFilterOrNode) treenode;
100 element.setAttribute(TmfFilterOrNode.NOT_ATTR, Boolean.toString(node.isNot()));
101
102 } else if (treenode instanceof TmfFilterContainsNode) {
103
104 TmfFilterContainsNode node = (TmfFilterContainsNode) treenode;
105 element.setAttribute(TmfFilterContainsNode.NOT_ATTR, Boolean.toString(node.isNot()));
106 element.setAttribute(TmfFilterContainsNode.FIELD_ATTR, node.getField());
107 element.setAttribute(TmfFilterContainsNode.VALUE_ATTR, node.getValue());
108 element.setAttribute(TmfFilterContainsNode.IGNORECASE_ATTR, Boolean.toString(node.isIgnoreCase()));
109
110 } else if (treenode instanceof TmfFilterEqualsNode) {
111
112 TmfFilterEqualsNode node = (TmfFilterEqualsNode) treenode;
113 element.setAttribute(TmfFilterEqualsNode.NOT_ATTR, Boolean.toString(node.isNot()));
114 element.setAttribute(TmfFilterEqualsNode.FIELD_ATTR, node.getField());
115 element.setAttribute(TmfFilterEqualsNode.VALUE_ATTR, node.getValue());
116 element.setAttribute(TmfFilterEqualsNode.IGNORECASE_ATTR, Boolean.toString(node.isIgnoreCase()));
117
d9b1b4ed 118 } else if (treenode instanceof TmfFilterMatchesFieldNode) {
d5efe032 119
d9b1b4ed 120 TmfFilterMatchesFieldNode node = (TmfFilterMatchesFieldNode) treenode;
d5efe032 121 element.setAttribute(TmfFilterMatchesNode.NOT_ATTR, Boolean.toString(node.isNot()));
d9b1b4ed 122 element.setAttribute(TmfFilterMatchesFieldNode.FIELD_ATTR, node.getField());
d5efe032
AF
123 element.setAttribute(TmfFilterMatchesNode.REGEX_ATTR, node.getRegex());
124
125 } else if (treenode instanceof TmfFilterCompareNode) {
126
127 TmfFilterCompareNode node = (TmfFilterCompareNode) treenode;
128 element.setAttribute(TmfFilterCompareNode.NOT_ATTR, Boolean.toString(node.isNot()));
129 element.setAttribute(TmfFilterCompareNode.FIELD_ATTR, node.getField());
130 element.setAttribute(TmfFilterCompareNode.RESULT_ATTR, Integer.toString(node.getResult()));
131 element.setAttribute(TmfFilterCompareNode.TYPE_ATTR, node.getType().toString());
132 element.setAttribute(TmfFilterCompareNode.VALUE_ATTR, node.getValue());
133
134 }
135
136 parentElement.appendChild(element);
137
138 for (int i = 0; i < treenode.getChildrenCount(); i++) {
139 buildXMLTree(document, treenode.getChild(i), element);
140 }
141 }
142
143 /**
144 * Save the tree
145 *
146 * @param uri The new Filter XML path
147 */
148 public void saveTree(final String uri) {
149 TransformerFactory transformerFactory = TransformerFactory.newInstance();
150
151 try {
152 Transformer transformer = transformerFactory.newTransformer();
153 DOMSource source = new DOMSource(document);
154 StreamResult result = new StreamResult(new File(uri));
155 transformer.transform(source, result);
156 } catch (TransformerConfigurationException e) {
157 e.printStackTrace();
158 } catch (TransformerException e) {
159 e.printStackTrace();
160 }
161 }
be222f56
PT
162
163}
This page took 0.05993 seconds and 5 git commands to generate.