/* * 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.model.association.*; import edu.mayo.cts2.framework.model.association.types.GraphDirection; import edu.mayo.cts2.framework.model.association.types.GraphFocus; import edu.mayo.cts2.framework.model.command.Page; import edu.mayo.cts2.framework.model.command.ResolvedReadContext; import edu.mayo.cts2.framework.model.core.CodeSystemVersionReference; import edu.mayo.cts2.framework.model.core.Message; import edu.mayo.cts2.framework.model.directory.DirectoryResult; import edu.mayo.cts2.framework.model.entity.EntityDirectory; import edu.mayo.cts2.framework.model.entity.EntityList; import edu.mayo.cts2.framework.model.extension.LocalIdAssociation; import edu.mayo.cts2.framework.model.service.core.NameOrURI; import edu.mayo.cts2.framework.model.service.core.Query; import edu.mayo.cts2.framework.model.service.exception.UnknownAssociation; import edu.mayo.cts2.framework.model.util.ModelUtils; import edu.mayo.cts2.framework.service.command.restriction.AssociationQueryServiceRestrictions; import edu.mayo.cts2.framework.service.command.restriction.EntityDescriptionQueryServiceRestrictions; import edu.mayo.cts2.framework.service.command.restriction.EntityDescriptionQueryServiceRestrictions.HierarchyRestriction; import edu.mayo.cts2.framework.service.command.restriction.EntityDescriptionQueryServiceRestrictions.HierarchyRestriction.HierarchyType; import edu.mayo.cts2.framework.service.profile.association.AssociationMaintenanceService; import edu.mayo.cts2.framework.service.profile.association.AssociationQuery; import edu.mayo.cts2.framework.service.profile.association.AssociationQueryService; import edu.mayo.cts2.framework.service.profile.association.AssociationReadService; import edu.mayo.cts2.framework.service.profile.association.name.AssociationReadId; import edu.mayo.cts2.framework.service.profile.codesystemversion.CodeSystemVersionReadService; 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.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.AssociationQueryBuilder; import edu.mayo.cts2.framework.webapp.rest.query.EntityQueryBuilder; import edu.mayo.cts2.framework.webapp.rest.util.ControllerUtils; import org.apache.commons.lang.StringUtils; import org.springframework.stereotype.Controller; 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.Map; /** * The Class AssociationController. * * @author <a href="mailto:kevin.peterson@mayo.edu">Kevin Peterson</a> */ @Controller public class AssociationController extends AbstractMessageWrappingController { @Cts2Service private AssociationReadService associationReadService; @Cts2Service private AssociationMaintenanceService associationMaintenanceService; @Cts2Service private AssociationQueryService associationQueryService; @Resource private CodeSystemVersionNameResolver codeSystemVersionNameResolver; @Cts2Service private EntityDescriptionQueryService entityDescriptionQueryService; @Cts2Service private CodeSystemVersionReadService codeSystemVersionReadService; private static UrlTemplateBinder<LocalIdAssociation> URL_BINDER = new UrlTemplateBinder<LocalIdAssociation>(){ @Override public Map<String,String> getPathValues(LocalIdAssociation resource) { Map<String,String> returnMap = new HashMap<String,String>(); CodeSystemVersionReference ref = getAssertedIn(resource.getResource()); returnMap.put(VAR_CODESYSTEMID, ref.getCodeSystem().getContent()); returnMap.put(VAR_CODESYSTEMVERSIONID, ref.getVersion().getContent()); returnMap.put(VAR_ASSOCIATIONID, resource.getLocalID()); return returnMap; } }; private static CodeSystemVersionReference getAssertedIn(Association resource){ if(resource.getAssertedIn() != null){ return resource.getAssertedIn(); } else { return resource.getAssertedBy(); } } private final static MessageFactory<LocalIdAssociation> MESSAGE_FACTORY = new MessageFactory<LocalIdAssociation>() { @Override public Message createMessage(LocalIdAssociation resource) { AssociationMsg msg = new AssociationMsg(); msg.setAssociation(resource.getResource()); return msg; } }; /** * Gets the children associations of entity. * * @param httpServletRequest the http servlet request * @param resolvedFilter the filter * @param page the page * @param codeSystemName the code system name * @param codeSystemVersionName the code system version name * @param entityName the entity name * @return the children associations of entity */ @RequestMapping(value=PATH_CHILDREN_ASSOCIATIONS_OF_ENTITY, method=RequestMethod.GET) public Object getChildrenAssociationsOfEntity( HttpServletRequest httpServletRequest, RestReadContext restReadContext, QueryControl queryControl, EntityDescriptionQueryServiceRestrictions restrictions, RestFilter restFilter, Page page, boolean list, @PathVariable(VAR_CODESYSTEMID) String codeSystemName, @PathVariable(VAR_CODESYSTEMVERSIONID) String codeSystemVersionId, @PathVariable(VAR_ENTITYID) String entityName) { return this.getChildrenAssociationsOfEntity( httpServletRequest, restReadContext, queryControl, null, restrictions, restFilter, page, list, codeSystemName, codeSystemVersionId, entityName); } /** * Gets the children associations of entity. * * @param httpServletRequest the http servlet request * @param query the query * @param resolvedFilter the filter * @param page the page * @param codeSystemName the code system name * @param codeSystemVersionName the code system version name * @param entityName the entity name * @return the children associations of entity */ @RequestMapping(value=PATH_CHILDREN_ASSOCIATIONS_OF_ENTITY, method=RequestMethod.POST) public Object getChildrenAssociationsOfEntity( 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, @PathVariable(VAR_ENTITYID) String entityName) { ResolvedReadContext readContext = this.resolveRestReadContext(restReadContext); String codeSystemVersionName = this.codeSystemVersionNameResolver.getCodeSystemVersionNameFromVersionId( codeSystemVersionReadService, codeSystemName, codeSystemVersionId, readContext); NameOrURI codeSystemVersionNameOrUri = ModelUtils.nameOrUriFromName(codeSystemVersionName); EntityDescriptionReadId entity = new EntityDescriptionReadId( this.getScopedEntityName(entityName, codeSystemName), codeSystemVersionNameOrUri); HierarchyRestriction hierarchyRestriction = new HierarchyRestriction(); hierarchyRestriction.setEntity(entity); hierarchyRestriction.setHierarchyType(HierarchyType.CHILDREN); restrictions.setHierarchyRestriction(hierarchyRestriction); restrictions.getCodeSystemVersions().add(codeSystemVersionNameOrUri); EntityQueryBuilder builder = this.getNewEntityQueryBuilder(); 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 associations of code system version. * * @param httpServletRequest the http servlet request * @param resolvedFilter the filter * @param associationRestrictions the association restrictions * @param page the page * @param codeSystemName the code system name * @param codeSystemVersionName the code system version name * @return the associations of code system version */ @RequestMapping(value=PATH_ASSOCIATIONS_OF_CODESYSTEMVERSION, method=RequestMethod.GET) public Object getAssociationsOfCodeSystemVersion( HttpServletRequest httpServletRequest, RestReadContext restReadContext, QueryControl queryControl, RestFilter restFilter, AssociationQueryServiceRestrictions associationRestrictions, Page page, boolean list, @PathVariable(VAR_CODESYSTEMID) String codeSystemName, @PathVariable(VAR_CODESYSTEMVERSIONID) String versionId) { ResolvedReadContext readContext = this.resolveRestReadContext(restReadContext); String codeSystemVersionName = codeSystemVersionNameResolver.getCodeSystemVersionNameFromVersionId( this.codeSystemVersionReadService, codeSystemName, versionId, readContext); associationRestrictions.setCodeSystemVersion(ModelUtils.nameOrUriFromName(codeSystemVersionName)); return this.getAssociations( httpServletRequest, restReadContext, queryControl, restFilter, associationRestrictions, page, list); } /** * Gets the associations. * * @param httpServletRequest the http servlet request * @param query the query * @param resolvedFilter the filter * @param associationRestrictions the association restrictions * @param page the page * @return the associations */ @RequestMapping(value=PATH_ASSOCIATIONS, method=RequestMethod.POST) public Object getAssociations( HttpServletRequest httpServletRequest, RestReadContext restReadContext, QueryControl queryControl, @RequestBody Query query, RestFilter restFilter, AssociationQueryServiceRestrictions restrictions, Page page, boolean list) { AssociationQueryBuilder builder = this.getNewResourceQueryBuilder(); AssociationQuery resourceQuery = builder. addQuery(query). addRestFilter(restFilter). addRestrictions(restrictions). addRestReadContext(restReadContext). build(); return this.doQuery( httpServletRequest, list, this.associationQueryService, resourceQuery, page, queryControl, AssociationDirectory.class, AssociationList.class); } /** * Gets the associations. * * @param httpServletRequest the http servlet request * @param resolvedFilter the filter * @param associationRestrictions the association restrictions * @param page the page * @return the associations */ @RequestMapping(value=PATH_ASSOCIATIONS, method=RequestMethod.GET) public Object getAssociations( HttpServletRequest httpServletRequest, RestReadContext restReadContext, QueryControl queryControl, RestFilter restFilter, AssociationQueryServiceRestrictions associationRestrictions, Page page, boolean list) { return this.getAssociations( httpServletRequest, restReadContext, queryControl, null, restFilter, associationRestrictions, page, list); } @RequestMapping(value=PATH_ASSOCIATIONBYID, method=RequestMethod.GET) public Object getAssociationOfCodeSystemVersionByLocalName( HttpServletRequest httpServletRequest, RestReadContext restReadContext, QueryControl queryControl, @PathVariable(VAR_CODESYSTEMID) String codeSystemName, @PathVariable(VAR_CODESYSTEMVERSIONID) String codeSystemVersionName, @PathVariable(VAR_ASSOCIATIONID) String associationLocalName) { return this.doRead( httpServletRequest, MESSAGE_FACTORY, this.associationReadService, restReadContext, UnknownAssociation.class, new AssociationReadId( associationLocalName, ModelUtils.nameOrUriFromName(codeSystemVersionName))); } @RequestMapping(value=PATH_ASSOCIATION_OF_CODESYSTEMVERSION_BY_URI, method=RequestMethod.GET) public Object getAssociationOfCodeSystemVersionByUri( HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, RestReadContext restReadContext, QueryControl queryControl, @PathVariable(VAR_CODESYSTEMID) String codeSystemName, @PathVariable(VAR_CODESYSTEMVERSIONID) String codeSystemVersionName, @RequestParam(PARAM_URI) String associationUri) { return this.doRead( httpServletRequest, MESSAGE_FACTORY, this.associationReadService, restReadContext, UnknownAssociation.class, new AssociationReadId(associationUri)); } @RequestMapping(value=PATH_ASSOCIATIONBYURI, method=RequestMethod.GET) public ModelAndView getAssociationByUri( HttpServletRequest httpServletRequest, RestReadContext restReadContext, QueryControl queryControl, @RequestParam(PARAM_URI) String uri, @RequestParam(value="redirect", defaultValue=DEFAULT_REDIRECT) boolean redirect) { return this.doReadByUri( httpServletRequest, MESSAGE_FACTORY, PATH_ASSOCIATIONBYURI, PATH_ASSOCIATIONBYID, URL_BINDER, this.associationReadService, restReadContext, UnknownAssociation.class, new AssociationReadId(uri), redirect); } /** * Gets the graph code system version. * * @param httpServletRequest the http servlet request * @param associationRestrictions the association restrictions * @param page the page * @param codeSystemName the code system name * @param codeSystemVersionName the code system version name * @param focus the focus * @param direction the direction * @param depth the depth * @return the graph code system version */ @RequestMapping(value=PATH_GRAPH_OF_CODESYSTEMVERSION, method=RequestMethod.GET) //TODO: Not complete public Object getGraphCodeSystemVersion( HttpServletRequest httpServletRequest, RestReadContext restReadContext, AssociationQueryServiceRestrictions associationRestrictions, Page page, @PathVariable(VAR_CODESYSTEMID) String codeSystemName, @PathVariable(VAR_CODESYSTEMVERSIONID) String codeSystemVersionId, @RequestParam(required=true, defaultValue="TOP_NODE") String focus, @RequestParam(required=true, defaultValue="FORWARD") GraphDirection direction, @RequestParam(required=true, defaultValue="1") int depth) { ResolvedReadContext readContext = this.resolveRestReadContext(restReadContext); String codeSystemVersionName = this.codeSystemVersionNameResolver.getCodeSystemVersionNameFromVersionId( codeSystemVersionReadService, codeSystemName, codeSystemVersionId, readContext); GraphFocus graphFocus; if(focus.equals(GraphFocus.TOP_NODE.toString())){ graphFocus = GraphFocus.TOP_NODE; } else if(focus.equals(GraphFocus.BOTTOM_NODE.toString())){ graphFocus = GraphFocus.BOTTOM_NODE; } else { graphFocus = GraphFocus.SPECIFIC_ENTITY; } DirectoryResult<GraphNode> directoryResult = this.associationQueryService.getAssociationGraph( graphFocus, new EntityDescriptionReadId( this.getScopedEntityName(focus, codeSystemName), ModelUtils.nameOrUriFromName(codeSystemVersionName)), direction, depth); AssociationGraph graph = this.populateDirectory( directoryResult, page, httpServletRequest, AssociationGraph.class); graph.setExpansionDirection(direction); graph.setExpansionDepth((long)depth); graph.setGraphFocus(graphFocus); //TODO: need to populate (resolve) focus entity. //we can populate based on what the user has passed //in, but we need to resolve the URI/name. //graph.setFocusEntity(focusEntity) return this.buildResponse(httpServletRequest, graph); } @RequestMapping(value=PATH_SUBJECTOF_ASSOCIATIONS_OF_ENTITY, method=RequestMethod.GET) public Object getSubjectOfAssociationsOfEntity( HttpServletRequest httpServletRequest, RestReadContext restReadContext, QueryControl queryControl, AssociationQueryServiceRestrictions associationRestrictions, RestFilter resolvedFilter, Page page, boolean list, @PathVariable(VAR_CODESYSTEMID) String codeSystemName, @PathVariable(VAR_CODESYSTEMVERSIONID) String codeSystemVersionId, @PathVariable(VAR_ENTITYID) String entityName) { return this.getSubjectOfAssociationsOfEntity( httpServletRequest, restReadContext, queryControl, null, associationRestrictions, resolvedFilter, page, list, codeSystemName, codeSystemVersionId, entityName); } /** * Gets the source of associations of entity. * * @param httpServletRequest the http servlet request * @param query the query * @param associationRestrictions the association restrictions * @param resolvedFilter the filter * @param page the page * @param codeSystemName the code system name * @param codeSystemVersionName the code system version name * @param entityName the entity name * @return the source of associations of entity */ @RequestMapping(value=PATH_SUBJECTOF_ASSOCIATIONS_OF_ENTITY, method=RequestMethod.POST) public Object getSubjectOfAssociationsOfEntity( HttpServletRequest httpServletRequest, RestReadContext restReadContext, QueryControl queryControl, @RequestBody Query query, AssociationQueryServiceRestrictions associationRestrictions, RestFilter resolvedFilter, Page page, boolean list, @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); associationRestrictions.setSourceEntity( ModelUtils.entityNameOrUriFromName( this.getScopedEntityName(entityName, codeSystemName))); return this.getAssociationsOfCodeSystemVersion( httpServletRequest, restReadContext, queryControl, resolvedFilter, associationRestrictions, page, list, codeSystemName, codeSystemVersionName); } @RequestMapping(value=PATH_TARGETOF_ASSOCIATIONS_OF_ENTITY, method=RequestMethod.GET) public Object getTargetOfAssociationsOfEntity( HttpServletRequest httpServletRequest, RestReadContext restReadContext, QueryControl queryControl, AssociationQueryServiceRestrictions associationRestrictions, RestFilter resolvedFilter, Page page, boolean list, @PathVariable(VAR_CODESYSTEMID) String codeSystemName, @PathVariable(VAR_CODESYSTEMVERSIONID) String codeSystemVersionId, @PathVariable(VAR_ENTITYID) String entityName) { return this.getTargetOfAssociationsOfEntity( httpServletRequest, restReadContext, queryControl, null, associationRestrictions, resolvedFilter, page, list, codeSystemName, codeSystemVersionId, entityName); } @RequestMapping(value=PATH_TARGETOF_ASSOCIATIONS_OF_ENTITY, method=RequestMethod.POST) public Object getTargetOfAssociationsOfEntity( HttpServletRequest httpServletRequest, RestReadContext restReadContext, QueryControl queryControl, @RequestBody Query query, AssociationQueryServiceRestrictions associationRestrictions, RestFilter resolvedFilter, Page page, boolean list, @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); associationRestrictions.setTargetEntity( ModelUtils.entityNameOrUriFromName( this.getScopedEntityName(entityName, codeSystemName))); return this.getAssociationsOfCodeSystemVersion( httpServletRequest, restReadContext, queryControl, resolvedFilter, associationRestrictions, page, list, codeSystemName, codeSystemVersionName); } @RequestMapping(value=PATH_PREDICATEOF_ASSOCIATIONS_OF_ENTITY, method=RequestMethod.GET) public Object getPredicateOfAssociationsOfEntity( HttpServletRequest httpServletRequest, RestReadContext restReadContext, QueryControl queryControl, AssociationQueryServiceRestrictions associationRestrictions, RestFilter resolvedFilter, Page page, boolean list, @PathVariable(VAR_CODESYSTEMID) String codeSystemName, @PathVariable(VAR_CODESYSTEMVERSIONID) String codeSystemVersionId, @PathVariable(VAR_ENTITYID) String entityName) { return this.getPredicateOfAssociationsOfEntity( httpServletRequest, restReadContext, queryControl, null, associationRestrictions, resolvedFilter, page, list, codeSystemName, codeSystemVersionId, entityName); } @RequestMapping(value=PATH_PREDICATEOF_ASSOCIATIONS_OF_ENTITY, method=RequestMethod.POST) public Object getPredicateOfAssociationsOfEntity( HttpServletRequest httpServletRequest, RestReadContext restReadContext, QueryControl queryControl, @RequestBody Query query, AssociationQueryServiceRestrictions associationRestrictions, RestFilter resolvedFilter, Page page, boolean list, @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); associationRestrictions.setPredicate( ModelUtils.entityNameOrUriFromName( this.getScopedEntityName(entityName, codeSystemName))); return this.getAssociationsOfCodeSystemVersion( httpServletRequest, restReadContext, queryControl, resolvedFilter, associationRestrictions, page, list, codeSystemName, codeSystemVersionName); } /** * Creates the association. * * @param httpServletRequest the http servlet request * @param association the association * @param changeseturi the changeseturi * @param codeSystemName the code system name * @param codeSystemVersionName the code system version name * @param associationName the association name */ @RequestMapping(value=PATH_ASSOCIATION, method=RequestMethod.POST) public Object createAssociation( HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, @RequestBody Association association, @RequestParam(value=PARAM_CHANGESETCONTEXT, required=false) String changeseturi) { return this.doCreate( httpServletResponse, association, changeseturi, PATH_ASSOCIATIONBYID, URL_BINDER, this.associationMaintenanceService); } @RequestMapping(value=PATH_ASSOCIATIONBYID, method=RequestMethod.PUT) public Object updateAssociation( HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, @RequestBody Association association, @RequestParam(value=PARAM_CHANGESETCONTEXT, required=false) String changeseturi, @PathVariable(VAR_CODESYSTEMID) String codeSystemName, @PathVariable(VAR_CODESYSTEMVERSIONID) String codeSystemVersionName, @PathVariable(VAR_ASSOCIATIONID) String associationLocalName) { return this.doUpdate( httpServletResponse, new LocalIdAssociation(associationLocalName, association), changeseturi, new AssociationReadId( associationLocalName, ModelUtils.nameOrUriFromName(codeSystemVersionName)), this.associationMaintenanceService); } @RequestMapping(value=PATH_ASSOCIATIONBYID, method=RequestMethod.DELETE) public Object deleteAssociation( HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, RestReadContext restReadContext, QueryControl queryControl, @PathVariable(VAR_CODESYSTEMID) String codeSystemName, @PathVariable(VAR_CODESYSTEMVERSIONID) String codeSystemVersionName, @PathVariable(VAR_ASSOCIATIONID) String associationLocalName, @RequestParam(PARAM_CHANGESETCONTEXT) String changeseturi) { AssociationReadId id = new AssociationReadId( associationLocalName, ModelUtils.nameOrUriFromName(codeSystemVersionName)); return this.doDelete( httpServletResponse, id, changeseturi, this.associationMaintenanceService); } @InitBinder public void initAssociationQueryServiceRestrictionsBinder( WebDataBinder binder, @RequestParam(value=PARAM_CODESYSTEMVERSION, required=false) String codeSystemVersion, @RequestParam(value=PARAM_SOURCEENTITYID, required=false) String sourceEntity, @RequestParam(value=PARAM_TARGETENTITYID, required=false) String targetEntity, @RequestParam(value=PARAM_SOURCEORTARGETENTITYID, required=false) String sourceOrTargetEntity, @RequestParam(value=PARAM_TARGETLITERALID, required=false) String targetLiteral, @RequestParam(value=PARAM_PREDICATEID, required=false) String predicate, @RequestParam(value=PARAM_TARGETEXPRESSIONID, required=false) String targetExpression) { if(binder.getTarget() instanceof AssociationQueryServiceRestrictions){ AssociationQueryServiceRestrictions restrictions = (AssociationQueryServiceRestrictions) binder.getTarget(); if(StringUtils.isNotBlank(codeSystemVersion)){ restrictions.setCodeSystemVersion(ModelUtils.nameOrUriFromEither(codeSystemVersion)); } if(StringUtils.isNotBlank(sourceEntity)){ restrictions.setSourceEntity(ControllerUtils.idToEntityNameOrUri(sourceEntity)); } if(StringUtils.isNotBlank(targetEntity)){ restrictions.setTargetEntity(ControllerUtils.idToEntityNameOrUri(targetEntity)); } if(StringUtils.isNotBlank(sourceOrTargetEntity)){ restrictions.setSourceOrTargetEntity(ControllerUtils.idToEntityNameOrUri(sourceOrTargetEntity)); } if(StringUtils.isNotBlank(targetLiteral)){ restrictions.setTargetLiteral(ControllerUtils.idToEntityNameOrUri(targetLiteral)); } if(StringUtils.isNotBlank(predicate)){ restrictions.setPredicate(ControllerUtils.idToEntityNameOrUri(predicate)); } if(StringUtils.isNotBlank(targetExpression)){ restrictions.setTargetExpression(ControllerUtils.idToEntityNameOrUri(targetExpression)); } } } private AssociationQueryBuilder getNewResourceQueryBuilder(){ return new AssociationQueryBuilder( this.associationQueryService, this.getFilterResolver(), this.getReadContextResolver()); } private EntityQueryBuilder getNewEntityQueryBuilder(){ return new EntityQueryBuilder( this.entityDescriptionQueryService, this.getFilterResolver(), this.getReadContextResolver()); } public AssociationReadService getAssociationReadService() { return associationReadService; } public void setAssociationReadService( AssociationReadService associationReadService) { this.associationReadService = associationReadService; } public AssociationMaintenanceService getAssociationMaintenanceService() { return associationMaintenanceService; } public void setAssociationMaintenanceService( AssociationMaintenanceService associationMaintenanceService) { this.associationMaintenanceService = associationMaintenanceService; } public AssociationQueryService getAssociationQueryService() { return associationQueryService; } public void setAssociationQueryService( AssociationQueryService associationQueryService) { this.associationQueryService = associationQueryService; } public CodeSystemVersionNameResolver getCodeSystemVersionNameResolver() { return codeSystemVersionNameResolver; } public void setCodeSystemVersionNameResolver( CodeSystemVersionNameResolver codeSystemVersionNameResolver) { this.codeSystemVersionNameResolver = codeSystemVersionNameResolver; } public CodeSystemVersionReadService getCodeSystemVersionReadService() { return codeSystemVersionReadService; } public void setCodeSystemVersionReadService( CodeSystemVersionReadService codeSystemVersionReadService) { this.codeSystemVersionReadService = codeSystemVersionReadService; } }