KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > snmp4j > agent > mo > jmx > types > SMIVariant


1 /*_############################################################################
2   _##
3   _## SNMP4J-AgentJMX - SMIVariant.java
4   _##
5   _## Copyright (C) 2006-2007 Frank Fock (SNMP4J.org)
6   _##
7   _## This program is free software; you can redistribute it and/or modify
8   _## it under the terms of the GNU General Public License version 2 as
9   _## 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.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 JavaDoc;
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 JavaDoc 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 JavaDoc[] value) {
55     variable.setValue(value.length);
56   }
57
58   public final static void set(AssignableFromInteger variable, Number JavaDoc 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 JavaDoc[] value) {
67     variable.setValue(value.length);
68   }
69
70   public final static void set(AssignableFromInteger variable, Boolean JavaDoc value) {
71     variable.setValue((value.booleanValue() ? 1 : 2));
72   }
73
74   public final static void set(AssignableFromString variable, String JavaDoc value) {
75     variable.setValue(value);
76   }
77
78   public final static void set(OID variable, String JavaDoc 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 JavaDoc[] 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 JavaDoc toInteger(AssignableFromInteger variable) {
99     return new Integer JavaDoc(variable.toInt());
100   }
101
102   public final static Object JavaDoc toBoolean(AssignableFromInteger variable) {
103     return new Boolean JavaDoc((variable.toInt() == 1));
104   }
105
106   public final static Object JavaDoc toLong(AssignableFromLong variable) {
107     return new Long JavaDoc(variable.toLong());
108   }
109
110   public final static Object JavaDoc toString(AssignableFromString variable) {
111     return variable.toString();
112   }
113
114   public final static Object JavaDoc toByteArray(AssignableFromByteArray variable) {
115     return variable.toByteArray();
116   }
117
118   public final static Object JavaDoc toString(OID variable) {
119     return variable.toString();
120   }
121
122   public final static Object JavaDoc toIntegerArray(OID variable) {
123     return variable.getValue();
124   }
125
126   public int setValue(Object JavaDoc object) {
127     if (object == null) {
128       logger.debug("Cannot transform null value for "+
129                    variable.getClass().getName());
130       return PDU.noError;
131     }
132     Class JavaDoc[] params = new Class JavaDoc[] { variable.getClass(), object.getClass() };
133     try {
134       Method JavaDoc 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 JavaDoc 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 JavaDoc getValue(Class JavaDoc returnType) {
149     Class JavaDoc[] params = new Class JavaDoc[] { variable.getClass() };
150     try {
151       String JavaDoc methodName = "to"+returnType.getSimpleName();
152       methodName = methodName.replaceAll("\\[\\]", "Array");
153       Method JavaDoc m = getMethod(methodName, params);
154       try {
155         Object JavaDoc returnValue = m.invoke(this, variable);
156         return returnValue;
157       }
158       catch (UnsupportedOperationException JavaDoc uoex) {
159         uoex.printStackTrace();
160       }
161     }
162     catch (Exception JavaDoc 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 JavaDoc getMethod(String JavaDoc name, Class JavaDoc[] params) {
180     Method JavaDoc[] methods = getClass().getMethods();
181     for (Method JavaDoc method : methods) {
182       if (method.getName().equals(name) &&
183           (params.length == method.getParameterTypes().length)) {
184         Class JavaDoc[] 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