package edu.mayo.cts2.framework.core.url; import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import edu.mayo.cts2.framework.model.codesystem.CodeSystemCatalogEntry; import edu.mayo.cts2.framework.model.codesystemversion.CodeSystemVersionCatalogEntry; import edu.mayo.cts2.framework.model.core.CodeSystemReference; import edu.mayo.cts2.framework.model.core.CodeSystemVersionReference; import edu.mayo.cts2.framework.model.core.NameAndMeaningReference; public class HrefProcessor { @Autowired(required=false) private UrlConstructor urlConstructor; public HrefProcessor(UrlConstructor urlConstructor){ this.urlConstructor = urlConstructor; } public void processHrefs(String entry, SetUrl setUrl){ if(entry == null){ setUrl.setUrl(); } } public void processHrefs(final CodeSystemCatalogEntry entry){ CodeSystemVersionReference currentVersion = entry.getCurrentVersion(); this.processHrefs(currentVersion); this.processHrefs(entry.getVersions(), new SetUrl(){ @Override public void setUrl() { entry.setVersions( urlConstructor. createVersionsOfCodeSystemUrl(entry.getCodeSystemName())); } }); } public void processHrefs(final CodeSystemVersionCatalogEntry entry){ final CodeSystemReference versionOfReference = entry.getVersionOf(); this.processHrefs(versionOfReference, new ToUrl(){ @Override public String toUrl() { return urlConstructor.createCodeSystemUrl(versionOfReference.getContent()); } }); this.processHrefs(entry.getEntityDescriptions(), new SetUrl(){ @Override public void setUrl() { entry.setEntityDescriptions( urlConstructor. createEntitiesOfCodeSystemVersionUrl( entry.getVersionOf().getContent(), entry.getCodeSystemVersionName())); } }); this.processHrefs(entry.getEntityDescriptions(), new SetUrl(){ @Override public void setUrl() { entry.setAssociations( urlConstructor. createAssociationsOfCodeSystemVersionUrl( entry.getVersionOf().getContent(), entry.getCodeSystemVersionName())); } }); } public void processHrefs(CodeSystemVersionReference ref){ if(ref == null){ return; } final CodeSystemReference codeSystemReference = ref.getCodeSystem(); this.processHrefs( codeSystemReference, new ToUrl(){ @Override public String toUrl() { return urlConstructor.createCodeSystemUrl( codeSystemReference.getContent()); } }); final NameAndMeaningReference versionReference = ref.getVersion(); this.processHrefs( versionReference, new ToUrl(){ @Override public String toUrl() { return urlConstructor.createCodeSystemVersionUrl( codeSystemReference.getContent(), versionReference.getContent()); } }); } public void processHrefs(NameAndMeaningReference ref, ToUrl toUrl){ if(ref == null){ return; } String name = ref.getContent(); if(StringUtils.isNotBlank(name)){ if(ref.getHref() == null){ ref.setHref(toUrl.toUrl()); } } } private static interface SetUrl { public void setUrl(); } private static interface ToUrl { public String toUrl(); } }