/**
   * Handle UTR joins
   *
   * @param feature
   * @param key
   * @param qualifiers
   * @return
   */
  private Location joinUtrs(Feature feature, Key key, QualifierVector qualifiers) {
    Location location = feature.getLocation();
    if (key.getKeyString().equals("5'UTR") || key.getKeyString().equals("3'UTR")) {
      ChadoCanonicalGene gene = ((GFFStreamFeature) feature).getChadoGene();
      String utrName = GeneUtils.getUniqueName(feature);
      String transcriptName = gene.getTranscriptFromName(utrName);
      List<Feature> utrs;

      if (key.getKeyString().equals("5'UTR")) utrs = gene.get5UtrOfTranscript(transcriptName);
      else utrs = gene.get3UtrOfTranscript(transcriptName);

      if (utrs.size() > 1) {
        int start = Integer.MAX_VALUE;
        RangeVector ranges = new RangeVector();
        for (int i = 0; i < utrs.size(); i++) {
          Feature utr = utrs.get(i);
          Range range = utr.getLocation().getTotalRange();
          if (start > range.getStart()) start = range.getStart();
          ranges.add(range);
        }

        if (start != feature.getLocation().getTotalRange().getStart()) return null;

        location = new Location(ranges, feature.getLocation().isComplement());
      }

      int ntranscripts = gene.getTranscripts().size();
      if (ntranscripts == 1) transcriptName = gene.getGeneUniqueName();
      qualifiers.setQualifier(new Qualifier("locus_tag", transcriptName));
      qualifiers.removeQualifierByName("ID");
    }
    return location;
  }
 /**
  * Routine to combine transcript qualifiers and for multiple transcripts create links to the other
  * transcripts (other_transcript) and to use the transcript ID.
  *
  * @param qualifiers
  * @param transcript
  * @param ntranscripts
  * @param chadoGene
  */
 private int handleTranscripts(
     QualifierVector qualifiers,
     Feature transcript,
     int ntranscripts,
     ChadoCanonicalGene chadoGene) {
   QualifierVector transcriptQualifiers = transcript.getQualifiers().copy();
   combineQualifiers(qualifiers, transcriptQualifiers, false);
   ntranscripts = chadoGene.getTranscripts().size();
   if (ntranscripts > 1) {
     addNewQualifier(qualifiers, transcriptQualifiers.getQualifierByName("ID"));
     List<Feature> transcripts = chadoGene.getTranscripts();
     for (int i = 0; i < ntranscripts; i++) {
       Feature thisTranscript = (Feature) transcripts.get(i);
       String thisTranscriptName = GeneUtils.getUniqueName(thisTranscript);
       if (!thisTranscriptName.equals(GeneUtils.getUniqueName(transcript))) {
         Qualifier qualifier = new Qualifier("other_transcript", thisTranscriptName);
         addNewQualifier(qualifiers, qualifier);
       }
     }
   }
   return ntranscripts;
 }