org.snmp4j.smi
Class VariantVariable

java.lang.Object
  extended by org.snmp4j.smi.AbstractVariable
      extended by org.snmp4j.smi.VariantVariable
All Implemented Interfaces:
java.io.Serializable, java.lang.Cloneable, java.lang.Comparable, BERSerializable, AssignableFromByteArray, AssignableFromInteger, AssignableFromLong, AssignableFromString, Variable

public class VariantVariable
extends AbstractVariable
implements AssignableFromInteger, AssignableFromLong, AssignableFromString, AssignableFromByteArray

The 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.

Since:
1.7
Version:
1.8
Author:
Frank Fock
See Also:
Serialized Form

Field Summary
 
Fields inherited from class org.snmp4j.smi.AbstractVariable
SMISYNTAXES_PROPERTIES
 
Constructor Summary
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.
 
Method Summary
 java.lang.Object clone()
          Clones this variable.
 int compareTo(java.lang.Object o)
           
 void decodeBER(BERInputStream inputStream)
          Decodes a Variable from an InputStream.
 void encodeBER(java.io.OutputStream outputStream)
          Encodes a Variable to an OutputStream.
 boolean equals(java.lang.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(java.lang.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.
 java.lang.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()
           
 
Methods inherited from class org.snmp4j.smi.AbstractVariable
createFromBER, createFromSyntax, getBERPayloadLength, getSyntaxFromString, getSyntaxString, getSyntaxString, isException
 
Methods inherited from class java.lang.Object
finalize, getClass, notify, notifyAll, wait, wait, wait
 

Constructor Detail

VariantVariable

public VariantVariable(Variable initialVariable)
Creates a variant variable wrapping the specified value.

Parameters:
initialVariable - a Variable.

VariantVariable

public VariantVariable(Variable initialVariable,
                       VariantVariableCallback callback)
Creates a variant variable wrapping the specified value and a callback that monitors value modifications.

Parameters:
initialVariable - a Variable.
callback - a callback handler that is called before the value is to be modified and after it has been modified.
Method Detail

compareTo

public int compareTo(java.lang.Object o)
Specified by:
compareTo in interface java.lang.Comparable
Specified by:
compareTo in interface Variable
Specified by:
compareTo in class AbstractVariable

updateVariable

protected void updateVariable()

variableUpdated

protected void variableUpdated()

decodeBER

public void decodeBER(BERInputStream inputStream)
               throws java.io.IOException
Description copied from class: AbstractVariable
Decodes a Variable from an InputStream.

Specified by:
decodeBER in interface BERSerializable
Specified by:
decodeBER in class AbstractVariable
Parameters:
inputStream - an InputStream containing a BER encoded byte stream.
Throws:
java.io.IOException - if the stream could not be decoded by using BER rules.

encodeBER

public void encodeBER(java.io.OutputStream outputStream)
               throws java.io.IOException
Description copied from class: AbstractVariable
Encodes a Variable to an OutputStream.

Specified by:
encodeBER in interface BERSerializable
Specified by:
encodeBER in class AbstractVariable
Parameters:
outputStream - an OutputStream.
Throws:
java.io.IOException - if an error occurs while writing to the stream.

fromSubIndex

public void fromSubIndex(OID subIndex,
                         boolean impliedLength)
Description copied from class: AbstractVariable
Sets the value of this Variable from the supplied (sub-)index.

Specified by:
fromSubIndex in interface Variable
Specified by:
fromSubIndex in class AbstractVariable
Parameters:
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.

getBERLength

public int getBERLength()
Description copied from class: AbstractVariable
Returns the length of this Variable in bytes when encoded according to the Basic Encoding Rules (BER).

Specified by:
getBERLength in interface BERSerializable
Specified by:
getBERLength in class AbstractVariable
Returns:
the BER encoded length of this variable.

getSyntax

public int getSyntax()
Description copied from class: AbstractVariable
Gets the ASN.1 syntax identifier value of this SNMP variable.

Specified by:
getSyntax in interface Variable
Specified by:
getSyntax in class AbstractVariable
Returns:
an integer value < 128 for regular SMI objects and a value >= 128 for exception values like noSuchObject, noSuchInstance, and endOfMibView.

toInt

public int toInt()
Description copied from class: AbstractVariable
Returns an integer representation of this variable if such a representation exists.

Specified by:
toInt in interface AssignableFromInteger
Specified by:
toInt in interface Variable
Specified by:
toInt in class AbstractVariable
Returns:
an integer value (if the native representation of this variable would be a long, then the long value will be casted to int).

toLong

public long toLong()
Description copied from class: AbstractVariable
Returns a long representation of this variable if such a representation exists.

Specified by:
toLong in interface AssignableFromLong
Specified by:
toLong in interface Variable
Specified by:
toLong in class AbstractVariable
Returns:
a long value.

toByteArray

public byte[] toByteArray()
Description copied from interface: AssignableFromByteArray
Returns the value of this object as a byte array.

Specified by:
toByteArray in interface AssignableFromByteArray
Returns:
a byte array.

toSubIndex

public OID toSubIndex(boolean impliedLength)
Description copied from class: AbstractVariable
Converts the value of this Variable to a (sub-)index value.

Specified by:
toSubIndex in interface Variable
Specified by:
toSubIndex in class AbstractVariable
Parameters:
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.
Returns:
an OID that represents this value as an (sub-)index.

equals

public boolean equals(java.lang.Object o)
Specified by:
equals in interface Variable
Specified by:
equals in class AbstractVariable

hashCode

public int hashCode()
Specified by:
hashCode in interface Variable
Specified by:
hashCode in class AbstractVariable

toString

public java.lang.String toString()
Description copied from class: AbstractVariable
Gets a string representation of the variable.

Specified by:
toString in interface Variable
Specified by:
toString in class AbstractVariable
Returns:
a string representation of the variable's value.

clone

public java.lang.Object clone()
Description copied from interface: Variable
Clones this variable. Cloning can be used by the SNMP4J API to better support concurrency by creating a immutable clone for internal processing.

Specified by:
clone in interface Variable
Specified by:
clone in class AbstractVariable
Returns:
a new instance of this Variable with the same value.

setValue

public void setValue(int value)
Specified by:
setValue in interface AssignableFromInteger

setValue

public void setValue(long value)
Specified by:
setValue in interface AssignableFromLong

setValue

public void setValue(OctetString value)

setValue

public void setValue(byte[] value)
Description copied from interface: AssignableFromByteArray
Sets the value of this object from the supplied byte array.

Specified by:
setValue in interface AssignableFromByteArray
Parameters:
value - a byte array.

setValue

public void setValue(java.lang.String value)
Specified by:
setValue in interface AssignableFromString

getVariable

public Variable getVariable()
Returns the typed variable that holds the wrapped value.

Returns:
a Variable instance.

isDynamic

public boolean isDynamic()
Description copied from class: AbstractVariable
Indicates whether this variable is dynamic, which means that it might change its value while it is being (BER) serialized. If a variable is dynamic, it will be cloned on-the-fly when it is added to a 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).

Specified by:
isDynamic in interface Variable
Overrides:
isDynamic in class AbstractVariable
Returns:
false by default. Derived classes may override this if implementing dynamic Variable instances.

Copyright 2005-2010 Frank Fock (SNMP4J.org)

Copyright © 2011 SNMP4J.org. All Rights Reserved.