Skip to content
This repository was archived by the owner on Dec 18, 2023. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 34 additions & 0 deletions open-api/swagger.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -1876,6 +1876,32 @@ paths:
description: >
No concept exists with the concept code, or the user does not have
access to the concept.
'/v2/concepts/{conceptCode}/modifiers':
get:
description: >
Gets the modifiers associated with a particular concept code if it exists
and the user has access to it.
tags:
- v2
parameters:
- name: conceptCode
required: true
in: path
description: Concept code of the concept.
schema:
type: string
responses:
'200':
description: |
Returns a list of modifier names associated with the given concept.
content:
'*/*':
schema:
$ref: '#/components/schemas/ConceptModifiers'
'404':
description: >
No concept exists with the concept code, or the user does not have
access to the concept.

/v2/tree_nodes:
get:
Expand Down Expand Up @@ -3383,6 +3409,14 @@ components:
name:
type: string

ConceptModifiers:
type: object
properties:
modifiers:
type: array
items:
type: string

VariableMetadata:
type: object
properties:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,4 +49,5 @@ interface ConceptsResource {
*/
String getConceptCodeByConceptPath(String conceptPath) throws NoSuchResourceException

List<String> getModifiersByConceptCode(String conceptCode, User user) throws NoSuchResourceException
}
Original file line number Diff line number Diff line change
Expand Up @@ -69,4 +69,5 @@ interface MultiDimensionalDataResource {

Iterable<Dimension> getSupportedDimensions(Constraint constraint)

List<String> getModifiersForConcept(String conceptCode)
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import org.hibernate.criterion.Restrictions
import org.hibernate.criterion.Subqueries
import org.hibernate.internal.CriteriaImpl
import org.hibernate.internal.StatelessSessionImpl
import org.hibernate.transform.Transformers
import org.springframework.beans.factory.annotation.Autowired
import org.transmartproject.core.IterableResult
import org.transmartproject.core.multidimquery.datatable.PaginationParameters
Expand Down Expand Up @@ -179,6 +180,21 @@ class MultidimensionalDataResourceService extends AbstractDataResourceService im
getAvailableDimensions(getConstraintStudies(constraint))
}

@CompileDynamic
List<String> getModifiersForConcept(String conceptCode) {
def session = (StatelessSessionImpl) sessionFactory.openStatelessSession()
session.connection().autoCommit = false
def results = (List)session.createSQLQuery("SELECT DISTINCT of.concept_cd, of.modifier_cd, mod.name_char " + \
"FROM i2b2demodata.observation_fact as of " + \
"INNER JOIN i2b2demodata.modifier_dimension as mod ON of.modifier_cd = mod.modifier_cd " + \
"WHERE of.concept_cd = :conceptCode")
.setString("conceptCode", conceptCode)
.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP)
.list()
session.close()
results.collect{ Map result -> (String)result.get('name_char') }
}

// FIXME: Enable static compilation
@CompileDynamic
private Query buildCriteria(Set<DimensionImpl> dimensions, ImmutableMap<DimensionImpl, SortOrder> orderDims) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,16 @@ import org.transmartproject.core.exceptions.NoSuchResourceException
import org.transmartproject.core.concept.Concept
import org.transmartproject.core.concept.ConceptsResource
import org.transmartproject.core.multidimquery.MultiDimensionalDataResource
import org.transmartproject.core.multidimquery.query.AndConstraint
import org.transmartproject.core.multidimquery.query.Constraint
import org.transmartproject.core.multidimquery.query.Field
import org.transmartproject.core.multidimquery.query.FieldConstraint
import org.transmartproject.core.multidimquery.query.Operator
import org.transmartproject.core.users.User
import org.transmartproject.db.i2b2data.ConceptDimension
import org.transmartproject.core.multidimquery.query.ConceptConstraint
import org.transmartproject.core.multidimquery.query.TrueConstraint
import org.transmartproject.db.i2b2data.ObservationFact

import java.util.concurrent.ConcurrentHashMap

Expand Down Expand Up @@ -122,4 +128,9 @@ class ConceptsService implements ConceptsResource, ApplicationRunner {
code
}

@Override
List<String> getModifiersByConceptCode(String conceptCode, User user) throws NoSuchResourceException {
getConceptByConceptCodeForUser(conceptCode, user)
multiDimService.getModifiersForConcept(conceptCode)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import org.springframework.web.bind.annotation.PathVariable
import org.springframework.web.bind.annotation.RequestParam
import org.transmartproject.core.concept.Concept
import org.transmartproject.core.concept.ConceptsResource
import org.transmartproject.rest.marshallers.ConceptModifiersWrapper
import org.transmartproject.rest.marshallers.ConceptWrapper
import org.transmartproject.rest.marshallers.ContainerResponseWrapper

Expand Down Expand Up @@ -43,6 +44,13 @@ class ConceptController extends AbstractQueryController {
)
}

def getModifiers(@RequestParam('api_version') String apiVersion, @PathVariable('conceptCode') String conceptCode) {
checkForUnsupportedParams(params, ['conceptCode'])
respond new ConceptModifiersWrapper(
modifiers: conceptsResource.getModifiersByConceptCode(conceptCode, authContext.user)
)
}

private static wrapConcepts(String apiVersion, Collection<Concept> source) {
new ContainerResponseWrapper(
key: 'concepts',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,9 @@ class RestApiUrlMappings {
"/concepts/${conceptCode}"(method: 'GET', controller: 'concept', action: 'show') {
apiVersion = 'v2'
}
"/concepts/${conceptCode}/modifiers"(method: 'GET', controller: 'concept', action: 'getModifiers') {
apiVersion = 'v2'
}
"/tree_nodes"(method: 'GET', controller: 'tree', action: 'index') {
apiVersion = 'v2'
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package org.transmartproject.rest.marshallers

import grails.rest.Link

import static grails.rest.render.util.AbstractLinkingRenderer.RELATIONSHIP_SELF

class ConceptModifiersSerializationHelper extends AbstractHalOrJsonSerializationHelper<ConceptModifiersWrapper> {

final Class targetType = ConceptModifiersWrapper

final String collectionName = 'modifiers'

@Override
Map<String, Object> convertToMap(ConceptModifiersWrapper object) {
[modifiers: object.modifiers]
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package org.transmartproject.rest.marshallers

class ConceptModifiersWrapper {
List<String> modifiers
}