All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.broadinstitute.hellbender.utils.codecs.gtf.GencodeGtfGeneFeature Maven / Gradle / Ivy

The newest version!
package org.broadinstitute.hellbender.utils.codecs.gtf;

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

/**
 * A Gencode GTF Feature representing a gene.
 *
 * A GTF Feature represents one row of a GTF File.
 * The specification of a GTF file is defined here:
 * http://mblab.wustl.edu/GTF22.html
 *
 * Created by jonn on 7/25/17.
 */
final public class GencodeGtfGeneFeature extends GencodeGtfFeature {

    private GencodeGtfGeneFeature(final String[] gtfFields, final String gtfFileType) {
        super(gtfFields, gtfFileType);
    }

    public static GencodeGtfFeature create(final String[] gtfFields, final String gtfFileType) {
        return new GencodeGtfGeneFeature(gtfFields, gtfFileType);
    }

    private GencodeGtfGeneFeature(final GencodeGtfFeatureBaseData baseData) {
        super(baseData);
    }

    public static GencodeGtfFeature create(final GencodeGtfFeatureBaseData baseData) {
        return new GencodeGtfGeneFeature(baseData);
    }

    // ================================================================================================

    private final List transcripts = new ArrayList<>();

    // ================================================================================================

    public void addTranscript(final GencodeGtfTranscriptFeature transcript) { transcripts.add(transcript); }

    public List getTranscripts() {
        return transcripts;
    }

    @Override
    public List getAllFeatures() {
        final ArrayList list = new ArrayList<>();
        list.add(this);

        for (final GencodeGtfTranscriptFeature transcript : transcripts ) {
            list.addAll(transcript.getAllFeatures());
        }

        return list;
    }

    @Override
    public boolean equals(final Object other) {

        if (other == null) {
            return false;
        }
        else if ( this == other ) {
            return true;
        }

        if ( (!(other instanceof GencodeGtfGeneFeature)) ) {
            return false;
        }

        final GencodeGtfGeneFeature otherGene = (GencodeGtfGeneFeature) other;

        if ( (!super.equals(otherGene)) ) {
            return false;
        }

        if ( (!Objects.equals(transcripts, otherGene.transcripts)) ) {
            return false;
        }

        return true;
    }

    @Override
    public int hashCode() {
        int result = super.hashCode();
        result = 31 * result + (transcripts != null ? transcripts.hashCode() : 0);
        return result;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy