Skip to content

Commit e0f54c1

Browse files
committed
Add support for not eq expressions
1 parent 4086718 commit e0f54c1

File tree

2 files changed

+53
-11
lines changed

2 files changed

+53
-11
lines changed

entities/src/main/java/org/odk/collect/entities/javarosa/filter/LocalEntitiesFilterStrategy.kt

+15-11
Original file line numberDiff line numberDiff line change
@@ -39,23 +39,27 @@ class LocalEntitiesFilterStrategy(entitiesRepository: EntitiesRepository) :
3939
val candidate = CompareToNodeExpression.parse(predicate)
4040
return when (val original = candidate?.original) {
4141
is XPathEqExpr -> {
42-
if (original.isEqual) {
43-
val child = candidate.nodeSide.steps[0].name.name
44-
val value = candidate.evalContextSide(sourceInstance, evaluationContext)
42+
val child = candidate.nodeSide.steps[0].name.name
43+
val value = candidate.evalContextSide(sourceInstance, evaluationContext)
4544

46-
val results = instanceAdapter.queryEq(
45+
val results = if (original.isEqual) {
46+
instanceAdapter.queryEq(
4747
sourceInstance.instanceId,
4848
child,
4949
value as String
5050
)
51-
52-
sourceInstance.replacePartialElements(results)
53-
results.map {
54-
it.parent = sourceInstance.root
55-
it.ref
56-
}
5751
} else {
58-
next.get()
52+
instanceAdapter.queryNotEq(
53+
sourceInstance.instanceId,
54+
child,
55+
value as String
56+
)
57+
}
58+
59+
//sourceInstance.replacePartialElements(results)
60+
results.map {
61+
it.parent = sourceInstance.root
62+
it.ref
5963
}
6064
}
6165

entities/src/main/java/org/odk/collect/entities/javarosa/intance/LocalEntitiesInstanceAdapter.kt

+38
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,44 @@ class LocalEntitiesInstanceAdapter(private val entitiesRepository: EntitiesRepos
8181
}
8282
}
8383

84+
fun queryNotEq(instanceId: String, child: String, value: String): List<TreeElement> {
85+
return when (child) {
86+
EntityItemElement.ID -> {
87+
filterAndConvertEntities(instanceId) { it.id != value }
88+
}
89+
90+
EntityItemElement.LABEL -> {
91+
filterAndConvertEntities(instanceId) { it.label != value }
92+
}
93+
94+
EntityItemElement.VERSION -> {
95+
filterAndConvertEntities(instanceId) { it.version != value.toInt() }
96+
}
97+
98+
EntityItemElement.TRUNK_VERSION -> {
99+
filterAndConvertEntities(instanceId) { it.trunkVersion != value.toInt() }
100+
}
101+
102+
EntityItemElement.BRANCH_ID -> {
103+
filterAndConvertEntities(instanceId) { it.branchId != value }
104+
}
105+
106+
else -> {
107+
val allEntities = entitiesRepository.getEntities(instanceId)
108+
109+
val entities = entitiesRepository.getAllByProperty(
110+
instanceId,
111+
child,
112+
value
113+
)
114+
115+
allEntities
116+
.filterNot { it in entities }
117+
.map { convertToElement(it) }
118+
}
119+
}
120+
}
121+
84122
private fun filterAndConvertEntities(
85123
list: String,
86124
filter: (Entity.Saved) -> Boolean

0 commit comments

Comments
 (0)