package org.phenoscape.io; import java.io.BufferedWriter; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.phenoscape.model.Character; import org.phenoscape.model.DataSet; import org.phenoscape.model.Phenotype; import org.phenoscape.model.State; public class BioCreativeTabFormat { private final DataSet data; public BioCreativeTabFormat(DataSet data) { this.data = data; } public void write(File file) throws IOException { final BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), "UTF-8")); writer.write("CharacterID\t"); writer.write("StateID\t"); writer.write("CharacterLabel\t"); writer.write("StateLabel\t"); writer.write("EntityLabel\t"); writer.write("EntityID\t"); writer.write("QualityLabel\t"); writer.write("QualityID\t"); writer.write("RelatedEntityLabel\t"); writer.write("RelatedEntityID\t"); writer.write("\n"); for (Character character : data.getCharacters()) { for (State state : character.getStates()) { if (state.getPhenotypes().isEmpty()) { writer.write(StringUtils.trimToEmpty(character.getNexmlID())); writer.write("\t"); writer.write(StringUtils.trimToEmpty(state.getNexmlID())); writer.write("\t"); writer.write(StringUtils.trimToEmpty(character.getLabel())); writer.write("\t"); writer.write(StringUtils.trimToEmpty(state.getLabel())); writer.write("\t"); writer.write("\t"); writer.write("\t"); writer.write("\t"); writer.write("\t"); writer.write("\t"); writer.write("\n"); } else { for (Phenotype phenotype : state.getPhenotypes()) { writer.write(StringUtils.trimToEmpty(character.getNexmlID())); writer.write("\t"); writer.write(StringUtils.trimToEmpty(state.getNexmlID())); writer.write("\t"); writer.write(StringUtils.trimToEmpty(character.getLabel())); writer.write("\t"); writer.write(StringUtils.trimToEmpty(state.getLabel())); writer.write("\t"); if (phenotype.getEntity() != null) { writer.write(StringUtils.trimToEmpty(phenotype.getEntity().getName())); } writer.write("\t"); if (phenotype.getEntity() != null) { writer.write(StringUtils.trimToEmpty(phenotype.getEntity().getID())); } writer.write("\t"); if (phenotype.getQuality() != null) { writer.write(StringUtils.trimToEmpty(phenotype.getQuality().getName())); } writer.write("\t"); if (phenotype.getQuality() != null) { writer.write(StringUtils.trimToEmpty(phenotype.getQuality().getID())); } writer.write("\t"); if (phenotype.getRelatedEntity() != null) { writer.write(StringUtils.trimToEmpty(phenotype.getRelatedEntity().getName())); } writer.write("\t"); if (phenotype.getRelatedEntity() != null) { writer.write(StringUtils.trimToEmpty(phenotype.getRelatedEntity().getID())); } writer.write("\n"); } } } } writer.close(); } @SuppressWarnings("unused") private Logger log() { return Logger.getLogger(this.getClass()); } }