Merge master in TmfTraceModel
[deliverable/tracecompass.git] / org.eclipse.linuxtools.tmf.core / src / org / eclipse / linuxtools / tmf / core / filter / model / TmfFilterTreeNode.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 * Patrick Tasse - Refactoring
12 *******************************************************************************/
13
14 package org.eclipse.linuxtools.tmf.core.filter.model;
15
16 import java.util.ArrayList;
17 import java.util.Arrays;
18 import java.util.List;
19
20 import org.eclipse.linuxtools.tmf.core.event.ITmfEvent;
21 import org.eclipse.linuxtools.tmf.core.event.ITmfEventField;
22
23 /**
24 * <b><u>TmfFilterTreeNode</u></b>
25 * <p>
26 * The Filter Tree node
27 * <p>
28 */
29 public abstract class TmfFilterTreeNode implements ITmfFilterTreeNode, Cloneable {
30
31 private static final String[] VALID_CHILDREN = {
32 TmfFilterEventTypeNode.NODE_NAME,
33 TmfFilterAndNode.NODE_NAME,
34 TmfFilterOrNode.NODE_NAME,
35 TmfFilterContainsNode.NODE_NAME,
36 TmfFilterEqualsNode.NODE_NAME,
37 TmfFilterMatchesNode.NODE_NAME,
38 TmfFilterCompareNode.NODE_NAME
39 };
40
41 private ITmfFilterTreeNode parent = null;
42 private ArrayList<ITmfFilterTreeNode> children = new ArrayList<ITmfFilterTreeNode>();
43
44 public TmfFilterTreeNode(final ITmfFilterTreeNode parent) {
45 if (parent != null) {
46 parent.addChild(this);
47 }
48 }
49
50 /* (non-Javadoc)
51 * @see org.eclipse.linuxtools.tmf.filter.model.ITmfFilterTreeNode#getParent()
52 */
53 @Override
54 public ITmfFilterTreeNode getParent() {
55 return parent;
56 }
57
58 /* (non-Javadoc)
59 * @see org.eclipse.linuxtools.tmf.filter.model.ITmfFilterTreeNode#getNodeName()
60 */
61 @Override
62 public abstract String getNodeName();
63
64 /* (non-Javadoc)
65 * @see org.eclipse.linuxtools.tmf.filter.model.ITmfFilterTreeNode#hasChildren()
66 */
67 @Override
68 public boolean hasChildren() {
69 return (children.size() > 0);
70 }
71
72 /* (non-Javadoc)
73 * @see org.eclipse.linuxtools.tmf.filter.model.ITmfFilterTreeNode#getChildrenCount()
74 */
75 @Override
76 public int getChildrenCount() {
77 return children.size();
78 }
79
80 /* (non-Javadoc)
81 * @see org.eclipse.linuxtools.tmf.filter.model.ITmfFilterTreeNode#getChildren()
82 */
83 @Override
84 public ITmfFilterTreeNode[] getChildren() {
85 return children.toArray(new ITmfFilterTreeNode[0]);
86 }
87
88 /* (non-Javadoc)
89 * @see org.eclipse.linuxtools.tmf.filter.model.ITmfFilterTreeNode#getChild(int)
90 */
91 @Override
92 public ITmfFilterTreeNode getChild(final int index) throws IndexOutOfBoundsException {
93 return children.get(index);
94 }
95
96 /* (non-Javadoc)
97 * @see org.eclipse.linuxtools.tmf.filter.model.ITmfFilterTreeNode#remove()
98 */
99 @Override
100 public ITmfFilterTreeNode remove() {
101 if (getParent() != null) {
102 getParent().removeChild(this);
103 }
104 return this;
105 }
106
107 /*
108 * (non-Javadoc)
109 * @see org.eclipse.linuxtools.tmf.filter.model.ITmfFilterTreeNode#removeChild(org.eclipse.linuxtools.tmf.filter.model.ITmfFilterTreeNode)
110 */
111 @Override
112 public ITmfFilterTreeNode removeChild(ITmfFilterTreeNode node) {
113 children.remove(node);
114 node.setParent(null);
115 return node;
116 }
117
118 /* (non-Javadoc)
119 * @see org.eclipse.linuxtools.tmf.filter.model.ITmfFilterTreeNode#addChild(org.eclipse.linuxtools.tmf.filter.model.ITmfFilterTreeNode)
120 */
121 @Override
122 public int addChild(final ITmfFilterTreeNode node) {
123 node.setParent(this);
124 if(children.add(node)) {
125 return (children.size() - 1);
126 }
127 return -1;
128 }
129
130 /* (non-Javadoc)
131 * @see org.eclipse.linuxtools.tmf.filter.model.ITmfFilterTreeNode#replaceChild(int, org.eclipse.linuxtools.tmf.filter.model.ITmfFilterTreeNode)
132 */
133 @Override
134 public ITmfFilterTreeNode replaceChild(final int index, final ITmfFilterTreeNode node) throws IndexOutOfBoundsException {
135 node.setParent(this);
136 return children.set(index, node);
137 }
138
139 /* (non-Javadoc)
140 * @see org.eclipse.linuxtools.tmf.filter.model.ITmfFilterTreeNode#setParent(org.eclipse.linuxtools.tmf.filter.model.ITmfFilterTreeNode)
141 */
142 @Override
143 public void setParent(final ITmfFilterTreeNode parent) {
144 this.parent = parent;
145 }
146
147
148 /* (non-Javadoc)
149 * @see org.eclipse.linuxtools.tmf.filter.model.ITmfFilterTreeNode#matches(org.eclipse.linuxtools.tmf.event.TmfEvent)
150 */
151 @Override
152 public abstract boolean matches(ITmfEvent event);
153
154 /**
155 * @param event the event
156 * @param field the field id
157 * @return the field value
158 */
159 protected Object getFieldValue(ITmfEvent event, String field) {
160 Object value = null;
161 if (ITmfEvent.EVENT_FIELD_CONTENT.equals(field)) {
162 ITmfEventField content = event.getContent();
163 value = (content.getValue() != null) ? content.getValue().toString() : content.toString();
164 }
165 else if (ITmfEvent.EVENT_FIELD_TYPE.equals(field)) {
166 value = event.getType().getName();
167 }
168 else if (ITmfEvent.EVENT_FIELD_TIMESTAMP.equals(field)) {
169 value = event.getTimestamp().toString();
170 }
171 else if (ITmfEvent.EVENT_FIELD_SOURCE.equals(field)) {
172 value = event.getSource();
173 }
174 else if (ITmfEvent.EVENT_FIELD_REFERENCE.equals(field)) {
175 value = event.getReference();
176 }
177 else {
178 value = event.getContent().getField(field).getValue();
179 }
180 return value;
181 }
182
183 /* (non-Javadoc)
184 * @see org.eclipse.linuxtools.tmf.filter.model.ITmfFilterTreeNode#getValidChildren()
185 *
186 * By default, all node types are valid children. Override if different.
187 */
188 @Override
189 public List<String> getValidChildren() {
190 return Arrays.asList(VALID_CHILDREN);
191 }
192
193 @Override
194 public ITmfFilterTreeNode clone() {
195 try {
196 TmfFilterTreeNode clone = (TmfFilterTreeNode) super.clone();
197 clone.parent = null;
198 clone.children = new ArrayList<ITmfFilterTreeNode>(children.size());
199 for (ITmfFilterTreeNode child : getChildren()) {
200 clone.addChild(child.clone());
201 }
202 return clone;
203 } catch (CloneNotSupportedException e) {
204 return null;
205 }
206 }
207 }
This page took 0.050046 seconds and 6 git commands to generate.