package org.nextprot.api.isoform.mapper.domain.impl.exception; import org.nextprot.api.commons.bio.AminoAcidCode; import org.nextprot.api.isoform.mapper.domain.SingleFeatureQuery; import org.nextprot.api.isoform.mapper.domain.FeatureQueryException; public class UnexpectedFeatureQueryAminoAcidException extends FeatureQueryException { private static final String EXPECTED_AAS = "expectedAminoAcids"; private static final String FEATURE_AAS = "featureAminoAcids"; public UnexpectedFeatureQueryAminoAcidException(SingleFeatureQuery query, int sequencePosition, AminoAcidCode[] sequenceAminoAcidCodes, AminoAcidCode[] featureAminoAcidCodes) { super(query); getReason().addCause(EXPECTED_AAS, AminoAcidCode.formatAminoAcidCode(AminoAcidCode.CodeType.THREE_LETTER, sequenceAminoAcidCodes)); getReason().addCause(FEATURE_AAS, AminoAcidCode.formatAminoAcidCode(AminoAcidCode.CodeType.THREE_LETTER, featureAminoAcidCodes)); getReason().addCause(OutOfBoundSequencePositionException.SEQUENCE_POS, sequencePosition); getReason().setMessage(buildErrorMessage(sequenceAminoAcidCodes)); } private String buildErrorMessage(AminoAcidCode[] sequenceAminoAcidCodes) { StringBuilder sb = new StringBuilder(); sb .append("unexpected amino-acid") .append((sequenceAminoAcidCodes.length>1) ? "s" : "") .append(": found ").append(getFeatureAminoAcids()) .append(" at position ").append(getIsoformSequencePosition()) .append(" of ") .append(getQuery().getAccession()) .append(" sequence instead of expected ").append(getExpectedAminoAcids()); return sb.toString(); } private String getFeatureAminoAcids() { return (String) getReason().getCause(FEATURE_AAS); } private String getExpectedAminoAcids() { return (String) getReason().getCause(EXPECTED_AAS); } private int getIsoformSequencePosition() { return (Integer) getReason().getCause(OutOfBoundSequencePositionException.SEQUENCE_POS); } }