package org.nextprot.api.commons.bio.variation.prot.impl.format;
import org.nextprot.api.commons.bio.AminoAcidCode;
import org.nextprot.api.commons.bio.variation.prot.impl.seqchange.format.SingleModificationBEDFormat;
import org.nextprot.api.commons.bio.variation.prot.impl.varseq.format.AminoAcidModificationBEDFormatter;
import org.nextprot.api.commons.bio.variation.prot.seqchange.SequenceChange;
import org.nextprot.api.commons.bio.variation.prot.seqchange.SequenceChangeFormat;
import org.nextprot.api.commons.bio.variation.prot.SequenceVariation;
import org.nextprot.api.commons.bio.variation.prot.SequenceVariationFormat;
import java.util.Collection;
import java.util.EnumMap;
import java.util.Map;
public class SequenceModificationBedFormat extends SequenceVariationFormat {
private final AminoAcidModificationBEDFormatter aminoAcidModificationFormatter;
private final Map<SequenceChange.Type, SequenceChangeFormat> changeFormats;
public SequenceModificationBedFormat() {
aminoAcidModificationFormatter = new AminoAcidModificationBEDFormatter();
changeFormats = new EnumMap<>(SequenceChange.Type.class);
changeFormats.put(SequenceChange.Type.PTM, new SingleModificationBEDFormat());
}
@Override
protected AminoAcidModificationBEDFormatter getChangingSequenceFormatter() {
return aminoAcidModificationFormatter;
}
@Override
protected SequenceChangeFormat getSequenceChangeFormat(SequenceChange.Type changeType) {
return changeFormats.get(changeType);
}
@Override
protected Collection<SequenceChange.Type> getAvailableChangeTypes() {
return changeFormats.keySet();
}
@Override
public String format(SequenceVariation variation, AminoAcidCode.CodeType type) {
StringBuilder sb = new StringBuilder();
changeFormats.get(variation.getSequenceChange().getType()).format(sb, variation.getSequenceChange(), type);
aminoAcidModificationFormatter.format(variation, type, sb);
return sb.toString();
}
}