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.obo.annotation.base.OBOUtil;
import org.phenoscape.model.Character;
import org.phenoscape.model.DataSet;
import org.phenoscape.model.Phenotype;
import org.phenoscape.model.State;
public class CharaparserEvaluationTabFormat {
private final DataSet data;
public CharaparserEvaluationTabFormat(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("Character\t");
writer.write("Character Label\t");
writer.write("State Symbol\t");
writer.write("State Label\t");
writer.write("Entity ID\t");
writer.write("Entity Label\t");
writer.write("Quality ID\t");
writer.write("Quality Label\t");
writer.write("Related Entity ID\t");
writer.write("Related Entity Label\t");
writer.write("\n");
int characterNumber = 0;
for (Character character : data.getCharacters()) {
characterNumber += 1;
for (State state : character.getStates()) {
if (state.getPhenotypes().isEmpty()) {
writer.write("" + characterNumber);
writer.write("\t");
writer.write(StringUtils.trimToEmpty(character.getLabel()));
writer.write("\t");
writer.write(StringUtils.trimToEmpty(state.getSymbol()));
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("" + characterNumber);
writer.write("\t");
writer.write(StringUtils.trimToEmpty(character
.getLabel()));
writer.write("\t");
writer.write(StringUtils.trimToEmpty(state.getSymbol()));
writer.write("\t");
writer.write(StringUtils.trimToEmpty(state.getLabel()));
writer.write("\t");
if (phenotype.getEntity() != null) {
writer.write(StringUtils.trimToEmpty(OBOUtil
.generateManchesterIDExpression(phenotype
.getEntity())));
}
writer.write("\t");
if (phenotype.getEntity() != null) {
writer.write(StringUtils.trimToEmpty(OBOUtil
.generateManchesterLabelExpression(phenotype
.getEntity())));
}
writer.write("\t");
if (phenotype.getQuality() != null) {
writer.write(StringUtils.trimToEmpty(OBOUtil
.generateManchesterIDExpression(phenotype
.getQuality())));
}
writer.write("\t");
if (phenotype.getQuality() != null) {
writer.write(StringUtils.trimToEmpty(OBOUtil
.generateManchesterLabelExpression(phenotype
.getQuality())));
}
writer.write("\t");
if (phenotype.getRelatedEntity() != null) {
writer.write(StringUtils.trimToEmpty(OBOUtil
.generateManchesterIDExpression(phenotype
.getRelatedEntity())));
}
writer.write("\t");
if (phenotype.getRelatedEntity() != null) {
writer.write(StringUtils.trimToEmpty(OBOUtil
.generateManchesterLabelExpression(phenotype
.getRelatedEntity())));
}
writer.write("\n");
}
}
}
}
writer.close();
}
@SuppressWarnings("unused")
private Logger log() {
return Logger.getLogger(this.getClass());
}
}