01: /*_############################################################################
02: _##
03: _## SNMP4J-AgentJMX - AbstractSyntheticJMXIndexSupport.java
04: _##
05: _## Copyright (C) 2006-2007 Frank Fock (SNMP4J.org)
06: _##
07: _## This program is free software; you can redistribute it and/or modify
08: _## it under the terms of the GNU General Public License version 2 as
09: _## published by the Free Software Foundation.
10: _##
11: _## This program is distributed in the hope that it will be useful,
12: _## but WITHOUT ANY WARRANTY; without even the implied warranty of
13: _## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14: _## GNU General Public License for more details.
15: _##
16: _## You should have received a copy of the GNU General Public License
17: _## along with this program; if not, write to the Free Software
18: _## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19: _## MA 02110-1301 USA
20: _##
21: _##########################################################################*/
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: /**
30: * @author Frank Fock
31: */
32: public abstract class AbstractSyntheticJMXIndexSupport implements
33: JMXIndexSupport {
34:
35: protected KeyIndexRelation keyIndexRelation;
36:
37: public AbstractSyntheticJMXIndexSupport() {
38: this (50);
39: }
40:
41: public AbstractSyntheticJMXIndexSupport(int initialSize) {
42: keyIndexRelation = new KeyIndexRelation(initialSize);
43: }
44:
45: public OID mapToIndex(Object rowIdentifier) {
46: OID index = keyIndexRelation.getKeys().get(rowIdentifier);
47: if (index == null) {
48: return allocateNewIndex(rowIdentifier);
49: }
50: return index;
51: }
52:
53: protected OID allocateNewIndex(Object rowIdentifier) {
54: int hashCode = rowIdentifier.hashCode();
55: OID index = new OID(new int[] { hashCode });
56: while (keyIndexRelation.getIndexes().containsKey(index)) {
57: hashCode++;
58: index.set(0, hashCode);
59: }
60: keyIndexRelation.getKeys().put(rowIdentifier, index);
61: keyIndexRelation.getIndexes().put(index, rowIdentifier);
62: return index;
63: }
64:
65: public abstract ObjectName mapToRowMBean(Object rowIdentifier);
66:
67: public Object mapToRowIdentifier(OID rowIndex) {
68: if (rowIndex == null) {
69: return null;
70: }
71: return keyIndexRelation.getIndexes().get(rowIndex);
72: }
73:
74: public Object getRowIdentifier(Object nativeRowId,
75: int nativeRowIndex) {
76: return nativeRowId;
77: }
78: }
|