/* * 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.snmp; import java.util.ArrayList; import net.percederberg.mibble.MibException; import net.percederberg.mibble.MibLoaderLog; import net.percederberg.mibble.MibSymbol; import net.percederberg.mibble.MibType; import net.percederberg.mibble.MibValue; import net.percederberg.mibble.MibValueSymbol; import net.percederberg.mibble.value.ObjectIdentifierValue; /** * The SNMP module compliance macro type. This macro type was added * to SMIv2 and is defined in RFC 2580. * * @see <a href="http://www.ietf.org/rfc/rfc2580.txt">RFC 2580 (SNMPv2-CONF)</a> * * @author Per Cederberg * @version 2.10 * @since 2.0 */ public class SnmpModuleCompliance extends SnmpType { /** * The type status. */ private SnmpStatus status; /** * The type reference. */ private String reference; /** * The list of modules. */ private ArrayList<SnmpModule> modules; /** * Creates a new SNMP module compliance type. * * @param status the type status * @param description the type description * @param reference the type reference, or null * @param modules the list of SNMP modules */ public SnmpModuleCompliance(SnmpStatus status, String description, String reference, ArrayList<SnmpModule> modules) { super("MODULE-COMPLIANCE", description); this.status = status; this.reference = reference; this.modules = modules; } /** * Initializes the MIB type. This will remove all levels of * indirection present, such as references to types or values. No * information is lost by this operation. This method may modify * this object as a side-effect, and will return the basic * type.<p> * * <strong>NOTE:</strong> This is an internal method that should * only be called by the MIB loader. * * @param symbol the MIB symbol containing this type * @param log the MIB loader log * * @return the basic MIB type * * @throws MibException if an error was encountered during the * initialization * * @since 2.2 */ public MibType initialize(MibSymbol symbol, MibLoaderLog log) throws MibException { if (!(symbol instanceof MibValueSymbol)) { throw new MibException(symbol.getFileRef(), "only values can have the " + getName() + " type"); } for (SnmpModule module : modules) { module.initialize(log); } return this; } /** * Checks if the specified value is compatible with this type. A * value is compatible if and only if it is an object identifier * value. * * @param value the value to check * * @return true if the value is compatible, or * false otherwise */ public boolean isCompatible(MibValue value) { return value instanceof ObjectIdentifierValue; } /** * Returns the type status. * * @return the type status */ public SnmpStatus getStatus() { return status; } /** * Returns the type reference. * * @return the type reference, or * null if no reference has been set */ public String getReference() { return reference; } /** * Returns the list of SNMP modules. The returned list will * consist of SnmpModule instances. * * @return the list of SNMP modules * * @see SnmpModule */ public ArrayList<SnmpModule> getModules() { return modules; } /** * Returns a string representation of this object. * * @return a string representation of this object */ public String toString() { StringBuilder buffer = new StringBuilder(); buffer.append(super.toString()); buffer.append(" ("); buffer.append("\n Status: "); buffer.append(status); buffer.append("\n Description: "); buffer.append(getDescription(" ")); if (reference != null) { buffer.append("\n Reference: "); buffer.append(reference); } for (SnmpModule module : modules) { buffer.append("\n Module: "); buffer.append(module); } buffer.append("\n)"); return buffer.toString(); } }