Rename xxx.lttng to xxx.lttng.core
[deliverable/tracecompass.git] / org.eclipse.linuxtools.tmf / src / org / eclipse / linuxtools / tmf / filter / model / TmfFilterCompareNode.java
CommitLineData
46ab8ce3
FC
1/*******************************************************************************\r
2 * Copyright (c) 2010 Ericsson\r
3 * \r
4 * All rights reserved. This program and the accompanying materials are\r
5 * made available under the terms of the Eclipse Public License v1.0 which\r
6 * accompanies this distribution, and is available at\r
7 * http://www.eclipse.org/legal/epl-v10.html\r
8 * \r
9 * Contributors:\r
10 * Patrick Tasse - Initial API and implementation\r
11 *******************************************************************************/\r
12\r
13package org.eclipse.linuxtools.tmf.filter.model;\r
14\r
15import java.text.NumberFormat;\r
16import java.text.ParseException;\r
17import java.util.ArrayList;\r
18import java.util.List;\r
19\r
20import org.eclipse.linuxtools.tmf.event.TmfEvent;\r
21import org.eclipse.linuxtools.tmf.event.TmfNoSuchFieldException;\r
22import org.eclipse.linuxtools.tmf.event.TmfTimestamp;\r
23\r
24\r
25public class TmfFilterCompareNode extends TmfFilterTreeNode {\r
26\r
27 public static final String NODE_NAME = "COMPARE"; //$NON-NLS-1$\r
28 public static final String NOT_ATTR = "not"; //$NON-NLS-1$\r
29 public static final String FIELD_ATTR = "field"; //$NON-NLS-1$\r
30 public static final String RESULT_ATTR = "result"; //$NON-NLS-1$\r
31 public static final String TYPE_ATTR = "type"; //$NON-NLS-1$\r
32 public static final String VALUE_ATTR = "value"; //$NON-NLS-1$\r
33 \r
34 public static enum Type {\r
35 NUM,\r
36 ALPHA,\r
37 TIMESTAMP\r
38 }\r
39 \r
40 private boolean fNot = false;\r
41 private String fField;\r
42 private int fResult;\r
43 private Type fType = Type.NUM;\r
44 private String fValue;\r
45 private Number fValueNumber;\r
46 private TmfTimestamp fValueTimestamp;\r
47 \r
48 public TmfFilterCompareNode(ITmfFilterTreeNode parent) {\r
49 super(parent);\r
50 }\r
51\r
52 public boolean isNot() {\r
53 return fNot;\r
54 }\r
55 \r
56 public void setNot(boolean not) {\r
57 this.fNot = not;\r
58 }\r
59 \r
60 public String getField() {\r
61 return fField;\r
62 }\r
63\r
64 public void setField(String field) {\r
65 this.fField = field;\r
66 }\r
67\r
68 public int getResult() {\r
69 return fResult;\r
70 }\r
71 \r
72 public void setResult(int result) {\r
73 this.fResult = result;\r
74 }\r
75 \r
76 public Type getType() {\r
77 return fType;\r
78 }\r
79\r
80 public void setType(Type type) {\r
81 this.fType = type;\r
82 setValue(fValue);\r
83 }\r
84\r
85 public String getValue() {\r
86 return fValue;\r
87 }\r
88 \r
89 public void setValue(String value) {\r
90 this.fValue = value;\r
91 fValueNumber = null;\r
92 fValueTimestamp = null;\r
93 if (value == null) {\r
94 return;\r
95 }\r
96 if (fType == Type.NUM) {\r
97 try {\r
98 fValueNumber = NumberFormat.getInstance().parse(value).doubleValue();\r
99 } catch (ParseException e) {\r
100 }\r
101 } else if (fType == Type.TIMESTAMP) {\r
102 try {\r
103 fValueTimestamp = new TmfTimestamp((long) (1E9 * NumberFormat.getInstance().parse(value.toString()).doubleValue()));\r
104 } catch (ParseException e) {\r
105 }\r
106 }\r
107 }\r
108 \r
109 @Override\r
110 public String getNodeName() {\r
111 return NODE_NAME;\r
112 }\r
113\r
114 @Override\r
115 public boolean matches(TmfEvent event) {\r
116 try {\r
117 Object value = event.getContent().getField(fField);\r
118 if (value == null) {\r
119 return false ^ fNot;\r
120 }\r
121 if (fType == Type.NUM) {\r
122 if (fValueNumber instanceof Number) {\r
123 if (value instanceof Number) {\r
124 Double valueDouble = ((Number) value).doubleValue();\r
125 return (valueDouble.compareTo(fValueNumber.doubleValue()) == fResult) ^ fNot;\r
126 } else {\r
127 try {\r
128 Double valueDouble = NumberFormat.getInstance().parse(value.toString()).doubleValue();\r
129 return (valueDouble.compareTo(fValueNumber.doubleValue()) == fResult) ^ fNot;\r
130 } catch (ParseException e) {\r
131 }\r
132 }\r
133 }\r
134 } else if (fType == Type.ALPHA) {\r
135 String valueString = value.toString();\r
136 return (valueString.compareTo(fValue.toString()) == fResult) ^ fNot;\r
137 } else if (fType == Type.TIMESTAMP) {\r
138 if (fValueTimestamp instanceof TmfTimestamp) {\r
139 if (value instanceof TmfTimestamp) {\r
140 TmfTimestamp valueTimestamp = (TmfTimestamp) value;\r
141 return (valueTimestamp.compareTo(fValueTimestamp, false) == fResult) ^ fNot;\r
142 } else {\r
143 try {\r
144 TmfTimestamp valueTimestamp = new TmfTimestamp((long) (1E9 * NumberFormat.getInstance().parse(value.toString()).doubleValue()));\r
145 return (valueTimestamp.compareTo(fValueTimestamp, false) == fResult) ^ fNot;\r
146 } catch (ParseException e) {\r
147 }\r
148 }\r
149 }\r
150 }\r
151 } catch (TmfNoSuchFieldException e) {\r
152 }\r
153 return false ^ fNot;\r
154 }\r
155\r
156 @Override\r
157 public List<String> getValidChildren() {\r
158 return new ArrayList<String>(0);\r
159 }\r
160\r
161 @Override\r
162 public String toString() {\r
163 String result = (fResult == 0 ? "= " : fResult < 0 ? "< " : "> "); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$\r
164 String open = (fType == Type.NUM ? "" : fType == Type.ALPHA ? "\"" : "["); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$\r
165 String close = (fType == Type.NUM ? "" : fType == Type.ALPHA ? "\"" : "]"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$\r
166 return fField + (fNot ? " not " : " ") + result + open + fValue + close; //$NON-NLS-1$ //$NON-NLS-2$\r
167 }\r
168\r
169 @Override\r
170 public ITmfFilterTreeNode clone() {\r
171 TmfFilterCompareNode clone = (TmfFilterCompareNode) super.clone();\r
172 clone.fField = new String(fField);\r
173 clone.setValue(new String(fValue));\r
174 return clone;\r
175 }\r
176}\r
This page took 0.036612 seconds and 5 git commands to generate.