use of org.hl7.elm_modelinfo.r1.ModelInfo in project clinical_quality_language by cqframework.
the class CqlTranslator method loadModelInfo.
public static void loadModelInfo(File modelInfoXML) {
final ModelInfo modelInfo = JAXB.unmarshal(modelInfoXML, ModelInfo.class);
final VersionedIdentifier modelId = new VersionedIdentifier().withId(modelInfo.getName()).withVersion(modelInfo.getVersion());
final ModelInfoProvider modelProvider = (VersionedIdentifier modelIdentifier) -> modelInfo;
final ModelInfoLoader modelInfoLoader = new ModelInfoLoader();
modelInfoLoader.registerModelInfoProvider(modelProvider);
}
use of org.hl7.elm_modelinfo.r1.ModelInfo in project clinical_quality_language by cqframework.
the class ModelManager method buildModel.
private Model buildModel(VersionedIdentifier identifier) {
Model model = null;
if (identifier == null) {
throw new IllegalArgumentException("Model identifier is required");
}
if (identifier.getId() == null || identifier.getId().equals("")) {
throw new IllegalArgumentException("Model identifier Id is required");
}
String modelPath = NamespaceManager.getPath(identifier.getSystem(), identifier.getId());
pushLoading(modelPath);
try {
ModelInfo modelInfo = modelInfoLoader.getModelInfo(identifier);
if (identifier.getId().equals("System")) {
model = new SystemModel(modelInfo);
} else {
model = new Model(modelInfo, this);
}
} catch (ClassNotFoundException e) {
throw new IllegalArgumentException(String.format("Could not load model information for model %s, version %s.", identifier.getId(), identifier.getVersion()));
} finally {
popLoading(modelPath);
}
return model;
}
use of org.hl7.elm_modelinfo.r1.ModelInfo 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.hl7.elm_modelinfo.r1.ModelInfo in project quality-measure-and-cohort-service by Alvearie.
the class ModelUtilsTest method testGetChoiceTypesValid.
@Test
public void testGetChoiceTypesValid() {
ModelInfo modelInfo = JAXB.unmarshal(new File("src/test/resources/abstract-context/modelinfo/abstract-modelinfo-1.0.0.xml"), ModelInfo.class);
TypeInfo typeInfo = modelInfo.getTypeInfo().stream().map(ClassInfo.class::cast).filter(classInfo -> classInfo.getName().equals("AlphaNumeric")).findFirst().orElse(null);
Collection<String> choiceTypes = ModelUtils.getChoiceTypeNames(typeInfo);
assertThat(choiceTypes, Matchers.containsInAnyOrder("Alpha", "Numeric"));
}
use of org.hl7.elm_modelinfo.r1.ModelInfo in project quality-measure-and-cohort-service by Alvearie.
the class ModelUtilsTest method testGetChoiceTypesNone.
@Test
public void testGetChoiceTypesNone() {
ModelInfo modelInfo = JAXB.unmarshal(new File("src/test/resources/abstract-context/modelinfo/abstract-modelinfo-1.0.0.xml"), ModelInfo.class);
TypeInfo typeInfo = modelInfo.getTypeInfo().stream().map(ClassInfo.class::cast).filter(classInfo -> classInfo.getName().equals("Alpha")).findFirst().orElse(null);
Collection<String> choiceTypes = ModelUtils.getChoiceTypeNames(typeInfo);
assertThat(choiceTypes, Matchers.empty());
}
Aggregations