X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fdatamodel%2FSeqCigar.java;h=77e9111b8851ca4a38d66a3cf5d4b5e0ea8c2e69;hb=ab43013b7e357b84b4abade0dba949668dfb2a0e;hp=745202a430c9cbd2b4742be6449557682623c44d;hpb=d423f22792e47dbc800ae220a58677f988971d06;p=jalview.git diff --git a/src/jalview/datamodel/SeqCigar.java b/src/jalview/datamodel/SeqCigar.java index 745202a..77e9111 100644 --- a/src/jalview/datamodel/SeqCigar.java +++ b/src/jalview/datamodel/SeqCigar.java @@ -1,22 +1,26 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer (Version 2.5) - * Copyright (C) 2010 J Procter, AM Waterhouse, G Barton, M Clamp, S Searle + * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.2b1) + * Copyright (C) 2014 The Jalview Authors * * This file is part of Jalview. * * Jalview is free software: you can redistribute it and/or * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. - * + * as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * * Jalview is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR * PURPOSE. See the GNU General Public License for more details. * - * You should have received a copy of the GNU General Public License along with Jalview. If not, see . + * You should have received a copy of the GNU General Public License + * along with Jalview. If not, see . + * The Jalview Authors are detailed in the 'AUTHORS' file. */ package jalview.datamodel; +import java.util.Enumeration; import java.util.Hashtable; import jalview.analysis.*; @@ -68,8 +72,8 @@ public class SeqCigar extends CigarSimple */ public String getSequenceString(char GapChar) { - return (length == 0) ? "" : (String) getSequenceAndDeletions(refseq - .getSequenceAsString(start, end), GapChar)[0]; + return (length == 0) ? "" : (String) getSequenceAndDeletions( + refseq.getSequenceAsString(start, end), GapChar)[0]; } /** @@ -85,18 +89,16 @@ public class SeqCigar extends CigarSimple { return null; } - Object[] edit_result = getSequenceAndDeletions(refseq - .getSequenceAsString(start, end), GapChar); + Object[] edit_result = getSequenceAndDeletions( + refseq.getSequenceAsString(start, end), GapChar); if (edit_result == null) { - throw new Error( - "Implementation Error - unexpected null from getSequenceAndDeletions"); + throw new Error(MessageManager.getString("error.implementation_error_unexpected_null_from_get_sequence_and_deletions")); } int bounds[] = (int[]) edit_result[1]; - seq = new Sequence(refseq.getName(), (String) edit_result[0], refseq - .getStart() - + start + bounds[0], refseq.getStart() + start - + ((bounds[2] == 0) ? -1 : bounds[2])); + seq = new Sequence(refseq.getName(), (String) edit_result[0], + refseq.getStart() + start + bounds[0], refseq.getStart() + + start + ((bounds[2] == 0) ? -1 : bounds[2])); seq.setDescription(refseq.getDescription()); int sstart = seq.getStart(), send = seq.getEnd(); // seq.checkValidRange(); probably not needed @@ -139,11 +141,11 @@ public class SeqCigar extends CigarSimple boolean hasgaps = false; if (seq == null) { - throw new Error("Implementation Error - _setSeq(null,...)"); + throw new Error(MessageManager.getString("error.implementation_error_set_seq_null")); } if (_s < 0) { - throw new Error("Implementation Error: _s=" + _s); + throw new Error(MessageManager.formatMessage("error.implementation_error_s", new String[]{Integer.valueOf(_s).toString()})); } String seq_string = seq.getSequenceAsString(); if (_e == 0 || _e < _s || _e > seq_string.length()) @@ -170,9 +172,8 @@ public class SeqCigar extends CigarSimple } else { - ds = new Sequence(seq.getName(), ungapped, seq.getStart(), seq - .getStart() - + ungapped.length() - 1); + ds = new Sequence(seq.getName(), ungapped, seq.getStart(), + seq.getStart() + ungapped.length() - 1); // JBPNote: this would be consistent but may not be useful // seq.setDatasetSequence(ds); } @@ -210,8 +211,7 @@ public class SeqCigar extends CigarSimple // Check offsets if (end > ds.getLength()) { - throw new Error( - "SeqCigar: Possible implementation error: sequence is longer than dataset sequence"); + throw new Error(MessageManager.getString("error.implementation_error_seqcigar_possible")); // end = ds.getLength(); } @@ -235,12 +235,11 @@ public class SeqCigar extends CigarSimple super(); if (seq == null) { - throw new Error("Implementation Bug. Null seq !"); + throw new Error(MessageManager.getString("error.implmentation_bug_seq_null")); } if (operation.length != range.length) { - throw new Error( - "Implementation Bug. Cigar Operation list!= range list"); + throw new Error(MessageManager.getString("error.implementation_bug_cigar_operation_list_range_list")); } if (operation != null) @@ -250,17 +249,14 @@ public class SeqCigar extends CigarSimple if (_setSeq(seq, false, 0, 0)) { - throw new Error( - "NOT YET Implemented: Constructing a Cigar object from a cigar string and a gapped sequence."); + throw new Error(MessageManager.getString("error.not_yet_implemented_cigar_object_from_cigar_string")); } for (int i = this.length, j = 0; j < operation.length; i++, j++) { char op = operation[j]; if (op != M && op != I && op != D) { - throw new Error("Implementation Bug. Cigar Operation '" + j - + "' '" + op + "' not one of '" + M + "', '" + I - + "', or '" + D + "'."); + throw new Error(MessageManager.formatMessage("error.implementation_bug_cigar_operation", new String[]{Integer.valueOf(j).toString(),Integer.valueOf(op).toString(),Integer.valueOf(M).toString(),Integer.valueOf(I).toString(),Integer.valueOf(D).toString()})); } this.operation[i] = op; this.range[i] = range[j]; @@ -274,8 +270,7 @@ public class SeqCigar extends CigarSimple this.length = 0; if (_setSeq(seq, false, 0, 0)) { - throw new Error( - "NOT YET Implemented: Constructing a Cigar object from a cigar string and a gapped sequence."); + throw new Error(MessageManager.getString("error.not_yet_implemented_cigar_object_from_cigar_string")); } } } @@ -382,7 +377,7 @@ public class SeqCigar extends CigarSimple super(); if (seq == null) { - throw new Error("Implementation error for new Cigar(SequenceI)"); + throw new Error(MessageManager.getString("error.implementation_error_for_new_cigar")); } _setSeq(seq, false, 0, 0); // there is still work to do @@ -404,7 +399,7 @@ public class SeqCigar extends CigarSimple super(); if (seq == null) { - throw new Error("Implementation error for new Cigar(SequenceI)"); + throw new Error(MessageManager.getString("error.implementation_error_for_new_cigar")); } _setSeq(seq, false, start, end + 1); // there is still work to do @@ -431,12 +426,16 @@ public class SeqCigar extends CigarSimple } /** - * createAlignment + * create an alignment from the given array of cigar sequences and gap + * character, and marking the given segments as visible in the given + * columselection. * * @param alseqs - * SeqCigar[] * @param gapCharacter - * char + * @param colsel + * - columnSelection where hidden regions are marked + * @param segments + * - visible regions of alignment * @return SequenceI[] */ public static SequenceI[] createAlignmentSequences(SeqCigar[] alseqs, @@ -455,8 +454,7 @@ public class SeqCigar extends CigarSimple // endcol}, hidden regions {{start, end, col}}) if (gs_regions[i] == null) { - throw new Error("Implementation error: " + i - + "'th sequence Cigar has no operations."); + throw new Error(MessageManager.formatMessage("error.implementation_error_cigar_seq_no_operations", new String[]{Integer.valueOf(i).toString()})); } g_seqs[i] = new StringBuffer((String) ((Object[]) gs_regions[i])[0]); // the // visible @@ -501,8 +499,8 @@ public class SeqCigar extends CigarSimple } else { - g_seqs[s].insert(inspos, alseqs_string[i].substring( - region[0], region[1] + 1)); + g_seqs[s].insert(inspos, + alseqs_string[i].substring(region[0], region[1] + 1)); } } shifts.addShift(region[2], insert.length); // update shift in @@ -520,10 +518,9 @@ public class SeqCigar extends CigarSimple { int[] bounds = ((int[]) ((Object[]) gs_regions[i])[1]); SequenceI ref = alseqs[i].getRefSeq(); - seqs[i] = new Sequence(ref.getName(), g_seqs[i].toString(), ref - .getStart() - + alseqs[i].start + bounds[0], ref.getStart() - + alseqs[i].start + (bounds[2] == 0 ? -1 : bounds[2])); + seqs[i] = new Sequence(ref.getName(), g_seqs[i].toString(), + ref.getStart() + alseqs[i].start + bounds[0], ref.getStart() + + alseqs[i].start + (bounds[2] == 0 ? -1 : bounds[2])); seqs[i].setDatasetSequence(ref); seqs[i].setDescription(ref.getDescription()); } @@ -691,4 +688,77 @@ public class SeqCigar extends CigarSimple // System.err.println("Subseqgaped\n------ktryas---dtqwrtsasll----dddptyipqqwa----slchvhryas---dtqwrtsasll--qwa----slchvh\n"+ssgapedseq+"\n"+sub_se_gp.getCigarstring()); } + /** + * references to entities that this sequence cigar is associated with. + */ + private Hashtable selGroups = null; + + public void setGroupMembership(Object group) + { + if (selGroups == null) + { + selGroups = new Hashtable(); + } + selGroups.put(group, new int[0]); + } + + /** + * Test for and if present remove association to group. + * + * @param group + * @return true if group was associated and it was removed + */ + public boolean removeGroupMembership(Object group) + { + if (selGroups != null && selGroups.containsKey(group)) + { + selGroups.remove(group); + return true; + } + return false; + } + + /** + * forget all associations for this sequence. + */ + public void clearMemberships() + { + if (selGroups != null) + { + selGroups.clear(); + } + selGroups = null; + } + + /** + * + * @return null or array of all associated entities + */ + public Object[] getAllMemberships() + { + if (selGroups == null) + { + return null; + } + Object[] mmbs = new Object[selGroups.size()]; + Enumeration en = selGroups.keys(); + for (int i = 0; en.hasMoreElements(); i++) + { + mmbs[i] = en.nextElement(); + } + return mmbs; + } + + /** + * Test for group membership + * + * @param sgr + * - a selection group or some other object that may be associated + * with seqCigar + * @return true if sgr is associated with this seqCigar + */ + public boolean isMemberOf(Object sgr) + { + return (selGroups != null) && selGroups.get(sgr) != null; + } }