package org.nextprot.api.core.utils.dbxref.resolver; import com.google.common.base.Preconditions; import org.nextprot.api.core.domain.DbXref; import org.nextprot.api.core.utils.dbxref.DbXrefURLResolver; import java.util.Optional; /** * Main entry point object resolves DbXref url by delegating to DbXrefURLBaseResolver implementations. */ public class DbXrefURLResolverDelegate implements DbXrefURLResolver { private Optional<XRefDatabase> getXRefDatabase(DbXref xref) { Preconditions.checkNotNull(xref, "cannot resolve undefined DbXref"); return XRefDatabase.valueOfName(xref.getDatabaseName()); } @Override public String resolve(DbXref xref) { Optional<XRefDatabase> db = getXRefDatabase(xref); if (db.isPresent()) { return db.get().getResolver().resolve(xref); } else if (xref.getLinkUrl().contains("purl.obolibrary.org/obo")) { return XRefDatabase.OBO.getResolver().resolve(xref); } return new DefaultDbXrefURLResolver().resolve(xref); } @Override public String getTemplateURL(DbXref xref) { return getXRefDatabase(xref) .map(d -> d.getResolver().getTemplateURL(xref)) .orElseGet(() -> ""); } @Override public String getValidXrefURL(String xrefURL, String databaseName) { return XRefDatabase.valueOfName(databaseName) .map(d -> d.getResolver().getValidXrefURL(xrefURL, databaseName)) .orElseGet(() -> xrefURL); } }