Merge branch 'master' into lttng-kepler
[deliverable/tracecompass.git] / org.eclipse.linuxtools.tmf.core / src / org / eclipse / linuxtools / tmf / core / filter / xml / TmfFilterContentHandler.java
1 /*******************************************************************************
2 * Copyright (c) 2010 Ericsson
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 * based on http://smeric.developpez.com/java/cours/xml/sax/
12 * Patrick Tasse - Refactoring
13 *******************************************************************************/
14
15 package org.eclipse.linuxtools.tmf.core.filter.xml;
16
17 import java.util.Stack;
18
19 import org.eclipse.linuxtools.tmf.core.filter.model.ITmfFilterTreeNode;
20 import org.eclipse.linuxtools.tmf.core.filter.model.TmfFilterAndNode;
21 import org.eclipse.linuxtools.tmf.core.filter.model.TmfFilterCompareNode;
22 import org.eclipse.linuxtools.tmf.core.filter.model.TmfFilterContainsNode;
23 import org.eclipse.linuxtools.tmf.core.filter.model.TmfFilterEqualsNode;
24 import org.eclipse.linuxtools.tmf.core.filter.model.TmfFilterEventTypeNode;
25 import org.eclipse.linuxtools.tmf.core.filter.model.TmfFilterMatchesNode;
26 import org.eclipse.linuxtools.tmf.core.filter.model.TmfFilterNode;
27 import org.eclipse.linuxtools.tmf.core.filter.model.TmfFilterOrNode;
28 import org.eclipse.linuxtools.tmf.core.filter.model.TmfFilterRootNode;
29 import org.eclipse.linuxtools.tmf.core.filter.model.TmfFilterTreeNode;
30 import org.eclipse.linuxtools.tmf.core.filter.model.TmfFilterCompareNode.Type;
31 import org.xml.sax.Attributes;
32 import org.xml.sax.SAXException;
33 import org.xml.sax.helpers.DefaultHandler;
34
35 /**
36 * The SAX Content Handler
37 *
38 * @version 1.0
39 * @author Yuriy Vashchuk
40 * @author Patrick Tasse
41 */
42 public class TmfFilterContentHandler extends DefaultHandler {
43
44 private ITmfFilterTreeNode fRoot = null;
45 private Stack<ITmfFilterTreeNode> fFilterTreeStack = null;
46
47 /**
48 * The default constructor
49 */
50 public TmfFilterContentHandler() {
51 super();
52 fFilterTreeStack = new Stack<ITmfFilterTreeNode>();
53 }
54
55 /**
56 * Getter of tree
57 *
58 * @return The builded tree
59 */
60 public ITmfFilterTreeNode getTree() {
61 return fRoot;
62 }
63
64 /*
65 * (non-Javadoc)
66 * @see org.xml.sax.ContentHandler#startElement(java.lang.String, java.lang.String, java.lang.String, org.xml.sax.Attributes)
67 */
68 @Override
69 public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException {
70 ITmfFilterTreeNode node = null;
71
72 if (localName.equalsIgnoreCase(TmfFilterRootNode.NODE_NAME)) {
73
74 node = new TmfFilterRootNode();
75
76 } else if (localName.equals(TmfFilterNode.NODE_NAME)) {
77
78 node = new TmfFilterNode(atts.getValue(TmfFilterNode.NAME_ATTR));
79
80 } else if (localName.equals(TmfFilterEventTypeNode.NODE_NAME)) {
81
82 node = new TmfFilterEventTypeNode(null);
83 ((TmfFilterEventTypeNode) node).setEventType(atts.getValue(TmfFilterEventTypeNode.TYPE_ATTR));
84 ((TmfFilterEventTypeNode) node).setName(atts.getValue(TmfFilterEventTypeNode.NAME_ATTR));
85
86 } else if (localName.equals(TmfFilterAndNode.NODE_NAME)) {
87
88 node = new TmfFilterAndNode(null);
89 String value = atts.getValue(TmfFilterAndNode.NOT_ATTR);
90 if (value != null && value.equalsIgnoreCase(Boolean.TRUE.toString())) {
91 ((TmfFilterAndNode) node).setNot(true);
92 }
93
94 } else if (localName.equals(TmfFilterOrNode.NODE_NAME)) {
95
96 node = new TmfFilterOrNode(null);
97 String value = atts.getValue(TmfFilterOrNode.NOT_ATTR);
98 if (value != null && value.equalsIgnoreCase(Boolean.TRUE.toString())) {
99 ((TmfFilterOrNode) node).setNot(true);
100 }
101
102 } else if (localName.equals(TmfFilterContainsNode.NODE_NAME)) {
103
104 node = new TmfFilterContainsNode(null);
105 String value = atts.getValue(TmfFilterContainsNode.NOT_ATTR);
106 if (value != null && value.equalsIgnoreCase(Boolean.TRUE.toString())) {
107 ((TmfFilterContainsNode) node).setNot(true);
108 }
109 ((TmfFilterContainsNode) node).setField(atts.getValue(TmfFilterContainsNode.FIELD_ATTR));
110 ((TmfFilterContainsNode) node).setValue(atts.getValue(TmfFilterContainsNode.VALUE_ATTR));
111 value = atts.getValue(TmfFilterContainsNode.IGNORECASE_ATTR);
112 if (value != null && value.equalsIgnoreCase(Boolean.TRUE.toString())) {
113 ((TmfFilterContainsNode) node).setIgnoreCase(true);
114 }
115
116 } else if (localName.equals(TmfFilterEqualsNode.NODE_NAME)) {
117
118 node = new TmfFilterEqualsNode(null);
119 String value = atts.getValue(TmfFilterEqualsNode.NOT_ATTR);
120 if (value != null && value.equalsIgnoreCase(Boolean.TRUE.toString())) {
121 ((TmfFilterEqualsNode) node).setNot(true);
122 }
123 ((TmfFilterEqualsNode) node).setField(atts.getValue(TmfFilterEqualsNode.FIELD_ATTR));
124 ((TmfFilterEqualsNode) node).setValue(atts.getValue(TmfFilterEqualsNode.VALUE_ATTR));
125 value = atts.getValue(TmfFilterEqualsNode.IGNORECASE_ATTR);
126 if (value != null && value.equalsIgnoreCase(Boolean.TRUE.toString())) {
127 ((TmfFilterEqualsNode) node).setIgnoreCase(true);
128 }
129
130 } else if (localName.equals(TmfFilterMatchesNode.NODE_NAME)) {
131
132 node = new TmfFilterMatchesNode(null);
133 String value = atts.getValue(TmfFilterMatchesNode.NOT_ATTR);
134 if (value != null && value.equalsIgnoreCase(Boolean.TRUE.toString())) {
135 ((TmfFilterMatchesNode) node).setNot(true);
136 }
137 ((TmfFilterMatchesNode) node).setField(atts.getValue(TmfFilterMatchesNode.FIELD_ATTR));
138 ((TmfFilterMatchesNode) node).setRegex(atts.getValue(TmfFilterMatchesNode.REGEX_ATTR));
139
140 } else if (localName.equals(TmfFilterCompareNode.NODE_NAME)) {
141
142 node = new TmfFilterCompareNode(null);
143 String value = atts.getValue(TmfFilterCompareNode.NOT_ATTR);
144 if (value != null && value.equalsIgnoreCase(Boolean.TRUE.toString())) {
145 ((TmfFilterCompareNode) node).setNot(true);
146 }
147 ((TmfFilterCompareNode) node).setField(atts.getValue(TmfFilterCompareNode.FIELD_ATTR));
148 value = atts.getValue(TmfFilterCompareNode.TYPE_ATTR);
149 if (value != null) {
150 ((TmfFilterCompareNode) node).setType(Type.valueOf(value));
151 }
152 value = atts.getValue(TmfFilterCompareNode.RESULT_ATTR);
153 if (value != null) {
154 if (value.equals(Integer.toString(-1))) {
155 ((TmfFilterCompareNode) node).setResult(-1);
156 } else if (value.equals(Integer.toString(1))) {
157 ((TmfFilterCompareNode) node).setResult(1);
158 } else {
159 ((TmfFilterCompareNode) node).setResult(0);
160 }
161 }
162 ((TmfFilterCompareNode) node).setValue(atts.getValue(TmfFilterCompareNode.VALUE_ATTR));
163
164 }
165
166 fFilterTreeStack.push(node);
167 }
168
169 /*
170 * (non-Javadoc)
171 * @see org.xml.sax.ContentHandler#endElement(java.lang.String, java.lang.String, java.lang.String)
172 */
173 @Override
174 public void endElement(String uri, String localName, String qName) throws SAXException {
175 ITmfFilterTreeNode node = fFilterTreeStack.pop();
176
177 if (fFilterTreeStack.isEmpty()) {
178 fRoot = node;
179 } else if (fFilterTreeStack.lastElement() instanceof TmfFilterTreeNode &&
180 node instanceof TmfFilterTreeNode) {
181 fFilterTreeStack.lastElement().addChild(node);
182 }
183
184 }
185
186 }
This page took 0.045527 seconds and 5 git commands to generate.