package edu.mayo.cts2.framework.webapp.rest.validator; import javax.annotation.Resource; import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.stereotype.Component; import edu.mayo.cts2.framework.model.command.ResolvedReadContext; import edu.mayo.cts2.framework.model.core.ChangeableElementGroup; import edu.mayo.cts2.framework.model.core.CodeSystemVersionReference; import edu.mayo.cts2.framework.model.entity.EntityDescription; import edu.mayo.cts2.framework.model.entity.EntityDescriptionBase; import edu.mayo.cts2.framework.model.exception.ExceptionFactory; import edu.mayo.cts2.framework.model.util.ModelUtils; import edu.mayo.cts2.framework.service.profile.codesystemversion.CodeSystemVersionReadService; import edu.mayo.cts2.framework.webapp.naming.CodeSystemVersionNameResolver; @Component public class EntityDescriptionValidator { protected Log log = LogFactory.getLog(getClass()); @Resource private CodeSystemVersionNameResolver codeSystemVersionNameResolver; public void validateUpdateEntityDescription( CodeSystemVersionReadService codeSystemVersionReadService, String codeSystemName, String versionId, EntityDescription entity){ EntityDescriptionBase base = ModelUtils.getEntity(entity); CodeSystemVersionReference csvRef = base.getDescribingCodeSystemVersion(); String foundCodeSytemVersionName = csvRef.getVersion().getContent(); ChangeableElementGroup group = entity.getChangeableElementGroup(); if(group != null && group.getChangeDescription() != null && StringUtils.isNotBlank(group.getChangeDescription().getContainingChangeSet())){ String changeSetUri = group.getChangeDescription().getContainingChangeSet(); ResolvedReadContext readContext = new ResolvedReadContext(); readContext.setChangeSetContextUri(changeSetUri); String fetchedCodeSytemVersionName; try{ fetchedCodeSytemVersionName = codeSystemVersionNameResolver.getCodeSystemVersionNameFromVersionId( codeSystemVersionReadService, codeSystemName, versionId, readContext); } catch(Exception e){ this.log.info("Unable to validate the CodeSystemVersionName of Updated Entity."); return; } if(StringUtils.equals(foundCodeSytemVersionName, fetchedCodeSytemVersionName)){ ExceptionFactory.createUnknownException("Provded CodeSystemVersionName and URL do not match."); } } else { this.log.info("Unable to validate the CodeSystemVersionName of Updated Entity."); } } }