# SynapseMIBUtils.java

    /*
     *  Licensed to the Apache Software Foundation (ASF) under one
     *  or more contributor license agreements.  See the NOTICE file
     *  distributed with this work for additional information
     *  regarding copyright ownership.  The ASF licenses this file
     *  to you under the Apache License, Version 2.0 (the
     *  "License"); you may not use this file except in compliance
     *  with the License.  You may obtain a copy of the License at
     *
     *   http://www.apache.org/licenses/LICENSE-2.0
     *
     *  Unless required by applicable law or agreed to in writing,
     *  software distributed under the License is distributed on an
     *   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
     *  KIND, either express or implied.  See the License for the
     *  specific language governing permissions and limitations
     *  under the License.
     */

    package org.apache.synapse.commons.snmp;

    import javax.management.ObjectName;
    import java.util.HashMap;
    import java.util.Map;

    /**
     * Utilities for generating Synapse OIDs and MIB entries
     */
    public class SynapseMIBUtils {

        private static final String PROPERTY_CONNECTOR_NAME = "ConnectorName";
        private static final String PROPERTY_NAME = "Name";
        private static final String PROPERTY_TYPE = "Type";

        /**
         * Contains MBean name to OID mappings. MBeans which are not included
         * in this map are not exposed over SNMP.
         */
        private static final Map<String,Integer> type2oid = new HashMap<String, Integer>();

        /**
         * A basic symbol table to ensure consistent OID assignment for MBean
         * attributes.
         */
        private static final Map<String,Integer> name2oid = new HashMap<String, Integer>();

        static {
            type2oid.put("ServerManager", 1);
            type2oid.put("Transport", 2);
            type2oid.put("NhttpConnections", 3);
            type2oid.put("NHTTPLatencyView", 4);
            type2oid.put("NHTTPS2SLatencyView", 5);

            name2oid.put("nio-http-listener", 1);
            name2oid.put("nio-http-sender", 2);
            name2oid.put("nio-https-listener", 3);
            name2oid.put("nio-https-sender", 4);
            name2oid.put("jms-listener", 5);
            name2oid.put("jms-sender", 6);
            name2oid.put("vfs-listener", 7);
            name2oid.put("vfs-sender", 8);
            name2oid.put("mailto-listener", 9);
            name2oid.put("mailto-sender", 10);
            name2oid.put("http-listener", 11);
            name2oid.put("http-sender", 12);
            name2oid.put("https-listener", 13);
            name2oid.put("https-sender", 14);
            name2oid.put("nio-http", 15);
            name2oid.put("nio-https", 16);
            name2oid.put("passthru-http-sender",17);
            name2oid.put("passthru-https-sender",18);
            name2oid.put("passthru-http-receiver",19);
            name2oid.put("passthru-https-receiver",20);
        }

        public synchronized static String getOID(ObjectName objectName) {
            String type = objectName.getKeyProperty(PROPERTY_TYPE);
            Integer typeOID = type2oid.get(type);
            if (typeOID == null) {
                return null;
            }

            //Seems this code segment is no longer required
            //https://wso2.org/jira/browse/ESBJAVA-1932
    //        String name;
    //        if ("Transport".equals(type)) {
    //            // ditch the time stamp suffix at the end of the connector name
    //            String connector = objectName.getKeyProperty(PROPERTY_CONNECTOR_NAME);
    //            name = connector.substring(0, connector.lastIndexOf('-'));
    //        } else {
    //            name = objectName.getKeyProperty(PROPERTY_NAME);
    //        }

            String name = objectName.getKeyProperty(PROPERTY_NAME);

            if (name != null) {
                Integer nameOID = name2oid.get(name);
                if (nameOID == null) {
                    nameOID = new Integer(name2oid.size() + 1);
                    name2oid.put(name, nameOID);
                }
                return SNMPConstants.SYNAPSE_OID_BRANCH + "." + typeOID.intValue() +
                        "." + nameOID.intValue();
            } else {
                return SNMPConstants.SYNAPSE_OID_BRANCH + "." + typeOID.intValue();
            }
        }

    }