Skip to content

Commit decbefa

Browse files
committed
use the case search storage to get the case name if user sandbox does not contain the case
1 parent 5810bba commit decbefa

4 files changed

Lines changed: 34 additions & 3 deletions

File tree

src/cli/java/org/commcare/util/screen/EntityScreen.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.commcare.util.screen;
22

33
import org.commcare.cases.entity.EntityUtil;
4+
import org.commcare.cases.model.Case;
45
import org.commcare.cases.query.QueryContext;
56
import org.commcare.cases.query.queryset.CurrentModelQuerySet;
67
import org.commcare.core.interfaces.UserSandbox;
@@ -18,6 +19,7 @@
1819
import org.javarosa.core.model.instance.TreeReference;
1920
import org.javarosa.core.model.trace.EvaluationTraceReporter;
2021
import org.javarosa.core.model.utils.InstrumentationUtils;
22+
import org.javarosa.core.services.storage.IStorageUtilityIndexed;
2123
import org.javarosa.core.util.NoLocalizedTextException;
2224

2325
import java.util.Hashtable;
@@ -258,7 +260,9 @@ public String getScreenTitle() {
258260

259261
@Override
260262
public String getBreadcrumb(String input, UserSandbox sandbox, SessionWrapper session) {
261-
String caseName = FormDataUtil.getCaseName(sandbox, input);
263+
QueryScreen queryScreen = this.getQueryScreen();
264+
IStorageUtilityIndexed<Case> caseSearchStorage = queryScreen != null ? queryScreen.getCaseSearchStorage() : null;
265+
String caseName = FormDataUtil.getCaseName(sandbox, caseSearchStorage, input);
262266
return caseName == null ? ScreenUtils.getBestTitle(session) : caseName;
263267
}
264268

src/cli/java/org/commcare/util/screen/MultiSelectEntityScreen.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
import com.google.common.collect.ImmutableMap;
77

8+
import org.commcare.cases.model.Case;
89
import org.commcare.core.interfaces.UserSandbox;
910
import org.commcare.core.interfaces.VirtualDataInstanceStorage;
1011
import org.commcare.data.xml.VirtualInstances;
@@ -20,6 +21,7 @@
2021
import org.javarosa.core.model.instance.ExternalDataInstanceSource;
2122
import org.javarosa.core.model.instance.TreeReference;
2223
import org.javarosa.core.services.locale.Localization;
24+
import org.javarosa.core.services.storage.IStorageUtilityIndexed;
2325
import org.javarosa.core.util.NoLocalizedTextException;
2426

2527
import javax.annotation.Nonnull;
@@ -230,7 +232,10 @@ public String getBreadcrumb(String input, UserSandbox sandbox, SessionWrapper se
230232
int caseCount = root.getNumChildren();
231233
if (caseCount > 0) {
232234
String caseId = root.getChildAt(0).getValue().getDisplayText();
233-
String caseName = FormDataUtil.getCaseName(sandbox, caseId);
235+
String caseName = null;
236+
QueryScreen queryScreen = this.getQueryScreen();
237+
IStorageUtilityIndexed<Case> caseSearchStorage = queryScreen != null ? queryScreen.getCaseSearchStorage() : null;
238+
caseName = FormDataUtil.getCaseName(sandbox, caseSearchStorage, caseId);
234239
if (caseName != null) {
235240
if (caseCount > 1) {
236241
return "(" + caseCount + ") " + caseName + ", ...";

src/cli/java/org/commcare/util/screen/QueryScreen.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626
import org.javarosa.core.util.NoLocalizedTextException;
2727
import org.javarosa.core.util.OrderedHashtable;
2828
import org.javarosa.core.services.storage.IStorageUtilityIndexed;
29-
import org.commcare.cases.model.Case;
3029

3130
import java.io.InputStream;
3231
import java.io.PrintStream;
@@ -67,6 +66,8 @@ public class QueryScreen extends Screen {
6766
private boolean dynamicSearch;
6867
private boolean searchOnClear;
6968

69+
private IStorageUtilityIndexed<Case> caseSearchStorage;
70+
7071
public QueryScreen(String domainedUsername, String password, PrintStream out,
7172
VirtualDataInstanceStorage instanceStorage, SessionUtils sessionUtils) {
7273
this.domainedUsername = domainedUsername;

src/main/java/org/commcare/util/FormDataUtil.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import org.commcare.suite.model.Text;
1111
import org.javarosa.core.model.condition.EvaluationContext;
1212
import org.javarosa.core.model.instance.TreeReference;
13+
import org.javarosa.core.services.storage.IStorageUtilityIndexed;
1314

1415
/**
1516
* Use the session state descriptor attached to saved forms to load case
@@ -104,4 +105,24 @@ public static String getCaseName(UserSandbox userSandbox, String caseId) {
104105
return null;
105106
}
106107
}
108+
109+
public static String getCaseName(UserSandbox userSandbox, IStorageUtilityIndexed<Case> caseSearchStorage, String caseId) {
110+
String caseName = getCaseName(userSandbox, caseId);
111+
if (caseName != null) {
112+
return caseName;
113+
}
114+
115+
if (caseSearchStorage != null && caseSearchStorage.isStorageExists()) {
116+
try {
117+
Case ourCase = caseSearchStorage.getRecordForValue(Case.INDEX_CASE_ID, caseId);
118+
if (ourCase != null) {
119+
return ourCase.getName();
120+
}
121+
} catch (Exception searchException) {
122+
return null;
123+
}
124+
}
125+
126+
return null;
127+
}
107128
}

0 commit comments

Comments
 (0)