Skip to content

Commit

Permalink
[APHL-954] recursive action check (#468)
Browse files Browse the repository at this point in the history
* add recursive action check

* updated tests and adapters

* spotless

* better error message

* [APHL-954] update with action.definition

* update inconsistent constructor

* add PlanDefinitionAdapter tests

* nested action test

* spotless

---------

Co-authored-by: [email protected] <[email protected]>
Co-authored-by: JP <[email protected]>
  • Loading branch information
3 people committed May 31, 2024
1 parent 1cb69aa commit 6bd7352
Show file tree
Hide file tree
Showing 9 changed files with 189,409 additions and 188,947 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -150,41 +150,7 @@ public List<IDependencyInfo> getDependencies() {
references.add(dependency);
}
// action[]
this.planDefinition.getAction().forEach(action -> {
action.getTriggerDefinition().stream().map(t -> t.getEventData()).forEach(eventData -> {
// trigger[].dataRequirement[].profile[]
eventData.getProfile().forEach(profile -> {
references.add(new DependencyInfo(
referenceSource,
profile.getValue(),
profile.getExtension(),
(reference) -> profile.setValue(reference)));
});
// trigger[].dataRequirement[].codeFilter[].valueSet
eventData.getCodeFilter().stream()
.filter(cf -> cf.hasValueSet())
.forEach(cf -> {
references.add(dependencyFromDataRequirementCodeFilter(cf));
});
});
Stream.concat(action.getInput().stream(), action.getOutput().stream())
.forEach(inputOrOutput -> {
// ..input[].profile[]
// ..output[].profile[]
inputOrOutput.getProfile().forEach(profile -> {
references.add(new DependencyInfo(
referenceSource,
profile.getValue(),
profile.getExtension(),
(reference) -> profile.setValue(reference)));
});
// input[].codeFilter[].valueSet
// output[].codeFilter[].valueSet
inputOrOutput.getCodeFilter().forEach(cf -> {
references.add(dependencyFromDataRequirementCodeFilter(cf));
});
});
});
this.planDefinition.getAction().forEach(action -> getDependenciesOfAction(action, references, referenceSource));
this.getPlanDefinition().getExtension().stream()
.filter(ext -> ext.getUrl().contains("cpg-partOf"))
.filter(ext -> ext.hasValue())
Expand All @@ -201,6 +167,54 @@ public List<IDependencyInfo> getDependencies() {
return references;
}

private void getDependenciesOfAction(
PlanDefinition.PlanDefinitionActionComponent action,
List<IDependencyInfo> references,
String referenceSource) {
action.getTriggerDefinition().stream().map(t -> t.getEventData()).forEach(eventData -> {
// trigger[].dataRequirement[].profile[]
eventData.getProfile().stream().filter(UriType::hasValue).forEach(profile -> {
references.add(new DependencyInfo(
referenceSource,
profile.getValue(),
profile.getExtension(),
(reference) -> profile.setValue(reference)));
});
// trigger[].dataRequirement[].codeFilter[].valueSet
eventData.getCodeFilter().stream().filter(cf -> cf.hasValueSet()).forEach(cf -> {
references.add(dependencyFromDataRequirementCodeFilter(cf));
});
});
Stream.concat(action.getInput().stream(), action.getOutput().stream()).forEach(inputOrOutput -> {
// ..input[].profile[]
// ..output[].profile[]
inputOrOutput.getProfile().stream().filter(UriType::hasValue).forEach(profile -> {
references.add(new DependencyInfo(
referenceSource,
profile.getValue(),
profile.getExtension(),
(reference) -> profile.setValue(reference)));
});
// input[].codeFilter[].valueSet
// output[].codeFilter[].valueSet
inputOrOutput.getCodeFilter().stream()
.filter(cf -> cf.hasValueSet())
.forEach(cf -> {
references.add(dependencyFromDataRequirementCodeFilter(cf));
});
});
// action..definition
var definition = action.getDefinition();
if (definition != null && definition.hasReference()) {
references.add(new DependencyInfo(
referenceSource,
definition.getReference(),
definition.getExtension(),
(reference) -> definition.setReference(reference)));
}
action.getAction().forEach(nestedAction -> getDependenciesOfAction(nestedAction, references, referenceSource));
}

private DependencyInfo dependencyFromDataRequirementCodeFilter(DataRequirementCodeFilterComponent cf) {
var vs = cf.getValueSet();
if (vs instanceof StringType) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -153,75 +153,7 @@ public List<IDependencyInfo> getDependencies() {
references.add(dependency);
}
// action[]
this.planDefinition.getAction().forEach(action -> {
action.getTrigger().stream().flatMap(t -> t.getData().stream()).forEach(eventData -> {
// trigger[].dataRequirement[].profile[]
eventData.getProfile().forEach(profile -> {
references.add(new DependencyInfo(
referenceSource,
profile.getValue(),
profile.getExtension(),
(reference) -> profile.setValue(reference)));
});
// trigger[].dataRequirement[].codeFilter[].valueSet
eventData.getCodeFilter().stream()
.filter(cf -> cf.hasValueSet())
.forEach(cf -> {
references.add(new DependencyInfo(
referenceSource,
cf.getValueSet(),
cf.getExtension(),
(reference) -> cf.setValueSet(reference)));
});
});
// condition[].expression.reference
action.getCondition().stream()
.filter(c -> c.hasExpression())
.map(c -> c.getExpression())
.filter(e -> e.hasReference())
.forEach(expression -> {
references.add(new DependencyInfo(
referenceSource,
expression.getReference(),
expression.getExtension(),
(reference) -> expression.setReference(reference)));
});
// dynamicValue[].expression.reference
action.getDynamicValue().stream()
.filter(dv -> dv.hasExpression())
.map(dv -> dv.getExpression())
.filter(e -> e.hasReference())
.forEach(expression -> {
references.add(new DependencyInfo(
referenceSource,
expression.getReference(),
expression.getExtension(),
(reference) -> expression.setReference(reference)));
});
Stream.concat(action.getInput().stream(), action.getOutput().stream())
.forEach(inputOrOutput -> {
// ..input[].profile[]
// ..output[].profile[]
inputOrOutput.getProfile().forEach(profile -> {
references.add(new DependencyInfo(
referenceSource,
profile.getValue(),
profile.getExtension(),
(reference) -> profile.setValue(reference)));
});
// input[].codeFilter[].valueSet
// output[].codeFilter[].valueSet
inputOrOutput.getCodeFilter().stream()
.filter(cf -> cf.hasValueSet())
.forEach(cf -> {
references.add(new DependencyInfo(
referenceSource,
cf.getValueSet(),
cf.getExtension(),
(reference) -> cf.setValueSet(reference)));
});
});
});
this.planDefinition.getAction().forEach(action -> getDependenciesOfAction(action, references, referenceSource));
this.getPlanDefinition().getExtension().stream()
.filter(ext -> ext.getUrl().contains("cpg-partOf"))
.filter(ext -> ext.hasValue())
Expand All @@ -238,6 +170,90 @@ public List<IDependencyInfo> getDependencies() {
return references;
}

private void getDependenciesOfAction(
PlanDefinition.PlanDefinitionActionComponent action,
List<IDependencyInfo> references,
String referenceSource) {
action.getTrigger().stream().flatMap(t -> t.getData().stream()).forEach(eventData -> {
// trigger[].dataRequirement[].profile[]
eventData.getProfile().stream()
.filter(profile -> profile.hasValue())
.forEach(profile -> {
references.add(new DependencyInfo(
referenceSource,
profile.getValue(),
profile.getExtension(),
(reference) -> profile.setValue(reference)));
});
// trigger[].dataRequirement[].codeFilter[].valueSet
eventData.getCodeFilter().stream().filter(cf -> cf.hasValueSet()).forEach(cf -> {
references.add(new DependencyInfo(
referenceSource,
cf.getValueSet(),
cf.getExtension(),
(reference) -> cf.setValueSet(reference)));
});
});
// condition[].expression.reference
action.getCondition().stream()
.filter(c -> c.hasExpression())
.map(c -> c.getExpression())
.filter(e -> e.hasReference())
.forEach(expression -> {
references.add(new DependencyInfo(
referenceSource,
expression.getReference(),
expression.getExtension(),
(reference) -> expression.setReference(reference)));
});
// dynamicValue[].expression.reference
action.getDynamicValue().stream()
.filter(dv -> dv.hasExpression())
.map(dv -> dv.getExpression())
.filter(e -> e.hasReference())
.forEach(expression -> {
references.add(new DependencyInfo(
referenceSource,
expression.getReference(),
expression.getExtension(),
(reference) -> expression.setReference(reference)));
});
Stream.concat(action.getInput().stream(), action.getOutput().stream()).forEach(inputOrOutput -> {
// ..input[].profile[]
// ..output[].profile[]
inputOrOutput.getProfile().stream()
.filter(profile -> profile.hasValue())
.forEach(profile -> {
references.add(new DependencyInfo(
referenceSource,
profile.getValue(),
profile.getExtension(),
(reference) -> profile.setValue(reference)));
});
// input[].codeFilter[].valueSet
// output[].codeFilter[].valueSet
inputOrOutput.getCodeFilter().stream()
.filter(cf -> cf.hasValueSet())
.forEach(cf -> {
references.add(new DependencyInfo(
referenceSource,
cf.getValueSet(),
cf.getExtension(),
(reference) -> cf.setValueSet(reference)));
});
});
// action..definitionCanonical
var definition = action.getDefinitionCanonicalType();
if (definition != null && definition.hasValue()) {
references.add(new DependencyInfo(
referenceSource,
definition.getValue(),
definition.getExtension(),
(reference) -> definition.setValue(reference)));
}
action.getAction().forEach(nestedAction -> getDependenciesOfAction(nestedAction, references, referenceSource));
}

@Override
public Date getApprovalDate() {
return this.getPlanDefinition().getApprovalDate();
Expand Down
Loading

0 comments on commit 6bd7352

Please sign in to comment.