/*
* Mibble MIB Parser (www.mibble.org)
*
* See LICENSE.txt for licensing information.
*
* Copyright (c) 2006-2017 Per Cederberg. All rights reserved.
*/
package net.percederberg.mibble;
import net.percederberg.mibble.snmp.SnmpObjectType;
import net.percederberg.mibble.type.TypeReference;
import net.percederberg.mibble.value.ValueReference;
/**
* A MIB type context. This class attempts to resolve all symbols as
* defined enumeration values in the contained MIB type.
*
* @author Per Cederberg
* @version 2.8
* @since 2.8
*/
class MibTypeContext implements MibContext {
/**
* The MIB symbol, value or type.
*/
private Object context;
/**
* Creates a new MIB type context.
*
* @param context the MIB symbol, value or type
*/
public MibTypeContext(Object context) {
this.context = context;
}
/**
* Searches for a named MIB symbol. This method may search outside
* the normal (or strict) scope, thereby allowing a form of
* relaxed search. Note that the results from the normal and
* expanded search may not be identical, due to the context
* chaining and the same symbol name appearing in various
* contexts.<p>
*
* <strong>NOTE:</strong> This is an internal method that should
* only be called by the MIB loader.
*
* @param name the symbol name
* @param expanded the expanded scope flag
*
* @return the MIB symbol, or null if not found
*
* @since 2.4
*/
public MibSymbol findSymbol(String name, boolean expanded) {
MibContext ctx = null;
if (context instanceof ValueReference) {
context = ((ValueReference) context).getSymbol();
}
if (context instanceof MibTypeSymbol) {
context = ((MibTypeSymbol) context).getType();
}
if (context instanceof MibValueSymbol) {
context = ((MibValueSymbol) context).getType();
}
if (context instanceof SnmpObjectType) {
context = ((SnmpObjectType) context).getSyntax();
}
if (context instanceof TypeReference) {
context = ((TypeReference) context).getSymbol();
return findSymbol(name, expanded);
}
if (context instanceof MibContext) {
ctx = (MibContext) context;
}
return (ctx == null) ? null : ctx.findSymbol(name, expanded);
}
/**
* Returns a string representation of this object.
*
* @return a string representation of this object
*/
public String toString() {
return "<type context>";
}
}