package org.nextprot.api.core.utils.annot.merge.impl; import org.nextprot.api.core.domain.annotation.Annotation; import org.nextprot.api.core.utils.annot.merge.AnnotationMerger; import org.nextprot.commons.constants.QualityQualifier; public abstract class AnnotationBaseMerger implements AnnotationMerger { @Override public Annotation merge(Annotation annotation1, Annotation annotation2) { Annotation dest = getDestAnnotation(annotation1, annotation2); Annotation source = getSourceAnnotation(annotation1, annotation2); updateDestEvidences(dest, source); updateDestAnnotationHash(dest, source); updateDestIsoformSpecificityName(dest, source); updateDestQualityQualifier(dest, source); updateDestBioObject(dest, source); return dest; } /** Get annotation where all sources should be merged to */ protected abstract Annotation getDestAnnotation(Annotation annotation1, Annotation annotation2); /** Get source annotation */ protected abstract Annotation getSourceAnnotation(Annotation annotation1, Annotation annotation2); /** Update dest evidences with sources evidences */ protected abstract void updateDestEvidences(Annotation dest, Annotation source); /** Update dest annotation hash */ protected abstract void updateDestAnnotationHash(Annotation dest, Annotation source); /** Update dest isoform specificity name (variant name) */ protected abstract void updateDestIsoformSpecificityName(Annotation dest, Annotation source); /** Reset dest qualityqualifier to gold if there is at least one gold source */ private void updateDestQualityQualifier(Annotation dest, Annotation source) { if (dest.getQualityQualifier() == null || QualityQualifier.valueOf(dest.getQualityQualifier()) != QualityQualifier.GOLD) { if (source.getQualityQualifier() != null && source.getQualityQualifier().equals(QualityQualifier.GOLD.name())) { dest.setQualityQualifier(QualityQualifier.GOLD.name()); } } } protected abstract void updateDestBioObject(Annotation dest, Annotation source); }