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=554d7e2fb3df93564cc7575fe6a83486deaa131f;hb=9438cd96bbebb06f5b67c81f313eacd6e382f0d7;hp=12e772890e697bf373b39cd2fe8a5d5e0c60546a;hpb=f69c674bc091ea5f70bde33fc45ca7e181c2f6e0;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 12e772890e..554d7e2fb3 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. * @@ -16,8 +15,6 @@ 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.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -28,31 +25,35 @@ import org.slf4j.LoggerFactory; @XmlRootElement @XmlAccessorType(XmlAccessType.NONE) - 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 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 transient boolean isValid; + private Object mask; // the value of the mask we want to match on the + // specified field + private 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(); } /** @@ -65,7 +66,8 @@ public class MatchField implements Cloneable, Serializable { 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(); } /** @@ -76,10 +78,10 @@ public class MatchField implements Cloneable, Serializable { public Object getValue() { return value; } - - @XmlElement(name="value") + + @XmlElement(name = "value") private String getValueString() { - return type.stringify(value); + return type.stringify(value); } /** @@ -91,23 +93,24 @@ public class MatchField implements Cloneable, Serializable { 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); } /** @@ -130,16 +133,11 @@ public class MatchField implements Cloneable, Serializable { 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; } @@ -150,13 +148,9 @@ public class MatchField implements Cloneable, Serializable { 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; @@ -183,24 +177,40 @@ public class MatchField implements Cloneable, Serializable { cloned.mask = ((byte[]) this.mask).clone(); } } + cloned.type = this.type; + cloned.isValid = this.isValid; } catch (CloneNotSupportedException e) { - e.printStackTrace(); + logger.error("", e); } return cloned; } @Override - public int hashCode() { - return HashCodeBuilder.reflectionHashCode(this); + public String toString() { + return (mask == null) ? String.format("%s(%s)", getTypeString(), getValueString()) : + String.format("%s(%s,%s)", getTypeString(), 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); } }