/*
* 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 agent capabilities 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 SnmpAgentCapabilities extends SnmpType {
/**
* The product release.
*/
private String productRelease;
/**
* The type status.
*/
private SnmpStatus status;
/**
* The type reference.
*/
private String reference;
/**
* The list of supported modules.
*/
private ArrayList<SnmpModuleSupport> modules;
/**
* Creates a new agent capabilities.
*
* @param productRelease the product release
* @param status the type status
* @param description the type description
* @param reference the type reference, or null
* @param modules the list of supported modules
*/
public SnmpAgentCapabilities(String productRelease,
SnmpStatus status,
String description,
String reference,
ArrayList<SnmpModuleSupport> modules) {
super("AGENT-CAPABILITIES", description);
this.productRelease = productRelease;
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 (SnmpModuleSupport 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 product release.
*
* @return the product release
*/
public String getProductRelease() {
return productRelease;
}
/**
* 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 the supported modules. The returned list
* will consist of SnmpModuleSupport instances.
*
* @return the list of the supported modules
*
* @see SnmpModuleSupport
*/
public ArrayList<SnmpModuleSupport> 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 Product Release: ");
buffer.append(productRelease);
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 (SnmpModuleSupport module : modules) {
buffer.append("\n Supports Module: ");
buffer.append(module);
}
buffer.append("\n)");
return buffer.toString();
}
}