X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fsal%2Fapi%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fsal%2Fmatch%2FMatchField.java;h=3b8a2952164eafb0cf463208d06cc29a182e2d6f;hb=48238a15a5d1fb46a7248d3fe276df71898f7c2a;hp=08d4fa698fc40eed8b6b3dba1f9076b54e5fedea;hpb=29f7cfb54b580928c7feac63abce028a7014b0d5;p=controller.git diff --git a/opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/match/MatchField.java b/opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/match/MatchField.java index 08d4fa698f..3b8a295216 100644 --- a/opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/match/MatchField.java +++ b/opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/match/MatchField.java @@ -1,4 +1,3 @@ - /* * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved. * @@ -9,14 +8,12 @@ package org.opendaylight.controller.sal.match; +import java.io.Serializable; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; -import org.apache.commons.lang3.builder.EqualsBuilder; -import org.apache.commons.lang3.builder.HashCodeBuilder; -import org.opendaylight.controller.sal.utils.HexEncode; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -27,30 +24,35 @@ import org.slf4j.LoggerFactory; @XmlRootElement @XmlAccessorType(XmlAccessType.NONE) - -public class MatchField implements Cloneable { - private static final Logger logger = LoggerFactory - .getLogger(MatchField.class); - private MatchType type; // the field we want to match +public class MatchField implements Cloneable, Serializable { + private static final long serialVersionUID = 1L; + private static final Logger logger = LoggerFactory.getLogger(MatchField.class); + private MatchType type; // the field we want to match private Object value; // the value of the field we want to match - private Object mask; // the value of the mask we want to match on the specified field + private Object mask; // the value of the mask we want to match on the + // specified field private transient boolean isValid; // To satisfy JAXB + @SuppressWarnings("unused") private MatchField() { } + /** * Mask based match constructor * * @param type * @param value - * @param mask has to be of the same class type of value. A null mask means full match + * @param mask + * has to be of the same class type of value. A null mask means + * full match */ public MatchField(MatchType type, Object value, Object mask) { this.type = type; this.value = value; this.mask = mask; - this.isValid = checkValueType() && checkValues(); // Keep this logic, value checked only if type check is fine + // Keep this logic, value checked only if type check is fine + this.isValid = checkValueType() && checkValues(); } /** @@ -63,7 +65,8 @@ public class MatchField implements Cloneable { this.type = type; this.value = value; this.mask = null; - this.isValid = checkValueType() && checkValues(); // Keep this logic, value checked only if type check is fine + // Keep this logic, value checked only if type check is fine + this.isValid = checkValueType() && checkValues(); } /** @@ -74,10 +77,10 @@ public class MatchField implements Cloneable { public Object getValue() { return value; } - - @XmlElement(name="value") + + @XmlElement(name = "value") private String getValueString() { - return type.stringify(value); + return type.stringify(value); } /** @@ -89,23 +92,24 @@ public class MatchField implements Cloneable { return type; } - @XmlElement(name="type") + @XmlElement(name = "type") private String getTypeString() { - return type.toString(); + return type.toString(); } /** - * Returns the mask value set for this field match - * A null mask means this is a full match + * Returns the mask value set for this field match A null mask means this is + * a full match + * * @return */ public Object getMask() { return mask; } - - @XmlElement(name="mask") + + @XmlElement(name = "mask") private String getMaskString() { - return type.stringify(mask); + return type.stringify(mask); } /** @@ -128,16 +132,11 @@ public class MatchField implements Cloneable { private boolean checkValueType() { if (type.isCongruentType(value, mask) == false) { - String valueClass = (value == null) ? "null" : value.getClass() - .getSimpleName(); - String maskClass = (mask == null) ? "null" : mask.getClass() - .getSimpleName(); - String error = "Invalid match field's value or mask types.For field: " - + type.id() - + " Expected:" - + type.dataType().getSimpleName() - + " or equivalent," - + " Got:(" + valueClass + "," + maskClass + ")"; + String valueClass = (value == null) ? "null" : value.getClass().getSimpleName(); + String maskClass = (mask == null) ? "null" : mask.getClass().getSimpleName(); + String error = "Invalid match field's value or mask types.For field: " + type.id() + " Expected:" + + type.dataType().getSimpleName() + " or equivalent," + " Got:(" + valueClass + "," + maskClass + + ")"; throwException(error); return false; } @@ -148,13 +147,9 @@ public class MatchField implements Cloneable { if (type.isValid(value, mask) == false) { String maskString = (mask == null) ? "null" : ("0x" + Integer .toHexString(Integer.parseInt(mask.toString()))); - String error = "Invalid match field's value or mask assignement.For field: " - + type.id() - + " Expected: " - + type.getRange() - + ", Got:(0x" - + Integer.toHexString(Integer.parseInt(value.toString())) - + "," + maskString + ")"; + String error = "Invalid match field's value or mask assignement.For field: " + type.id() + " Expected: " + + type.getRange() + ", Got:(0x" + Integer.toHexString(Integer.parseInt(value.toString())) + "," + + maskString + ")"; throwException(error); return false; @@ -182,23 +177,36 @@ public class MatchField implements Cloneable { } } } catch (CloneNotSupportedException e) { - e.printStackTrace(); + logger.error("", e); } return cloned; } @Override - public int hashCode() { - return HashCodeBuilder.reflectionHashCode(this); + public String toString() { + return type + "(" + getValueString() + "," + getMaskString() + ")"; } @Override - public boolean equals(Object obj) { - return EqualsBuilder.reflectionEquals(this, obj); + public int hashCode() { + return type.hashCode(value, mask); } @Override - public String toString() { - return type + "(" + getValueString() + "," + getMaskString() + ")"; + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + MatchField other = (MatchField) obj; + if (type != other.type) { + return false; + } + return type.equals(this.value, other.value, this.mask, other.mask); } }