Newer
Older
/* FeatureBaseViewer.java
*
* created: Sat Dec 19 1998
*
* This file is part of Artemis
*
* Copyright (C) 1998,1999,2000 Genome Research Limited
*
* This program 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 2
* of the License, or (at your option) any later version.
*
* This program 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 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/FeatureBaseViewer.java,v 1.2 2008-12-16 11:46:15 tjc Exp $
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
* A component for viewing the bases of a feature. Once created this
* component listens for FeatureChange events to keep the the sequence up to
* date.
* @author Kim Rutherford
**/
public class FeatureBaseViewer
implements EntryChangeListener, FeatureChangeListener
{
/** The Feature that this component is showing information about. */
private Feature feature = null;
/** The SequenceViewer object that is displaying the feature bases. */
private SequenceViewer sequence_viewer;
/** The Entry that contains the Feature this object is displaying. */
private Entry entry;
/**
* Create a new FeatureBaseViewer component to display the bases of the
* given Feature.
* @param feature The feature to view.
* @param include_numbers If true then the sequence will be numbered
* (every second line of the display will be numbers rather than
* sequence).
**/
public FeatureBaseViewer (final Feature feature,
final boolean include_numbers,
final FeatureSegmentVector segments)
sequence_viewer =
new SequenceViewer ("Feature base viewer for feature:" +
redisplay ();
getFeature ().getEntry ().addEntryChangeListener (this);
getFeature ().addFeatureChangeListener (this);
sequence_viewer.addWindowListener (new WindowAdapter ()
{
public void windowClosed (WindowEvent event)
{
stopListening ();
}
});
}
/**
* Remove this object as a entry and feature change listener.
**/
getEntry ().removeEntryChangeListener (this);
getFeature ().removeFeatureChangeListener (this);
}
/**
* Implementation of the EntryChangeListener interface. We listen to
* EntryChange events so we can delete this component if the feature gets
* deleted.
**/
public void entryChanged (EntryChangeEvent event)
{
switch (event.getType ())
{
stopListening ();
sequence_viewer.dispose ();
}
break;
default:
// do nothing;
break;
}
}
/**
* Implementation of the FeatureChangeListener interface. We need to
* listen to feature change events from the Features in this object so that
* we can keep the display up to date.
* @param event The change event.
**/
public void featureChanged (FeatureChangeEvent event)
{
// re-read the information from the feature
redisplay ();
}
/**
* Redisplay the bases.
**/
private void redisplay ()
{
final String product = getFeature().getProductString();
final StringBuilder hdr = new StringBuilder();
hdr.append(getFeature().getSystematicName()).append(" ");
hdr.append(getFeature().getIDString()).append(" ");
hdr.append(product == null ? "undefined product" : product);
final String bases;
if(segments != null) // display just for selected segments
{
final StringBuilder buffer = new StringBuilder();
segments.sortByPosition();
for(int i = 0; i < segments.size(); ++i)
{
final FeatureSegment segment = segments.elementAt(i);
buffer.append(segment.getBases());
hdr.append(i == 0 ? " " : ",").append(segment.getRawRange().toString());
}
hdr.append(getFeature ().isForwardFeature() ? " forward" : " reverse");
bases = buffer.toString();
}
else
{
hdr.append(" ").append(getFeature().getWriteRange());
bases = getFeature ().getBases ();
}
sequence_viewer.setSequence (">" + hdr.toString(), bases.toUpperCase ());
}
/**
* Return the feature this component is showing information about.
**/
return feature;
}
/**
* Return the Entry that contains the Feature this object is displaying.
**/