package aliview.sequences; import java.awt.Point; import java.io.IOException; import java.io.OutputStream; import java.io.Writer; import java.util.ArrayList; import java.util.regex.Pattern; import aliview.AminoAcid; import aliview.sequencelist.AlignmentListModel; import aliview.sequencelist.Interval; /* * * TODO rename all Base into Residue (residues) * */ public interface Sequence extends Comparable<Sequence>{ public int getLength(); public String getName(); public void setName(String string); public String getSimpleName(); // probably in the normal interface public byte getBaseAtPos(int n); public char getCharAtPos(int n); public byte[] getBasesBetween(int startIndexInclusive, int endIndexInclusive); //public void writeBasesAt(Writer out, int x, int i); //public int getBasesAt(int x, int i, byte[] bytesToDraw); public byte[] getAllBasesAsByteArray(); public void writeBases(OutputStream out) throws IOException; public void writeBases(Writer out) throws IOException; public void writeBasesBetween(int start, int end, Writer out) throws IOException; public String getBasesAsString(); // used when exporting public int getUngapedLength(); public int getNonTranslatedLength(); public AminoAcid getTranslatedAminoAcidAtNucleotidePos(int x); public byte[] getGapPaddedCodonInTranslatedPos(int pos); public AminoAcidAndPosition getNoGapAminoAcidAtNucleotidePos(int target); public boolean isCodonSecondPos(int x); public int countStopCodon(); // Undecided which version public boolean isEmpty(); public int[] getSequenceAsBaseVals(); public int getUngapedPos(int position); // for view at public String getBasesAtThesePosAsString(ArrayList<Integer> allPositions); // Editable version (must also always implement selectable and seleclable moveable) public void reverseComplement() ; public void complement(); public void replaceBases(int startReplaceIndex, int stopReplaceIndex, byte[] insertBases); public void replaceSelectedBasesWithGap(); public void deleteSelectedBases(); public void deleteBasesFromMask(boolean[] deleteMask); public void clearBase(int n); public void insertGapLeftOfSelectedBase(); public void rightPadSequenceWithGaps(int diffLen); public void leftPadSequenceWithGaps(int diffLen); public void insertGapRightOfSelectedBase(); public void insertGapAt(int n); // Searchable public Interval find(Pattern pattern, int nextFindStartPos); public int find(byte find, int nextFindStartPos); // Selectable version public void setSelectionAt(int n); public void clearSelectionAt(int n); public void setSelection(int startPos, int endPos, boolean clearFirst); public boolean isBaseSelected(int position); public void clearAllSelection(); public void selectAllBases(); public boolean hasSelection(); public long countSelectedPositions(int startIndex, int endIndex); public int[] getSelectedPositions(); public byte[] getSelectedBasesAsByte(); public String getSelectedBasesAsString(); public int getFirstSelectedPosition(); public int getLastSelectedPosition(); // selectable movable //public void moveSelectedResiduesRightIfGapIsPresent(); //public void moveSelectionRightIfGapIsPresent(int steps); public void moveSelectedResiduesRightIfGapOrEndIsPresent(); public void moveSelectedResiduesLeftIfGapIsPresent(); //public void moveSelectionLeftIfGapIsPresent(int steps); public boolean contains(char testChar); public boolean isGapRightOfSelection(); public boolean isGapLeftOfSelection(); public boolean isEndRightOfSelection(); public boolean isGapOrEndRightOfSelection(); public void deleteGapLeftOfSelection(); public void deleteGapRightOfSelection(); public void replaceSelectedBasesWithChar(char newChar); public void selectAllBasesUntilGap(int x); public void deleteAllGaps(); public Sequence getCopy(); public int getID(); public int getPosOfSelectedIndex(int posInSeq); public boolean isAllSelected(); public int countChar(char c); public int indexOf(char c); public int countChar(char targetChar, int startpos, int endpos); public void invertSelection(); public void selectionExtendRight(); public void selectionExtendLeft(); public void setAlignmentModel(AlignmentListModel alignmentModel); public AlignmentListModel getAlignmentModel(); }