1 22 package org.snmp4j.agent.mo.jmx.types; 23 24 import org.snmp4j.smi.Variable; 25 import org.snmp4j.smi.AssignableFromLong; 26 import org.snmp4j.smi.AssignableFromString; 27 import org.snmp4j.smi.AssignableFromByteArray; 28 import org.snmp4j.PDU; 29 import org.snmp4j.smi.AssignableFromInteger; 30 import java.lang.reflect.Method ; 31 import org.snmp4j.log.LogFactory; 32 import org.snmp4j.log.LogAdapter; 33 import org.snmp4j.smi.OID; 34 35 public class SMIVariant { 36 37 private static final LogAdapter logger = 38 LogFactory.getLogger(SMIVariant.class); 39 40 private Variable variable; 41 42 public SMIVariant(Variable variable) { 43 this.variable = variable; 44 } 45 46 public final static void set(AssignableFromLong variable, Number value) { 47 variable.setValue(value.longValue()); 48 } 49 50 public final static void set(AssignableFromLong variable, long value) { 51 variable.setValue(value); 52 } 53 54 public final static void set(AssignableFromLong variable, Object [] value) { 55 variable.setValue(value.length); 56 } 57 58 public final static void set(AssignableFromInteger variable, Number value) { 59 variable.setValue(value.intValue()); 60 } 61 62 public final static void set(AssignableFromInteger variable, int value) { 63 variable.setValue(value); 64 } 65 66 public final static void set(AssignableFromInteger variable, Object [] value) { 67 variable.setValue(value.length); 68 } 69 70 public final static void set(AssignableFromInteger variable, Boolean value) { 71 variable.setValue((value.booleanValue() ? 1 : 2)); 72 } 73 74 public final static void set(AssignableFromString variable, String value) { 75 variable.setValue(value); 76 } 77 78 public final static void set(OID variable, String value) { 79 variable.setValue(value); 80 } 81 82 public final static void set(OID variable, int[] value) { 83 variable.setValue(value); 84 } 85 86 public final static void set(AssignableFromByteArray variable, Byte [] value) { 87 byte[] b = new byte[value.length]; 88 for (int i=0; i<value.length; i++) { 89 b[i] = value[i].byteValue(); 90 } 91 variable.setValue(b); 92 } 93 94 public final static void set(AssignableFromByteArray variable, byte[] value) { 95 variable.setValue(value); 96 } 97 98 public final static Object toInteger(AssignableFromInteger variable) { 99 return new Integer (variable.toInt()); 100 } 101 102 public final static Object toBoolean(AssignableFromInteger variable) { 103 return new Boolean ((variable.toInt() == 1)); 104 } 105 106 public final static Object toLong(AssignableFromLong variable) { 107 return new Long (variable.toLong()); 108 } 109 110 public final static Object toString(AssignableFromString variable) { 111 return variable.toString(); 112 } 113 114 public final static Object toByteArray(AssignableFromByteArray variable) { 115 return variable.toByteArray(); 116 } 117 118 public final static Object toString(OID variable) { 119 return variable.toString(); 120 } 121 122 public final static Object toIntegerArray(OID variable) { 123 return variable.getValue(); 124 } 125 126 public int setValue(Object object) { 127 if (object == null) { 128 logger.debug("Cannot transform null value for "+ 129 variable.getClass().getName()); 130 return PDU.noError; 131 } 132 Class [] params = new Class [] { variable.getClass(), object.getClass() }; 133 try { 134 Method m = getMethod("set", params); 135 m.invoke(this, variable, object); 136 logger.debug("Set new value to '"+variable+"' from '"+object+"'"); 137 return PDU.noError; 138 } 139 catch (Exception ex) { 140 ex.printStackTrace(); 141 logger.error("Failed to convert '"+object+"' of class '"+ 142 ((object==null)?"?":object.getClass())+"' to '"+variable+ 143 "' of type '"+variable.getSyntaxString()+"'"); 144 return PDU.genErr; 145 } 146 } 147 148 public Object getValue(Class returnType) { 149 Class [] params = new Class [] { variable.getClass() }; 150 try { 151 String methodName = "to"+returnType.getSimpleName(); 152 methodName = methodName.replaceAll("\\[\\]", "Array"); 153 Method m = getMethod(methodName, params); 154 try { 155 Object returnValue = m.invoke(this, variable); 156 return returnValue; 157 } 158 catch (UnsupportedOperationException uoex) { 159 uoex.printStackTrace(); 160 } 161 } 162 catch (Exception ex) { 163 ex.printStackTrace(); 164 logger.error("Failed to convert '"+variable+"' of type '"+ 165 variable.getSyntaxString()+"' to '"+ 166 returnType.getSimpleName()+"'"); 167 return null; 168 } 169 logger.error("Failed to convert '"+variable+"' of type '"+ 170 variable.getSyntaxString()+"' to '"+returnType.getName()+ 171 "'"); 172 return null; 173 } 174 175 public Variable getVariable() { 176 return variable; 177 } 178 179 private Method getMethod(String name, Class [] params) { 180 Method [] methods = getClass().getMethods(); 181 for (Method method : methods) { 182 if (method.getName().equals(name) && 183 (params.length == method.getParameterTypes().length)) { 184 Class [] declParams = method.getParameterTypes(); 185 boolean usable = true; 186 for (int i=0; i<declParams.length; i++) { 187 usable &= (declParams[i].isAssignableFrom(params[i])); 188 } 189 if (usable) { 190 return method; 191 } 192 } 193 } 194 return null; 195 } 196 } 197 | Popular Tags |