예제 #1
0
  /**
   * Write out the state for the given attributes
   *
   * @param selectedRows
   * @return number of files successfully saved, the better way to do this would just be to throw
   *     the error and display a specific message for each failure, but oh well.
   * @throws IOException
   */
  public void writeAttributes() throws IOException {
    final String className;
    final byte dataType =
        cyAttributes.getMultiHashMapDefinition().getAttributeValueType(attributeName);

    if ((dataType == CyAttributes.TYPE_COMPLEX)
        || (dataType == CyAttributes.TYPE_SIMPLE_MAP)
        || (dataType == CyAttributes.TYPE_UNDEFINED))
      throw new IOException("Unsupported Datatype.");

    if (dataType == MultiHashMapDefinition.TYPE_BOOLEAN) className = "java.lang.Boolean";
    else if (dataType == MultiHashMapDefinition.TYPE_INTEGER) className = "java.lang.Integer";
    else if (dataType == MultiHashMapDefinition.TYPE_FLOATING_POINT) className = "java.lang.Double";
    else className = "java.lang.String";

    try {
      fileWriter.write(attributeName + " (class=" + className + ")" + newline);

      final MultiHashMap attributeMap = cyAttributes.getMultiHashMap();

      if (attributeMap != null) {
        final Iterator<String> keys = cyAttributes.getMultiHashMap().getObjectKeys(attributeName);

        String key;
        Object value;
        Iterator objIt;
        String vs;
        StringBuilder result = new StringBuilder();

        while (keys.hasNext()) {
          key = keys.next();

          if (cyAttributes.getType(attributeName) == CyAttributes.TYPE_SIMPLE_LIST)
            value = cyAttributes.getListAttribute(key, attributeName);
          else value = cyAttributes.getAttribute(key, attributeName);

          key = encodeString(key);

          if (value != null) {
            if (value instanceof List) {
              result.append(key + " = ");

              if (((Collection) value).size() > 0) {
                Object o;

                objIt = ((Collection) value).iterator();
                result.append("(");
                o = objIt.next();
                vs = o.toString();
                vs = slashEncodeString(vs);
                vs = encodeString(vs);
                result.append(vs);

                while (objIt.hasNext()) {

                  o = objIt.next();
                  vs = o.toString();
                  vs = slashEncodeString(vs);
                  vs = encodeString(vs);
                  result.append("::" + vs);
                }
                result.append(")" + newline);
                fileWriter.write(result.toString());
                result = new StringBuilder();
              }
            } else {
              vs = value.toString();
              vs = slashEncodeString(vs);
              vs = encodeString(vs);
              fileWriter.write(key + " = " + vs + newline);
            }
          }
        }

        fileWriter.flush();
      }
    } finally {
      if (fileWriter != null) {
        fileWriter.close();
      }
    }
  }