From 6bf2616a3fad8081b3b8c0661027bd6f05e3dfdd Mon Sep 17 00:00:00 2001 From: Minha Date: Mon, 7 Oct 2024 17:53:54 +0200 Subject: [PATCH 1/4] Make language slug available via session metadata --- .../java/org/commcare/util/screen/EntityScreen.java | 8 ++++++-- .../org/commcare/util/screen/EntityScreenContext.java | 9 ++++++++- .../core/process/CommCareInstanceInitializer.java | 8 ++++---- .../java/org/commcare/core/sandbox/SandboxUtils.java | 2 +- .../org/commcare/modern/session/SessionWrapper.java | 8 ++++++-- .../java/org/commcare/session/CommCareSession.java | 11 ++++++++--- .../org/commcare/session/SessionInstanceBuilder.java | 9 ++++++--- .../java/org/commcare/suite/model/StackFrameStep.java | 2 +- src/main/java/org/javarosa/core/model/FormDef.java | 2 +- .../javarosa/core/model/instance/DataInstance.java | 2 +- .../core/model/instance/ExternalDataInstance.java | 4 ++-- .../javarosa/core/model/instance/FormInstance.java | 2 +- .../model/instance/InstanceInitializationFactory.java | 2 +- .../org/javarosa/model/xform/DataModelSerializer.java | 2 +- .../org/javarosa/engine/MockupProviderFactory.java | 2 +- 15 files changed, 48 insertions(+), 25 deletions(-) diff --git a/src/cli/java/org/commcare/util/screen/EntityScreen.java b/src/cli/java/org/commcare/util/screen/EntityScreen.java index 6ef70a4b2d..879c0ce05a 100755 --- a/src/cli/java/org/commcare/util/screen/EntityScreen.java +++ b/src/cli/java/org/commcare/util/screen/EntityScreen.java @@ -243,8 +243,12 @@ protected void setSession(SessionWrapper session) throws CommCareSessionExceptio if (mShortDetail == null) { throw new CommCareSessionException("Missing detail definition for: " + detailId); } - - evalContext = mSession.getEvaluationContext(); + EntityScreenContext context = getEntityScreenContext(); + String locale = null; + if (context != null) { + locale = context.getLocale(); + } + evalContext = mSession.getEvaluationContextWithLocale(locale); } @Trace diff --git a/src/cli/java/org/commcare/util/screen/EntityScreenContext.java b/src/cli/java/org/commcare/util/screen/EntityScreenContext.java index 4a8f5735d7..562963b7d2 100644 --- a/src/cli/java/org/commcare/util/screen/EntityScreenContext.java +++ b/src/cli/java/org/commcare/util/screen/EntityScreenContext.java @@ -9,6 +9,7 @@ public class EntityScreenContext extends ScreenContext{ private final int mSortIndex; private final int mCasesPerPage; private final String[] mSelectedValues; + private final String mLocale; /** * If requesting a case detail will be a case id, else null. When the case id is given it is used to short @@ -20,13 +21,14 @@ public class EntityScreenContext extends ScreenContext{ private final boolean fuzzySearch; public EntityScreenContext(int offset, String searchText, int sortIndex, int casesPerPage, - String[] selectedValues, String detailSelection, boolean isFuzzySearch) { + String[] selectedValues, String locale, String detailSelection, boolean isFuzzySearch) { super(true); mOffSet = offset; mSearchText = searchText; mSortIndex = sortIndex; mCasesPerPage = casesPerPage == 0 ? DEFAULT_CASES_PER_PAGE : casesPerPage; mSelectedValues = selectedValues; + mLocale = locale; mDetailSelection = detailSelection; fuzzySearch = isFuzzySearch; } @@ -42,6 +44,7 @@ public EntityScreenContext(boolean respectRelevancy) { mSortIndex = 0; mCasesPerPage = DEFAULT_CASES_PER_PAGE; mSelectedValues = null; + mLocale = null; mDetailSelection = null; fuzzySearch = false; } @@ -66,6 +69,10 @@ public String[] getSelectedValues() { return mSelectedValues; } + public String getLocale() { + return mLocale; + } + public String getDetailSelection() { return mDetailSelection; } diff --git a/src/main/java/org/commcare/core/process/CommCareInstanceInitializer.java b/src/main/java/org/commcare/core/process/CommCareInstanceInitializer.java index c810046730..165dbbc4d9 100644 --- a/src/main/java/org/commcare/core/process/CommCareInstanceInitializer.java +++ b/src/main/java/org/commcare/core/process/CommCareInstanceInitializer.java @@ -74,7 +74,7 @@ public ExternalDataInstance getSpecializedExternalDataInstance(ExternalDataInsta @Override @Nonnull - public InstanceRoot generateRoot(ExternalDataInstance instance) { + public InstanceRoot generateRoot(ExternalDataInstance instance, String locale) { String ref = instance.getReference(); if (ref.contains(LedgerInstanceTreeElement.MODEL_NAME)) { return setupLedgerData(instance); @@ -83,7 +83,7 @@ public InstanceRoot generateRoot(ExternalDataInstance instance) { } else if (ref.contains("fixture")) { return setupFixtureData(instance); } else if (instance.getReference().contains("session")) { - return setupSessionData(instance); + return setupSessionData(instance, locale); } else if (ref.startsWith(ExternalDataInstance.JR_REMOTE_REFERENCE)) { return setupExternalDataInstance(instance, ref, SessionFrame.STATE_QUERY_REQUEST); } else if (ref.startsWith(JR_SELECTED_ENTITIES_REFERENCE)) { @@ -236,7 +236,7 @@ protected TreeElement loadFixtureRoot(ExternalDataInstance instance, } } - protected InstanceRoot setupSessionData(ExternalDataInstance instance) { + protected InstanceRoot setupSessionData(ExternalDataInstance instance, String locale) { if (this.mPlatform == null) { throw new RuntimeException("Cannot generate session instance with undeclared platform!"); } @@ -244,7 +244,7 @@ protected InstanceRoot setupSessionData(ExternalDataInstance instance) { TreeElement root = SessionInstanceBuilder.getSessionInstance(sessionWrapper.getFrame(), getDeviceId(), getVersionString(), getCurrentDrift(), u.getUsername(), u.getUniqueId(), - u.getProperties(), getWindowWidth()); + u.getProperties(), getWindowWidth(), locale); root.setParent(instance.getBase()); return new ConcreteInstanceRoot(root); } diff --git a/src/main/java/org/commcare/core/sandbox/SandboxUtils.java b/src/main/java/org/commcare/core/sandbox/SandboxUtils.java index b96576bc53..9c99b979ed 100644 --- a/src/main/java/org/commcare/core/sandbox/SandboxUtils.java +++ b/src/main/java/org/commcare/core/sandbox/SandboxUtils.java @@ -34,7 +34,7 @@ public static EvaluationContext getInstanceContexts(UserSandbox sandbox, String Hashtable instances = new Hashtable<>(); ExternalDataInstance edi = new ExternalDataInstance(instanceRef, instanceId); - edi.initialize(iif, instanceId); + edi.initialize(iif, instanceId, null); instances.put(instanceId, edi); return new EvaluationContext(null, instances); diff --git a/src/main/java/org/commcare/modern/session/SessionWrapper.java b/src/main/java/org/commcare/modern/session/SessionWrapper.java index 53c205da03..3885a328ef 100644 --- a/src/main/java/org/commcare/modern/session/SessionWrapper.java +++ b/src/main/java/org/commcare/modern/session/SessionWrapper.java @@ -63,10 +63,14 @@ public EvaluationContext getEvaluationContext() { return getEvaluationContext(getIIF()); } + public EvaluationContext getEvaluationContextWithLocale(String locale) { + return getEvaluationContext(getIIF(), locale); + } + @Override public EvaluationContext getRestrictedEvaluationContext(String commandId, Set instancesToInclude) { - return getEvaluationContext(getIIF(), commandId, instancesToInclude); + return getEvaluationContext(getIIF(), commandId, instancesToInclude, null); } @Override @@ -81,7 +85,7 @@ public EvaluationContext getEvaluationContextWithAccumulatedInstances(String com * @return The evaluation context relevant for the provided command id */ public EvaluationContext getEvaluationContext(String commandId) { - return getEvaluationContext(getIIF(), commandId, null); + return getEvaluationContext(getIIF(), commandId, null, null); } public CommCareInstanceInitializer getIIF() { diff --git a/src/main/java/org/commcare/session/CommCareSession.java b/src/main/java/org/commcare/session/CommCareSession.java index 76b5cb7bcd..312881e973 100644 --- a/src/main/java/org/commcare/session/CommCareSession.java +++ b/src/main/java/org/commcare/session/CommCareSession.java @@ -614,7 +614,11 @@ public void clearAllState() { * @return Evaluation context for current session state */ public EvaluationContext getEvaluationContext(InstanceInitializationFactory iif) { - return this.getEvaluationContext(iif, getCommand(), null); + return this.getEvaluationContext(iif, getCommand(), null, null); + } + + public EvaluationContext getEvaluationContext(InstanceInitializationFactory iif, String locale) { + return this.getEvaluationContext(iif, getCommand(), null, locale); } /** @@ -626,7 +630,8 @@ public EvaluationContext getEvaluationContext(InstanceInitializationFactory iif) */ public EvaluationContext getEvaluationContext(InstanceInitializationFactory iif, String command, - Set instancesToInclude) { + Set instancesToInclude, + String locale) { if (command == null) { return new EvaluationContext(null); } @@ -661,7 +666,7 @@ public EvaluationContext getEvaluationContext(InstanceInitializationFactory iif, for (Enumeration en = instancesInScope.keys(); en.hasMoreElements(); ) { String key = (String)en.nextElement(); - instancesInScope.put(key, instancesInScope.get(key).initialize(iif, key)); + instancesInScope.put(key, instancesInScope.get(key).initialize(iif, key, locale)); } addInstancesFromFrame(instancesInScope, iif); diff --git a/src/main/java/org/commcare/session/SessionInstanceBuilder.java b/src/main/java/org/commcare/session/SessionInstanceBuilder.java index 060677d9bd..a638f88114 100644 --- a/src/main/java/org/commcare/session/SessionInstanceBuilder.java +++ b/src/main/java/org/commcare/session/SessionInstanceBuilder.java @@ -17,11 +17,12 @@ public class SessionInstanceBuilder { public static TreeElement getSessionInstance(SessionFrame frame, String deviceId, String appversion, long drift, String username, String userId, - Hashtable userFields, String windowWidth) { + Hashtable userFields, String windowWidth, + String applanguage) { TreeElement sessionRoot = new TreeElement("session", 0); addSessionNavData(sessionRoot, frame); - addMetadata(sessionRoot, deviceId, appversion, username, userId, drift, windowWidth); + addMetadata(sessionRoot, deviceId, appversion, username, userId, drift, windowWidth, applanguage); addUserProperties(sessionRoot, userFields); return sessionRoot; @@ -88,7 +89,8 @@ private static String getCalloutSearchResultCount(StackFrameStep step) { private static void addMetadata(TreeElement sessionRoot, String deviceId, String appversion, String username, - String userId, long drift, String windowWidth) { + String userId, long drift, String windowWidth, + String applanguage) { TreeElement sessionMeta = new TreeElement("context", 0); addData(sessionMeta, "deviceid", deviceId); @@ -97,6 +99,7 @@ private static void addMetadata(TreeElement sessionRoot, String deviceId, addData(sessionMeta, "userid", userId); addData(sessionMeta, "drift", String.valueOf(drift)); addData(sessionMeta, "window_width", windowWidth); + addData(sessionMeta, "applanguage", applanguage); sessionRoot.addChild(sessionMeta); } diff --git a/src/main/java/org/commcare/suite/model/StackFrameStep.java b/src/main/java/org/commcare/suite/model/StackFrameStep.java index 9ef331801d..74d5ecc787 100644 --- a/src/main/java/org/commcare/suite/model/StackFrameStep.java +++ b/src/main/java/org/commcare/suite/model/StackFrameStep.java @@ -148,7 +148,7 @@ public Map getInstances(InstanceInitializationFactory iif) HashMap instances = new HashMap<>(); for (ExternalDataInstanceSource source : dataInstanceSources.values()) { ExternalDataInstance instance = (ExternalDataInstance)source.toInstance() - .initialize(iif, source.getInstanceId()); + .initialize(iif, source.getInstanceId(), null); instances.put(instance.getInstanceId(), instance); } return instances; diff --git a/src/main/java/org/javarosa/core/model/FormDef.java b/src/main/java/org/javarosa/core/model/FormDef.java index 30b86e31b2..167b02ff9c 100755 --- a/src/main/java/org/javarosa/core/model/FormDef.java +++ b/src/main/java/org/javarosa/core/model/FormDef.java @@ -1451,7 +1451,7 @@ public void initialize(boolean newInstance, boolean isCompletedInstance, Instanc for (Enumeration en = formInstances.keys(); en.hasMoreElements(); ) { String instanceId = (String)en.nextElement(); DataInstance instance = formInstances.get(instanceId); - formInstances.put(instanceId, instance.initialize(factory, instanceId)); + formInstances.put(instanceId, instance.initialize(factory, instanceId, null)); } setEvaluationContext(this.exprEvalContext); diff --git a/src/main/java/org/javarosa/core/model/instance/DataInstance.java b/src/main/java/org/javarosa/core/model/instance/DataInstance.java index 7b1382d47c..9b4a9c026a 100644 --- a/src/main/java/org/javarosa/core/model/instance/DataInstance.java +++ b/src/main/java/org/javarosa/core/model/instance/DataInstance.java @@ -283,7 +283,7 @@ public void setID(int recordid) { this.recordid = recordid; } - public abstract DataInstance initialize(InstanceInitializationFactory initializer, String instanceId); + public abstract DataInstance initialize(InstanceInitializationFactory initializer, String instanceId, String locale); public CacheHost getCacheHost() { return mCacheHost; diff --git a/src/main/java/org/javarosa/core/model/instance/ExternalDataInstance.java b/src/main/java/org/javarosa/core/model/instance/ExternalDataInstance.java index 4d4a0bd3ac..69a16ce3ff 100644 --- a/src/main/java/org/javarosa/core/model/instance/ExternalDataInstance.java +++ b/src/main/java/org/javarosa/core/model/instance/ExternalDataInstance.java @@ -137,9 +137,9 @@ public void writeExternal(DataOutputStream out) throws IOException { } @Override - public DataInstance initialize(InstanceInitializationFactory initializer, String instanceId) { + public DataInstance initialize(InstanceInitializationFactory initializer, String instanceId, String locale) { base = new InstanceBase(instanceId); - InstanceRoot instanceRoot = initializer.generateRoot(this); + InstanceRoot instanceRoot = initializer.generateRoot(this, locale); // this indirectly calls `this.copyFromSource` via the InstanceRoot so that we call the // correct method based on the type instanceRoot.setupNewCopy(this); diff --git a/src/main/java/org/javarosa/core/model/instance/FormInstance.java b/src/main/java/org/javarosa/core/model/instance/FormInstance.java index fef23d147d..7a87795da5 100644 --- a/src/main/java/org/javarosa/core/model/instance/FormInstance.java +++ b/src/main/java/org/javarosa/core/model/instance/FormInstance.java @@ -245,7 +245,7 @@ public static boolean isHomogeneous(TreeElement a, TreeElement b) { } @Override - public DataInstance initialize(InstanceInitializationFactory initializer, String instanceId) { + public DataInstance initialize(InstanceInitializationFactory initializer, String instanceId, String locale) { this.instanceid = instanceId; root.setInstanceName(instanceId); diff --git a/src/main/java/org/javarosa/core/model/instance/InstanceInitializationFactory.java b/src/main/java/org/javarosa/core/model/instance/InstanceInitializationFactory.java index f22c9627a4..47f5bac03f 100644 --- a/src/main/java/org/javarosa/core/model/instance/InstanceInitializationFactory.java +++ b/src/main/java/org/javarosa/core/model/instance/InstanceInitializationFactory.java @@ -17,7 +17,7 @@ public ExternalDataInstance getSpecializedExternalDataInstance(ExternalDataInsta } @Nonnull - public InstanceRoot generateRoot(ExternalDataInstance instance) { + public InstanceRoot generateRoot(ExternalDataInstance instance, String locale) { return ConcreteInstanceRoot.NULL; } } diff --git a/src/main/java/org/javarosa/model/xform/DataModelSerializer.java b/src/main/java/org/javarosa/model/xform/DataModelSerializer.java index 387640ac5f..54f5e5e4da 100644 --- a/src/main/java/org/javarosa/model/xform/DataModelSerializer.java +++ b/src/main/java/org/javarosa/model/xform/DataModelSerializer.java @@ -33,7 +33,7 @@ public DataModelSerializer(KXmlSerializer serializer) { } public void serialize(ExternalDataInstance instance, TreeReference base) throws IOException { - DataInstance specializedInstance = instance.initialize(factory, instance.getInstanceId()); + DataInstance specializedInstance = instance.initialize(factory, instance.getInstanceId(),null); serialize(specializedInstance, base); } diff --git a/src/translate/java/org/javarosa/engine/MockupProviderFactory.java b/src/translate/java/org/javarosa/engine/MockupProviderFactory.java index 4a2eb209c6..5c09a0e33a 100644 --- a/src/translate/java/org/javarosa/engine/MockupProviderFactory.java +++ b/src/translate/java/org/javarosa/engine/MockupProviderFactory.java @@ -29,7 +29,7 @@ public ExternalDataInstance getSpecializedExternalDataInstance(ExternalDataInsta } @Override - public InstanceRoot generateRoot(ExternalDataInstance instance) { + public InstanceRoot generateRoot(ExternalDataInstance instance, String locale) { String ref = instance.getReference(); if(instances.containsKey(ref)) { From de61922fa4158b59de44705a8ab2cded3651610d Mon Sep 17 00:00:00 2001 From: Minha Date: Thu, 10 Oct 2024 14:03:31 +0200 Subject: [PATCH 2/4] Provide null value to edi.initialize function --- src/cli/java/org/commcare/util/mocks/MockDataUtils.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cli/java/org/commcare/util/mocks/MockDataUtils.java b/src/cli/java/org/commcare/util/mocks/MockDataUtils.java index 60a15ef214..b4850eb6c9 100644 --- a/src/cli/java/org/commcare/util/mocks/MockDataUtils.java +++ b/src/cli/java/org/commcare/util/mocks/MockDataUtils.java @@ -48,7 +48,7 @@ public static EvaluationContext buildContextWithInstances(UserSandbox sandbox, String instanceId = instanceRefToId.get(instanceRef); ExternalDataInstance edi = new ExternalDataInstance(instanceRef, instanceId); - instances.put(instanceId, edi.initialize(iif, instanceId)); + instances.put(instanceId, edi.initialize(iif, instanceId, null)); } return new EvaluationContext(null, instances); From f6f3b1aa66532098968d468c36282f15c53dffb9 Mon Sep 17 00:00:00 2001 From: Minha Date: Thu, 10 Oct 2024 14:18:24 +0200 Subject: [PATCH 3/4] Fix tests --- .../commcare/backend/suite/model/test/QueryModelTests.java | 4 ++-- .../org/commcare/test/utilities/TestInstanceInitializer.java | 2 +- .../instance/test/DummyInstanceInitializationFactory.java | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/test/java/org/commcare/backend/suite/model/test/QueryModelTests.java b/src/test/java/org/commcare/backend/suite/model/test/QueryModelTests.java index a71191b5cf..9daf61d4e0 100644 --- a/src/test/java/org/commcare/backend/suite/model/test/QueryModelTests.java +++ b/src/test/java/org/commcare/backend/suite/model/test/QueryModelTests.java @@ -78,12 +78,12 @@ public void testScreenCreatesVirtualInstance() throws Exception { // test loading instance with new ref ExternalDataInstance instance = new ExternalDataInstance("jr://instance/search-input/registry1", "custom-id"); - Assert.assertNotNull(session.getIIF().generateRoot(instance).getRoot()); + Assert.assertNotNull(session.getIIF().generateRoot(instance, null).getRoot()); // test that we can still load instances using the legacy ref ExternalDataInstance legacyInstance = new ExternalDataInstance("jr://instance/search-input", "search-input:registry1"); - Assert.assertNotNull(session.getIIF().generateRoot(legacyInstance).getRoot()); + Assert.assertNotNull(session.getIIF().generateRoot(legacyInstance, null).getRoot()); } @NotNull diff --git a/src/test/java/org/commcare/test/utilities/TestInstanceInitializer.java b/src/test/java/org/commcare/test/utilities/TestInstanceInitializer.java index 00e83a8997..6ed5c96e99 100644 --- a/src/test/java/org/commcare/test/utilities/TestInstanceInitializer.java +++ b/src/test/java/org/commcare/test/utilities/TestInstanceInitializer.java @@ -31,7 +31,7 @@ public ExternalDataInstance getSpecializedExternalDataInstance(ExternalDataInsta } @Override - public InstanceRoot generateRoot(ExternalDataInstance instance) { + public InstanceRoot generateRoot(ExternalDataInstance instance, String locale) { String ref = instance.getReference(); if (ref.contains(CaseInstanceTreeElement.MODEL_NAME)) { CaseInstanceTreeElement root = new CaseInstanceTreeElement(instance.getBase(), sandbox.getCaseStorage()); diff --git a/src/test/java/org/javarosa/core/model/instance/test/DummyInstanceInitializationFactory.java b/src/test/java/org/javarosa/core/model/instance/test/DummyInstanceInitializationFactory.java index c70ba9b2ab..07eacf0c27 100644 --- a/src/test/java/org/javarosa/core/model/instance/test/DummyInstanceInitializationFactory.java +++ b/src/test/java/org/javarosa/core/model/instance/test/DummyInstanceInitializationFactory.java @@ -18,7 +18,7 @@ public ExternalDataInstance getSpecializedExternalDataInstance(ExternalDataInsta return instance; } @Override - public InstanceRoot generateRoot(ExternalDataInstance instance) { + public InstanceRoot generateRoot(ExternalDataInstance instance, String locale) { throw new RuntimeException("Loading external instances isn't supported " + "using this instance initialization factory."); } From cf44f92059a772dd28484591046fd2ac6dce3698 Mon Sep 17 00:00:00 2001 From: Minha Date: Thu, 10 Oct 2024 18:30:17 +0200 Subject: [PATCH 4/4] Refactor initialization functions for DataInstance (and dervied classes) to avoid putting so many null values into argument lists --- src/cli/java/org/commcare/util/mocks/MockDataUtils.java | 2 +- src/main/java/org/commcare/core/sandbox/SandboxUtils.java | 2 +- src/main/java/org/commcare/suite/model/StackFrameStep.java | 2 +- .../javarosa/core/model/instance/ExternalDataInstance.java | 4 ++++ .../java/org/javarosa/core/model/instance/FormInstance.java | 4 ++++ .../java/org/javarosa/model/xform/DataModelSerializer.java | 2 +- 6 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/cli/java/org/commcare/util/mocks/MockDataUtils.java b/src/cli/java/org/commcare/util/mocks/MockDataUtils.java index b4850eb6c9..60a15ef214 100644 --- a/src/cli/java/org/commcare/util/mocks/MockDataUtils.java +++ b/src/cli/java/org/commcare/util/mocks/MockDataUtils.java @@ -48,7 +48,7 @@ public static EvaluationContext buildContextWithInstances(UserSandbox sandbox, String instanceId = instanceRefToId.get(instanceRef); ExternalDataInstance edi = new ExternalDataInstance(instanceRef, instanceId); - instances.put(instanceId, edi.initialize(iif, instanceId, null)); + instances.put(instanceId, edi.initialize(iif, instanceId)); } return new EvaluationContext(null, instances); diff --git a/src/main/java/org/commcare/core/sandbox/SandboxUtils.java b/src/main/java/org/commcare/core/sandbox/SandboxUtils.java index 9c99b979ed..b96576bc53 100644 --- a/src/main/java/org/commcare/core/sandbox/SandboxUtils.java +++ b/src/main/java/org/commcare/core/sandbox/SandboxUtils.java @@ -34,7 +34,7 @@ public static EvaluationContext getInstanceContexts(UserSandbox sandbox, String Hashtable instances = new Hashtable<>(); ExternalDataInstance edi = new ExternalDataInstance(instanceRef, instanceId); - edi.initialize(iif, instanceId, null); + edi.initialize(iif, instanceId); instances.put(instanceId, edi); return new EvaluationContext(null, instances); diff --git a/src/main/java/org/commcare/suite/model/StackFrameStep.java b/src/main/java/org/commcare/suite/model/StackFrameStep.java index 74d5ecc787..9ef331801d 100644 --- a/src/main/java/org/commcare/suite/model/StackFrameStep.java +++ b/src/main/java/org/commcare/suite/model/StackFrameStep.java @@ -148,7 +148,7 @@ public Map getInstances(InstanceInitializationFactory iif) HashMap instances = new HashMap<>(); for (ExternalDataInstanceSource source : dataInstanceSources.values()) { ExternalDataInstance instance = (ExternalDataInstance)source.toInstance() - .initialize(iif, source.getInstanceId(), null); + .initialize(iif, source.getInstanceId()); instances.put(instance.getInstanceId(), instance); } return instances; diff --git a/src/main/java/org/javarosa/core/model/instance/ExternalDataInstance.java b/src/main/java/org/javarosa/core/model/instance/ExternalDataInstance.java index 69a16ce3ff..af955a63ef 100644 --- a/src/main/java/org/javarosa/core/model/instance/ExternalDataInstance.java +++ b/src/main/java/org/javarosa/core/model/instance/ExternalDataInstance.java @@ -146,6 +146,10 @@ public DataInstance initialize(InstanceInitializationFactory initializer, String return initializer.getSpecializedExternalDataInstance(this); } + public DataInstance initialize(InstanceInitializationFactory initializer, String instanceId) { + return initialize(initializer, instanceId, null); + } + public void copyFromSource(InstanceRoot instanceRoot) { root = instanceRoot.getRoot(); base.setChild(root); diff --git a/src/main/java/org/javarosa/core/model/instance/FormInstance.java b/src/main/java/org/javarosa/core/model/instance/FormInstance.java index 7a87795da5..462a6b098f 100644 --- a/src/main/java/org/javarosa/core/model/instance/FormInstance.java +++ b/src/main/java/org/javarosa/core/model/instance/FormInstance.java @@ -252,6 +252,10 @@ public DataInstance initialize(InstanceInitializationFactory initializer, String return this; } + public DataInstance initialize(InstanceInitializationFactory initializer, String instanceId) { + return initialize(initializer, instanceId, null); + } + @Override public String[] getMetaDataFields() { return new String[]{META_XMLNS, META_ID}; diff --git a/src/main/java/org/javarosa/model/xform/DataModelSerializer.java b/src/main/java/org/javarosa/model/xform/DataModelSerializer.java index 54f5e5e4da..387640ac5f 100644 --- a/src/main/java/org/javarosa/model/xform/DataModelSerializer.java +++ b/src/main/java/org/javarosa/model/xform/DataModelSerializer.java @@ -33,7 +33,7 @@ public DataModelSerializer(KXmlSerializer serializer) { } public void serialize(ExternalDataInstance instance, TreeReference base) throws IOException { - DataInstance specializedInstance = instance.initialize(factory, instance.getInstanceId(),null); + DataInstance specializedInstance = instance.initialize(factory, instance.getInstanceId()); serialize(specializedInstance, base); }