use of org.cqframework.cql.cql2elm.ModelManager in project clinical_quality_language by cqframework.
the class SortingTest method setup.
@BeforeTest
public void setup() throws IOException {
ModelManager modelManager = new ModelManager();
CqlTranslator translator = CqlTranslator.fromStream(QueryTest.class.getResourceAsStream("../OperatorTests/Sorting.cql"), modelManager, new LibraryManager(modelManager));
// The alias test creates an error
assertThat(translator.getErrors().size(), is(1));
Library library = translator.toELM();
defs = new HashMap<>();
for (ExpressionDef def : library.getStatements().getDef()) {
defs.put(def.getName(), def);
}
}
use of org.cqframework.cql.cql2elm.ModelManager in project clinical_quality_language by cqframework.
the class StringOperatorsTest method setup.
@BeforeTest
public void setup() throws IOException {
ModelManager modelManager = new ModelManager();
CqlTranslator translator = CqlTranslator.fromStream(StringOperatorsTest.class.getResourceAsStream("../OperatorTests/StringOperators.cql"), modelManager, new LibraryManager(modelManager));
assertThat(translator.getErrors().size(), is(0));
Library library = translator.toELM();
defs = new HashMap<>();
for (ExpressionDef def : library.getStatements().getDef()) {
defs.put(def.getName(), def);
}
}
use of org.cqframework.cql.cql2elm.ModelManager in project clinical_quality_language by cqframework.
the class AgeOperatorsTest method setup.
@BeforeTest
public void setup() throws IOException {
ModelManager modelManager = new ModelManager();
CqlTranslator translator = CqlTranslator.fromStream(AgeOperatorsTest.class.getResourceAsStream("../OperatorTests/AgeOperators.cql"), modelManager, new LibraryManager(modelManager));
assertThat(translator.getErrors().size(), is(0));
Library library = translator.toELM();
defs = new HashMap<>();
if (library.getStatements() != null) {
for (ExpressionDef def : library.getStatements().getDef()) {
defs.put(def.getName(), def);
}
}
}
use of org.cqframework.cql.cql2elm.ModelManager in project quality-measure-and-cohort-service by Alvearie.
the class SparkSchemaCreator method getDataTypeForContextKey.
private Tuple2<String, DataType> getDataTypeForContextKey(String contextName, Set<Tuple2<String, String>> usingInfos) {
ContextDefinition contextDefinition = contextDefinitions.getContextDefinitionByName(contextName);
String primaryDataType = contextDefinition.getPrimaryDataType();
String primaryKeyColumn = contextDefinition.getPrimaryKeyColumn();
DataType keyType = null;
ModelManager modelManager = translator.newModelManager();
// Try to find the key column's type information from a single model info.
for (Tuple2<String, String> usingInfo : usingInfos) {
VersionedIdentifier modelInfoIdentifier = new VersionedIdentifier().withId(usingInfo._1()).withVersion(usingInfo._2());
ModelInfo modelInfo = modelManager.getModelInfoLoader().getModelInfo(modelInfoIdentifier);
// Look for a ClassInfo element matching primaryDataType for the context
List<ClassInfo> classInfos = getClassInfos(primaryDataType, modelInfo);
if (!classInfos.isEmpty()) {
if (classInfos.size() == 1) {
ClassInfo classInfo = classInfos.get(0);
List<ClassInfoElement> elements = classInfo.getElement().stream().filter(x -> x.getName().equals(primaryKeyColumn)).collect(Collectors.toList());
// check base type
String baseType = classInfo.getBaseType();
if (classInfo.getBaseType() != null) {
List<ClassInfo> baseClassInfos = getClassInfos(baseType, modelInfo);
baseClassInfos.stream().map(ClassInfo::getElement).flatMap(List::stream).filter(element -> element.getName().equals(primaryKeyColumn)).forEach(elements::add);
}
// check choice types
Collection<String> choiceTypes = ModelUtils.getChoiceTypeNames(classInfo);
choiceTypes.stream().map(type -> getClassInfos(type, modelInfo)).flatMap(List::stream).map(ClassInfo::getElement).flatMap(List::stream).filter(element -> element.getName().equals(primaryKeyColumn)).findFirst().ifPresent(elements::add);
// A future ModelInfo file may contain the information
if (elements.isEmpty()) {
continue;
} else if (elements.size() == 1) {
String elementType = elements.get(0).getElementType();
// store it
if (keyType == null) {
keyType = getSparkTypeForSystemValue(elementType);
} else {
throw new IllegalArgumentException("Multiple definitions found for " + primaryDataType + "." + primaryKeyColumn + " in the provided ModelInfo files. Cannot infer key type for context: " + contextName);
}
} else if (elements.size() > 1) {
throw new IllegalArgumentException("ModelInfo " + modelInfoIdentifier + " contains multiple element definitions for " + primaryKeyColumn + " for type " + primaryDataType);
}
} else {
throw new IllegalArgumentException("ModelInfo " + modelInfoIdentifier + " contains multiple definitions for type " + primaryDataType);
}
}
}
if (keyType == null) {
throw new IllegalArgumentException("Could not locate type information for " + primaryDataType + "." + primaryKeyColumn + " in the provided ModelInfo files. Cannot infer key type for context: " + contextName);
}
return new Tuple2<>(contextDefinition.getPrimaryKeyColumn(), keyType);
}
use of org.cqframework.cql.cql2elm.ModelManager in project quality-measure-and-cohort-service by Alvearie.
the class CqlToElmTranslator method newLibraryManager.
public LibraryManager newLibraryManager(CqlLibrarySourceProvider sourceProvider) {
ModelManager modelManager = newModelManager();
LibraryManager libraryManager = new LibraryManager(modelManager);
libraryManager.getLibrarySourceLoader().registerProvider(sourceProvider);
return libraryManager;
}
Aggregations