*/
package jalview.datamodel;
+import jalview.datamodel.features.SequenceFeaturesI;
+
import java.util.List;
import java.util.Vector;
public String getDescription();
/**
- * Return the alignment column for a sequence position
+ * Return the alignment column (from 1..) for a sequence position
*
* @param pos
* lying from start to end
public int findIndex(int pos);
/**
- * Returns the sequence position for an alignment position
+ * Returns the sequence position for an alignment position.
*
* @param i
* column index in alignment (from 0..<length)
*
- * @return residue number for residue (left of and) nearest ith column
+ * @return TODO: JAL-2562 - residue number for residue (left of and) nearest
+ * ith column
*/
public int findPosition(int i);
/**
+ * Returns the range of sequence positions included in the given alignment
+ * position range. If no positions are included (the range is entirely gaps),
+ * then returns null.
+ *
+ * <pre>
+ * Example:
+ * >Seq/8-13
+ * ABC--DE-F
+ * findPositions(1, 4) returns Range(9, 9) // B only
+ * findPositions(3, 4) returns null // all gaps
+ * findPositions(2, 6) returns Range(10, 12) // CDE
+ * findPositions(3, 7) returns Range(11,12) // DE
+ * </pre>
+ *
+ * @param fromCol
+ * first aligned column position (base 0, inclusive)
+ * @param toCol
+ * last aligned column position (base 0, inclusive)
+ *
+ * @return
+ */
+ public Range findPositions(int fromCol, int toCol);
+
+ /**
* Returns an int array where indices correspond to each residue in the
* sequence and the element value gives its position in the alignment
*
public int[] findPositionMap();
/**
+ * Answers true if the sequence is composed of amino acid characters. Note
+ * that implementations may use heuristic methods which are not guaranteed to
+ * give the biologically 'right' answer.
*
- * @return true if sequence is composed of amino acid characters
+ * @return
*/
public boolean isProtein();
public void insertCharAt(int position, int count, char ch);
/**
- * Gets array holding sequence features associated with this sequence. The
- * array may be held by the sequence's dataset sequence if that is defined.
+ * Answers a list of all sequence features associated with this sequence. The
+ * list may be held by the sequence's dataset sequence if that is defined.
*
* @return hard reference to array
*/
- public SequenceFeature[] getSequenceFeatures();
+ public List<SequenceFeature> getSequenceFeatures();
/**
- * Replaces the array of sequence features associated with this sequence with
- * a new array reference. If this sequence has a dataset sequence, then this
- * method will update the dataset sequence's feature array
+ * Answers the object holding features for the sequence
+ *
+ * @return
+ */
+ SequenceFeaturesI getFeatures();
+
+ /**
+ * Replaces the sequence features associated with this sequence with the given
+ * features. If this sequence has a dataset sequence, then this method will
+ * update the dataset sequence's features instead.
*
* @param features
- * New array of sequence features
*/
- public void setSequenceFeatures(SequenceFeature[] features);
+ public void setSequenceFeatures(List<SequenceFeature> features);
/**
* DOCUMENT ME!
public Vector<PDBEntry> getAllPDBEntries();
/**
- * add entry to the *normalised* vector of PDBIds.
+ * Adds the entry to the *normalised* list of PDBIds.
*
- * If a PDBEntry is passed with an entry.getID() string, as one already in the
- * list, or one is added that appears to be the same but has a chain ID
+ * If a PDBEntry is passed with the same entry.getID() string as one already
+ * in the list, or one is added that appears to be the same but has a chain ID
* appended, then the existing PDBEntry will be updated with the new
- * attributes.
+ * attributes instead, unless the entries have distinct chain codes or
+ * associated structure files.
*
* @param entry
+ * @return true if the entry was added, false if updated
*/
- public void addPDBId(PDBEntry entry);
+ public boolean addPDBId(PDBEntry entry);
/**
* update the list of PDBEntrys to include any DBRefEntrys citing structural
public void setVamsasId(String id);
+ /**
+ * set the array of Database references for the sequence.
+ *
+ * @param dbs
+ * @deprecated - use is discouraged since side-effects may occur if DBRefEntry
+ * set are not normalised.
+ */
+ @Deprecated
public void setDBRefs(DBRefEntry[] dbs);
public DBRefEntry[] getDBRefs();
*/
public void addDBRef(DBRefEntry entry);
- public void addSequenceFeature(SequenceFeature sf);
+ /**
+ * Adds the given sequence feature and returns true, or returns false if it is
+ * already present on the sequence, or if the feature type is null.
+ *
+ * @param sf
+ * @return
+ */
+ public boolean addSequenceFeature(SequenceFeature sf);
public void deleteFeature(SequenceFeature sf);
*/
public PDBEntry getPDBEntry(String pdbId);
-
/**
* Get all primary database/accessions for this sequence's data. These
* DBRefEntry are expected to resolve to a valid record in the associated
* list
*/
public List<DBRefEntry> getPrimaryDBRefs();
+
+ /**
+ * Returns a (possibly empty) list of sequence features that overlap the range
+ * from-to (inclusive), optionally restricted to one or more specified feature
+ * types
+ *
+ * @param from
+ * @param to
+ * @param types
+ * @return
+ */
+ List<SequenceFeature> findFeatures(int from, int to, String... types);
+
+ /**
+ * Method to call to indicate that the sequence (characters or alignment/gaps)
+ * has been modified. Provided to allow any cursors on residue/column
+ * positions to be invalidated.
+ */
+ void sequenceChanged();
}