diff --git a/uk/ac/sanger/artemis/io/GFFStreamFeature.java b/uk/ac/sanger/artemis/io/GFFStreamFeature.java index 1909bed71e6696b5166214241cbf2f40b4d436e9..f4fe890ea9306bbb74053a6bc7851bef1a928159 100644 --- a/uk/ac/sanger/artemis/io/GFFStreamFeature.java +++ b/uk/ac/sanger/artemis/io/GFFStreamFeature.java @@ -69,10 +69,10 @@ public class GFFStreamFeature extends SimpleDocumentFeature StringVector gff_lines = null; /** store for spliced features containing id and range of each segment */ - private Hashtable id_range_store; + private Hashtable<String, Range> id_range_store; /** store a record of the new and old uniquenames that have been changed */ - private Hashtable newIdMapToOldId; + private Hashtable<String, String> newIdMapToOldId; /** store the Timestamp for the feature */ private Timestamp timelastmodified; @@ -82,7 +82,7 @@ public class GFFStreamFeature extends SimpleDocumentFeature private boolean visible = true; /** combined feature_relationship.rank store for exons */ - private Hashtable feature_relationship_rank_store; + private Hashtable<String, Integer> feature_relationship_rank_store; /** first tabbed parameter */ private String gffSeqName; @@ -231,18 +231,22 @@ public class GFFStreamFeature extends SimpleDocumentFeature duplicatePrefix = "DUP"; if(id_range_store != null) { - final Hashtable new_id_range_store = new Hashtable(id_range_store.size()); - final Enumeration enumIdRangeStore = id_range_store.keys(); + final Hashtable<String, Range> new_id_range_store = new Hashtable<String, Range>(id_range_store.size()); + final Enumeration<String> enumIdRangeStore = id_range_store.keys(); while(enumIdRangeStore.hasMoreElements()) { - final String keyId = (String)enumIdRangeStore.nextElement(); - final Range range = (Range)id_range_store.get(keyId); + final String keyId = enumIdRangeStore.nextElement(); + final Range range = id_range_store.get(keyId); new_id_range_store.put(duplicatePrefix+keyId, range); } id_range_store.clear(); this.id_range_store = (Hashtable) new_id_range_store.clone(); - uniquename = getSegmentID(getLocation().getRanges()); + + if(getLocation().getRanges().size() > 1) + uniquename = getSegmentID(getLocation().getRanges()); + else + uniquename = duplicatePrefix+ (String)getQualifierByName("ID").getValues().get(0); } else uniquename = duplicatePrefix+ (String)getQualifierByName("ID").getValues().get(0); @@ -347,24 +351,20 @@ public class GFFStreamFeature extends SimpleDocumentFeature final String rest_of_line = (String)line_bits.elementAt(8); // parse the rest of the line as ACeDB format attributes - final Hashtable attributes = parseAttributes(rest_of_line); -// final String type = (String)line_bits.elementAt(2); - - for(final java.util.Enumeration attribute_enum = attributes.keys(); + final Hashtable<String, StringVector> attributes = parseAttributes(rest_of_line); + for(final Enumeration<String> attribute_enum = attributes.keys(); attribute_enum.hasMoreElements();) { - String name = (String)attribute_enum.nextElement(); - - final StringVector values = (StringVector)attributes.get(name); + String name = attribute_enum.nextElement(); + final StringVector values = attributes.get(name); if(MatchPanel.isClusterTag(name)) { - List lazyValues = new Vector(); + List<ClusterLazyQualifierValue> lazyValues = new Vector<ClusterLazyQualifierValue>(); for(int i=0; i<values.size(); i++) lazyValues.add( new ClusterLazyQualifierValue( (String)values.get(i), name, this )); - setQualifier(new QualifierLazyLoading(name, lazyValues)); } else @@ -455,23 +455,23 @@ public class GFFStreamFeature extends SimpleDocumentFeature * Store for spliced regions of segments ID's and ranges. * */ - public void setSegmentRangeStore(Hashtable id_range_store) + public void setSegmentRangeStore(Hashtable<String, Range> id_range_store) { this.id_range_store = id_range_store; } - public Hashtable getSegmentRangeStore() + public Hashtable<String, Range> getSegmentRangeStore() { if(id_range_store == null) { - id_range_store = new Hashtable(); + id_range_store = new Hashtable<String, Range>(); id_range_store.put((String)this.getQualifierByName("ID").getValues().get(0), this.getLocation().getTotalRange()); } return id_range_store; } - public Hashtable getNewIdMapToOldId() + public Hashtable<String, String> getNewIdMapToOldId() { return newIdMapToOldId; } @@ -480,7 +480,7 @@ public class GFFStreamFeature extends SimpleDocumentFeature * Used when changing spliced feature uniquenames * @param newIdMapToOldId */ - public void setNewIdMapToOldId(Hashtable newIdMapToOldId) + public void setNewIdMapToOldId(Hashtable<String, String> newIdMapToOldId) { this.newIdMapToOldId = newIdMapToOldId; } @@ -490,7 +490,7 @@ public class GFFStreamFeature extends SimpleDocumentFeature * @param feature_relationship_rank_store */ public void setFeature_relationship_rank_store( - Hashtable feature_relationship_rank_store) + Hashtable<String, Integer> feature_relationship_rank_store) { this.feature_relationship_rank_store = feature_relationship_rank_store; } @@ -499,7 +499,7 @@ public class GFFStreamFeature extends SimpleDocumentFeature * Store for ID's and CHADO feature_relationship.rank * @return */ - public Hashtable getFeature_relationship_rank_store() + public Hashtable<String, Integer> getFeature_relationship_rank_store() { return feature_relationship_rank_store; } @@ -514,13 +514,13 @@ public class GFFStreamFeature extends SimpleDocumentFeature { if(id_range_store != null) { - Enumeration enum_ranges = id_range_store.keys(); + Enumeration<String> enum_ranges = id_range_store.keys(); //Iterator it = id_range_store.values().iterator(); while(enum_ranges.hasMoreElements()) //while(it.hasNext()) { - String key = (String)enum_ranges.nextElement(); - Range range = (Range)id_range_store.get(key); + String key = enum_ranges.nextElement(); + Range range = id_range_store.get(key); if(range.getStart() == r.getStart() && range.getEnd() == r.getEnd()) return key; @@ -963,9 +963,7 @@ public class GFFStreamFeature extends SimpleDocumentFeature if (chadoGene != null) { if(getUserData() == null) - { - uk.ac.sanger.artemis.Feature f = new uk.ac.sanger.artemis.Feature(this); - } + new uk.ac.sanger.artemis.Feature(this); // the above line constructs the appropriate userData within this current GFFStreamFeature object, // which is required by the following GeneUtils.deriveResidues() String residues = GeneUtils.deriveResidues(this); @@ -1072,9 +1070,9 @@ public class GFFStreamFeature extends SimpleDocumentFeature * If the attribute has no value then the Hashtable value will be a zero * length vector. **/ - private Hashtable parseAttributes(final String att_val_list) + private Hashtable<String, StringVector> parseAttributes(final String att_val_list) { - Hashtable attributes = new Hashtable(); + Hashtable<String, StringVector> attributes = new Hashtable<String, StringVector>(); // StringTokenizer tokeniser = new StringTokenizer(att_val_list, ";", false); // while(tokeniser.hasMoreTokens()) @@ -1136,7 +1134,8 @@ public class GFFStreamFeature extends SimpleDocumentFeature if(quote_index < 0) { // no closing quote - panic - final Hashtable panic_attributes = new Hashtable(); + final Hashtable<String, StringVector> panic_attributes = + new Hashtable<String, StringVector>(); final StringVector notes = new StringVector(); notes.add(att_val_list); panic_attributes.put("note", notes);