package org.genedb.web.mvc.controller;
import org.gmod.schema.feature.MRNA;
import org.gmod.schema.mapped.Feature;
import org.gmod.schema.mapped.FeatureRelationship;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
public class GeneUtils {
private static String[] geneNameParts = {"gene", "mRNA", "polypeptide", "intron", "exon"};
private static Set<String> geneParts = new HashSet<String>();
static {
geneParts.addAll(Arrays.asList(geneNameParts));
}
// FIXME - This is just it's possible, not certain
public static boolean isPartOfGene(Feature feature) {
if (geneParts.contains(feature.getType().getName())) {
//System.err.println("Returning true for "+feature.getUniqueName());
return true;
}
//System.err.println("Returning false for "+feature.getUniqueName());
return false;
}
public static Feature getGeneFromPart(Feature feature) {
if ("polypeptide".equals(feature.getType().getName())) {
//System.err.println("Looking for gene for "+feature.getUniqueName());
Feature gene = null;
Feature mRNA = null;
Collection<FeatureRelationship> frs = feature.getFeatureRelationshipsForSubjectId();
for (FeatureRelationship relationship : frs) {
//System.err.println("FeatureRealtionship for mRNA is "+relationship.getFeatureByObjectId().getUniqueName());
if(relationship.getType().getName().equals("derives_from")){
mRNA = relationship.getObjectFeature();
}
}
if (mRNA != null) {
frs = mRNA.getFeatureRelationshipsForSubjectId();
for (FeatureRelationship relationship : frs) {
if(relationship.getType().getName().equals("part_of")) {
gene = relationship.getObjectFeature();
}
//Feature feat = relationship.getFeatureByObjectId();
}
}
return gene;
}
return feature;
}
}