Package org.snmp4j.smi
Class VariantVariable
java.lang.Object
org.snmp4j.smi.AbstractVariable
org.snmp4j.smi.VariantVariable
- All Implemented Interfaces:
Serializable,Cloneable,Comparable<Variable>,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:
-
Field Summary
Fields inherited from class org.snmp4j.smi.AbstractVariable
SMISYNTAXES_PROPERTIES -
Constructor Summary
ConstructorsConstructorDescriptionVariantVariable(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
Modifier and TypeMethodDescriptionclone()Clones this variable.intvoiddecodeBER(BERInputStream inputStream) Decodes aVariablefrom anBERInputStream.voidencodeBER(OutputStream outputStream) Encodes aVariableto anOutputStream.booleanvoidfromSubIndex(OID subIndex, boolean impliedLength) Sets the value of thisVariablefrom the supplied (sub-)index.intReturns the length of thisVariablein bytes when encoded according to the Basic Encoding Rules (BER).intGets the ASN.1 syntax identifier value of this SNMP variable.Returns the typed variable that holds the wrapped value.inthashCode()booleanIndicates whether this variable is dynamic, which means that it might change its value while it is being (BER) serialized.voidsetValue(byte[] value) Sets the value of this object from the supplied byte array.voidsetValue(int value) voidsetValue(long value) voidvoidsetValue(OctetString value) byte[]Returns the value of this object as a byte array.inttoInt()Returns an integer representation of this variable if such a representation exists.longtoLong()Returns a long representation of this variable if such a representation exists.toString()Gets a string representation of the variable.toSubIndex(boolean impliedLength) Converts the value of thisVariableto a (sub-)index value.protected voidprotected voidMethods inherited from class org.snmp4j.smi.AbstractVariable
createFromBER, createFromSyntax, equal, getBERPayloadLength, getSyntaxFromString, getSyntaxString, getSyntaxString, isException
-
Constructor Details
-
VariantVariable
Creates a variant variable wrapping the specified value.- Parameters:
initialVariable- aVariable.
-
VariantVariable
Creates a variant variable wrapping the specified value and a callback that monitors value modifications.- Parameters:
initialVariable- aVariable.callback- a callback handler that is called before the value is to be modified and after it has been modified.
-
-
Method Details
-
compareTo
- Specified by:
compareToin interfaceComparable<Variable>- Specified by:
compareToin interfaceVariable- Specified by:
compareToin classAbstractVariable
-
updateVariable
protected void updateVariable() -
variableUpdated
protected void variableUpdated() -
decodeBER
Description copied from class:AbstractVariableDecodes aVariablefrom anBERInputStream.- Specified by:
decodeBERin interfaceBERSerializable- Specified by:
decodeBERin classAbstractVariable- Parameters:
inputStream- anBERInputStreamcontaining a BER encoded byte stream.- Throws:
IOException- if the stream could not be decoded by using BER rules.
-
encodeBER
Description copied from class:AbstractVariableEncodes aVariableto anOutputStream.- Specified by:
encodeBERin interfaceBERSerializable- Specified by:
encodeBERin classAbstractVariable- Parameters:
outputStream- anOutputStream.- Throws:
IOException- if an error occurs while writing to the stream.
-
fromSubIndex
Description copied from class:AbstractVariableSets the value of thisVariablefrom the supplied (sub-)index.- Specified by:
fromSubIndexin interfaceVariable- Specified by:
fromSubIndexin classAbstractVariable- 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.OctetStringandOID). For other variables it has no effect.
-
getBERLength
public int getBERLength()Description copied from class:AbstractVariableReturns the length of thisVariablein bytes when encoded according to the Basic Encoding Rules (BER).- Specified by:
getBERLengthin interfaceBERSerializable- Specified by:
getBERLengthin classAbstractVariable- Returns:
- the BER encoded length of this variable.
-
getSyntax
public int getSyntax()Description copied from class:AbstractVariableGets the ASN.1 syntax identifier value of this SNMP variable.- Specified by:
getSyntaxin interfaceVariable- Specified by:
getSyntaxin classAbstractVariable- Returns:
- an integer value less than 128 for regular SMI objects and a value greater or equal than 128 for exception values like noSuchObject, noSuchInstance, and endOfMibView.
-
toInt
public int toInt()Description copied from class:AbstractVariableReturns an integer representation of this variable if such a representation exists.- Specified by:
toIntin interfaceAssignableFromInteger- Specified by:
toIntin interfaceVariable- Specified by:
toIntin classAbstractVariable- 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:AbstractVariableReturns a long representation of this variable if such a representation exists.- Specified by:
toLongin interfaceAssignableFromLong- Specified by:
toLongin interfaceVariable- Specified by:
toLongin classAbstractVariable- Returns:
- a long value.
-
toByteArray
public byte[] toByteArray()Description copied from interface:AssignableFromByteArrayReturns the value of this object as a byte array.- Specified by:
toByteArrayin interfaceAssignableFromByteArray- Returns:
- a byte array.
-
toSubIndex
Description copied from class:AbstractVariableConverts the value of thisVariableto a (sub-)index value.- Specified by:
toSubIndexin interfaceVariable- Specified by:
toSubIndexin classAbstractVariable- Parameters:
impliedLength- specifies if the sub-index has an implied length. This parameter applies to variable length variables only (e.g.OctetStringandOID). For other variables it has no effect.- Returns:
- an OID that represents this value as an (sub-)index.
-
equals
- Specified by:
equalsin interfaceVariable- Specified by:
equalsin classAbstractVariable
-
hashCode
public int hashCode()- Specified by:
hashCodein interfaceVariable- Specified by:
hashCodein classAbstractVariable
-
toString
Description copied from class:AbstractVariableGets a string representation of the variable.- Specified by:
toStringin interfaceVariable- Specified by:
toStringin classAbstractVariable- Returns:
- a string representation of the variable's value.
-
clone
Description copied from interface:VariableClones this variable. Cloning can be used by the SNMP4J API to better support concurrency by creating a clone for internal processing. The content of this object is independent to the content of the clone. Thus, changes to the clone will have no effect to this object.- Specified by:
clonein interfaceVariable- Specified by:
clonein classAbstractVariable- Returns:
- a new instance of this
Variablewith the same value.
-
setValue
public void setValue(int value) - Specified by:
setValuein interfaceAssignableFromInteger
-
setValue
public void setValue(long value) - Specified by:
setValuein interfaceAssignableFromLong
-
setValue
-
setValue
public void setValue(byte[] value) Description copied from interface:AssignableFromByteArraySets the value of this object from the supplied byte array.- Specified by:
setValuein interfaceAssignableFromByteArray- Parameters:
value- a byte array.
-
setValue
- Specified by:
setValuein interfaceAssignableFromString
-
getVariable
Returns the typed variable that holds the wrapped value.- Returns:
- a Variable instance.
-
isDynamic
public boolean isDynamic()Description copied from class:AbstractVariableIndicates 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 aPDUwithPDU.add(VariableBinding). By cloning the value, it is ensured that there are no inconsistent changes between determining the length withAbstractVariable.getBERLength()for encoding enclosing SEQUENCES and the actual encoding of the Variable itself withAbstractVariable.encodeBER(java.io.OutputStream).- Specified by:
isDynamicin interfaceVariable- Overrides:
isDynamicin classAbstractVariable- Returns:
falseby default. Derived classes may override this if implementing dynamicVariableinstances.
-