/**
   * Maps database (SO) keys to EMBl keys. It will add any extra qualifiers found in the 3rd column
   * of DATABASE_MAP_KEYS.
   *
   * @param key
   * @return
   */
  private Key map(final Key key, final QualifierVector qualifiers) {
    if (DATABASE_MAP_KEYS == null) initDatabaseMappings();
    for (int i = 0; i < DATABASE_MAP_KEYS.length; i++) {
      if (key.getKeyString().equals(DATABASE_MAP_KEYS[i][0])) {
        Key mappedKey = new Key((String) DATABASE_MAP_KEYS[i][1]);
        if (DATABASE_MAP_KEYS[i][2] != null) {

          Qualifier newQualifier = (Qualifier) DATABASE_MAP_KEYS[i][2];
          if (!getEntryInformation().isValidQualifier(mappedKey, newQualifier.getName())) {
            try {
              final int nvalues;
              if (newQualifier.getValues() == null) nvalues = 0;
              else nvalues = newQualifier.getValues().size();

              final int type;
              if (nvalues == 0) type = QualifierInfo.NO_VALUE;
              else type = QualifierInfo.QUOTED_TEXT;
              getEntryInformation()
                  .addQualifierInfo(
                      new QualifierInfo(newQualifier.getName(), type, null, null, false));
            } catch (QualifierInfoException e) {
            }
          }

          qualifiers.addQualifierValues(newQualifier);
        }

        return mappedKey;
      }
    }
    return key;
  }
  /**
   * Change the name of a qualifier
   *
   * @param qualifiers
   * @param oldName
   * @param newName
   */
  private void changeQualifierName(
      QualifierVector qualifiers, final String oldName, final String newName) {
    QualifierVector tmpQualifiers = new QualifierVector();
    for (int i = 0; i < qualifiers.size(); i++) {
      Qualifier qualifier = (Qualifier) qualifiers.elementAt(i);
      if (!qualifier.getName().equals(oldName)) {
        tmpQualifiers.addElement(qualifier);
        continue;
      }

      Qualifier newQualifier = new Qualifier(newName, qualifier.getValues());
      tmpQualifiers.addQualifierValues(newQualifier);
    }
    qualifiers.removeAllElements();

    for (int i = 0; i < tmpQualifiers.size(); i++)
      qualifiers.addElement(tmpQualifiers.elementAt(i));
  }
예제 #3
0
  /**
   * Read some embl feature qualifiers from a stream into a QualifierVector object. The stream
   * should contain qualifiers in this form:
   *
   * <PRE>  /name1=value1/name2="value2"/name3=[value3]  </PRE>
   *
   * @param in_stream the qualifiers are read from this stream
   * @exception IOException thrown if there is a problem reading the qualifiers, such as end of
   *     file.
   * @exception QualifierParseException Thrown if the format of the value String is not appropriate
   *     for a Qualifier with the given name. Each qualifier has a specific format for the value
   *     part which depends on the name, for example the value part of /codon_start qualifier must
   *     be a number: 1, 2 or 3.
   * @return A Vector containing one Qualifier object for each name/value pair read from the stream.
   */
  public static QualifierVector readQualifiers(
      final Reader in_stream, final EntryInformation entry_information)
      throws QualifierParseException, IOException {

    QualifierVector return_vector = new QualifierVector();

    BufferedReader buffered_reader = new BufferedReader(in_stream);

    String name;
    String value;

    // loop until end of file
    while ((name = StreamQualifier.readName(buffered_reader)) != null) {
      // save one character in case the next char is not a '='
      buffered_reader.mark(1);

      final int next_char = buffered_reader.read();

      if (next_char == -1) value = null;
      else {
        if (next_char == '=') value = StreamQualifier.readValue(buffered_reader);
        else {
          // this qualifier doesn't have a value
          value = null;
          buffered_reader.reset();
        }
      }

      final Qualifier new_qualifier;

      if (value == null) new_qualifier = new Qualifier(name);
      else {
        new_qualifier = StreamQualifier.makeStreamQualifier(name, value, entry_information);
      }

      return_vector.addQualifierValues(new_qualifier);
    }

    return return_vector;
  }