/** * 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)); }
/** * 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; }