Fix warnings from FindBugs
[deliverable/tracecompass.git] / org.eclipse.linuxtools.tmf.core / src / org / eclipse / linuxtools / tmf / core / 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
6c13869b 13package org.eclipse.linuxtools.tmf.core.filter.model;\r
46ab8ce3
FC
14\r
15import java.text.NumberFormat;\r
16import java.text.ParseException;\r
17import java.util.ArrayList;\r
18import java.util.List;\r
19\r
a96d4804 20import org.eclipse.linuxtools.tmf.core.event.ITmfEvent;\r
6c13869b 21import org.eclipse.linuxtools.tmf.core.event.TmfTimestamp;\r
46ab8ce3
FC
22\r
23\r
24public class TmfFilterCompareNode extends TmfFilterTreeNode {\r
25\r
26 public static final String NODE_NAME = "COMPARE"; //$NON-NLS-1$\r
27 public static final String NOT_ATTR = "not"; //$NON-NLS-1$\r
28 public static final String FIELD_ATTR = "field"; //$NON-NLS-1$\r
29 public static final String RESULT_ATTR = "result"; //$NON-NLS-1$\r
30 public static final String TYPE_ATTR = "type"; //$NON-NLS-1$\r
31 public static final String VALUE_ATTR = "value"; //$NON-NLS-1$\r
32 \r
33 public static enum Type {\r
34 NUM,\r
35 ALPHA,\r
36 TIMESTAMP\r
37 }\r
38 \r
39 private boolean fNot = false;\r
40 private String fField;\r
41 private int fResult;\r
42 private Type fType = Type.NUM;\r
43 private String fValue;\r
44 private Number fValueNumber;\r
45 private TmfTimestamp fValueTimestamp;\r
46 \r
47 public TmfFilterCompareNode(ITmfFilterTreeNode parent) {\r
48 super(parent);\r
49 }\r
50\r
51 public boolean isNot() {\r
52 return fNot;\r
53 }\r
54 \r
55 public void setNot(boolean not) {\r
56 this.fNot = not;\r
57 }\r
58 \r
59 public String getField() {\r
60 return fField;\r
61 }\r
62\r
63 public void setField(String field) {\r
64 this.fField = field;\r
65 }\r
66\r
67 public int getResult() {\r
68 return fResult;\r
69 }\r
70 \r
71 public void setResult(int result) {\r
72 this.fResult = result;\r
73 }\r
74 \r
75 public Type getType() {\r
76 return fType;\r
77 }\r
78\r
79 public void setType(Type type) {\r
80 this.fType = type;\r
81 setValue(fValue);\r
82 }\r
83\r
84 public String getValue() {\r
85 return fValue;\r
86 }\r
87 \r
88 public void setValue(String value) {\r
89 this.fValue = value;\r
90 fValueNumber = null;\r
91 fValueTimestamp = null;\r
92 if (value == null) {\r
93 return;\r
94 }\r
95 if (fType == Type.NUM) {\r
96 try {\r
97 fValueNumber = NumberFormat.getInstance().parse(value).doubleValue();\r
98 } catch (ParseException e) {\r
99 }\r
100 } else if (fType == Type.TIMESTAMP) {\r
101 try {\r
102 fValueTimestamp = new TmfTimestamp((long) (1E9 * NumberFormat.getInstance().parse(value.toString()).doubleValue()));\r
103 } catch (ParseException e) {\r
104 }\r
105 }\r
106 }\r
107 \r
108 @Override\r
109 public String getNodeName() {\r
110 return NODE_NAME;\r
111 }\r
112\r
113 @Override\r
a96d4804
FC
114 public boolean matches(ITmfEvent event) {\r
115 Object value = getFieldValue(event, fField);\r
4c564a2d
FC
116 if (value == null) {\r
117 return false ^ fNot;\r
118 }\r
119 if (fType == Type.NUM) {\r
6e85c58d 120 if (fValueNumber != null) {\r
4c564a2d
FC
121 if (value instanceof Number) {\r
122 Double valueDouble = ((Number) value).doubleValue();\r
123 return (valueDouble.compareTo(fValueNumber.doubleValue()) == fResult) ^ fNot;\r
124 } else {\r
125 try {\r
126 Double valueDouble = NumberFormat.getInstance().parse(value.toString())\r
127 .doubleValue();\r
128 return (valueDouble.compareTo(fValueNumber.doubleValue()) == fResult)\r
129 ^ 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
6e85c58d 138 if (fValueTimestamp != null) {\r
4c564a2d
FC
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\r
145 .getInstance().parse(value.toString()).doubleValue()));\r
146 return (valueTimestamp.compareTo(fValueTimestamp, false) == fResult) ^ fNot;\r
147 } catch (ParseException e) {\r
148 }\r
149 }\r
150 }\r
151 }\r
152 return false ^ fNot;\r
46ab8ce3
FC
153 }\r
154\r
155 @Override\r
156 public List<String> getValidChildren() {\r
157 return new ArrayList<String>(0);\r
158 }\r
159\r
160 @Override\r
161 public String toString() {\r
162 String result = (fResult == 0 ? "= " : fResult < 0 ? "< " : "> "); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$\r
163 String open = (fType == Type.NUM ? "" : fType == Type.ALPHA ? "\"" : "["); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$\r
164 String close = (fType == Type.NUM ? "" : fType == Type.ALPHA ? "\"" : "]"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$\r
165 return fField + (fNot ? " not " : " ") + result + open + fValue + close; //$NON-NLS-1$ //$NON-NLS-2$\r
166 }\r
167\r
168 @Override\r
169 public ITmfFilterTreeNode clone() {\r
170 TmfFilterCompareNode clone = (TmfFilterCompareNode) super.clone();\r
6e85c58d
FC
171 clone.fField = fField;\r
172 clone.setValue(fValue);\r
46ab8ce3
FC
173 return clone;\r
174 }\r
175}\r
This page took 0.067656 seconds and 5 git commands to generate.