--- /dev/null
+/*
+ * 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;
+
+ }
+
+
+
+}