- java.lang.Object
-
- org.snmp4j.smi.AbstractVariable
-
- All Implemented Interfaces:
java.io.Serializable
,java.lang.Cloneable
,java.lang.Comparable<Variable>
,BERSerializable
,Variable
- Direct Known Subclasses:
Counter64
,Integer32
,Null
,OctetString
,OID
,SMIAddress
,UnsignedInteger32
,VariantVariable
public abstract class AbstractVariable extends java.lang.Object implements Variable, java.io.Serializable
TheVariable
abstract class is the base class for all SNMP variables.All derived classes need to be registered with their SMI BER type in the
smisyntaxes.properties
so that thecreateFromBER(BERInputStream inputStream)
method is able to decode a variable from a BER encoded stream.To register additional syntaxes, set the system property
SMISYNTAXES_PROPERTIES
before decoding a Variable for the first time. The path of the property file must be accessible from the classpath and it has to be specified relative to theVariable
class.- Since:
- 1.8
- Version:
- 1.8
- See Also:
- Serialized Form
-
-
Field Summary
Fields Modifier and Type Field Description private static LogAdapter
logger
private static java.util.Hashtable<java.lang.Integer,java.lang.Class<? extends Variable>>
registeredSyntaxes
private static long
serialVersionUID
static java.lang.String
SMISYNTAXES_PROPERTIES
private static java.lang.String
SMISYNTAXES_PROPERTIES_DEFAULT
private static java.lang.Object[][]
SYNTAX_NAME_MAPPING
-
Constructor Summary
Constructors Constructor Description AbstractVariable()
The abstractVariable
class serves as the base class for all specific SNMP syntax types.
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description abstract java.lang.Object
clone()
Clones this variable.abstract int
compareTo(Variable o)
static Variable
createFromBER(BERInputStream inputStream)
Creates aVariable
from a BER encodedBERInputStream
.static Variable
createFromSyntax(int smiSyntax)
Creates aVariable
from the supplied SMI syntax identifier.private static Variable
createVariable(int smiSyntax)
abstract void
decodeBER(BERInputStream inputStream)
Decodes aVariable
from anBERInputStream
.abstract void
encodeBER(java.io.OutputStream outputStream)
Encodes aVariable
to anOutputStream
.static boolean
equal(AbstractVariable a, AbstractVariable b)
Tests if two variables have the same value.abstract boolean
equals(java.lang.Object o)
abstract void
fromSubIndex(OID subIndex, boolean impliedLength)
Sets the value of thisVariable
from the supplied (sub-)index.abstract int
getBERLength()
Returns the length of thisVariable
in bytes when encoded according to the Basic Encoding Rules (BER).int
getBERPayloadLength()
Returns the length of the payload of thisBERSerializable
object in bytes when encoded according to the Basic Encoding Rules (BER).abstract int
getSyntax()
Gets the ASN.1 syntax identifier value of this SNMP variable.static int
getSyntaxFromString(java.lang.String syntaxString)
Returns the BER syntax ID for the supplied syntax string (as returned bygetSyntaxString(int)
).java.lang.String
getSyntaxString()
Gets a textual description of this Variable.static java.lang.String
getSyntaxString(int syntax)
Gets a textual description of the supplied syntax type.abstract int
hashCode()
boolean
isDynamic()
Indicates whether this variable is dynamic, which means that it might change its value while it is being (BER) serialized.boolean
isException()
Checks whether this variable represents an exception like noSuchObject, noSuchInstance, and endOfMibView.private static void
registerSyntaxes()
Register SNMP syntax classes from a properties file.abstract int
toInt()
Returns an integer representation of this variable if such a representation exists.abstract long
toLong()
Returns a long representation of this variable if such a representation exists.abstract java.lang.String
toString()
Gets a string representation of the variable.abstract OID
toSubIndex(boolean impliedLength)
Converts the value of thisVariable
to a (sub-)index value.
-
-
-
Field Detail
-
serialVersionUID
private static final long serialVersionUID
- See Also:
- Constant Field Values
-
SMISYNTAXES_PROPERTIES
public static final java.lang.String SMISYNTAXES_PROPERTIES
- See Also:
- Constant Field Values
-
SMISYNTAXES_PROPERTIES_DEFAULT
private static final java.lang.String SMISYNTAXES_PROPERTIES_DEFAULT
- See Also:
- Constant Field Values
-
SYNTAX_NAME_MAPPING
private static final java.lang.Object[][] SYNTAX_NAME_MAPPING
-
registeredSyntaxes
private static java.util.Hashtable<java.lang.Integer,java.lang.Class<? extends Variable>> registeredSyntaxes
-
logger
private static final LogAdapter logger
-
-
Method Detail
-
equals
public abstract boolean equals(java.lang.Object o)
-
compareTo
public abstract int compareTo(Variable o)
-
hashCode
public abstract int hashCode()
-
getBERLength
public abstract int getBERLength()
Returns the length of thisVariable
in bytes when encoded according to the Basic Encoding Rules (BER).- Specified by:
getBERLength
in interfaceBERSerializable
- Returns:
- the BER encoded length of this variable.
-
getBERPayloadLength
public int getBERPayloadLength()
Description copied from interface:BERSerializable
Returns the length of the payload of thisBERSerializable
object in bytes when encoded according to the Basic Encoding Rules (BER).- Specified by:
getBERPayloadLength
in interfaceBERSerializable
- Returns:
- the BER encoded length of this variable.
-
decodeBER
public abstract void decodeBER(BERInputStream inputStream) throws java.io.IOException
Decodes aVariable
from anBERInputStream
.- Specified by:
decodeBER
in interfaceBERSerializable
- Parameters:
inputStream
- anBERInputStream
containing a BER encoded byte stream.- Throws:
java.io.IOException
- if the stream could not be decoded by using BER rules.
-
encodeBER
public abstract void encodeBER(java.io.OutputStream outputStream) throws java.io.IOException
Encodes aVariable
to anOutputStream
.- Specified by:
encodeBER
in interfaceBERSerializable
- Parameters:
outputStream
- anOutputStream
.- Throws:
java.io.IOException
- if an error occurs while writing to the stream.
-
createFromBER
public static Variable createFromBER(BERInputStream inputStream) throws java.io.IOException
Creates aVariable
from a BER encodedBERInputStream
. Subclasses ofVariable
are registered using the properties filesmisyntaxes.properties
in this package. The properties are read when this method is called first.- Parameters:
inputStream
- anBERInputStream
containing a BER encoded byte stream.- Returns:
- an instance of a subclass of
Variable
. - Throws:
java.io.IOException
- if theinputStream
is not properly BER encoded.
-
createVariable
private static Variable createVariable(int smiSyntax)
-
createFromSyntax
public static Variable createFromSyntax(int smiSyntax)
Creates aVariable
from the supplied SMI syntax identifier. Subclasses ofVariable
are registered using the properties filesmisyntaxes.properties
in this package. The properties are read when this method is called for the first time.- Parameters:
smiSyntax
- an SMI syntax identifier of the registered types, which is typically defined bySMIConstants
.- Returns:
- a
Variable
variable instance of the supplied SMI syntax.
-
registerSyntaxes
private static void registerSyntaxes()
Register SNMP syntax classes from a properties file. The registered syntaxes are used by thecreateFromBER(org.snmp4j.asn1.BERInputStream)
method to type-safe instantiate sub-classes fromVariable
from an BER encodedInputStream
.
-
getSyntax
public abstract int getSyntax()
Gets the ASN.1 syntax identifier value of this SNMP variable.
-
isException
public boolean isException()
Checks whether this variable represents an exception like noSuchObject, noSuchInstance, and endOfMibView.- Specified by:
isException
in interfaceVariable
- Returns:
true
if the syntax of this variable is an instance ofNull
and its syntax equals one of the following:
-
toString
public abstract java.lang.String toString()
Gets a string representation of the variable.
-
toInt
public abstract int toInt()
Returns an integer representation of this variable if such a representation exists.- Specified by:
toInt
in interfaceVariable
- Returns:
- an integer value (if the native representation of this variable would be a long, then the long value will be casted to int).
- Throws:
java.lang.UnsupportedOperationException
- if an integer representation does not exists for this Variable.- Since:
- 1.7
-
toLong
public abstract long toLong()
Returns a long representation of this variable if such a representation exists.
-
clone
public abstract 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 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.
-
getSyntaxString
public static java.lang.String getSyntaxString(int syntax)
Gets a textual description of the supplied syntax type.- Parameters:
syntax
- the BER code of the syntax.- Returns:
- a textual description like 'Integer32' for
syntax
as used in the Structure of Management Information (SMI) modules. '?' is returned if the supplied syntax is unknown.
-
getSyntaxString
public final java.lang.String getSyntaxString()
Gets a textual description of this Variable.- Specified by:
getSyntaxString
in interfaceVariable
- Returns:
- a textual description like 'Integer32' as used in the Structure of Management Information (SMI) modules. '?' is returned if the syntax is unknown.
- Since:
- 1.7
-
getSyntaxFromString
public static int getSyntaxFromString(java.lang.String syntaxString)
Returns the BER syntax ID for the supplied syntax string (as returned bygetSyntaxString(int)
).- Parameters:
syntaxString
- the textual representation of the syntax.- Returns:
- the corresponding BER ID.
- Since:
- 1.6
-
toSubIndex
public abstract OID toSubIndex(boolean impliedLength)
Converts the value of thisVariable
to a (sub-)index value.- Specified by:
toSubIndex
in interfaceVariable
- Parameters:
impliedLength
- specifies if the sub-index has an implied length. This parameter applies to variable length variables only (e.g.OctetString
andOID
). For other variables it has no effect.- Returns:
- an OID that represents this value as an (sub-)index.
- Throws:
java.lang.UnsupportedOperationException
- if this variable cannot be used in an index.- Since:
- 1.7
-
fromSubIndex
public abstract void fromSubIndex(OID subIndex, boolean impliedLength)
Sets the value of thisVariable
from the supplied (sub-)index.- Specified by:
fromSubIndex
in interfaceVariable
- 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
andOID
). For other variables it has no effect.- Throws:
java.lang.UnsupportedOperationException
- if this variable cannot be used in an index.- Since:
- 1.7
-
isDynamic
public boolean isDynamic()
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 aPDU
withPDU.add(VariableBinding)
. By cloning the value, it is ensured that there are no inconsistent changes between determining the length withgetBERLength()
for encoding enclosing SEQUENCES and the actual encoding of the Variable itself withencodeBER(java.io.OutputStream)
.
-
equal
public static boolean equal(AbstractVariable a, AbstractVariable b)
Tests if two variables have the same value.- Parameters:
a
- a variable.b
- another variable.- Returns:
true
ifa == null) ? (b == null) : a.equals(b)
.- Since:
- 2.0
-
-