/* * Mibble MIB Parser (www.mibble.org) * * See LICENSE.txt for licensing information. * * Copyright (c) 2004-2017 Per Cederberg. All rights reserved. */ package net.percederberg.mibble; /** * The base MIB value class. There are only a few MIB value classes, * each corresponding to a primitive ASN.1 type. To extract the basic * Java representation of the MIB value, the toObject() method should * be used. * * @author Per Cederberg * @version 2.10 * @since 2.0 */ public abstract class MibValue implements Comparable<Object> { /** * The value name. */ private String name; /** * The value reference symbol. This is set to the referenced * value symbol when resolving this value. */ private MibValueSymbol reference = null; /** * Creates a new MIB value instance. * * @param name the value name */ protected MibValue(String name) { this.name = name; } /** * Initializes the MIB value. This will remove all levels of * indirection present, such as references to other values. No * value information is lost by this operation. This method may * modify this object as a side-effect, and will return the basic * value.<p> * * <strong>NOTE:</strong> This is an internal method that should * only be called by the MIB loader. * * @param log the MIB loader log * @param type the value type * * @return the basic MIB value * * @throws MibException if an error was encountered during the * initialization */ public abstract MibValue initialize(MibLoaderLog log, MibType type) throws MibException; /** * Creates a value reference to this value. The value reference * is normally an identical value. Only certain values support * being referenced, and the default implementation of this * method throws an exception.<p> * * <strong>NOTE:</strong> This is an internal method that should * only be called by the MIB loader. * * @return the MIB value reference * * @throws UnsupportedOperationException if a value reference * couldn't be created * * @since 2.2 */ public MibValue createReference() throws UnsupportedOperationException { String msg = name + " value cannot be referenced"; throw new UnsupportedOperationException(msg); } /** * Clears and prepares this value for garbage collection. This * method will recursively clear any associated types or values, * making sure that no data structures references this object.<p> * * <strong>NOTE:</strong> This is an internal method that should * only be called by the MIB loader. */ protected void clear() { reference = null; } /** * Checks if this value referenced the specified value symbol. * * @param name the value symbol name * * @return true if this value was a reference to the symbol, or * false otherwise * * @since 2.2 */ public boolean isReferenceTo(String name) { if (reference == null) { return false; } else if (reference.getName().equals(name)) { return true; } else { return reference.getValue().isReferenceTo(name); } } /** * Checks if this value referenced the specified value symbol. * * @param module the value symbol module (MIB) name * @param name the value symbol name * * @return true if this value was a reference to the symbol, or * false otherwise * * @since 2.2 */ public boolean isReferenceTo(String module, String name) { if (reference == null) { return false; } Mib mib = reference.getMib(); if (mib.getName().equals(module) && reference.getName().equals(name)) { return true; } else { return reference.getValue().isReferenceTo(module, name); } } /** * Returns the value name. * * @return the value name, or * an empty string if not applicable * * @since 2.2 */ public String getName() { return name; } /** * Returns the value reference symbol. A value reference is * created whenever a value is defined in a value assignment, and * later referenced by name from some other symbol. The complete * chain of value references is available by calling * getReference() recursively on the value of the returned value * symbol. * * @return the value reference symbol, or * null if this value never referenced another value * * @since 2.2 */ public MibValueSymbol getReferenceSymbol() { return reference; } /** * Sets the value reference symbol. The value reference is set * whenever a value is defined in a value assignment, and later * referenced by name from some other symbol.<p> * * <strong>NOTE:</strong> This is an internal method that should * only be called by the MIB loader. * * @param symbol the referenced value symbol * * @since 2.2 */ public void setReferenceSymbol(MibValueSymbol symbol) { this.reference = symbol; } /** * Returns a Java object representation of this value. * * @return a Java object representation of this value */ public abstract Object toObject(); }