Skip to content

Commit

Permalink
Merge pull request #780 from seadowg/initialization-order
Browse files Browse the repository at this point in the history
Use same initialization order in Scenario as Collect
  • Loading branch information
seadowg committed Jul 16, 2024
2 parents be1508c + 6622a5f commit b858d25
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 18 deletions.
9 changes: 9 additions & 0 deletions src/main/java/org/javarosa/core/model/FormDef.java
Original file line number Diff line number Diff line change
Expand Up @@ -1629,11 +1629,20 @@ public Extras<Externalizable> getExtras() {
return extras;
}

/**
* @deprecated use {@link FormEntryController#addFilterStrategy(FilterStrategy)} instead
*/
@Deprecated
public void addFilterStrategy(FilterStrategy filterStrategy) {
customFilterStrategies.add(filterStrategy);
resetEvaluationContext();
}


/**
* @deprecated use {@link FormEntryController#addFunctionHandler(IFunctionHandler)} instead
*/
@Deprecated
public void addFunctionHandler(IFunctionHandler functionHandler) {
customFunctionHandlers.add(functionHandler);
resetEvaluationContext();
Expand Down
55 changes: 37 additions & 18 deletions src/main/java/org/javarosa/test/Scenario.java
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@
import java.util.List;
import java.util.Optional;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;

Expand Down Expand Up @@ -133,18 +134,29 @@ public class Scenario {
private EvaluationContext evaluationContext;
private FormEntryModel model;
private final FormInstance blankInstance;
private final Function<FormDef, FormEntryController> controllerSupplier;

private Scenario(FormDef formDef, FormEntryController controller, FormEntryModel model, EvaluationContext evaluationContext, FormInstance blankInstance) {
private Scenario(FormDef formDef, Function<FormDef, FormEntryController> controllerSupplier, EvaluationContext evaluationContext, FormInstance blankInstance) {
this.formDef = formDef;
this.controller = controller;
this.controllerSupplier = controllerSupplier;
this.evaluationContext = evaluationContext;
this.model = model;
this.blankInstance = blankInstance;
}

private static Scenario from(FormDef formDef) {
FormEntryModel formEntryModel = new FormEntryModel(formDef);
return new Scenario(formDef, new FormEntryController(formEntryModel), formEntryModel, formDef.getEvaluationContext(), formDef.getMainInstance().clone());
private static Scenario from(FormDef formDef, boolean newInstance) {
return from(formDef, newInstance, formDef1 -> new FormEntryController(new FormEntryModel(formDef1)));
}

private static Scenario from(FormDef formDef, boolean newInstance, Function<FormDef, FormEntryController> controllerSupplier) {
Scenario scenario = new Scenario(formDef, controllerSupplier, formDef.getEvaluationContext(), formDef.getMainInstance().clone());
scenario.init(newInstance);
return scenario;
}

public void init(boolean newInstance) {
controller = controllerSupplier.apply(formDef);
model = controller.getModel();
formDef.initialize(newInstance, new InstanceInitializationFactory());
}

// region Miscellaneous
Expand Down Expand Up @@ -227,10 +239,8 @@ public static TreeReference getRef(String xpath) {
*/
public void newInstance() {
formDef.setInstance(blankInstance.clone());
formDef.initialize(true, new InstanceInitializationFactory());
init(true);
evaluationContext = formDef.getEvaluationContext();
model = new FormEntryModel(formDef);
controller = new FormEntryController(model);
}

/**
Expand Down Expand Up @@ -274,8 +284,7 @@ public Scenario serializeAndDeserializeForm() throws IOException, Deserializatio
);

tempFile.delete();
deserializedFormDef.initialize(false, new InstanceInitializationFactory());
return Scenario.from(deserializedFormDef);
return Scenario.from(deserializedFormDef, false);
}

// The fact that we need to pass in the same raw form definition that the current scenario is built around suggests
Expand All @@ -293,9 +302,7 @@ public Scenario serializeAndDeserializeInstance(XFormsElement form) throws IOExc
XFormParser parser = new XFormParser(formReader, instanceReader);
FormDef restoredFormDef = parser.parse();

Scenario restored = Scenario.from(restoredFormDef);

return restored;
return Scenario.from(restoredFormDef, false);
}

/**
Expand Down Expand Up @@ -437,6 +444,15 @@ public static Scenario init(String formName, XFormsElement form) throws IOExcept
return Scenario.init(formFile);
}

public static Scenario init(String formName, XFormsElement form, Function<FormDef, FormEntryController> controllerSupplier) throws IOException, XFormParser.ParseException {
File tempDir = TempFileUtils.createTempDir("javarosa");
File formFile = TempFileUtils.createTempFile(tempDir, formName, "xml");
String xml = form.asXml();
System.out.println(xml);
FileUtils.write(formFile, xml, UTF_8);
return Scenario.init(formFile, controllerSupplier);
}

public static FormDef createFormDef(String formName, XFormsElement form) throws IOException, XFormParser.ParseException {
File tempDir = TempFileUtils.createTempDir("javarosa");
File formFile = TempFileUtils.createTempFile(tempDir, formName, "xml");
Expand All @@ -460,13 +476,16 @@ public static Scenario init(String formFileName) throws XFormParser.ParseExcepti
*/
public static Scenario init(File formFile) throws XFormParser.ParseException {
FormDef formDef = createFormDef(formFile);
formDef.initialize(true, new InstanceInitializationFactory());
return Scenario.from(formDef);
return Scenario.from(formDef, true);
}

private static Scenario init(File formFile, Function<FormDef, FormEntryController> controllerSupplier) throws XFormParser.ParseException {
FormDef formDef = createFormDef(formFile);
return Scenario.from(formDef, true, controllerSupplier);
}

public static Scenario init(FormDef formDef) throws XFormParser.ParseException {
formDef.initialize(true, new InstanceInitializationFactory());
return Scenario.from(formDef);
return Scenario.from(formDef, true);
}

@NotNull
Expand Down

0 comments on commit b858d25

Please sign in to comment.