MOTableBuilder.java 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. package de.tudarmstadt.informatik.hostage.protocol.SNMPUtils;
  2. import org.snmp4j.agent.MOAccess;
  3. import org.snmp4j.agent.mo.DefaultMOMutableRow2PC;
  4. import org.snmp4j.agent.mo.DefaultMOTable;
  5. import org.snmp4j.agent.mo.MOColumn;
  6. import org.snmp4j.agent.mo.MOMutableTableModel;
  7. import org.snmp4j.agent.mo.MOTable;
  8. import org.snmp4j.agent.mo.MOTableIndex;
  9. import org.snmp4j.agent.mo.MOTableSubIndex;
  10. import org.snmp4j.smi.OID;
  11. import org.snmp4j.smi.SMIConstants;
  12. import org.snmp4j.smi.Variable;
  13. import java.util.ArrayList;
  14. import java.util.List;
  15. /**
  16. * Module to build the managed object table for SNMP
  17. */
  18. public class MOTableBuilder {
  19. private MOTableSubIndex[] subIndexes = new MOTableSubIndex[] { new MOTableSubIndex(
  20. SMIConstants.SYNTAX_INTEGER) };
  21. private MOTableIndex indexDef = new MOTableIndex(subIndexes, false);
  22. private final List<MOColumn> columns = new ArrayList<MOColumn>();
  23. private final List<Variable[]> tableRows = new ArrayList<Variable[]>();
  24. private int currentRow = 0;
  25. private int currentCol = 0;
  26. private OID tableRootOid;
  27. private int colTypeCnt = 0;
  28. /**
  29. * Specified oid is the root oid of this table
  30. */
  31. public MOTableBuilder(OID oid) {
  32. this.tableRootOid = oid;
  33. }
  34. /**
  35. * Adds all column types {@link MOColumn} to this table.
  36. * Important to understand that you must add all types here before
  37. * adding any row values
  38. *
  39. * @param syntax use {@link SMIConstants}
  40. * @param access
  41. * @return
  42. */
  43. public MOTableBuilder addColumnType(int syntax, MOAccess access) {
  44. colTypeCnt++;
  45. columns.add(new MOColumn(colTypeCnt, syntax, access));
  46. return this;
  47. }
  48. public MOTableBuilder addRowValue(Variable variable) {
  49. if (tableRows.size() == currentRow) {
  50. tableRows.add(new Variable[columns.size()]);
  51. }
  52. tableRows.get(currentRow)[currentCol] = variable;
  53. currentCol++;
  54. if (currentCol >= columns.size()) {
  55. currentRow++;
  56. currentCol = 0;
  57. }
  58. return this;
  59. }
  60. public MOTable build() {
  61. DefaultMOTable ifTable = new DefaultMOTable(tableRootOid, indexDef,
  62. columns.toArray(new MOColumn[0]));
  63. MOMutableTableModel model = (MOMutableTableModel) ifTable.getModel();
  64. int i = 1;
  65. for (Variable[] variables : tableRows) {
  66. model.addRow(new DefaultMOMutableRow2PC(new OID(String.valueOf(i)),
  67. variables));
  68. i++;
  69. }
  70. ifTable.setVolatile(true);
  71. return ifTable;
  72. }
  73. }