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=bd5ef2bafbd4134e74469824962b6e18f42edaeb;hb=ff1b4a79cca00743a00c3b0b1100bd0ab2b2fb31;hp=19c365b29e041c338083e1ccc7f5e26a8e47509f;hpb=42210c03b0a4c54706320ba9f55794c0abd4d201;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 19c365b29e..bd5ef2bafb 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,38 +8,53 @@ package org.opendaylight.controller.sal.match; -import org.apache.commons.lang3.builder.EqualsBuilder; -import org.apache.commons.lang3.builder.HashCodeBuilder; -import org.opendaylight.controller.sal.utils.HexEncode; +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.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Represents the generic matching field * - * - * */ -public class MatchField implements Cloneable { + +@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 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(); } /** @@ -53,7 +67,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(); } /** @@ -65,6 +80,11 @@ public class MatchField implements Cloneable { return value; } + @XmlElement(name = "value") + private String getValueString() { + return type.stringify(value); + } + /** * Returns the type field this match field object is for * @@ -74,15 +94,26 @@ public class MatchField implements Cloneable { return type; } + @XmlElement(name = "type") + private String getTypeString() { + 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") + private String getMaskString() { + return type.stringify(mask); + } + /** * Returns the bitmask set for this field match * @@ -157,30 +188,42 @@ 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() { + final int prime = 31; + int result = 1; + result = prime * result + ((mask == null) ? 0 : mask.hashCode()); + result = prime * result + ((type == null) ? 0 : type.hashCode()); + result = prime * result + ((value == null) ? 0 : value.hashCode()); + return result; } @Override - public String toString() { - String valueString = (value == null) ? "null" - : (value instanceof byte[]) ? HexEncode - .bytesToHexString((byte[]) value) : value.toString(); - String maskString = (mask == null) ? "null" - : (mask instanceof byte[]) ? HexEncode - .bytesToHexString((byte[]) mask) : mask.toString(); - - return type + "(" + valueString + "," + maskString + ")"; + 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.equalValues(this.value, other.value) && type.equalMasks( + this.mask, other.mask)); } }