/**
  * Parses a textual representation of an object ID as dotted string (e.g. "1.3.6.1.2.1.1") and
  * returns its raw value.
  *
  * @param text a textual representation of an OID.
  * @return the raw OID value.
  * @throws ParseException if the OID cannot be parsed successfully.
  */
 public int[] parse(String text) throws ParseException {
   StringTokenizer st = new StringTokenizer(text, ".", true);
   int size = st.countTokens();
   int[] value = new int[size];
   size = 0;
   StringBuffer buf = null;
   while (st.hasMoreTokens()) {
     String t = st.nextToken();
     if ((buf == null) && t.startsWith("'")) {
       buf = new StringBuffer();
       t = t.substring(1);
     }
     if ((buf != null) && (t.endsWith("'"))) {
       buf.append(t.substring(0, t.length() - 1));
       OID o = new OctetString(buf.toString()).toSubIndex(true);
       int[] h = value;
       value = new int[st.countTokens() + h.length + o.size()];
       System.arraycopy(h, 0, value, 0, size);
       System.arraycopy(o.getValue(), 0, value, size, o.size());
       size += o.size();
       buf = null;
     } else if (buf != null) {
       buf.append(t);
     } else if (!".".equals(t)) {
       value[size++] = (int) Long.parseLong(t.trim());
     }
   }
   if (size < value.length) {
     int[] h = value;
     value = new int[size];
     System.arraycopy(h, 0, value, 0, size);
   }
   return value;
 }
  private int enumerateIndexed(JrdsElement hostEleme, ProbeDescSummary summary, boolean withOid)
      throws IOException {
    OID indexOid = new OID(summary.specifics.get("indexOid"));
    int count = 0;
    log(Level.TRACE, "Will enumerate %s", indexOid);
    Set<OID> oidsSet = Collections.singleton(indexOid);
    Map<OID, Object> indexes = SnmpRequester.TREE.doSnmpGet(active, oidsSet);
    log(Level.TRACE, "Elements : %s", indexes);
    for (Map.Entry<OID, Object> e : indexes.entrySet()) {
      count++;
      Map<String, String> beans = new HashMap<String, String>(2);
      OID rowOid = e.getKey();
      String indexName = e.getValue().toString();
      beans.put("index", indexName);

      int[] index = Arrays.copyOfRange(rowOid.getValue(), indexOid.size(), rowOid.size());

      // If we wanted to generate a static oid
      if (withOid) {
        OID suffixOid = new OID(index);
        beans.put("oid", suffixOid.toString());
      }

      // We try to auto-generate the label
      String label = summary.specifics.get("labelOid");
      String labelValue = null;
      if (label != null && !label.isEmpty()) {
        OID suffixOid = new OID(index);
        for (String lookin : label.split(",")) {
          OID labelOID = new OID(lookin.trim() + "." + suffixOid.toString());
          labelValue = getLabel(active, labelOID);
          if (labelValue != null) break;
        }
      }

      addProbe(hostEleme, summary.name, labelValue, null, null, beans);
    }
    return count;
  }