1 22 23 package org.snmp4j.agent.mo.jmx; 24 25 import org.snmp4j.smi.OID; 26 import org.snmp4j.smi.Variable; 27 import javax.management.ObjectName ; 28 import javax.management.MBeanServerConnection ; 29 import org.snmp4j.PDU; 30 import org.snmp4j.smi.Integer32; 31 import org.snmp4j.smi.SMIConstants; 32 import javax.management.*; 33 import javax.management.*; 34 import javax.management.*; 35 36 49 public class MBeanActionMOScalarSupport extends AbstractMBeanSupport 50 implements JMXScalarSupport 51 { 52 53 public MBeanActionMOScalarSupport(MBeanServerConnection server) { 54 super(server); 55 } 56 57 64 public synchronized void add(OID oid, MBeanActionMOInfo mBean) { 65 oid2MBeanMap.put(oid, mBean); 66 } 67 68 81 public synchronized void addAll(ObjectName mBeanName, 82 Object [][] mBeanScalarAttributeDescriptions) { 83 for (Object [] attrDescr : mBeanScalarAttributeDescriptions) { 84 MBeanActionMOInfo mBeanInfo; 85 mBeanInfo = new MBeanActionMOInfo(mBeanName, 86 (MBeanStateInfo[]) attrDescr[1], 87 (MBeanActionInfo[]) attrDescr[2]); 88 oid2MBeanMap.put((OID)attrDescr[0], mBeanInfo); 89 } 90 } 91 92 public int checkScalarValue(OID scalarInstanceOID, Variable value) { 93 MBeanActionMOInfo mBeanActionMOInfo = getActionInfo(scalarInstanceOID); 94 if (mBeanActionMOInfo != null) { 95 if (value.getSyntax() != SMIConstants.SYNTAX_INTEGER32) { 96 return PDU.wrongType; 97 } 98 int actionID = ((Integer32)value).getValue(); 99 for (MBeanActionInfo action : mBeanActionMOInfo.getActions()) { 100 if (actionID == action.getActionID()) { 101 return PDU.noError; 102 } 103 } 104 return PDU.wrongValue; 105 } 106 return PDU.resourceUnavailable; 107 } 108 109 public int getScalarValue(OID scalarInstanceOID, Variable value) { 110 MBeanActionMOInfo mBeanActionMOInfo = getActionInfo(scalarInstanceOID); 111 if (mBeanActionMOInfo != null) { 112 Integer32 v = (Integer32)value; 114 for (MBeanStateInfo stateInfo : mBeanActionMOInfo.getStates()) { 115 if (stateInfo.getStateAttribute() == null) { 117 v.setValue(stateInfo.getStateID()); 118 return PDU.noError; 119 } 120 try { 121 Object attr; 122 if (stateInfo.getStateAttribute().getName() == null) { 123 attr = mBeanActionMOInfo.getLastActionResult(); 124 } 125 else { 126 attr = MBeanAttributeMOInfo.getAttribute(server, 127 mBeanActionMOInfo.getObjectName(), 128 stateInfo.getStateAttribute()); 129 } 130 if (((attr == null) && (stateInfo.getStateIndication() == null)) || 131 ((attr != null) && attr.equals(stateInfo.getStateIndication()))) { 132 v.setValue(stateInfo.getStateID()); 133 return PDU.noError; 134 } 135 } 136 catch (Exception ex) { 137 } 139 } 140 return PDU.genErr; 141 } 142 return PDU.noSuchName; 143 } 144 145 public int setScalarValue(OID scalarInstanceOID, Variable value) { 146 MBeanActionMOInfo mBeanActionMOInfo = getActionInfo(scalarInstanceOID); 147 if (mBeanActionMOInfo != null) { 148 int actionID = ((Integer32)value).getValue(); 149 for (MBeanActionInfo action : mBeanActionMOInfo.getActions()) { 150 if (actionID == action.getActionID()) { 151 try { 152 Object result = server.invoke(mBeanActionMOInfo.getObjectName(), 153 action.getMethod(), 154 action.getParameters(), 155 action.getSignature()); 156 mBeanActionMOInfo.setLastActionResult(result); 157 } 158 catch (Exception ex) { 159 ex.printStackTrace(); 160 return PDU.genErr; 161 } 162 return PDU.noError; 163 } 164 } 165 } 166 return PDU.genErr; 167 } 168 169 private MBeanActionMOInfo getActionInfo(OID scalarInstanceOID) { 170 return (MBeanActionMOInfo) getMBeanMOInfo(scalarInstanceOID); 171 } 172 } 173 | Popular Tags |