diff --git a/src/main/java/org/javarosa/entities/Entity.java b/src/main/java/org/javarosa/entities/Entity.java index c0fb3c1aa..9e67067e1 100644 --- a/src/main/java/org/javarosa/entities/Entity.java +++ b/src/main/java/org/javarosa/entities/Entity.java @@ -13,13 +13,15 @@ public class Entity { @Nullable public final String label; - public Integer version; + public final Integer version; + public final EntityAction action; - public Entity(String dataset, String id, @Nullable String label, Integer version, List> properties) { + public Entity(EntityAction action, String dataset, String id, @Nullable String label, Integer version, List> properties) { this.dataset = dataset; this.id = id; this.label = label; this.version = version; this.properties = properties; + this.action = action; } } diff --git a/src/main/java/org/javarosa/entities/EntityAction.java b/src/main/java/org/javarosa/entities/EntityAction.java new file mode 100644 index 000000000..52f9be9e6 --- /dev/null +++ b/src/main/java/org/javarosa/entities/EntityAction.java @@ -0,0 +1,6 @@ +package org.javarosa.entities; + +public enum EntityAction { + CREATE, + UPDATE +} diff --git a/src/main/java/org/javarosa/entities/EntityFormFinalizationProcessor.java b/src/main/java/org/javarosa/entities/EntityFormFinalizationProcessor.java index 4025e6e98..823bffe48 100644 --- a/src/main/java/org/javarosa/entities/EntityFormFinalizationProcessor.java +++ b/src/main/java/org/javarosa/entities/EntityFormFinalizationProcessor.java @@ -31,16 +31,16 @@ public void processForm(FormEntryModel formEntryModel) { TreeElement entityElement = EntityFormParser.getEntityElement(mainInstance); if (entityElement != null) { - EntityFormParser.EntityAction action = EntityFormParser.parseAction(entityElement); + EntityAction action = EntityFormParser.parseAction(entityElement); String dataset = EntityFormParser.parseDataset(entityElement); - if (action == EntityFormParser.EntityAction.CREATE) { - Entity entity = createEntity(entityElement, 1, dataset, saveTos, mainInstance); + if (action == EntityAction.CREATE) { + Entity entity = createEntity(entityElement, 1, dataset, saveTos, mainInstance, action); formEntryModel.getExtras().put(new Entities(asList(entity))); - } else if (action == EntityFormParser.EntityAction.UPDATE){ + } else if (action == EntityAction.UPDATE){ int baseVersion = EntityFormParser.parseBaseVersion(entityElement); int newVersion = baseVersion + 1; - Entity entity = createEntity(entityElement, newVersion, dataset, saveTos, mainInstance); + Entity entity = createEntity(entityElement, newVersion, dataset, saveTos, mainInstance, action); formEntryModel.getExtras().put(new Entities(asList(entity))); } else { formEntryModel.getExtras().put(new Entities(emptyList())); @@ -48,7 +48,7 @@ public void processForm(FormEntryModel formEntryModel) { } } - private Entity createEntity(TreeElement entityElement, int version, String dataset, List> saveTos, FormInstance mainInstance) { + private Entity createEntity(TreeElement entityElement, int version, String dataset, List> saveTos, FormInstance mainInstance, EntityAction action) { List> fields = saveTos.stream().map(saveTo -> { IDataReference reference = saveTo.getFirst(); IAnswerData answerData = mainInstance.resolveReference(reference).getValue(); @@ -62,6 +62,6 @@ private Entity createEntity(TreeElement entityElement, int version, String datas String id = EntityFormParser.parseId(entityElement); String label = EntityFormParser.parseLabel(entityElement); - return new Entity(dataset, id, label, version, fields); + return new Entity(action, dataset, id, label, version, fields); } } diff --git a/src/main/java/org/javarosa/entities/internal/EntityFormParser.java b/src/main/java/org/javarosa/entities/internal/EntityFormParser.java index 478456fff..ed6395249 100644 --- a/src/main/java/org/javarosa/entities/internal/EntityFormParser.java +++ b/src/main/java/org/javarosa/entities/internal/EntityFormParser.java @@ -2,6 +2,7 @@ import org.javarosa.core.model.instance.FormInstance; import org.javarosa.core.model.instance.TreeElement; +import org.javarosa.entities.EntityAction; import org.javarosa.xpath.expr.XPathFuncExpr; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -70,9 +71,4 @@ public static EntityAction parseAction(@NotNull TreeElement entity) { return null; } - - public enum EntityAction { - CREATE, - UPDATE - } } diff --git a/src/test/java/org/javarosa/entities/EntitiesTest.java b/src/test/java/org/javarosa/entities/EntitiesTest.java index aac173924..193a4cddc 100644 --- a/src/test/java/org/javarosa/entities/EntitiesTest.java +++ b/src/test/java/org/javarosa/entities/EntitiesTest.java @@ -124,6 +124,7 @@ public void fillingFormWithCreate_makesEntityAvailable() throws IOException, XFo assertThat(entities.get(0).label, equalTo("Tom Wambsgans")); assertThat(entities.get(0).version, equalTo(1)); assertThat(entities.get(0).properties, equalTo(asList(new Pair<>("name", "Tom Wambsgans")))); + assertThat(entities.get(0).action, equalTo(EntityAction.CREATE)); } @Test @@ -168,6 +169,7 @@ public void fillingFormWithUpdate_makesEntityAvailable() throws IOException, XFo assertThat(entities.get(0).label, equalTo("Tom Wambsgans")); assertThat(entities.get(0).version, equalTo(2)); assertThat(entities.get(0).properties, equalTo(asList(new Pair<>("name", "Tom Wambsgans")))); + assertThat(entities.get(0).action, equalTo(EntityAction.UPDATE)); } @Test @@ -252,6 +254,7 @@ public void fillingFormWithCreateAndUpdate_makesEntityAvailableAsSecondVersion() assertThat(entities.get(0).label, equalTo("Tom Wambsgans")); assertThat(entities.get(0).version, equalTo(2)); assertThat(entities.get(0).properties, equalTo(asList(new Pair<>("name", "Tom Wambsgans")))); + assertThat(entities.get(0).action, equalTo(EntityAction.UPDATE)); } @Test @@ -295,6 +298,7 @@ public void fillingFormWithCreateAndUpdate_butNoBaseVersion_makesEntityAvailable assertThat(entities.get(0).label, equalTo("Tom Wambsgans")); assertThat(entities.get(0).version, equalTo(1)); assertThat(entities.get(0).properties, equalTo(asList(new Pair<>("name", "Tom Wambsgans")))); + assertThat(entities.get(0).action, equalTo(EntityAction.UPDATE)); } @Test diff --git a/src/test/java/org/javarosa/entities/EntityFormParserTest.java b/src/test/java/org/javarosa/entities/EntityFormParserTest.java index 35483059b..e0657fae4 100644 --- a/src/test/java/org/javarosa/entities/EntityFormParserTest.java +++ b/src/test/java/org/javarosa/entities/EntityFormParserTest.java @@ -52,8 +52,8 @@ public void parseAction_findsCreateWithTrueString() throws XFormParser.ParseExce XFormParser parser = new XFormParser(new InputStreamReader(new ByteArrayInputStream(form.asXml().getBytes()))); FormDef formDef = parser.parse(null); - EntityFormParser.EntityAction dataset = EntityFormParser.parseAction(EntityFormParser.getEntityElement(formDef.getMainInstance())); - assertThat(dataset, equalTo(EntityFormParser.EntityAction.CREATE)); + EntityAction action = EntityFormParser.parseAction(EntityFormParser.getEntityElement(formDef.getMainInstance())); + assertThat(action, equalTo(EntityAction.CREATE)); } @Test @@ -84,7 +84,7 @@ public void parseAction_findsUpdateWithTrueString() throws XFormParser.ParseExce XFormParser parser = new XFormParser(new InputStreamReader(new ByteArrayInputStream(form.asXml().getBytes()))); FormDef formDef = parser.parse(null); - EntityFormParser.EntityAction dataset = EntityFormParser.parseAction(EntityFormParser.getEntityElement(formDef.getMainInstance())); - assertThat(dataset, equalTo(EntityFormParser.EntityAction.UPDATE)); + EntityAction dataset = EntityFormParser.parseAction(EntityFormParser.getEntityElement(formDef.getMainInstance())); + assertThat(dataset, equalTo(EntityAction.UPDATE)); } } \ No newline at end of file