From b64984c41724da967a8cd7d46ae83c7798675934 Mon Sep 17 00:00:00 2001 From: Vincent Perot Date: Tue, 5 Aug 2014 16:55:13 -0400 Subject: [PATCH] tmf: implement hashcode and equals on filter classes Change-Id: Ic72c475995aaf63f3cb2cff83c4a7de395543f30 Signed-off-by: Vincent Perot Reviewed-on: https://git.eclipse.org/r/31062 Reviewed-by: Patrick Tasse Tested-by: Hudson CI Reviewed-by: Alexandre Montplaisir --- .../core/filter/model/TmfFilterAndNode.java | 26 +++++++++ .../filter/model/TmfFilterCompareNode.java | 54 ++++++++++++++++++- .../filter/model/TmfFilterContainsNode.java | 48 ++++++++++++++++- .../filter/model/TmfFilterEqualsNode.java | 46 ++++++++++++++++ .../filter/model/TmfFilterEventTypeNode.java | 38 +++++++++++++ .../filter/model/TmfFilterMatchesNode.java | 44 ++++++++++++++- .../tmf/core/filter/model/TmfFilterNode.java | 30 +++++++++++ .../core/filter/model/TmfFilterOrNode.java | 26 +++++++++ .../core/filter/model/TmfFilterTreeNode.java | 36 ++++++++++++- 9 files changed, 342 insertions(+), 6 deletions(-) diff --git a/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/filter/model/TmfFilterAndNode.java b/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/filter/model/TmfFilterAndNode.java index 2c054252dc..6aaef336d4 100644 --- a/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/filter/model/TmfFilterAndNode.java +++ b/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/filter/model/TmfFilterAndNode.java @@ -87,4 +87,30 @@ public class TmfFilterAndNode extends TmfFilterTreeNode { return buf.toString(); } + @Override + public int hashCode() { + final int prime = 31; + int result = super.hashCode(); + result = prime * result + (fNot ? 1231 : 1237); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (!super.equals(obj)) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + TmfFilterAndNode other = (TmfFilterAndNode) obj; + if (fNot != other.fNot) { + return false; + } + return true; + } + } diff --git a/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/filter/model/TmfFilterCompareNode.java b/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/filter/model/TmfFilterCompareNode.java index a452753ab4..0037532e93 100644 --- a/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/filter/model/TmfFilterCompareNode.java +++ b/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/filter/model/TmfFilterCompareNode.java @@ -51,8 +51,8 @@ public class TmfFilterCompareNode extends TmfFilterTreeNode { private int fResult; private Type fType = Type.NUM; private String fValue; - private Number fValueNumber; - private TmfTimestamp fValueTimestamp; + private transient Number fValueNumber; + private transient TmfTimestamp fValueTimestamp; /** * @param parent the parent node @@ -217,4 +217,54 @@ public class TmfFilterCompareNode extends TmfFilterTreeNode { clone.setValue(fValue); return clone; } + + @Override + public int hashCode() { + final int prime = 31; + int result = super.hashCode(); + result = prime * result + ((fField == null) ? 0 : fField.hashCode()); + result = prime * result + (fNot ? 1231 : 1237); + result = prime * result + fResult; + result = prime * result + ((fType == null) ? 0 : fType.hashCode()); + result = prime * result + ((fValue == null) ? 0 : fValue.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (!super.equals(obj)) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + TmfFilterCompareNode other = (TmfFilterCompareNode) obj; + if (fField == null) { + if (other.fField != null) { + return false; + } + } else if (!fField.equals(other.fField)) { + return false; + } + if (fNot != other.fNot) { + return false; + } + if (fResult != other.fResult) { + return false; + } + if (fType != other.fType) { + return false; + } + if (fValue == null) { + if (other.fValue != null) { + return false; + } + } else if (!fValue.equals(other.fValue)) { + return false; + } + return true; + } } diff --git a/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/filter/model/TmfFilterContainsNode.java b/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/filter/model/TmfFilterContainsNode.java index ee91c7d0ef..798787d623 100644 --- a/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/filter/model/TmfFilterContainsNode.java +++ b/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/filter/model/TmfFilterContainsNode.java @@ -35,7 +35,7 @@ public class TmfFilterContainsNode extends TmfFilterTreeNode { private boolean fNot = false; private String fField; private String fValue; - private String fValueUpperCase; + private transient String fValueUpperCase; private boolean fIgnoreCase = false; /** @@ -139,4 +139,50 @@ public class TmfFilterContainsNode extends TmfFilterTreeNode { clone.setValue(fValue); return clone; } + + @Override + public int hashCode() { + final int prime = 31; + int result = super.hashCode(); + result = prime * result + ((fField == null) ? 0 : fField.hashCode()); + result = prime * result + (fIgnoreCase ? 1231 : 1237); + result = prime * result + (fNot ? 1231 : 1237); + result = prime * result + ((fValue == null) ? 0 : fValue.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (!super.equals(obj)) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + TmfFilterContainsNode other = (TmfFilterContainsNode) obj; + if (fField == null) { + if (other.fField != null) { + return false; + } + } else if (!fField.equals(other.fField)) { + return false; + } + if (fIgnoreCase != other.fIgnoreCase) { + return false; + } + if (fNot != other.fNot) { + return false; + } + if (fValue == null) { + if (other.fValue != null) { + return false; + } + } else if (!fValue.equals(other.fValue)) { + return false; + } + return true; + } } diff --git a/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/filter/model/TmfFilterEqualsNode.java b/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/filter/model/TmfFilterEqualsNode.java index d7183765c5..a85a43a598 100644 --- a/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/filter/model/TmfFilterEqualsNode.java +++ b/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/filter/model/TmfFilterEqualsNode.java @@ -139,4 +139,50 @@ public class TmfFilterEqualsNode extends TmfFilterTreeNode { clone.fValue = fValue; return clone; } + + @Override + public int hashCode() { + final int prime = 31; + int result = super.hashCode(); + result = prime * result + ((fField == null) ? 0 : fField.hashCode()); + result = prime * result + (fIgnoreCase ? 1231 : 1237); + result = prime * result + (fNot ? 1231 : 1237); + result = prime * result + ((fValue == null) ? 0 : fValue.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (!super.equals(obj)) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + TmfFilterEqualsNode other = (TmfFilterEqualsNode) obj; + if (fField == null) { + if (other.fField != null) { + return false; + } + } else if (!fField.equals(other.fField)) { + return false; + } + if (fIgnoreCase != other.fIgnoreCase) { + return false; + } + if (fNot != other.fNot) { + return false; + } + if (fValue == null) { + if (other.fValue != null) { + return false; + } + } else if (!fValue.equals(other.fValue)) { + return false; + } + return true; + } } diff --git a/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/filter/model/TmfFilterEventTypeNode.java b/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/filter/model/TmfFilterEventTypeNode.java index 28f7ef9f4c..ab98b3767d 100644 --- a/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/filter/model/TmfFilterEventTypeNode.java +++ b/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/filter/model/TmfFilterEventTypeNode.java @@ -26,6 +26,44 @@ import org.eclipse.linuxtools.tmf.core.event.ITmfEvent; @SuppressWarnings("javadoc") public class TmfFilterEventTypeNode extends TmfFilterTreeNode { + @Override + public int hashCode() { + final int prime = 31; + int result = super.hashCode(); + result = prime * result + ((fName == null) ? 0 : fName.hashCode()); + result = prime * result + ((fType == null) ? 0 : fType.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (!super.equals(obj)) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + TmfFilterEventTypeNode other = (TmfFilterEventTypeNode) obj; + if (fName == null) { + if (other.fName != null) { + return false; + } + } else if (!fName.equals(other.fName)) { + return false; + } + if (fType == null) { + if (other.fType != null) { + return false; + } + } else if (!fType.equals(other.fType)) { + return false; + } + return true; + } + public static final String NODE_NAME = "EVENTTYPE"; //$NON-NLS-1$ public static final String TYPE_ATTR = "type"; //$NON-NLS-1$ public static final String NAME_ATTR = "name"; //$NON-NLS-1$ diff --git a/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/filter/model/TmfFilterMatchesNode.java b/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/filter/model/TmfFilterMatchesNode.java index fc8b918dd9..d32115762d 100644 --- a/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/filter/model/TmfFilterMatchesNode.java +++ b/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/filter/model/TmfFilterMatchesNode.java @@ -36,7 +36,7 @@ public class TmfFilterMatchesNode extends TmfFilterTreeNode { private boolean fNot = false; private String fField; private String fRegex; - private Pattern fPattern; + private transient Pattern fPattern; /** * @param parent @@ -151,4 +151,46 @@ public class TmfFilterMatchesNode extends TmfFilterTreeNode { } return ret; } + + @Override + public int hashCode() { + final int prime = 31; + int result = super.hashCode(); + result = prime * result + ((fField == null) ? 0 : fField.hashCode()); + result = prime * result + (fNot ? 1231 : 1237); + result = prime * result + ((fRegex == null) ? 0 : fRegex.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (!super.equals(obj)) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + TmfFilterMatchesNode other = (TmfFilterMatchesNode) obj; + if (fField == null) { + if (other.fField != null) { + return false; + } + } else if (!fField.equals(other.fField)) { + return false; + } + if (fNot != other.fNot) { + return false; + } + if (fRegex == null) { + if (other.fRegex != null) { + return false; + } + } else if (!fRegex.equals(other.fRegex)) { + return false; + } + return true; + } } diff --git a/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/filter/model/TmfFilterNode.java b/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/filter/model/TmfFilterNode.java index fa20c0dd1a..59ae9c2728 100644 --- a/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/filter/model/TmfFilterNode.java +++ b/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/filter/model/TmfFilterNode.java @@ -104,4 +104,34 @@ public class TmfFilterNode extends TmfFilterTreeNode { } return buf.toString(); } + + @Override + public int hashCode() { + final int prime = 31; + int result = super.hashCode(); + result = prime * result + ((fFilterName == null) ? 0 : fFilterName.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (!super.equals(obj)) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + TmfFilterNode other = (TmfFilterNode) obj; + if (fFilterName == null) { + if (other.fFilterName != null) { + return false; + } + } else if (!fFilterName.equals(other.fFilterName)) { + return false; + } + return true; + } } diff --git a/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/filter/model/TmfFilterOrNode.java b/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/filter/model/TmfFilterOrNode.java index 30bbcdfba1..a8579e6e8d 100644 --- a/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/filter/model/TmfFilterOrNode.java +++ b/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/filter/model/TmfFilterOrNode.java @@ -85,4 +85,30 @@ public class TmfFilterOrNode extends TmfFilterTreeNode { } return buf.toString(); } + + @Override + public int hashCode() { + final int prime = 31; + int result = super.hashCode(); + result = prime * result + (fNot ? 1231 : 1237); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (!super.equals(obj)) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + TmfFilterOrNode other = (TmfFilterOrNode) obj; + if (fNot != other.fNot) { + return false; + } + return true; + } } diff --git a/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/filter/model/TmfFilterTreeNode.java b/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/filter/model/TmfFilterTreeNode.java index 6f6c5ef382..6bf7f5f1df 100644 --- a/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/filter/model/TmfFilterTreeNode.java +++ b/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/filter/model/TmfFilterTreeNode.java @@ -126,8 +126,10 @@ public abstract class TmfFilterTreeNode implements ITmfFilterTreeNode, Cloneable public abstract boolean matches(ITmfEvent event); /** - * @param event the event - * @param field the field id + * @param event + * the event + * @param field + * the field id * @return the field value */ protected Object getFieldValue(ITmfEvent event, String field) { @@ -229,4 +231,34 @@ public abstract class TmfFilterTreeNode implements ITmfFilterTreeNode, Cloneable return null; } } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((children == null) ? 0 : children.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + TmfFilterTreeNode other = (TmfFilterTreeNode) obj; + if (children == null) { + if (other.children != null) { + return false; + } + } else if (!children.equals(other.children)) { + return false; + } + return true; + } } -- 2.34.1