File tree 2 files changed +53
-11
lines changed
entities/src/main/java/org/odk/collect/entities/javarosa
2 files changed +53
-11
lines changed Original file line number Diff line number Diff line change @@ -39,23 +39,27 @@ class LocalEntitiesFilterStrategy(entitiesRepository: EntitiesRepository) :
39
39
val candidate = CompareToNodeExpression .parse(predicate)
40
40
return when (val original = candidate?.original) {
41
41
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)
45
44
46
- val results = instanceAdapter.queryEq(
45
+ val results = if (original.isEqual) {
46
+ instanceAdapter.queryEq(
47
47
sourceInstance.instanceId,
48
48
child,
49
49
value as String
50
50
)
51
-
52
- sourceInstance.replacePartialElements(results)
53
- results.map {
54
- it.parent = sourceInstance.root
55
- it.ref
56
- }
57
51
} 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
59
63
}
60
64
}
61
65
Original file line number Diff line number Diff line change @@ -81,6 +81,44 @@ class LocalEntitiesInstanceAdapter(private val entitiesRepository: EntitiesRepos
81
81
}
82
82
}
83
83
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
+
84
122
private fun filterAndConvertEntities (
85
123
list : String ,
86
124
filter : (Entity .Saved ) -> Boolean
You can’t perform that action at this time.
0 commit comments