Package org.jboss.jmx.adaptor.snmp.agent

Source Code of org.jboss.jmx.adaptor.snmp.agent.SnmpVarBindFactory$SnmpDateMaker

/*
* Copyright (c) 2003,  Intracom S.A. - www.intracom.com
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version
*
* This library 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*
* This package and its source code is available at www.jboss.org
**/
package org.jboss.jmx.adaptor.snmp.agent;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import org.jboss.logging.Logger;
import org.opennms.protocols.snmp.SnmpCounter64;
import org.opennms.protocols.snmp.SnmpInt32;
import org.opennms.protocols.snmp.SnmpObjectId;
import org.opennms.protocols.snmp.SnmpOctetString;
import org.opennms.protocols.snmp.SnmpVarBind;
/**
* <tt>SnmpVarBindFactory</tt> implements the infrastructure required to
* generate SNMP variable bindings from generic Object instances.
* For each handled type (integer, string, e.t.c.) a corresponding maker class
* is present that "knows" how to make and populate the coresponding variable
* binding (SnmpInt32, SnmpOctetString). The mapping between types and makers
* is held in a hash map for optimised performance.
*
* @version $Revision: 44604 $
*
* @author  <a href="mailto:spol@intracom.gr">Spyros Pollatos</a>
* @author  <a href="mailto:dimitris@jboss.org">Dimitris Andreadis</a>
**/
public class SnmpVarBindFactory
{
   /** The logger object */
   private static final Logger log = Logger.getLogger(SnmpVarBindFactory.class);
  
   /** Contains "type - maker" tupples */
   private Map makers = new HashMap();

   /** Default Maker */
   private final Maker defaultMaker = new SnmpObjectMaker();
  
   /**
    * CTOR - Initialises the factory with the known handled types and maker
    * instances
   **/       
   public SnmpVarBindFactory()
   {
      makers.put("java.lang.String", new SnmpOctetStringMaker());
      makers.put("java.lang.Integer", new SnmpInt32Maker());
      makers.put("java.lang.Long", new SnmpCounter64Maker());
      makers.put("java.math.BigInteger", new SnmpCounter64Maker());
      makers.put("java.util.Date", new SnmpDateMaker());
   }
   
   /**
    * The factory method. A lookup is performed based on the type of the
    * provided value, as this is returned by "getClass().getName()". If a
    * match is found the call is delegated to the returned maker.
   **/   
   public SnmpVarBind make(String oid, Object value)
      throws MappingFailedException
   {
      // Get value type and locate the maker
      String type = value.getClass().getName();
      Maker m = (Maker)this.makers.get(type);
       
      // Delegate where type match is found. If not use generic varbind maker
      if (m == null) {
         log.warn("Value type \"" + type + "\" for OID " + oid +
                  " encountered. Using default VarBind maker");
        
         return defaultMaker.make(oid, value);
      }
      else
         return m.make(oid, value);
   }
   
   /**
    * The generic interface that should be implemented by all makers.
   **/    
   interface Maker
   {
      public SnmpVarBind make(String oid, Object value)
         throws MappingFailedException;
   }

   /**
    * Generates unsigned integer SNMP variable bindings
   **/        
   class SnmpInt32Maker
      implements Maker
   {
      public SnmpVarBind make(String oid, Object value)
         throws MappingFailedException
      {
         Integer i = (Integer)value;
           
         return new SnmpVarBind(new SnmpObjectId(oid),
                                new SnmpInt32(i));
      }
   } // class SnmpInt32Maker

   /**
    * Generates unsigned long integer SNMP variable bindings
   **/        
   class SnmpCounter64Maker
      implements Maker
   {
      public SnmpVarBind make(String oid, Object value)
         throws MappingFailedException
      {
         Long l = (Long)value;
           
         return new SnmpVarBind(new SnmpObjectId(oid),
                                new SnmpCounter64(l.longValue()));
      }
   } // class SnmpCounter64Maker   
   
   /**
    * Generates octet string SNMP variable bindings
   **/        
   class SnmpOctetStringMaker
      implements Maker
   {
      public SnmpVarBind make(String oid, Object value)
         throws MappingFailedException
      {
         String s = (String)value;
           
         return new SnmpVarBind(new SnmpObjectId(oid),
                                new SnmpOctetString(s.getBytes()));
      }
   } // class OctetStringMaker

   /**
    * Generates octet string SNMP variable bindings from dates
   **/        
   class SnmpDateMaker
      implements Maker
   {
      public SnmpVarBind make(String oid, Object value)
         throws MappingFailedException
      {
         Date d = (Date)value;
         SnmpOctetStringMaker sMaker =  new SnmpOctetStringMaker();

         return sMaker.make(oid, d.toString());
      }
   } // class SnmpDateMaker

   /**
    * Generates octet string SNMP variable bindings from objects
   **/        
   class SnmpObjectMaker
      implements Maker
   {
      public SnmpVarBind make(String oid, Object value)
         throws MappingFailedException
      {
         SnmpOctetStringMaker sMaker =  new SnmpOctetStringMaker();

         return sMaker.make(oid, value.toString());
      }
   } // class SnmpDateMaker  
   
} // class SnmpVarBindFactory

TOP

Related Classes of org.jboss.jmx.adaptor.snmp.agent.SnmpVarBindFactory$SnmpDateMaker

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.