Skip to content

Commit 5e46c5d

Browse files
authored
Merge pull request #1325 from b2ihealthcare/issue/mrcm-attribute-type-configurations
Make MRCM type expressions configurable
2 parents 9240139 + c6b6e76 commit 5e46c5d

File tree

3 files changed

+74
-6
lines changed

3 files changed

+74
-6
lines changed

snomed/com.b2international.snowowl.snomed.datastore/src/com/b2international/snowowl/snomed/datastore/config/SnomedCoreConfiguration.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import jakarta.validation.constraints.Max;
2222
import jakarta.validation.constraints.Min;
2323
import jakarta.validation.constraints.NotEmpty;
24+
import jakarta.validation.constraints.NotNull;
2425

2526
/**
2627
* SNOMED CT related application level configuration parameters.
@@ -67,6 +68,9 @@ public class SnomedCoreConfiguration {
6768

6869
private boolean concreteDomainSupport = false;
6970

71+
@NotNull
72+
private SnomedMrcmConfig mrcmConfiguration = new SnomedMrcmConfig();
73+
7074
/**
7175
* @return the number of reasoners that are permitted to run simultaneously.
7276
*/
@@ -245,5 +249,15 @@ public void setDatetimeDatatypeRefsetIdentifier(String datetimeDatatypeRefsetIde
245249
public long getClassificationCleanUpInterval() {
246250
return classificationCleanUpInterval;
247251
}
252+
253+
@JsonProperty("mrcm")
254+
public SnomedMrcmConfig getMrcmConfiguration() {
255+
return mrcmConfiguration;
256+
}
257+
258+
@JsonProperty("mrcm")
259+
public void setMrcmConfiguration(SnomedMrcmConfig mrcmConfiguration) {
260+
this.mrcmConfiguration = mrcmConfiguration;
261+
}
248262

249263
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
/*
2+
* Copyright 2024 B2i Healthcare, https://b2ihealthcare.com
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package com.b2international.snowowl.snomed.datastore.config;
17+
18+
import com.b2international.snowowl.snomed.common.SnomedConstants.Concepts;
19+
20+
/**
21+
* @since 9.3.0
22+
*/
23+
public class SnomedMrcmConfig {
24+
25+
private String allowedDataAttributesExpression = "<" + Concepts.CONCEPT_MODEL_DATA_ATTRIBUTE;
26+
private String allowedObjectAttributesExpression = "<" + Concepts.CONCEPT_MODEL_OBJECT_ATTRIBUTE;
27+
28+
29+
public String getAllowedDataAttributesExpression() {
30+
return allowedDataAttributesExpression;
31+
}
32+
33+
public void setAllowedDataAttributesExpression(String allowedDataAttributesExpression) {
34+
this.allowedDataAttributesExpression = allowedDataAttributesExpression;
35+
}
36+
37+
public String getAllowedObjectAttributesExpression() {
38+
return allowedObjectAttributesExpression;
39+
}
40+
41+
public void setAllowedObjectAttributesExpression(String allowedObjectAttributesExpression) {
42+
this.allowedObjectAttributesExpression = allowedObjectAttributesExpression;
43+
}
44+
45+
}

snomed/com.b2international.snowowl.snomed.datastore/src/com/b2international/snowowl/snomed/datastore/request/SnomedMrcmTypeRequest.java

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,6 @@
1616
package com.b2international.snowowl.snomed.datastore.request;
1717

1818
import static com.b2international.index.revision.Revision.Fields.ID;
19-
import static com.b2international.snowowl.snomed.common.SnomedConstants.Concepts.CONCEPT_MODEL_DATA_ATTRIBUTE;
20-
import static com.b2international.snowowl.snomed.common.SnomedConstants.Concepts.UNAPPROVED_ATTRIBUTE;
21-
import static com.b2international.snowowl.snomed.common.SnomedConstants.Concepts.CONCEPT_MODEL_OBJECT_ATTRIBUTE;
2219
import static com.b2international.snowowl.snomed.datastore.index.entry.SnomedRefSetMemberIndexEntry.Fields.MRCM_RULE_REFSET_ID;
2320

2421
import java.util.HashSet;
@@ -29,13 +26,17 @@
2926

3027
import com.b2international.commons.options.Options;
3128
import com.b2international.snomed.ecl.Ecl;
29+
import com.b2international.snowowl.core.ApplicationContext;
30+
import com.b2international.snowowl.core.config.SnowOwlConfiguration;
3231
import com.b2international.snowowl.core.domain.BranchContext;
3332
import com.b2international.snowowl.core.request.SearchResourceRequest;
3433
import com.b2international.snowowl.snomed.common.SnomedRf2Headers;
3534
import com.b2international.snowowl.snomed.core.MrcmAttributeType;
3635
import com.b2international.snowowl.snomed.core.domain.SnomedConcept;
3736
import com.b2international.snowowl.snomed.core.domain.refset.SnomedRefSetType;
3837
import com.b2international.snowowl.snomed.core.domain.refset.SnomedReferenceSetMembers;
38+
import com.b2international.snowowl.snomed.datastore.config.SnomedCoreConfiguration;
39+
import com.b2international.snowowl.snomed.datastore.config.SnomedMrcmConfig;
3940
import com.b2international.snowowl.snomed.datastore.index.entry.SnomedConceptDocument;
4041

4142
/**
@@ -89,15 +90,23 @@ public SnomedReferenceSetMembers doExecute(BranchContext context) {
8990

9091
final String eclConstraint;
9192

93+
SnomedMrcmConfig mrcmConfiguration = ApplicationContext.getInstance()
94+
.getServiceChecked(SnowOwlConfiguration.class)
95+
.getModuleConfig(SnomedCoreConfiguration.class)
96+
.getMrcmConfiguration();
97+
98+
String allowedDataAttributesExpression = mrcmConfiguration.getAllowedDataAttributesExpression();
99+
String allowedObjectAttributesExpression = mrcmConfiguration.getAllowedObjectAttributesExpression();
100+
92101
switch (attributeType) {
93102
case DATA:
94-
eclConstraint = String.format("<%s", CONCEPT_MODEL_DATA_ATTRIBUTE);
103+
eclConstraint = allowedDataAttributesExpression;
95104
break;
96105
case OBJECT:
97-
eclConstraint = String.format("<%s OR <%s", CONCEPT_MODEL_OBJECT_ATTRIBUTE, UNAPPROVED_ATTRIBUTE);
106+
eclConstraint = allowedObjectAttributesExpression;
98107
break;
99108
case ALL:
100-
eclConstraint = String.format("<%s OR <%s OR <%s", CONCEPT_MODEL_OBJECT_ATTRIBUTE, UNAPPROVED_ATTRIBUTE, CONCEPT_MODEL_DATA_ATTRIBUTE);
109+
eclConstraint = Ecl.or(allowedDataAttributesExpression, allowedObjectAttributesExpression);
101110
break;
102111
default:
103112
eclConstraint = Ecl.ANY;

0 commit comments

Comments
 (0)