1 20 21 22 package org.snmp4j.agent.mo; 23 24 import org.snmp4j.smi.OID; 25 26 37 public class MOTableRelation { 38 39 private MOTable baseTable; 40 private MOTable dependentTable; 41 42 52 public MOTableRelation(MOTable baseTable, MOTable dependentTable) { 53 this.baseTable = baseTable; 54 this.dependentTable = dependentTable; 55 } 56 57 61 public void createRelationShip() { 62 this.baseTable.addMOTableRowListener(createRelationShipListener()); 63 } 64 65 protected MOTableRowListener createRelationShipListener() { 66 return new RelationShipListener(); 67 } 68 69 80 public boolean hasDependentRow(MOTableRow baseTableRow) { 81 return true; 84 } 85 86 97 public OID[] getDependentIndexes(MOTableRow baseRow) { 98 return new OID[] { baseRow.getIndex() }; 101 } 102 103 111 protected void addDependentRows(MOTableRow baseTableRow) { 112 OID[] indexes = getDependentIndexes(baseTableRow); 113 for (int i=0; i<indexes.length; i++) { 114 MOTableRow depRow = 115 dependentTable.createRow(indexes[i], 116 dependentTable.getDefaultValues()); 117 depRow.setBaseRow(baseTableRow); 118 dependentTable.addRow(depRow); 119 } 120 } 121 122 132 protected MOTableRow[] removeDependentRows(MOTableRow baseTableRow) { 133 OID[] indexes = getDependentIndexes(baseTableRow); 134 MOTableRow[] removedRows = new MOTableRow[indexes.length]; 135 for (int i = 0; i < indexes.length; i++) { 136 removedRows[i] = dependentTable.removeRow(indexes[i]); 137 } 138 return removedRows; 139 } 140 141 protected class RelationShipListener implements MOTableRowListener { 142 143 public void rowChanged(MOTableRowEvent event) { 144 switch (event.getType()) { 145 case MOTableRowEvent.ADD: { 146 if (hasDependentRow(event.getRow())) { 147 addDependentRows(event.getRow()); 148 } 149 break; 150 } 151 case MOTableRowEvent.DELETE: { 152 removeDependentRows(event.getRow()); 153 } 154 } 155 } 156 157 } 158 } 159 | Popular Tags |