-/*******************************************************************************\r
- * Copyright (c) 2010 Ericsson\r
- *\r
- * All rights reserved. This program and the accompanying materials are\r
- * made available under the terms of the Eclipse Public License v1.0 which\r
- * accompanies this distribution, and is available at\r
- * http://www.eclipse.org/legal/epl-v10.html\r
- *\r
- * Contributors:\r
- * Yuriy Vashchuk (yvashchuk@gmail.com) - Initial API and implementation\r
- * Patrick Tasse - Refactoring\r
- *******************************************************************************/\r
-\r
-package org.eclipse.linuxtools.tmf.core.filter.model;\r
-\r
-import java.util.ArrayList;\r
-import java.util.Arrays;\r
-import java.util.List;\r
-\r
-import org.eclipse.linuxtools.tmf.core.event.ITmfEvent;\r
-import org.eclipse.linuxtools.tmf.core.event.ITmfEventField;\r
-\r
-/**\r
- * The base class for the Filter tree nodes\r
- *\r
- * @version 1.0\r
- * @author Yuriy Vashchuk\r
- * @author Patrick Tasse\r
- */\r
-public abstract class TmfFilterTreeNode implements ITmfFilterTreeNode, Cloneable {\r
-\r
- private static final String[] VALID_CHILDREN = {\r
- TmfFilterEventTypeNode.NODE_NAME,\r
- TmfFilterAndNode.NODE_NAME,\r
- TmfFilterOrNode.NODE_NAME,\r
- TmfFilterContainsNode.NODE_NAME,\r
- TmfFilterEqualsNode.NODE_NAME,\r
- TmfFilterMatchesNode.NODE_NAME,\r
- TmfFilterCompareNode.NODE_NAME\r
- };\r
-\r
- private ITmfFilterTreeNode parent = null;\r
- private ArrayList<ITmfFilterTreeNode> children = new ArrayList<ITmfFilterTreeNode>();\r
-\r
- /**\r
- * @param parent the parent node\r
- */\r
- public TmfFilterTreeNode(final ITmfFilterTreeNode parent) {\r
- if (parent != null) {\r
- parent.addChild(this);\r
- }\r
- }\r
-\r
- /* (non-Javadoc)\r
- * @see org.eclipse.linuxtools.tmf.filter.model.ITmfFilterTreeNode#getParent()\r
- */\r
- @Override\r
- public ITmfFilterTreeNode getParent() {\r
- return parent;\r
- }\r
-\r
- /* (non-Javadoc)\r
- * @see org.eclipse.linuxtools.tmf.filter.model.ITmfFilterTreeNode#getNodeName()\r
- */\r
- @Override\r
- public abstract String getNodeName();\r
-\r
- /* (non-Javadoc)\r
- * @see org.eclipse.linuxtools.tmf.filter.model.ITmfFilterTreeNode#hasChildren()\r
- */\r
- @Override\r
- public boolean hasChildren() {\r
- return (children.size() > 0);\r
- }\r
-\r
- /* (non-Javadoc)\r
- * @see org.eclipse.linuxtools.tmf.filter.model.ITmfFilterTreeNode#getChildrenCount()\r
- */\r
- @Override\r
- public int getChildrenCount() {\r
- return children.size();\r
- }\r
-\r
- /* (non-Javadoc)\r
- * @see org.eclipse.linuxtools.tmf.filter.model.ITmfFilterTreeNode#getChildren()\r
- */\r
- @Override\r
- public ITmfFilterTreeNode[] getChildren() {\r
- return children.toArray(new ITmfFilterTreeNode[0]);\r
- }\r
-\r
- /* (non-Javadoc)\r
- * @see org.eclipse.linuxtools.tmf.filter.model.ITmfFilterTreeNode#getChild(int)\r
- */\r
- @Override\r
- public ITmfFilterTreeNode getChild(final int index) throws IndexOutOfBoundsException {\r
- return children.get(index);\r
- }\r
-\r
- /* (non-Javadoc)\r
- * @see org.eclipse.linuxtools.tmf.filter.model.ITmfFilterTreeNode#remove()\r
- */\r
- @Override\r
- public ITmfFilterTreeNode remove() {\r
- if (getParent() != null) {\r
- getParent().removeChild(this);\r
- }\r
- return this;\r
- }\r
-\r
- /*\r
- * (non-Javadoc)\r
- * @see org.eclipse.linuxtools.tmf.filter.model.ITmfFilterTreeNode#removeChild(org.eclipse.linuxtools.tmf.filter.model.ITmfFilterTreeNode)\r
- */\r
- @Override\r
- public ITmfFilterTreeNode removeChild(ITmfFilterTreeNode node) {\r
- children.remove(node);\r
- node.setParent(null);\r
- return node;\r
- }\r
-\r
- /* (non-Javadoc)\r
- * @see org.eclipse.linuxtools.tmf.filter.model.ITmfFilterTreeNode#addChild(org.eclipse.linuxtools.tmf.filter.model.ITmfFilterTreeNode)\r
- */\r
- @Override\r
- public int addChild(final ITmfFilterTreeNode node) {\r
- node.setParent(this);\r
- if(children.add(node)) {\r
- return (children.size() - 1);\r
- }\r
- return -1;\r
- }\r
-\r
- /* (non-Javadoc)\r
- * @see org.eclipse.linuxtools.tmf.filter.model.ITmfFilterTreeNode#replaceChild(int, org.eclipse.linuxtools.tmf.filter.model.ITmfFilterTreeNode)\r
- */\r
- @Override\r
- public ITmfFilterTreeNode replaceChild(final int index, final ITmfFilterTreeNode node) throws IndexOutOfBoundsException {\r
- node.setParent(this);\r
- return children.set(index, node);\r
- }\r
-\r
- /* (non-Javadoc)\r
- * @see org.eclipse.linuxtools.tmf.filter.model.ITmfFilterTreeNode#setParent(org.eclipse.linuxtools.tmf.filter.model.ITmfFilterTreeNode)\r
- */\r
- @Override\r
- public void setParent(final ITmfFilterTreeNode parent) {\r
- this.parent = parent;\r
- }\r
-\r
-\r
- /* (non-Javadoc)\r
- * @see org.eclipse.linuxtools.tmf.filter.model.ITmfFilterTreeNode#matches(org.eclipse.linuxtools.tmf.event.TmfEvent)\r
- */\r
- @Override\r
- public abstract boolean matches(ITmfEvent event);\r
-\r
- /**\r
- * @param event the event\r
- * @param field the field id\r
- * @return the field value\r
- */\r
- protected Object getFieldValue(ITmfEvent event, String field) {\r
- Object value = null;\r
- if (ITmfEvent.EVENT_FIELD_CONTENT.equals(field)) {\r
- ITmfEventField content = event.getContent();\r
- value = (content.getValue() != null) ? content.getValue().toString() : content.toString();\r
- }\r
- else if (ITmfEvent.EVENT_FIELD_TYPE.equals(field)) {\r
- value = event.getType().getName();\r
- }\r
- else if (ITmfEvent.EVENT_FIELD_TIMESTAMP.equals(field)) {\r
- value = event.getTimestamp().toString();\r
- }\r
- else if (ITmfEvent.EVENT_FIELD_SOURCE.equals(field)) {\r
- value = event.getSource();\r
- }\r
- else if (ITmfEvent.EVENT_FIELD_REFERENCE.equals(field)) {\r
- value = event.getReference();\r
- }\r
- else {\r
- ITmfEventField eventField = event.getContent().getField(field);\r
- if (eventField != null) {\r
- value = eventField.getValue();\r
- }\r
- }\r
- return value;\r
- }\r
-\r
- /* (non-Javadoc)\r
- * @see org.eclipse.linuxtools.tmf.filter.model.ITmfFilterTreeNode#getValidChildren()\r
- *\r
- * By default, all node types are valid children. Override if different.\r
- */\r
- @Override\r
- public List<String> getValidChildren() {\r
- return Arrays.asList(VALID_CHILDREN);\r
- }\r
-\r
- @Override\r
- public ITmfFilterTreeNode clone() {\r
- try {\r
- TmfFilterTreeNode clone = (TmfFilterTreeNode) super.clone();\r
- clone.parent = null;\r
- clone.children = new ArrayList<ITmfFilterTreeNode>(children.size());\r
- for (ITmfFilterTreeNode child : getChildren()) {\r
- clone.addChild(child.clone());\r
- }\r
- return clone;\r
- } catch (CloneNotSupportedException e) {\r
- return null;\r
- }\r
- }\r
-}\r
+/*******************************************************************************
+ * Copyright (c) 2010 Ericsson
+ *
+ * All rights reserved. This program and the accompanying materials are
+ * made available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Yuriy Vashchuk (yvashchuk@gmail.com) - Initial API and implementation
+ * Patrick Tasse - Refactoring
+ *******************************************************************************/
+
+package org.eclipse.linuxtools.tmf.core.filter.model;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.eclipse.linuxtools.tmf.core.event.ITmfEvent;
+import org.eclipse.linuxtools.tmf.core.event.ITmfEventField;
+
+/**
+ * The base class for the Filter tree nodes
+ *
+ * @version 1.0
+ * @author Yuriy Vashchuk
+ * @author Patrick Tasse
+ */
+public abstract class TmfFilterTreeNode implements ITmfFilterTreeNode, Cloneable {
+
+ private static final String[] VALID_CHILDREN = {
+ TmfFilterEventTypeNode.NODE_NAME,
+ TmfFilterAndNode.NODE_NAME,
+ TmfFilterOrNode.NODE_NAME,
+ TmfFilterContainsNode.NODE_NAME,
+ TmfFilterEqualsNode.NODE_NAME,
+ TmfFilterMatchesNode.NODE_NAME,
+ TmfFilterCompareNode.NODE_NAME
+ };
+
+ private ITmfFilterTreeNode parent = null;
+ private ArrayList<ITmfFilterTreeNode> children = new ArrayList<ITmfFilterTreeNode>();
+
+ /**
+ * @param parent the parent node
+ */
+ public TmfFilterTreeNode(final ITmfFilterTreeNode parent) {
+ if (parent != null) {
+ parent.addChild(this);
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.linuxtools.tmf.filter.model.ITmfFilterTreeNode#getParent()
+ */
+ @Override
+ public ITmfFilterTreeNode getParent() {
+ return parent;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.linuxtools.tmf.filter.model.ITmfFilterTreeNode#getNodeName()
+ */
+ @Override
+ public abstract String getNodeName();
+
+ /* (non-Javadoc)
+ * @see org.eclipse.linuxtools.tmf.filter.model.ITmfFilterTreeNode#hasChildren()
+ */
+ @Override
+ public boolean hasChildren() {
+ return (children.size() > 0);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.linuxtools.tmf.filter.model.ITmfFilterTreeNode#getChildrenCount()
+ */
+ @Override
+ public int getChildrenCount() {
+ return children.size();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.linuxtools.tmf.filter.model.ITmfFilterTreeNode#getChildren()
+ */
+ @Override
+ public ITmfFilterTreeNode[] getChildren() {
+ return children.toArray(new ITmfFilterTreeNode[0]);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.linuxtools.tmf.filter.model.ITmfFilterTreeNode#getChild(int)
+ */
+ @Override
+ public ITmfFilterTreeNode getChild(final int index) throws IndexOutOfBoundsException {
+ return children.get(index);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.linuxtools.tmf.filter.model.ITmfFilterTreeNode#remove()
+ */
+ @Override
+ public ITmfFilterTreeNode remove() {
+ if (getParent() != null) {
+ getParent().removeChild(this);
+ }
+ return this;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.linuxtools.tmf.filter.model.ITmfFilterTreeNode#removeChild(org.eclipse.linuxtools.tmf.filter.model.ITmfFilterTreeNode)
+ */
+ @Override
+ public ITmfFilterTreeNode removeChild(ITmfFilterTreeNode node) {
+ children.remove(node);
+ node.setParent(null);
+ return node;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.linuxtools.tmf.filter.model.ITmfFilterTreeNode#addChild(org.eclipse.linuxtools.tmf.filter.model.ITmfFilterTreeNode)
+ */
+ @Override
+ public int addChild(final ITmfFilterTreeNode node) {
+ node.setParent(this);
+ if(children.add(node)) {
+ return (children.size() - 1);
+ }
+ return -1;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.linuxtools.tmf.filter.model.ITmfFilterTreeNode#replaceChild(int, org.eclipse.linuxtools.tmf.filter.model.ITmfFilterTreeNode)
+ */
+ @Override
+ public ITmfFilterTreeNode replaceChild(final int index, final ITmfFilterTreeNode node) throws IndexOutOfBoundsException {
+ node.setParent(this);
+ return children.set(index, node);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.linuxtools.tmf.filter.model.ITmfFilterTreeNode#setParent(org.eclipse.linuxtools.tmf.filter.model.ITmfFilterTreeNode)
+ */
+ @Override
+ public void setParent(final ITmfFilterTreeNode parent) {
+ this.parent = parent;
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.eclipse.linuxtools.tmf.filter.model.ITmfFilterTreeNode#matches(org.eclipse.linuxtools.tmf.event.TmfEvent)
+ */
+ @Override
+ public abstract boolean matches(ITmfEvent event);
+
+ /**
+ * @param event the event
+ * @param field the field id
+ * @return the field value
+ */
+ protected Object getFieldValue(ITmfEvent event, String field) {
+ Object value = null;
+ if (ITmfEvent.EVENT_FIELD_CONTENT.equals(field)) {
+ ITmfEventField content = event.getContent();
+ value = (content.getValue() != null) ? content.getValue().toString() : content.toString();
+ }
+ else if (ITmfEvent.EVENT_FIELD_TYPE.equals(field)) {
+ value = event.getType().getName();
+ }
+ else if (ITmfEvent.EVENT_FIELD_TIMESTAMP.equals(field)) {
+ value = event.getTimestamp().toString();
+ }
+ else if (ITmfEvent.EVENT_FIELD_SOURCE.equals(field)) {
+ value = event.getSource();
+ }
+ else if (ITmfEvent.EVENT_FIELD_REFERENCE.equals(field)) {
+ value = event.getReference();
+ }
+ else {
+ ITmfEventField eventField = event.getContent().getField(field);
+ if (eventField != null) {
+ value = eventField.getValue();
+ }
+ }
+ return value;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.linuxtools.tmf.filter.model.ITmfFilterTreeNode#getValidChildren()
+ *
+ * By default, all node types are valid children. Override if different.
+ */
+ @Override
+ public List<String> getValidChildren() {
+ return Arrays.asList(VALID_CHILDREN);
+ }
+
+ @Override
+ public ITmfFilterTreeNode clone() {
+ try {
+ TmfFilterTreeNode clone = (TmfFilterTreeNode) super.clone();
+ clone.parent = null;
+ clone.children = new ArrayList<ITmfFilterTreeNode>(children.size());
+ for (ITmfFilterTreeNode child : getChildren()) {
+ clone.addChild(child.clone());
+ }
+ return clone;
+ } catch (CloneNotSupportedException e) {
+ return null;
+ }
+ }
+}