/* * BioJava development code * * This code may be freely distributed and modified under the * terms of the GNU Lesser General Public Licence. This should * be distributed with the code. If you do not have a copy, * see: * * http://www.gnu.org/copyleft/lesser.html * * Copyright for this code is held jointly by the individual * authors. These should be listed in @author doc comments. * * For more information on the BioJava project and its aims, * or to join the biojava-l mailing list, visit the home page * at: * * http://www.biojava.org/ * * Created on Feb 9, 2005 * */ package org.biojava.dasobert.feature; import java.util.ArrayList; import java.util.Iterator; import java.util.List; /** * An Abstract class representing a Feature as being diplayed in the * SeqFeaturePanel A feature corresponds to everything that is visible in a * "line" and can contain one or multiple Segments. * * * @author Andreas Prlic * */ public abstract class AbstractFeatureTrack implements FeatureTrack, Cloneable { String name; String method; String type; List segments; String note; String link; String source; String score; String orientation; String typeID; String typeCategory; public AbstractFeatureTrack() { source = "Unknown"; method = "Unknown"; type = "Unknown"; note = ""; link = ""; score = ""; orientation = null; segments = new ArrayList(); } public abstract Object clone(); public String toString() { String str = "Feature: method: " + method + " type: " + type; if (name != null) str += " name: " + name; if ((note != null) && (!note.equals("null"))) { if (note.length() > 40) str += "note: " + note.substring(0, 39) + "..."; else str += " note: " + note; } str += " # segments: " + segments.size(); return str; } /** * returns true if the specified sequence position is within the range of this * Feature * * @param seqPosition * the position to check * @return true if the position is within the ranges of the segments of this * feature */ public boolean overlaps(int seqPosition) { List segments = getSegments(); Iterator iter = segments.iterator(); while (iter.hasNext()) { Segment seg = (Segment) iter.next(); if (seg.overlaps(seqPosition)) return true; } return false; } public void setSource(String s) { source = s; } public String getSource() { return source; }; public void setName(String nam) { name = nam; } public String getName() { return name; } public void setMethod(String methd) { method = methd; } public String getMethod() { return method; } public void setType(String typ) { type = typ; } public String getType() { return type; } public void setNote(String nte) { if (nte != null) note = nte; } public String getNote() { return note; } public void setLink(String lnk) { link = lnk; } public String getLink() { return link; } public void setScore(String s) { score = s; } public String getScore() { return score; } /** add a segment to this feature */ public void addSegment(int start, int end, String name) { Segment s = new SegmentImpl(); s.setStart(start); s.setEnd(end); s.setName(name); s.setParent(this); segments.add(s); } public void addSegment(Segment s) { s.setParent(this); segments.add(s); } public List getSegments() { return segments; } public String getOrientation() { return orientation; } public void setOrientation(String orientation) { this.orientation = orientation; } /** * test if two features are equivalent important: only comares type,method and * source. The individual segments are not compared! * */ public boolean equals(FeatureTrack feat) { // if ( note == null) { // if (( feat.getNote() == null ) || // ( feat.getNote().equals(""))) { // } else if ( this.note.equals(feat.getNote())){ // return true; // } if (this.type.equals(feat.getType())) { if (this.method.equals(feat.getMethod())) { if (this.source.equals(feat.getSource())) { if (this.note.equals(feat.getNote())) { return true; } } } } return false; } public String getTypeCategory() { // TODO Auto-generated method stub return typeCategory; } public String getTypeID() { // TODO Auto-generated method stub return typeID; } public void setTypeCategory(String typeCategory) { this.typeCategory = typeCategory; } public void setTypeID(String typeID) { this.typeID = typeID; } }