public class VariantVariable extends AbstractVariable implements AssignableFromInteger, AssignableFromLong, AssignableFromString, AssignableFromByteArray
VariantVariable
provides a decorator for any type
of Variable instance, to be able to intercept or monitor variable
value modification by using a VariantVariableCallback
.
This class will work for implementations that use getSyntax()
method to determine the variables syntax. However "instanceof" will not
work.
In contrast to the native Variable
implementations,
VariantVariable
can be modified dynamically (i.e. while
a PDU is being BER encoded where this variable has been added to) without
causing BER encoding errors.
SMISYNTAXES_PROPERTIES
Constructor and Description |
---|
VariantVariable(Variable initialVariable)
Creates a variant variable wrapping the specified value.
|
VariantVariable(Variable initialVariable,
VariantVariableCallback callback)
Creates a variant variable wrapping the specified value and a callback
that monitors value modifications.
|
Modifier and Type | Method and Description |
---|---|
Object |
clone()
Clones this variable.
|
int |
compareTo(Variable o) |
void |
decodeBER(BERInputStream inputStream)
Decodes a
Variable from an InputStream . |
void |
encodeBER(OutputStream outputStream)
Encodes a
Variable to an OutputStream . |
boolean |
equals(Object o) |
void |
fromSubIndex(OID subIndex,
boolean impliedLength)
Sets the value of this
Variable from the supplied (sub-)index. |
int |
getBERLength()
Returns the length of this
Variable in bytes when encoded
according to the Basic Encoding Rules (BER). |
int |
getSyntax()
Gets the ASN.1 syntax identifier value of this SNMP variable.
|
Variable |
getVariable()
Returns the typed variable that holds the wrapped value.
|
int |
hashCode() |
boolean |
isDynamic()
Indicates whether this variable is dynamic, which means that it might
change its value while it is being (BER) serialized.
|
void |
setValue(byte[] value)
Sets the value of this object from the supplied byte array.
|
void |
setValue(int value) |
void |
setValue(long value) |
void |
setValue(OctetString value) |
void |
setValue(String value) |
byte[] |
toByteArray()
Returns the value of this object as a byte array.
|
int |
toInt()
Returns an integer representation of this variable if
such a representation exists.
|
long |
toLong()
Returns a long representation of this variable if
such a representation exists.
|
String |
toString()
Gets a string representation of the variable.
|
OID |
toSubIndex(boolean impliedLength)
Converts the value of this
Variable to a (sub-)index
value. |
protected void |
updateVariable() |
protected void |
variableUpdated() |
createFromBER, createFromSyntax, equal, getBERPayloadLength, getSyntaxFromString, getSyntaxString, getSyntaxString, isException
public VariantVariable(Variable initialVariable)
initialVariable
- a Variable
.public VariantVariable(Variable initialVariable, VariantVariableCallback callback)
initialVariable
- a Variable
.callback
- a callback handler that is called before the value is to be modified
and after it has been modified.public int compareTo(Variable o)
compareTo
in interface Comparable<Variable>
compareTo
in interface Variable
compareTo
in class AbstractVariable
protected void updateVariable()
protected void variableUpdated()
public void decodeBER(BERInputStream inputStream) throws IOException
AbstractVariable
Variable
from an InputStream
.decodeBER
in interface BERSerializable
decodeBER
in class AbstractVariable
inputStream
- an InputStream
containing a BER encoded byte stream.IOException
- if the stream could not be decoded by using BER rules.public void encodeBER(OutputStream outputStream) throws IOException
AbstractVariable
Variable
to an OutputStream
.encodeBER
in interface BERSerializable
encodeBER
in class AbstractVariable
outputStream
- an OutputStream
.IOException
- if an error occurs while writing to the stream.public void fromSubIndex(OID subIndex, boolean impliedLength)
AbstractVariable
Variable
from the supplied (sub-)index.fromSubIndex
in interface Variable
fromSubIndex
in class AbstractVariable
subIndex
- the sub-index OID.impliedLength
- specifies if the sub-index has an implied length. This parameter applies
to variable length variables only (e.g. OctetString
and
OID
). For other variables it has no effect.public int getBERLength()
AbstractVariable
Variable
in bytes when encoded
according to the Basic Encoding Rules (BER).getBERLength
in interface BERSerializable
getBERLength
in class AbstractVariable
public int getSyntax()
AbstractVariable
getSyntax
in interface Variable
getSyntax
in class AbstractVariable
public int toInt()
AbstractVariable
toInt
in interface AssignableFromInteger
toInt
in interface Variable
toInt
in class AbstractVariable
public long toLong()
AbstractVariable
toLong
in interface AssignableFromLong
toLong
in interface Variable
toLong
in class AbstractVariable
public byte[] toByteArray()
AssignableFromByteArray
toByteArray
in interface AssignableFromByteArray
public OID toSubIndex(boolean impliedLength)
AbstractVariable
Variable
to a (sub-)index
value.toSubIndex
in interface Variable
toSubIndex
in class AbstractVariable
impliedLength
- specifies if the sub-index has an implied length. This parameter applies
to variable length variables only (e.g. OctetString
and
OID
). For other variables it has no effect.public boolean equals(Object o)
equals
in interface Variable
equals
in class AbstractVariable
public int hashCode()
hashCode
in interface Variable
hashCode
in class AbstractVariable
public String toString()
AbstractVariable
toString
in interface Variable
toString
in class AbstractVariable
public Object clone()
Variable
clone
in interface Variable
clone
in class AbstractVariable
Variable
with the same value.public void setValue(int value)
setValue
in interface AssignableFromInteger
public void setValue(long value)
setValue
in interface AssignableFromLong
public void setValue(OctetString value)
public void setValue(byte[] value)
AssignableFromByteArray
setValue
in interface AssignableFromByteArray
value
- a byte array.public void setValue(String value)
setValue
in interface AssignableFromString
public Variable getVariable()
public boolean isDynamic()
AbstractVariable
PDU
with PDU.add(VariableBinding)
. By cloning the value, it is
ensured that there are no inconsistent changes between determining the
length with AbstractVariable.getBERLength()
for encoding enclosing SEQUENCES and
the actual encoding of the Variable itself with AbstractVariable.encodeBER(java.io.OutputStream)
.isDynamic
in interface Variable
isDynamic
in class AbstractVariable
false
by default. Derived classes may override this
if implementing dynamic Variable
instances.Copyright © 2015 SNMP4J.org. All Rights Reserved.