diff --git a/uk/ac/sanger/artemis/Feature.java b/uk/ac/sanger/artemis/Feature.java index 1d834b09ee51a45da6b64c0626a0b89cae1145e3..8d99f031cfeffea8bf4ffaee264784ac4f9f0140 100644 --- a/uk/ac/sanger/artemis/Feature.java +++ b/uk/ac/sanger/artemis/Feature.java @@ -20,7 +20,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - * $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/Feature.java,v 1.14 2005-10-11 14:20:31 tjc Exp $ + * $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/Feature.java,v 1.15 2005-11-15 12:21:18 tjc Exp $ */ package uk.ac.sanger.artemis; @@ -60,7 +60,7 @@ import java.util.Date; * embl.Feature and embl.Entry objects. * * @author Kim Rutherford - * @version $Id: Feature.java,v 1.14 2005-10-11 14:20:31 tjc Exp $ + * @version $Id: Feature.java,v 1.15 2005-11-15 12:21:18 tjc Exp $ **/ public class Feature @@ -215,6 +215,34 @@ public class Feature if(event.getType() == SequenceChangeEvent.REVERSE_COMPLEMENT) reverseComplement(getEntry().getBases().getLength()); + else if(event.getType() == SequenceChangeEvent.CONTIG_REVERSE_COMPLEMENT) + { + final Location old_location = getLocation(); + + // if the event is contained within this feature then the feature + // sequence may have changed + final Range this_feature_range = getMaxRawRange(); + + boolean feature_changed = false; + Range eventRange = event.getRange(); + + // reverse complement feature if within contig region + if(eventRange.getStart() <= this_feature_range.getStart() && + eventRange.getEnd() >= this_feature_range.getEnd()) + { + try + { + final Location new_location = + getLocation().reverseComplement(event.getLength(), eventRange.getStart()); + + setLocationInternal(new_location); + } + catch(OutOfRangeException e) + { + throw new Error("internal error - inconsistent location: " + e); + } + } + } else { final Location old_location = getLocation(); diff --git a/uk/ac/sanger/artemis/FeatureSegment.java b/uk/ac/sanger/artemis/FeatureSegment.java index a780fb28df3ce154b4bd98d6e84ba670f08ce4d9..3406b61be091e06ecfd8f1fec217e392a751ff11 100644 --- a/uk/ac/sanger/artemis/FeatureSegment.java +++ b/uk/ac/sanger/artemis/FeatureSegment.java @@ -20,7 +20,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - * $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/FeatureSegment.java,v 1.2 2005-05-03 09:12:09 tjc Exp $ + * $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/FeatureSegment.java,v 1.3 2005-11-15 12:21:18 tjc Exp $ */ package uk.ac.sanger.artemis; @@ -39,7 +39,7 @@ import java.util.Vector; * must be a coding sequence. * * @author Kim Rutherford - * @version $Id: FeatureSegment.java,v 1.2 2005-05-03 09:12:09 tjc Exp $ + * @version $Id: FeatureSegment.java,v 1.3 2005-11-15 12:21:18 tjc Exp $ * **/ @@ -264,10 +264,12 @@ public class FeatureSegment * Implementation of the SequenceChangeListener interface. We listen for * this event so that we can update the range of this segment. **/ - public void sequenceChanged (final SequenceChangeEvent event) { + public void sequenceChanged (final SequenceChangeEvent event) + { // the location of the feature itself will change later - - if (event.getType () != SequenceChangeEvent.REVERSE_COMPLEMENT) { + if(event.getType () != SequenceChangeEvent.REVERSE_COMPLEMENT && + event.getType () != SequenceChangeEvent.CONTIG_REVERSE_COMPLEMENT) + { updateRange (); } } diff --git a/uk/ac/sanger/artemis/components/EditMenu.java b/uk/ac/sanger/artemis/components/EditMenu.java index e6f47257a3bcc58fbeb0682b143f02cd205a910c..ed5919c934124a9c2ef535b0b2b7c824c1f48bbd 100644 --- a/uk/ac/sanger/artemis/components/EditMenu.java +++ b/uk/ac/sanger/artemis/components/EditMenu.java @@ -20,7 +20,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - * $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/components/EditMenu.java,v 1.5 2005-10-11 14:20:31 tjc Exp $ + * $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/components/EditMenu.java,v 1.6 2005-11-15 12:21:18 tjc Exp $ **/ package uk.ac.sanger.artemis.components; @@ -53,7 +53,7 @@ import javax.swing.*; * A menu with editing commands. * * @author Kim Rutherford - * @version $Id: EditMenu.java,v 1.5 2005-10-11 14:20:31 tjc Exp $ + * @version $Id: EditMenu.java,v 1.6 2005-11-15 12:21:18 tjc Exp $ **/ public class EditMenu extends SelectionMenu @@ -485,6 +485,40 @@ public class EditMenu extends SelectionMenu } }); + final JMenuItem reverse_complement_range_item = new JMenuItem("Reverse And Complement Selected Contig"); + reverse_complement_range_item.addActionListener(new ActionListener() + { + public void actionPerformed(ActionEvent event) + { + final FeatureVector selected_features = getSelection().getAllFeatures(); + + if(selected_features.size() == 1) + { + + final Feature selection_feature = selected_features.elementAt(0); + try + { + getEntryGroup().getBases().reverseComplement(selection_feature); + } + catch(ReadOnlyException roe) + { + final String message = + "one or more of the features is read-only or is in a " + + "read-only entry - cannot continue"; + new MessageDialog(null, message); + return; + } + } + else + { + final String message = + "Select a single contig to reverse and complement"; + new MessageDialog(null, message); + return; + } + } + }); + final JMenuItem delete_bases_item = new JMenuItem("Delete Selected Bases"); delete_bases_item.addActionListener(new ActionListener() { @@ -549,7 +583,8 @@ public class EditMenu extends SelectionMenu addSeparator(); add(auto_gene_name_item); add(fix_gene_names_item); - add(reverse_complement_item); + add(reverse_complement_item); + add(reverse_complement_range_item); add(delete_bases_item); add(add_bases_item); diff --git a/uk/ac/sanger/artemis/components/FeatureDisplay.java b/uk/ac/sanger/artemis/components/FeatureDisplay.java index deb1822f02c40596dd5b7dc32cc65dd4d34681d9..6de6173da99f0ac407733f4548aeef530a9cda01 100644 --- a/uk/ac/sanger/artemis/components/FeatureDisplay.java +++ b/uk/ac/sanger/artemis/components/FeatureDisplay.java @@ -20,7 +20,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - * $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/components/FeatureDisplay.java,v 1.30 2005-10-20 13:28:36 tjc Exp $ + * $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/components/FeatureDisplay.java,v 1.31 2005-11-15 12:21:18 tjc Exp $ */ package uk.ac.sanger.artemis.components; @@ -47,7 +47,7 @@ import javax.swing.UIManager; * This component is used for displaying an Entry. * * @author Kim Rutherford - * @version $Id: FeatureDisplay.java,v 1.30 2005-10-20 13:28:36 tjc Exp $ + * @version $Id: FeatureDisplay.java,v 1.31 2005-11-15 12:21:18 tjc Exp $ **/ public class FeatureDisplay extends EntryGroupPanel @@ -958,14 +958,14 @@ public class FeatureDisplay extends EntryGroupPanel makeBaseVisibleInternal(new_centre_position, true, false); } - else + else if(event.getType() != SequenceChangeEvent.CONTIG_REVERSE_COMPLEMENT) makeBaseVisibleInternal(event.getPosition(), true, false); fixScrollbar(); needVisibleFeatureVectorUpdate(); repaint(); - if(event.getType() == SequenceChangeEvent.REVERSE_COMPLEMENT) + if(event.getType() == SequenceChangeEvent.REVERSE_COMPLEMENT ) fireAdjustmentEvent(DisplayAdjustmentEvent.REV_COMP_EVENT); else fireAdjustmentEvent(DisplayAdjustmentEvent.SCROLL_ADJUST_EVENT); diff --git a/uk/ac/sanger/artemis/io/Location.java b/uk/ac/sanger/artemis/io/Location.java index fc4e8f3c7fa39ba5c2e8d3b661a36a81acb126ac..f7b4df21e344ba49029b0d988b44dfd09eb7198f 100644 --- a/uk/ac/sanger/artemis/io/Location.java +++ b/uk/ac/sanger/artemis/io/Location.java @@ -20,7 +20,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - * $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/io/Location.java,v 1.5 2005-07-27 08:24:17 tjc Exp $ + * $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/io/Location.java,v 1.6 2005-11-15 12:21:18 tjc Exp $ */ package uk.ac.sanger.artemis.io; @@ -34,7 +34,7 @@ import uk.ac.sanger.artemis.io.LocationLexer.TokenEnumeration; * functions for parsing and manipulating the location. * * @author Kim Rutherford - * @version $Id: Location.java,v 1.5 2005-07-27 08:24:17 tjc Exp $ + * @version $Id: Location.java,v 1.6 2005-11-15 12:21:18 tjc Exp $ * */ public class Location @@ -384,6 +384,27 @@ public class Location return new_location; } + /** + * Return a reversed and complemented copy of this Location. + * @param sequence_length The length of the sequence that this Location is + * associated with. + * @return a new Location that will be a reversed and complemented copy of + * this Location. The user_data fields in the returned Location will be + * the same as the original. + **/ + public Location reverseComplement(final int sequence_length, + final int offset) + { + final Location new_location = new Location(getParsedLocation().copy()); + + new_location.parse_tree = + new_location.getParsedLocation().reverseComplement(sequence_length, offset); + + new_location.parse_tree = new_location.parse_tree.getCanonical(); + return new_location; + } + + /** * Return a Range that spans the whole Location. **/ @@ -528,6 +549,12 @@ public class Location return parse_tree; } + public void setParsedLocation(LocationParseNode parse_tree) + { + this.parse_tree = parse_tree; + } + + /** * Create a new Location object from the given LocationParseNode tree. **/ diff --git a/uk/ac/sanger/artemis/io/LocationParseNode.java b/uk/ac/sanger/artemis/io/LocationParseNode.java index f2acb7fa369057b93aef49d93e4f6066483b1818..15ed80472dcbc0e5c81a51bbf12192abc35d44fa 100644 --- a/uk/ac/sanger/artemis/io/LocationParseNode.java +++ b/uk/ac/sanger/artemis/io/LocationParseNode.java @@ -20,7 +20,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - * $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/io/LocationParseNode.java,v 1.5 2005-05-03 09:14:43 tjc Exp $ + * $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/io/LocationParseNode.java,v 1.6 2005-11-15 12:21:18 tjc Exp $ */ package uk.ac.sanger.artemis.io; @@ -33,7 +33,7 @@ import uk.ac.sanger.artemis.util.OutOfRangeException; * Location. It is a utility class for EMBL.Location. * * @author Kim Rutherford - * @version $Id: LocationParseNode.java,v 1.5 2005-05-03 09:14:43 tjc Exp $ + * @version $Id: LocationParseNode.java,v 1.6 2005-11-15 12:21:18 tjc Exp $ * **/ @@ -401,7 +401,21 @@ class LocationParseNode extends EMBLObject * associated with. * @return a reversed and complemented tree. **/ - LocationParseNode reverseComplement(final int sequence_length) + LocationParseNode reverseComplement(final int sequence_length) + { + return reverseComplement(sequence_length, 0); + } + + /** + * Return a reversed and complemented copy of this Location. + * @param sequence_length The length of the sequence that this Location is + * associated with. + * @param offset this is set to zero if the whole sequence is being + * operated on or to the start of the region being reverse complemented. + * @return a reversed and complemented tree. + **/ + LocationParseNode reverseComplement(final int sequence_length, + final int offset) { try { @@ -412,9 +426,15 @@ class LocationParseNode extends EMBLObject case RANGE: { final Range range = getRange(); - final Range new_range = - new Range(sequence_length - range.getEnd() + 1, - sequence_length - range.getStart() + 1); + final int start = sequence_length - (range.getEnd() - offset + 1) + offset; + final int end = sequence_length - (range.getStart() - offset + 1) + offset; + +// System.out.println("LocationParseNode.reverseComplement() HERE "+ +// start+ ".."+ end +" sequence_length="+sequence_length+ +// " range.getEnd()="+range.getEnd()+ " range.getStart()="+range.getStart()+ +// " offset="+offset); + + final Range new_range = new Range(start, end); final LocationParseNode new_range_node = new LocationParseNode(new_range); return new LocationParseNode(COMPLEMENT, new_range_node); @@ -426,9 +446,12 @@ class LocationParseNode extends EMBLObject if(child.getType() == RANGE) { final Range range = child.getRange(); - final Range new_range = - new Range(sequence_length - range.getEnd() + 1, - sequence_length - range.getStart() + 1); + final int start = sequence_length - (range.getEnd() - offset + 1) + offset; + final int end = sequence_length - (range.getStart() - offset + 1) + offset; + + final Range new_range = new Range(start, end); +// new Range(sequence_length - (range.getEnd() - offset + 1) + offset, +// sequence_length - (range.getStart() - offset + 1) + offset); return new LocationParseNode(new_range); } else @@ -447,7 +470,7 @@ class LocationParseNode extends EMBLObject final LocationParseNode this_child = children.elementAt(i); final LocationParseNode new_child = - this_child.reverseComplement(sequence_length); + this_child.reverseComplement(sequence_length, offset); new_children.addElementAtEnd(new_child); } diff --git a/uk/ac/sanger/artemis/io/SimpleDocumentEntry.java b/uk/ac/sanger/artemis/io/SimpleDocumentEntry.java index be8a2474fa1df3d87b97bb4651fc8714e2c977a7..c03bd6383bfd1a9d732f4f3092ccb63e4f747db3 100644 --- a/uk/ac/sanger/artemis/io/SimpleDocumentEntry.java +++ b/uk/ac/sanger/artemis/io/SimpleDocumentEntry.java @@ -20,7 +20,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - * $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/io/SimpleDocumentEntry.java,v 1.16 2005-10-26 16:10:38 tjc Exp $ + * $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/io/SimpleDocumentEntry.java,v 1.17 2005-11-15 12:21:18 tjc Exp $ */ package uk.ac.sanger.artemis.io; @@ -37,7 +37,7 @@ import java.util.Enumeration; * This class contains the methods common to all DocumentEntry objects. * * @author Kim Rutherford <kmr@sanger.ac.uk> - * @version $Id: SimpleDocumentEntry.java,v 1.16 2005-10-26 16:10:38 tjc Exp $ + * @version $Id: SimpleDocumentEntry.java,v 1.17 2005-11-15 12:21:18 tjc Exp $ **/ abstract public class SimpleDocumentEntry @@ -217,8 +217,9 @@ abstract public class SimpleDocumentEntry else qualifiers.setQualifier(new Qualifier("colour", "11")); - final ReadOnlyEmblStreamFeature new_feature = - new ReadOnlyEmblStreamFeature(new Key("fasta_record"), + //ReadOnlyEmblStreamFeature + final EmblStreamFeature new_feature = + new EmblStreamFeature(new Key("fasta_record"), new Location(new_range), qualifiers); diff --git a/uk/ac/sanger/artemis/io/StreamSequence.java b/uk/ac/sanger/artemis/io/StreamSequence.java index 38e2dcef44191766c5f01dca0b68612d5bee4804..168ee0e7401c68c696de70f8215ac90fd68d25f2 100644 --- a/uk/ac/sanger/artemis/io/StreamSequence.java +++ b/uk/ac/sanger/artemis/io/StreamSequence.java @@ -20,7 +20,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - * $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/io/StreamSequence.java,v 1.9 2005-09-02 16:25:50 tjc Exp $ + * $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/io/StreamSequence.java,v 1.10 2005-11-15 12:21:18 tjc Exp $ */ package uk.ac.sanger.artemis.io; @@ -35,7 +35,7 @@ import java.io.Writer; * Sequence stored in 4 bit chunks. * * @author Kim Rutherford - * @version $Id: StreamSequence.java,v 1.9 2005-09-02 16:25:50 tjc Exp $ + * @version $Id: StreamSequence.java,v 1.10 2005-11-15 12:21:18 tjc Exp $ **/ public abstract class StreamSequence @@ -97,7 +97,7 @@ public abstract class StreamSequence } } - protected void forceReset() + public void forceReset() { dst = null; } diff --git a/uk/ac/sanger/artemis/sequence/Bases.java b/uk/ac/sanger/artemis/sequence/Bases.java index 271b8be58bc659a0fc0efb62ee3aed4fd88c88b7..57c2b6c1ab6fc044eb333ee2a2be24a42ebca640 100644 --- a/uk/ac/sanger/artemis/sequence/Bases.java +++ b/uk/ac/sanger/artemis/sequence/Bases.java @@ -20,15 +20,17 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - * $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/sequence/Bases.java,v 1.16 2005-10-19 08:27:00 tjc Exp $ + * $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/sequence/Bases.java,v 1.17 2005-11-15 12:21:18 tjc Exp $ */ package uk.ac.sanger.artemis.sequence; +import uk.ac.sanger.artemis.Feature; import uk.ac.sanger.artemis.util.*; import uk.ac.sanger.artemis.io.Range; import uk.ac.sanger.artemis.io.EmblStreamSequence; import uk.ac.sanger.artemis.io.Sequence; +import uk.ac.sanger.artemis.io.StreamSequence; import org.biojava.bio.symbol.IllegalSymbolException; @@ -45,7 +47,7 @@ import java.util.Iterator; * non-base letter returns '@'. * * @author Kim Rutherford - * @version $Id: Bases.java,v 1.16 2005-10-19 08:27:00 tjc Exp $ */ + * @version $Id: Bases.java,v 1.17 2005-11-15 12:21:18 tjc Exp $ */ public class Bases { @@ -1017,6 +1019,66 @@ public class Bases return new Bases (new_sequence); } + + /** + * + * Reverse complement a range of the sequence. + * + */ + public void reverseComplement(Feature feature) + throws ReadOnlyException + { + forward_stop_codon_cache = null; + reverse_stop_codon_cache = null; + + final Range range = feature.getMaxRawRange(); + final int range_start_index = range.getStart(); + final int range_end_index = range.getEnd(); + + // ensure we just get subsequence of interest + ((StreamSequence)getSequence()).forceReset(); + // sequence to reverse complement + final char[] sub_sequence = reverseComplement(getSequence().getCharSubSequence( + range_start_index, range_end_index)); + final char[] new_sequence = new char[getLength()]; + final char[] old_sequence = ((StreamSequence)getSequence()).getCharSequence(); + +// System.out.println("range_start_index "+range_start_index); +// System.out.println("range_end_index "+range_end_index); +// System.out.println("getLength "+getLength()); +// System.out.println("sub_sequence.length "+sub_sequence.length); +// System.out.println(feature.getEntry().getEMBLEntry().toString()); +// System.out.println(new String(sub_sequence)); + + // if not first contig + if(range_start_index != 1) + System.arraycopy(old_sequence, 0, new_sequence, 0, range_start_index-2); + + // copy in new sequence fragment that has been reverse complemented + System.arraycopy(sub_sequence, 0, new_sequence, range_start_index-1, + sub_sequence.length); + + // if not last contig + if(range_end_index != getLength()) + System.arraycopy(old_sequence, range.getEnd(), new_sequence, range_end_index, + getLength()-range_end_index-1); + + try + { + embl_sequence.setFromChar(new_sequence); + } + catch (IllegalSymbolException e) + { + throw new Error ("internal error - unexpected exception: " + e); + } + + final SequenceChangeEvent event = + new SequenceChangeEvent(this, SequenceChangeEvent.CONTIG_REVERSE_COMPLEMENT, + range, sub_sequence.length); + + fireSequenceChangeEvent (event); + } + /** * Delete the bases in the given range and send out a SequenceChange event * to all the listeners. diff --git a/uk/ac/sanger/artemis/sequence/Marker.java b/uk/ac/sanger/artemis/sequence/Marker.java index ad134fec647f016cbfcafe5c32a82325db49d79b..1ecad0ed5044955e2a48880d7763868d5e29218d 100644 --- a/uk/ac/sanger/artemis/sequence/Marker.java +++ b/uk/ac/sanger/artemis/sequence/Marker.java @@ -20,7 +20,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - * $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/sequence/Marker.java,v 1.1 2004-06-09 09:52:16 tjc Exp $ + * $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/sequence/Marker.java,v 1.2 2005-11-15 12:21:18 tjc Exp $ */ package uk.ac.sanger.artemis.sequence; @@ -32,7 +32,7 @@ import java.util.Vector; * Objects of this class mark postions on one strand of DNA. * * @author Kim Rutherford - * @version $Id: Marker.java,v 1.1 2004-06-09 09:52:16 tjc Exp $ + * @version $Id: Marker.java,v 1.2 2005-11-15 12:21:18 tjc Exp $ * **/ @@ -224,7 +224,7 @@ public class Marker { * alive by having a reference on the sequence change listener list. * * @author Kim Rutherford - * @version $Id: Marker.java,v 1.1 2004-06-09 09:52:16 tjc Exp $ + * @version $Id: Marker.java,v 1.2 2005-11-15 12:21:18 tjc Exp $ * **/ class MarkerInternal @@ -285,9 +285,9 @@ class MarkerInternal * so that the Marker can be updated when the sequence changes. **/ public void sequenceChanged (final SequenceChangeEvent event) { - if (event.getType () == SequenceChangeEvent.REVERSE_COMPLEMENT) { + if(event.getType () == SequenceChangeEvent.REVERSE_COMPLEMENT || + event.getType () == SequenceChangeEvent.CONTIG_REVERSE_COMPLEMENT) return; - } final int sub_sequence_length = event.getSubSequence ().length (); diff --git a/uk/ac/sanger/artemis/sequence/SequenceChangeEvent.java b/uk/ac/sanger/artemis/sequence/SequenceChangeEvent.java index 6b1321320e257ecc3d4e7133f2e1777a35095563..837c0c684d00d70e93f42078de47f82a0bcf6294 100644 --- a/uk/ac/sanger/artemis/sequence/SequenceChangeEvent.java +++ b/uk/ac/sanger/artemis/sequence/SequenceChangeEvent.java @@ -20,16 +20,18 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - * $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/sequence/SequenceChangeEvent.java,v 1.1 2004-06-09 09:52:24 tjc Exp $ + * $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/sequence/SequenceChangeEvent.java,v 1.2 2005-11-15 12:21:18 tjc Exp $ */ package uk.ac.sanger.artemis.sequence; +import uk.ac.sanger.artemis.io.Range; + /** * This event is sent when the sequence of bases in a strand changes. * * @author Kim Rutherford - * @version $Id: SequenceChangeEvent.java,v 1.1 2004-06-09 09:52:24 tjc Exp $ + * @version $Id: SequenceChangeEvent.java,v 1.2 2005-11-15 12:21:18 tjc Exp $ * **/ @@ -53,6 +55,17 @@ public class SequenceChangeEvent extends uk.ac.sanger.artemis.ChangeEvent { this.sub_sequence = sub_sequence; } + public SequenceChangeEvent (final Bases bases, + final int type, + final Range range, + final int length) { + super (bases); + this.type = type; + this.range = range; + this.length = length; + } + + /** * Create a new SequenceChangeEvent object. * @param bases The Bases object that generated the event. @@ -72,6 +85,8 @@ public class SequenceChangeEvent extends uk.ac.sanger.artemis.ChangeEvent { final public static int REVERSE_COMPLEMENT = 3; + final public static int CONTIG_REVERSE_COMPLEMENT = 4; + /** * Return the Bases reference that was passed to the constructor. **/ @@ -101,6 +116,16 @@ public class SequenceChangeEvent extends uk.ac.sanger.artemis.ChangeEvent { return sub_sequence; } + public int getLength() + { + return length; + } + + public Range getRange() + { + return range; + } + /** * The type that was passed to the constructor. **/ @@ -115,6 +140,10 @@ public class SequenceChangeEvent extends uk.ac.sanger.artemis.ChangeEvent { * The sub sequence of bases that was passed to the constructor. **/ /* final */ private String sub_sequence; + + private int length; + + private Range range; }