protected HashMap<String, ArrayList<String>> CollectSingleTableData(
      UserData data, String struct) {
    LinkedHashSet<String> s;
    List<String> tmp;

    MetaType mt = data.getUserDataType();
    s = new LinkedHashSet<String>(data.getUserData().keySet());
    HashMap<String, ArrayList<String>> tableVales = new HashMap<String, ArrayList<String>>();
    tmp = new ArrayList<String>();
    /* strip [] from userdata */
    for (String key : s) {

      String newKey = mt.removeIndicesFromStruct(key, struct);
      tmp.add(newKey);
      if (tableVales.containsKey(newKey)) {
        ArrayList<String> tmpVal = tableVales.get(newKey);
        tmpVal.add(data.getUserData().get(key));
        tableVales.put(newKey, tmpVal);
      } else {
        ArrayList<String> tmpVal = new ArrayList<String>();
        tmpVal.add(data.getUserData().get(key));
        tableVales.put(newKey, tmpVal);
      }
    }
    return tableVales;
  }
  /**
   * Creates a plain text representation of a typedef union.
   *
   * @param field The 'typedeffed' union.
   * @param indent The indentation to draw.
   * @param type The complete type.
   */
  private void drawTypedefUnion(MetaUnion field, String indent, MetaType type) {
    String typedefName = type.getFieldTypedefName(field.getDiscriminator());
    if (typedefName != null) {
      writer.write(
          indent + "union " + field.getTypeName() + " switch(" + typedefName + ") {" + newLine);
    } else {
      writer.write(
          indent
              + "union "
              + field.getTypeName()
              + " switch("
              + field.getDiscriminator().getTypeName()
              + ") {"
              + newLine);
    }
    MetaUnionCase[] cases = field.getCases();
    ArrayList labels;

    for (int i = 0; i < cases.length; i++) {
      labels = cases[i].getLabels();

      for (int j = 0; j < labels.size(); j++) {
        if ("".equals(labels.get(j))) {
          writer.write(indent + tab + "default :" + newLine);
        } else {
          writer.write(indent + tab + "case " + labels.get(j) + ":" + newLine);
        }
      }
      this.drawMetaField(cases[i].getField(), indent + tab + tab, type);
    }
    writer.write(indent + "}");
  }
 /**
  * Creates a plain text representation of a primitive.
  *
  * @param field The primitive to create the plain text representation of.
  * @param indent The indentation to draw.
  * @param type The complete type.
  */
 private void drawPrimitive(MetaPrimitive field, String indent, MetaType type) {
   String typedefName = type.getFieldTypedefName(field);
   if (typedefName != null) {
     writer.write(indent + typedefName + " " + field.getName() + ";" + newLine + separator);
   } else {
     writer.write(
         indent + field.getTypeName() + " " + field.getName() + ";" + newLine + separator);
   }
 }
  /**
   * Creates an plain text representation of the supplied type.
   *
   * @param type The type to create a plain text representation of.
   */
  private void setUserDataType(MetaType type) {
    curValue = (String) typeCache.get(type);

    if (curValue == null) {
      MetaField field = type.getRootField();
      writer = new StringWriter();
      this.drawTypedefs(type);
      this.drawMetaField(field, "", type);
      writer.flush();
      curValue = writer.toString();
      typeCache.put(type, curValue);
    }
  }
  /**
   * Creates a plain text representation of a structure.
   *
   * @param field The structure to create the plain text representation of.
   * @param indent The indentation to draw.
   * @param type The complete type.
   */
  private void drawStruct(MetaStruct field, String indent, MetaType type) {
    String typedefName = type.getFieldTypedefName(field);
    if (typedefName != null) {
      writer.write(indent + typedefName + " " + field.getName() + ";" + newLine + separator);
    } else {
      writer.write(indent + "struct " + field.getTypeName() + " {" + newLine);
      MetaField[] fields = field.getFields();

      for (int i = 0; i < fields.length; i++) {
        this.drawMetaField(fields[i], indent + tab, type);
      }
      writer.write(indent + "} " + field.getName() + ";" + newLine + separator);
    }
  }
Example #6
0
  public void participantRegisterType(Participant participant, MetaType type)
      throws CommunicationException {
    this.checkConnection();

    try {
      String xmlEntity = entitySerializer.serializeEntity(participant);
      String xmlType = type.toXML();
      String result = this.jniRegisterType(xmlEntity, xmlType);
      this.checkConnection();

      if (!("<result>OK</result>".equals(result))) {
        throw new CommunicationException(result.substring(8, result.length() - 9));
      }
    } catch (TransformationException e) {
      throw new CommunicationException("Could not register type.");
    }
  }
  /**
   * Creates a plain text representation of a enumeration.
   *
   * @param field The enumeration to create the plain text representation of.
   * @param indent The indentation to draw.
   * @param type The complete type.
   */
  private void drawEnum(MetaEnum field, String indent, MetaType type) {
    String typedefName = type.getFieldTypedefName(field);
    if (typedefName != null) {
      writer.write(indent + typedefName + " " + field.getName() + ";" + newLine + separator);
    } else {
      writer.write(indent + "enum " + field.getTypeName() + " {" + newLine);
      String[] posValues = field.getPosValues();

      for (int i = 0; i < posValues.length; i++) {
        if (i != (posValues.length - 1)) {
          writer.write(indent + tab + posValues[i] + ", " + newLine);
        } else {
          writer.write(indent + tab + posValues[i] + newLine);
        }
      }
      writer.write(indent + "} " + field.getName() + ";" + newLine + separator);
    }
  }
  /**
   * Creates a plain text representation of the typedefs in the type.
   *
   * @param type The type to extract the typedefs from.
   */
  private void drawTypedefs(MetaType type) {
    MetaField field;
    String typedefName;

    LinkedHashMap typedefs = type.getTypedefs();
    Iterator iter = typedefs.keySet().iterator();
    HashSet finished = new HashSet();

    while (iter.hasNext()) {
      field = (MetaField) (iter.next());
      typedefName = (String) (typedefs.get(field));

      if (!(finished.contains(typedefName))) {
        writer.write("typedef ");
        this.drawTypedefMetaField(field, "", type);
        writer.write(" " + typedefName + ";" + newLine + newLine + separator);
        finished.add(typedefName);
      }
    }
  }