package org.gmod.schema.feature;
import org.gmod.schema.cfg.FeatureType;
import org.gmod.schema.mapped.Feature;
import org.gmod.schema.mapped.FeatureRelationship;
import org.gmod.schema.mapped.Organism;
import org.gmod.schema.utils.StrandedLocation;
import org.hibernate.search.annotations.Indexed;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Collection;
import javax.persistence.Entity;
import javax.persistence.Transient;
@Entity
@FeatureType(cv = "sequence", term = "pseudogene")
@Indexed
public class Pseudogene extends AbstractGene {
Pseudogene() {
// empty
}
public Pseudogene(Organism organism, String uniqueName, boolean analysis, boolean obsolete,
Timestamp dateAccessioned) {
super(organism, uniqueName, analysis, obsolete, dateAccessioned);
}
Pseudogene(Organism organism, String uniqueName, String name) {
this(organism, uniqueName, false, false, new Timestamp(System.currentTimeMillis()));
setName(name);
}
@Transient
public Collection<PseudogenicTranscript> getPseudogenicTranscripts() {
Collection<PseudogenicTranscript> ret = new ArrayList<PseudogenicTranscript>();
for (FeatureRelationship relationship : this.getFeatureRelationshipsForObjectId()) {
Feature transcript = relationship.getSubjectFeature();
if (transcript instanceof PseudogenicTranscript) {
ret.add((PseudogenicTranscript) transcript);
}
}
return ret;
}
public static Pseudogene make(Feature sourceFeature, StrandedLocation location, String uniqueName, Timestamp now) {
Pseudogene gene = new Pseudogene(sourceFeature.getOrganism(), uniqueName, false, false, now);
sourceFeature.addLocatedChild(gene, location);
return gene;
}
public void addPseudogenicTranscript(PseudogenicTranscript transcript) {
addFeatureRelationship(transcript, "relationship", "part_of");
}
}