/* * Copyright (c) 2001, 2006, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ package com.sun.jmx.snmp.internal; import java.util.Hashtable; import com.sun.jmx.snmp.SnmpEngineId; import com.sun.jmx.snmp.SnmpUnknownModelLcdException; import com.sun.jmx.snmp.SnmpUnknownSubSystemException; /** * Class to extend in order to develop a customized Local Configuration Datastore. The Lcd is used by the <CODE>SnmpEngine</CODE> to store and retrieve data. *<P> <CODE>SnmpLcd</CODE> manages the Lcds needed by every {@link com.sun.jmx.snmp.internal.SnmpModel SnmpModel}. It is possible to add and remove {@link com.sun.jmx.snmp.internal.SnmpModelLcd SnmpModelLcd}.</P> * <p><b>This API is a Sun Microsystems internal API and is subject * to change without notice.</b></p> * @since 1.5 */ public abstract class SnmpLcd { class SubSysLcdManager { private Hashtable<Integer, SnmpModelLcd> models = new Hashtable<Integer, SnmpModelLcd>(); public void addModelLcd(int id, SnmpModelLcd usmlcd) { models.put(new Integer(id), usmlcd); } public SnmpModelLcd getModelLcd(int id) { return models.get(new Integer(id)); } public SnmpModelLcd removeModelLcd(int id) { return models.remove(new Integer(id)); } } private Hashtable<SnmpSubSystem, SubSysLcdManager> subs = new Hashtable<SnmpSubSystem, SubSysLcdManager>(); /** * Returns the number of time the engine rebooted. * @return The number of reboots or -1 if the information is not present in the Lcd. */ public abstract int getEngineBoots(); /** * Returns the engine Id located in the Lcd. * @return The engine Id or null if the information is not present in the Lcd. */ public abstract String getEngineId(); /** * Persists the number of reboots. * @param i Reboot number. */ public abstract void storeEngineBoots(int i); /** * Persists the engine Id. * @param id The engine Id. */ public abstract void storeEngineId(SnmpEngineId id); /** * Adds an Lcd model. * @param sys The subsytem managing the model. * @param id The model Id. * @param lcd The Lcd model. */ public void addModelLcd(SnmpSubSystem sys, int id, SnmpModelLcd lcd) { SubSysLcdManager subsys = subs.get(sys); if( subsys == null ) { subsys = new SubSysLcdManager(); subs.put(sys, subsys); } subsys.addModelLcd(id, lcd); } /** * Removes an Lcd model. * @param sys The subsytem managing the model. * @param id The model Id. */ public void removeModelLcd(SnmpSubSystem sys, int id) throws SnmpUnknownModelLcdException, SnmpUnknownSubSystemException { SubSysLcdManager subsys = subs.get(sys); if( subsys != null ) { SnmpModelLcd lcd = subsys.removeModelLcd(id); if(lcd == null) { throw new SnmpUnknownModelLcdException("Model : " + id); } } else throw new SnmpUnknownSubSystemException(sys.toString()); } /** * Gets an Lcd model. * @param sys The subsytem managing the model * @param id The model Id. * @return The Lcd model or null if no Lcd model were found. */ public SnmpModelLcd getModelLcd(SnmpSubSystem sys, int id) { SubSysLcdManager subsys = subs.get(sys); if(subsys == null) return null; return subsys.getModelLcd(id); } }