1 22 package org.snmp4j.agent.mo.jmx.types; 23 24 import org.snmp4j.smi.OctetString; 25 import javax.management.*; 26 27 public class EnumBitsType extends TypedAttribute { 28 29 private Enum [] enumValues; 30 private Class enumClass; 31 private int offset = 0; 32 33 public EnumBitsType(String name, Class enumClass, Enum [] enumValues) { 34 super(name, byte[].class); 35 this.enumClass = enumClass; 36 this.enumValues = enumValues; 37 } 38 39 public EnumBitsType(String name, Class enumClass, 40 Enum [] enumValues, int offset) { 41 this(name, enumClass, enumValues); 42 this.offset = offset; 43 } 44 45 public int getOffset() { 46 return offset; 47 } 48 49 public Object transformFromNative(Object nativeValue, ObjectName objectName) { 50 Enum en; 51 if (nativeValue instanceof Enum ) { 52 en = (Enum )nativeValue; 53 } 54 else { 55 en = Enum.valueOf(enumClass, nativeValue.toString()); 56 } 57 int o = offset + en.ordinal(); 58 StringBuffer buf = new StringBuffer ("1"); 59 for (int i=0; i<o; i++) { 60 buf.insert(0, "0"); 61 } 62 while (buf.length() % 8 > 0) { 63 buf.append("0"); 64 } 65 return OctetString.fromString(buf.toString(), 2).toByteArray(); 66 } 67 68 public Object transformToNative(Object transformedValue, 69 Object oldNativeValue, ObjectName objectName) { 70 OctetString os = new OctetString((byte[])transformedValue); 71 String s = os.toString(2); 72 int pos = s.indexOf("1"); 73 if (pos < 0) { 74 return null; 75 } 76 pos -= offset; 77 return enumValues[pos]; 78 } 79 80 } 81 | Popular Tags |