JAL-2055 prototype alternate feature colouring based on
[jalview.git] / src / jalview / datamodel / SequenceFeature.java
index 4a7706f..54ff6df 100755 (executable)
@@ -39,6 +39,13 @@ public class SequenceFeature
   // private key for Phase designed not to conflict with real GFF data
   private static final String PHASE = "!Phase";
 
+  // private key for feature number designed not to conflict with real GFF data
+  private static final String NUMBER = "!Num";
+
+  /*
+   * ATTRIBUTES is reserved for the GFF 'column 9' data, formatted as
+   * name1=value1;name2=value2,value3;...etc
+   */
   private static final String ATTRIBUTES = "ATTRIBUTES";
 
   public int begin;
@@ -111,26 +118,57 @@ public class SequenceFeature
     }
   }
 
+  /**
+   * Constructor including a Status value
+   * 
+   * @param type
+   * @param desc
+   * @param status
+   * @param begin
+   * @param end
+   * @param featureGroup
+   */
   public SequenceFeature(String type, String desc, String status,
           int begin, int end, String featureGroup)
   {
+    this(type, desc, begin, end, featureGroup);
+    setStatus(status);
+  }
+
+  /**
+   * Constructor
+   * 
+   * @param type
+   * @param desc
+   * @param begin
+   * @param end
+   * @param featureGroup
+   */
+  SequenceFeature(String type, String desc, int begin, int end,
+          String featureGroup)
+  {
     this.type = type;
     this.description = desc;
-    setValue(STATUS, status);
     this.begin = begin;
     this.end = end;
     this.featureGroup = featureGroup;
   }
 
+  /**
+   * Constructor including a score value
+   * 
+   * @param type
+   * @param desc
+   * @param begin
+   * @param end
+   * @param score
+   * @param featureGroup
+   */
   public SequenceFeature(String type, String desc, int begin, int end,
           float score, String featureGroup)
   {
-    this.type = type;
-    this.description = desc;
-    this.begin = begin;
-    this.end = end;
+    this(type, desc, begin, end, featureGroup);
     this.score = score;
-    this.featureGroup = featureGroup;
   }
 
   /**
@@ -445,6 +483,34 @@ public class SequenceFeature
   }
 
   /**
+   * Set the ordinal number of this feature on the sequence
+   * 
+   * @param num
+   */
+  public void setFeatureNumber(int num)
+  {
+    setValue(NUMBER, String.valueOf(num));
+  }
+
+  /**
+   * Returns the feature number if set, else 0. Intended for use as the ordinal
+   * position of the feature on the sequence for features of the same type.
+   * 
+   * @return
+   */
+  public int getFeatureNumber()
+  {
+    try
+    {
+      return Integer.parseInt((String) getValue(NUMBER));
+    } catch (Exception e)
+    {
+      // property absent or not numeric
+      return 0;
+    }
+  }
+
+  /**
    * Readable representation, for debug only, not guaranteed not to change
    * between versions
    */