| 1 20 21 22 package org.snmp4j.agent.mo; 23 24 import java.util.*; 25 26 import org.snmp4j.*; 27 import org.snmp4j.agent.*; 28 import org.snmp4j.agent.request.*; 29 import org.snmp4j.mp.*; 30 import org.snmp4j.smi.*; 31 32 45 public class MOMutableColumn extends MOColumn { 46 47 private Vector validators; 48 private Variable defaultValue; 49 private boolean mutableInService = true; 50 51 public MOMutableColumn(int columnID, int syntax) { 52 super(columnID, syntax); 53 } 54 55 public MOMutableColumn(int columnID, int syntax, MOAccess access) { 56 super(columnID, syntax, access); 57 } 58 59 public MOMutableColumn(int columnID, int syntax, MOAccess access, 60 Variable defaultValue) { 61 super(columnID, syntax, access); 62 this.defaultValue = defaultValue; 63 } 64 65 public MOMutableColumn(int columnID, int syntax, MOAccess access, 66 Variable defaultValue, boolean mutableInService) { 67 super(columnID, syntax, access); 68 this.defaultValue = defaultValue; 69 this.mutableInService = mutableInService; 70 } 71 72 public synchronized void 73 addMOValueValidationListener(MOValueValidationListener validator) { 74 if (validators == null) { 75 validators = new Vector(2); 76 } 77 validators.add(validator); 78 } 79 80 public synchronized void 81 removeMOValueValidationListener(MOValueValidationListener validator) { 82 if (validators != null) { 83 validators.remove(validator); 84 } 85 } 86 87 public synchronized int validate(Variable newValue, Variable oldValue) { 88 int status = SnmpConstants.SNMP_ERROR_SUCCESS; 89 if (validators != null) { 90 for (Iterator it = validators.iterator(); it.hasNext();) { 91 MOValueValidationListener v = (MOValueValidationListener) it.next(); 92 MOValueValidationEvent event = 93 new MOValueValidationEvent(this, oldValue, newValue); 94 v.validate(event); 95 if (event.getValidationStatus() != SnmpConstants.SNMP_ERROR_SUCCESS) { 96 status = event.getValidationStatus(); 97 break; 98 } 99 } 100 } 101 return status; 102 } 103 104 protected boolean validateSetRequest(SubRequest subRequest, 105 MOTableRow row, int column) { 106 Variable value = subRequest.getVariableBinding().getVariable(); 107 if (value.getSyntax() != getSyntax()) { 108 subRequest.getStatus().setErrorStatus(PDU.wrongType); 109 } 110 int status = 111 validate(value, (row.size() > column) ? row.getValue(column) : null); 112 if (status != SnmpConstants.SNMP_ERROR_SUCCESS) { 113 subRequest.getStatus().setErrorStatus(status); 114 return false; 115 } 116 return true; 117 } 118 119 public void prepare(SubRequest subRequest, MOTableRow row, 120 MOTableRow changeSet, int column) { 121 if (row instanceof MOMutableRow2PC) { 122 if (validateSetRequest(subRequest, row, column)) { 123 ((MOMutableRow2PC) row).prepare(subRequest, changeSet, column); 124 } 125 } 126 else if (row instanceof MOMutableTableRow) { 127 if (validateSetRequest(subRequest, row, column)) { 128 subRequest.completed(); 129 } 130 } 131 else { 132 subRequest.getStatus().setErrorStatus(PDU.notWritable); 134 } 135 } 136 137 public void commit(SubRequest subRequest, MOTableRow row, 138 MOTableRow changeSet, int column) { 139 if (row instanceof MOMutableRow2PC) { 140 ((MOMutableRow2PC)row).commit(subRequest, changeSet, column); 141 } 142 else if (row instanceof MOMutableTableRow) { 143 if (subRequest.getUndoValue() == null) { 144 subRequest.setUndoValue(row.getValue(column)); 145 } 146 ((MOMutableTableRow)row).setValue(column, 147 (Variable)subRequest.getVariableBinding().getVariable().clone()); 148 subRequest.completed(); 149 } 150 else { 151 subRequest.getStatus().setErrorStatus(PDU.commitFailed); 153 } 154 } 155 156 public void undo(SubRequest subRequest, MOTableRow row, int column) { 157 if (row instanceof MOMutableRow2PC) { 158 ((MOMutableRow2PC)row).undo(subRequest, column); 159 } 160 if ((row instanceof MOMutableTableRow) && 161 (subRequest.getUndoValue() instanceof Variable)) { 162 ((MOMutableTableRow)row).setValue(column, (Variable) 163 subRequest.getUndoValue()); 164 subRequest.completed(); 165 } 166 else { 167 subRequest.getStatus().setErrorStatus(PDU.undoFailed); 169 } 170 } 171 172 public void cleanup(SubRequest subRequest, MOTableRow row, int column) { 173 if (row instanceof MOMutableRow2PC) { 174 ((MOMutableRow2PC)row).cleanup(subRequest, column); 175 } 176 subRequest.completed(); 177 } 178 179 public void setDefaultValue(Variable defaultValue) { 180 this.defaultValue = defaultValue; 181 } 182 183 public void setMutableInService(boolean mutableInService) { 184 185 this.mutableInService = mutableInService; 186 } 187 188 public Variable getDefaultValue() { 189 return defaultValue; 190 } 191 192 public boolean isMutableInService() { 193 return mutableInService; 194 } 195 196 203 public boolean isMandatory() { 204 return (defaultValue == null) && (getAccess().isAccessibleForCreate()); 205 } 206 207 public String toString() { 208 return this.getClass().getName()+"[columnID="+getColumnID()+",syntax="+ 209 getSyntax()+",default="+getDefaultValue()+",mode=]"; 210 } 211 212 } 213 | Popular Tags |