1 22 package org.snmp4j.agent.mo.jmx.util; 23 24 import javax.management.ObjectName ; 25 26 import org.snmp4j.agent.mo.jmx.JMXIndexSupport; 27 import org.snmp4j.smi.OID; 28 29 32 public abstract class AbstractSyntheticJMXIndexSupport 33 implements JMXIndexSupport 34 { 35 36 protected KeyIndexRelation keyIndexRelation; 37 38 public AbstractSyntheticJMXIndexSupport() { 39 this(50); 40 } 41 42 public AbstractSyntheticJMXIndexSupport(int initialSize) { 43 keyIndexRelation = new KeyIndexRelation(initialSize); 44 } 45 46 public OID mapToIndex(Object rowIdentifier) { 47 OID index = keyIndexRelation.getKeys().get(rowIdentifier); 48 if (index == null) { 49 return allocateNewIndex(rowIdentifier); 50 } 51 return index; 52 } 53 54 protected OID allocateNewIndex(Object rowIdentifier) { 55 int hashCode = rowIdentifier.hashCode(); 56 OID index = new OID(new int[] { hashCode }); 57 while (keyIndexRelation.getIndexes().containsKey(index)) { 58 hashCode++; 59 index.set(0, hashCode); 60 } 61 keyIndexRelation.getKeys().put(rowIdentifier, index); 62 keyIndexRelation.getIndexes().put(index, rowIdentifier); 63 return index; 64 } 65 66 public abstract ObjectName mapToRowMBean(Object rowIdentifier); 67 68 public Object mapToRowIdentifier(OID rowIndex) { 69 if (rowIndex == null) { 70 return null; 71 } 72 return keyIndexRelation.getIndexes().get(rowIndex); 73 } 74 75 public Object getRowIdentifier(Object nativeRowId, int nativeRowIndex) { 76 return nativeRowId; 77 } 78 } 79 | Popular Tags |