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