Java tutorial
/* * Copyright: (c) 2004-2011 Mayo Foundation for Medical Education and * Research (MFMER). All rights reserved. MAYO, MAYO CLINIC, and the * triple-shield Mayo logo are trademarks and service marks of MFMER. * * Except as contained in the copyright notice above, or as used to identify * MFMER as the author of this software, the trade names, trademarks, service * marks, or product names of the copyright holder shall not be used in * advertising, promotion or otherwise in connection with this software without * prior written authorization of the copyright holder. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package edu.mayo.cts2.framework.webapp.rest.controller; import edu.mayo.cts2.framework.core.util.EncodingUtils; import edu.mayo.cts2.framework.model.command.Page; import edu.mayo.cts2.framework.model.command.ResolvedReadContext; import edu.mayo.cts2.framework.model.core.*; import edu.mayo.cts2.framework.model.directory.DirectoryResult; import edu.mayo.cts2.framework.model.entity.*; import edu.mayo.cts2.framework.model.exception.ExceptionFactory; import edu.mayo.cts2.framework.model.service.core.EntityNameOrURI; import edu.mayo.cts2.framework.model.service.core.Query; import edu.mayo.cts2.framework.model.service.exception.UnknownEntity; import edu.mayo.cts2.framework.model.util.ModelUtils; import edu.mayo.cts2.framework.service.command.restriction.EntityDescriptionQueryServiceRestrictions; import edu.mayo.cts2.framework.service.command.restriction.TaggedCodeSystemRestriction; import edu.mayo.cts2.framework.service.profile.codesystemversion.CodeSystemVersionReadService; import edu.mayo.cts2.framework.service.profile.entitydescription.EntityDescriptionMaintenanceService; import edu.mayo.cts2.framework.service.profile.entitydescription.EntityDescriptionQuery; import edu.mayo.cts2.framework.service.profile.entitydescription.EntityDescriptionQueryService; import edu.mayo.cts2.framework.service.profile.entitydescription.EntityDescriptionReadService; import edu.mayo.cts2.framework.service.profile.entitydescription.name.EntityDescriptionReadId; import edu.mayo.cts2.framework.webapp.naming.CodeSystemVersionNameResolver; import edu.mayo.cts2.framework.webapp.rest.command.QueryControl; import edu.mayo.cts2.framework.webapp.rest.command.RestFilter; import edu.mayo.cts2.framework.webapp.rest.command.RestReadContext; import edu.mayo.cts2.framework.webapp.rest.query.EntityQueryBuilder; import edu.mayo.cts2.framework.webapp.rest.util.ControllerUtils; import edu.mayo.cts2.framework.webapp.rest.validator.EntityDescriptionValidator; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang.StringUtils; import org.springframework.stereotype.Controller; import org.springframework.util.Assert; import org.springframework.web.bind.WebDataBinder; import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.ModelAndView; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.HashMap; import java.util.List; import java.util.Map; /** * The Class EntityDescriptionController. * * @author <a href="mailto:kevin.peterson@mayo.edu">Kevin Peterson</a> */ @Controller public class EntityDescriptionController extends AbstractMessageWrappingController { @Cts2Service private EntityDescriptionQueryService entityDescriptionQueryService; @Cts2Service private EntityDescriptionReadService entityDescriptionReadService; @Cts2Service private EntityDescriptionMaintenanceService entityDescriptionMaintenanceService; @Cts2Service private CodeSystemVersionReadService codeSystemVersionReadService; @Resource private CodeSystemVersionNameResolver codeSystemVersionNameResolver; @Resource private EntityDescriptionValidator entityDescriptionValidator; private final UrlTemplateBinder<EntityDescription> URL_BINDER = new UrlTemplateBinder<EntityDescription>() { @Override public Map<String, String> getPathValues(EntityDescription resource) { Map<String, String> returnMap = new HashMap<String, String>(); EntityDescriptionBase base = ModelUtils.getEntity(resource); String codeSystemName = base.getDescribingCodeSystemVersion().getCodeSystem().getContent(); returnMap.put(VAR_CODESYSTEMID, codeSystemName); ResolvedReadContext readContext = null; ChangeableElementGroup group = resource.getChangeableElementGroup(); if (group != null && group.getChangeDescription() != null) { String changeSetUri = group.getChangeDescription().getContainingChangeSet(); readContext = new ResolvedReadContext(); readContext.setChangeSetContextUri(changeSetUri); } returnMap.put(VAR_CODESYSTEMVERSIONID, codeSystemVersionNameResolver.getVersionIdFromCodeSystemVersionName( codeSystemVersionReadService, base.getDescribingCodeSystemVersion().getVersion().getContent(), readContext)); ScopedEntityName id = base.getEntityID(); returnMap.put(VAR_ENTITYID, EncodingUtils.encodeScopedEntityName(id)); return returnMap; } }; private final static MessageFactory<EntityDescription> MESSAGE_FACTORY = new MessageFactory<EntityDescription>() { @Override public Message createMessage(EntityDescription resource) { EntityDescriptionMsg msg = new EntityDescriptionMsg(); msg.setEntityDescription(resource); return msg; } }; private final static MessageFactory<EntityList> ENTITY_LIST_MESSAGE_FACTORY = new MessageFactory<EntityList>() { @Override public Message createMessage(EntityList resource) { return resource; } }; private final static MessageFactory<EntityReference> ENTITYREFERENCE_MESSAGE_FACTORY = new MessageFactory<EntityReference>() { @Override public Message createMessage(EntityReference resource) { EntityReferenceMsg msg = new EntityReferenceMsg(); msg.setEntityReference(resource); return msg; } }; /** * Creates the entity description. * * @param changeseturi the changeseturi * @param entity the entity * @param codeSystemName the code system name * @param codeSystemVersionName the code system version name * @param entityName the entity name */ @RequestMapping(value = PATH_ENTITY_OF_CODESYSTEM_VERSION_BYID, method = RequestMethod.PUT) public Object updateEntityDescription(HttpServletResponse httpServletResponse, @RequestParam(value = PARAM_CHANGESETCONTEXT, required = false) String changeseturi, @RequestBody EntityDescription entity, @PathVariable(VAR_CODESYSTEMID) String codeSystemName, @PathVariable(VAR_CODESYSTEMVERSIONID) String codeSytemVersionName, @PathVariable(VAR_ENTITYID) String entityName) { this.entityDescriptionValidator.validateUpdateEntityDescription(this.codeSystemVersionReadService, codeSystemName, codeSytemVersionName, entity); ScopedEntityName name = getScopedEntityName(entityName, codeSystemName); return this.doUpdate(httpServletResponse, entity, changeseturi, new EntityDescriptionReadId(name, ModelUtils.nameOrUriFromName(codeSytemVersionName)), this.entityDescriptionMaintenanceService); } @RequestMapping(value = PATH_ENTITY, method = RequestMethod.POST) public Object createEntityDescription(HttpServletResponse httpServletResponse, @RequestParam(value = PARAM_CHANGESETCONTEXT, required = false) String changeseturi, @RequestBody EntityDescription entity) { return this.doCreate(httpServletResponse, entity, changeseturi, PATH_ENTITY_OF_CODESYSTEM_VERSION_BYID, URL_BINDER, this.entityDescriptionMaintenanceService); } @RequestMapping(value = PATH_ENTITY_OF_CODESYSTEM_VERSION_BYID, method = RequestMethod.DELETE) public Object deleteCodeSystemVersion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, @PathVariable(VAR_CODESYSTEMID) String codeSystemName, @PathVariable(VAR_CODESYSTEMVERSIONID) String codeSystemVersionId, @PathVariable(VAR_ENTITYID) String entityName, @RequestParam(PARAM_CHANGESETCONTEXT) String changeseturi) { ResolvedReadContext readContext = new ResolvedReadContext(); readContext.setChangeSetContextUri(changeseturi); String codeSystemVersionName = this.codeSystemVersionNameResolver.getCodeSystemVersionNameFromVersionId( codeSystemVersionReadService, codeSystemName, codeSystemVersionId, readContext); EntityDescriptionReadId id = new EntityDescriptionReadId(getScopedEntityName(entityName, codeSystemName), ModelUtils.nameOrUriFromName(codeSystemVersionName)); return this.doDelete(httpServletResponse, id, changeseturi, this.entityDescriptionMaintenanceService); } /** * Gets the entity descriptions of code system version. * * @param httpServletRequest the http servlet request * @param restrictions the restrictions * @param resolvedFilter the filter * @param page the page * @param codeSystemName the code system name * @param codeSystemVersionName the code system version name * @return the entity descriptions of code system version */ @RequestMapping(value = PATH_ENTITIES_OF_CODESYSTEM_VERSION, method = RequestMethod.GET) public Object getEntityDescriptionsOfCodeSystemVersion(HttpServletRequest httpServletRequest, QueryControl queryControl, RestReadContext restReadContext, EntityDescriptionQueryServiceRestrictions restrictions, RestFilter restFilter, Page page, boolean list, @PathVariable(VAR_CODESYSTEMID) String codeSystemName, @PathVariable(VAR_CODESYSTEMVERSIONID) String codeSystemVersionId) { return this.getEntityDescriptionsOfCodeSystemVersion(httpServletRequest, restReadContext, queryControl, null, restrictions, restFilter, page, list, codeSystemName, codeSystemVersionId); } /** * Gets the entity descriptions of code system version. * * @param httpServletRequest the http servlet request * @param query the query * @param restrictions the restrictions * @param resolvedFilter the filter * @param page the page * @param codeSystemName the code system name * @param codeSystemVersionName the code system version name * @return the entity descriptions of code system version */ @RequestMapping(value = PATH_ENTITIES_OF_CODESYSTEM_VERSION, method = RequestMethod.POST) public Object getEntityDescriptionsOfCodeSystemVersion(HttpServletRequest httpServletRequest, RestReadContext restReadContext, QueryControl queryControl, @RequestBody Query query, EntityDescriptionQueryServiceRestrictions restrictions, RestFilter restFilter, Page page, boolean list, @PathVariable(VAR_CODESYSTEMID) String codeSystemName, @PathVariable(VAR_CODESYSTEMVERSIONID) String codeSystemVersionId) { ResolvedReadContext readContext = this.resolveRestReadContext(restReadContext); String codeSystemVersionName = this.getCodeSystemVersionNameResolver() .getCodeSystemVersionNameFromVersionId(codeSystemVersionReadService, codeSystemName, codeSystemVersionId, readContext); restrictions.getCodeSystemVersions().add(ModelUtils.nameOrUriFromName(codeSystemVersionName)); return this.getEntityDescriptions(httpServletRequest, restReadContext, queryControl, query, restrictions, restFilter, page, list); } /** * Gets the entity descriptions of code system version count. * * @param httpServletResponse the http servlet response * @param query the query * @param restrictions the restrictions * @param resolvedFilter the filter * @param codeSystemName the code system name * @param codeSystemVersionName the code system version name * @return the entity descriptions of code system version count */ @RequestMapping(value = PATH_ENTITIES_OF_CODESYSTEM_VERSION, method = RequestMethod.HEAD) @ResponseBody public void getEntityDescriptionsOfCodeSystemVersionCount(HttpServletResponse httpServletResponse, RestReadContext restReadContext, Query query, EntityDescriptionQueryServiceRestrictions restrictions, RestFilter restFilter, @PathVariable(VAR_CODESYSTEMID) String codeSystemName, @PathVariable(VAR_CODESYSTEMVERSIONID) String codeSystemVersionId) { ResolvedReadContext readContext = this.resolveRestReadContext(restReadContext); String codeSystemVersionName = this.codeSystemVersionNameResolver.getCodeSystemVersionNameFromVersionId( codeSystemVersionReadService, codeSystemName, codeSystemVersionId, readContext); restrictions.getCodeSystemVersions().add(ModelUtils.nameOrUriFromName(codeSystemVersionName)); this.getEntityDescriptionsCount(httpServletResponse, restReadContext, query, restrictions, restFilter); } /** * Gets the entity descriptions. * * @param httpServletRequest the http servlet request * @param restrictions the restrictions * @param resolvedFilter the filter * @param page the page * @return the entity descriptions */ @RequestMapping(value = PATH_ENTITIES, method = RequestMethod.GET) public Object getEntityDescriptions(HttpServletRequest httpServletRequest, QueryControl queryControl, RestReadContext restReadContext, EntityDescriptionQueryServiceRestrictions restrictions, RestFilter restFilter, Page page, boolean list) { return this.getEntityDescriptions(httpServletRequest, restReadContext, queryControl, null, restrictions, restFilter, page, list); } /** * Gets the entity descriptions. * * @param httpServletRequest the http servlet request * @param query the query * @param restrictions the restrictions * @param resolvedFilter the filter * @param page the page * @return the entity descriptions */ @RequestMapping(value = PATH_ENTITIES, method = RequestMethod.POST) public Object getEntityDescriptions(HttpServletRequest httpServletRequest, RestReadContext restReadContext, QueryControl queryControl, @RequestBody Query query, EntityDescriptionQueryServiceRestrictions restrictions, RestFilter restFilter, Page page, boolean list) { EntityQueryBuilder builder = this.getNewResourceQueryBuilder(); EntityDescriptionQuery resourceQuery = builder.addQuery(query).addRestrictions(restrictions) .addRestFilter(restFilter).addRestReadContext(restReadContext).build(); return this.doQuery(httpServletRequest, list, this.entityDescriptionQueryService, resourceQuery, page, queryControl, EntityDirectory.class, EntityList.class); } /** * Gets the entity descriptions count. * * @param httpServletResponse the http servlet response * @param query the query * @param restrictions the restrictions * @param filterComponent the filter component * @return the entity descriptions count */ @RequestMapping(value = PATH_ENTITIES, method = RequestMethod.HEAD) @ResponseBody public void getEntityDescriptionsCount(HttpServletResponse httpServletResponse, RestReadContext restReadContext, Query query, EntityDescriptionQueryServiceRestrictions restrictions, RestFilter restFilter) { EntityQueryBuilder builder = this.getNewResourceQueryBuilder(); EntityDescriptionQuery resourceQuery = builder.addQuery(query).addRestrictions(restrictions) .addRestFilter(restFilter).addRestReadContext(restReadContext).build(); int count = this.entityDescriptionQueryService.count(resourceQuery); this.setCount(count, httpServletResponse); } @RequestMapping(value = PATH_ENTITY_OF_CODESYSTEM_VERSION_BYURI, method = RequestMethod.GET) public ModelAndView getEntityDescriptionOfCodeSystemVersionByUri(HttpServletRequest httpServletRequest, RestReadContext restReadContext, @PathVariable(VAR_CODESYSTEMID) String codeSystemName, @PathVariable(VAR_CODESYSTEMVERSIONID) String codeSystemVersionId, @RequestParam(PARAM_URI) String uri, @RequestParam(value = "redirect", defaultValue = DEFAULT_REDIRECT) boolean redirect) { ResolvedReadContext readContext = this.resolveRestReadContext(restReadContext); String codeSystemVersionName = this.codeSystemVersionNameResolver.getCodeSystemVersionNameFromVersionId( codeSystemVersionReadService, codeSystemName, codeSystemVersionId, readContext); EntityDescriptionReadId id = new EntityDescriptionReadId(uri, ModelUtils.nameOrUriFromName(codeSystemVersionName)); EntityDescription resource = this.entityDescriptionReadService.read(id, readContext); return this.doForward(resource, id.toString(), httpServletRequest, MESSAGE_FACTORY, PATH_ENTITY_OF_CODESYSTEM_VERSION_BYURI, PATH_ENTITY_OF_CODESYSTEM_VERSION_BYID, URL_BINDER, restReadContext, UnknownEntity.class, redirect); } /** * Gets the entity description by name. * * @param httpServletRequest the http servlet request * @param codeSystemName the code system name * @param codeSystemVersionName the code system version name * @param entityName the entity name * @return the entity description by name */ @RequestMapping(value = PATH_ENTITY_OF_CODESYSTEM_VERSION_BYID, method = RequestMethod.GET) public Object getEntityDescriptionOfCodeSystemVersionByName(HttpServletRequest httpServletRequest, RestReadContext restReadContext, @PathVariable(VAR_CODESYSTEMID) String codeSystemName, @PathVariable(VAR_CODESYSTEMVERSIONID) String codeSystemVersionId, @PathVariable(VAR_ENTITYID) String entityName) { ResolvedReadContext readContext = this.resolveRestReadContext(restReadContext); String codeSystemVersionName = this.codeSystemVersionNameResolver.getCodeSystemVersionNameFromVersionId( codeSystemVersionReadService, codeSystemName, codeSystemVersionId, readContext); EntityDescriptionReadId id = new EntityDescriptionReadId(getScopedEntityName(entityName, codeSystemName), ModelUtils.nameOrUriFromName(codeSystemVersionName)); return this.doRead(httpServletRequest, MESSAGE_FACTORY, this.entityDescriptionReadService, restReadContext, UnknownEntity.class, id); } @RequestMapping(value = PATH_ALL_DESCRIPTIONS_OF_ENTITYBYID, method = RequestMethod.GET) public Object getAllEntityDescriptionsByName(HttpServletRequest httpServletRequest, RestReadContext restReadContext, QueryControl queryControl, @PathVariable(VAR_ENTITYID) String entityName, Page page, boolean list) { ResolvedReadContext readContext = this.resolveRestReadContext(restReadContext); EntityNameOrURI entityId = ModelUtils.entityNameOrUriFromName(this.getScopedEntityName(entityName)); Object response = null; if (list) { DirectoryResult<EntityListEntry> entityList = this.entityDescriptionReadService.readEntityDescriptions( entityId, this.resolveSort(queryControl, this.entityDescriptionQueryService), readContext, page); if (entityList != null && entityList.getEntries() != null && entityList.getEntries().size() == 1 && StringUtils.isNotBlank(entityList.getEntries().get(0).getHref())) { Map<String, Object> parameters = new HashMap<String, Object>(httpServletRequest.getParameterMap()); parameters.remove(PARAM_LIST); String queryString = this.mapToQueryString(parameters); return new ModelAndView("redirect:" + entityList.getEntries().get(0).getHref() + queryString); } else { response = this.populateDirectory(entityList, page, httpServletRequest, EntityList.class); } } else { EntityReference entityReference = this.entityDescriptionReadService.availableDescriptions(entityId, readContext); if (entityReference != null) { if (entityReference.getKnownEntityDescription() != null && entityReference.getKnownEntityDescriptionCount() == 1 && StringUtils.isNotBlank(entityReference.getKnownEntityDescription(0).getHref())) { Map<String, Object> parameters = new HashMap<String, Object>( httpServletRequest.getParameterMap()); String queryString = this.mapToQueryString(parameters); return new ModelAndView( "redirect:" + entityReference.getKnownEntityDescription(0).getHref() + queryString); } else { response = this.wrapMessage(ENTITYREFERENCE_MESSAGE_FACTORY.createMessage(entityReference), httpServletRequest); } } } if (response == null) { throw ExceptionFactory.createUnknownResourceException(entityId.toString(), UnknownEntity.class); } else { return this.buildResponse(httpServletRequest, response); } } /** * Gets the entity description by uri. * * @param httpServletRequest the http servlet request * @param uri the uri * @return the entity description by uri */ @RequestMapping(value = PATH_ENTITYBYURI, method = RequestMethod.GET) public Object getAllEntityDescriptionsByUri(HttpServletRequest httpServletRequest, RestReadContext restReadContext, QueryControl queryControl, @RequestParam(PARAM_URI) String uri, Page page, boolean list, @RequestParam(value = "redirect", defaultValue = DEFAULT_REDIRECT) boolean redirect) { ResolvedReadContext readContext = this.resolveRestReadContext(restReadContext); EntityNameOrURI entityId = ModelUtils.entityNameOrUriFromUri(uri); if (list) { DirectoryResult<EntityListEntry> entityList = this.entityDescriptionReadService.readEntityDescriptions( entityId, this.resolveSort(queryControl, this.entityDescriptionQueryService), readContext, page); if (entityList == null || CollectionUtils.isEmpty(entityList.getEntries())) { throw ExceptionFactory.createUnknownResourceException(entityId.toString(), UnknownEntity.class); } ScopedEntityName name = ModelUtils.getEntity(entityList.getEntries().get(0).getEntry()).getEntityID(); EntityList descriptions = this.populateDirectory(entityList, page, httpServletRequest, EntityList.class); final String id = EncodingUtils.encodeScopedEntityName(name); return this.doForward(descriptions, id, httpServletRequest, ENTITY_LIST_MESSAGE_FACTORY, PATH_ENTITYBYURI, PATH_ALL_DESCRIPTIONS_OF_ENTITYBYID, new UrlTemplateBinder<EntityList>() { @Override public Map<String, String> getPathValues(EntityList resource) { Map<String, String> map = new HashMap<String, String>(); map.put(VAR_ENTITYID, id); return map; } }, restReadContext, UnknownEntity.class, redirect); } else { EntityReference descriptions = this.entityDescriptionReadService.availableDescriptions(entityId, readContext); if (descriptions == null) { throw ExceptionFactory.createUnknownResourceException(entityId.toString(), UnknownEntity.class); } final String id = EncodingUtils.encodeScopedEntityName(descriptions.getName()); return this.doForward(descriptions, id, httpServletRequest, ENTITYREFERENCE_MESSAGE_FACTORY, PATH_ENTITYBYURI, PATH_ALL_DESCRIPTIONS_OF_ENTITYBYID, new UrlTemplateBinder<EntityReference>() { @Override public Map<String, String> getPathValues(EntityReference resource) { Map<String, String> map = new HashMap<String, String>(); map.put(VAR_ENTITYID, id); return map; } }, restReadContext, UnknownEntity.class, redirect); } } @InitBinder public void initEntityDescriptionRestrictionBinder(WebDataBinder binder, @RequestParam(value = PARAM_CODESYSTEM, required = false) List<String> codesystem, @RequestParam(value = PARAM_CODESYSTEMVERSION, required = false) List<String> codesystemversion, @RequestParam(value = PARAM_ENTITY, required = false) List<String> entity) { if (binder.getTarget() instanceof EntityDescriptionQueryServiceRestrictions) { EntityDescriptionQueryServiceRestrictions restrictions = (EntityDescriptionQueryServiceRestrictions) binder .getTarget(); if (CollectionUtils.isNotEmpty(codesystemversion)) { for (String csv : codesystemversion) { restrictions.getCodeSystemVersions().add(ModelUtils.nameOrUriFromEither(csv)); } } if (CollectionUtils.isNotEmpty(entity)) { restrictions.setEntities(ControllerUtils.idsToEntityNameOrUriSet(entity)); } if (CollectionUtils.isNotEmpty(codesystem)) { for (String cs : codesystem) { String[] parts = StringUtils.split(cs, PARAM_SEPARATOR); TaggedCodeSystemRestriction restriction = new TaggedCodeSystemRestriction(); restriction.setCodeSystem(ModelUtils.nameOrUriFromEither(parts[0])); String tagName; if (parts.length == 2) { tagName = ControllerUtils .getReference(parts[1], this.entityDescriptionQueryService.getSupportedTags()) .getContent(); } else { tagName = DEFAULT_TAG; } restriction.setTag(tagName); restrictions.getTaggedCodeSystems().add(restriction); } } } } private EntityQueryBuilder getNewResourceQueryBuilder() { return new EntityQueryBuilder(this.entityDescriptionQueryService, this.getFilterResolver(), this.getReadContextResolver()); } public EntityDescriptionQueryService getEntityDescriptionQueryService() { return entityDescriptionQueryService; } public void setEntityDescriptionQueryService(EntityDescriptionQueryService entityDescriptionQueryService) { this.entityDescriptionQueryService = entityDescriptionQueryService; } public EntityDescriptionReadService getEntityDescriptionReadService() { return entityDescriptionReadService; } public void setEntityDescriptionReadService(EntityDescriptionReadService entityDescriptionReadService) { this.entityDescriptionReadService = entityDescriptionReadService; } public EntityDescriptionMaintenanceService getEntityDescriptionMaintenanceService() { return entityDescriptionMaintenanceService; } public void setEntityDescriptionMaintenanceService( EntityDescriptionMaintenanceService entityDescriptionMaintenanceService) { this.entityDescriptionMaintenanceService = entityDescriptionMaintenanceService; } public CodeSystemVersionReadService getCodeSystemVersionReadService() { return codeSystemVersionReadService; } public void setCodeSystemVersionReadService(CodeSystemVersionReadService codeSystemVersionReadService) { this.codeSystemVersionReadService = codeSystemVersionReadService; } public CodeSystemVersionNameResolver getCodeSystemVersionNameResolver() { return codeSystemVersionNameResolver; } public void setCodeSystemVersionNameResolver(CodeSystemVersionNameResolver codeSystemVersionNameResolver) { this.codeSystemVersionNameResolver = codeSystemVersionNameResolver; } public EntityDescriptionValidator getEntityDescriptionValidator() { return entityDescriptionValidator; } public void setEntityDescriptionValidator(EntityDescriptionValidator entityDescriptionValidator) { this.entityDescriptionValidator = entityDescriptionValidator; } }