/*
* 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;
}
}