use of org.activityinfo.model.formTree.LookupKey in project activityinfo by bedatadriven.
the class LookupKeySetTest method simpleHierarchyTest.
/**
* In the case of a simple hierarchy, we are referencing a single form that
* in turn has key reference fields.
*
* For example, if the field references a Village form, this should yield:
*
* <pre>
* Province.Name
* ^
* |
* District.Name
* ^
* |
* Village.Name
* </pre>
*
* All fields are required because we ultimately need the reference to the village record.
*/
@Test
public void simpleHierarchyTest() {
TestingStorageProvider catalog = new TestingStorageProvider();
NfiForm nfiForm = catalog.getNfiForm();
VillageForm villageForm = catalog.getVillageForm();
AdminLevelForm territoryForm = catalog.getVillageForm().getParentForm();
AdminLevelForm provinceForm = territoryForm.getParentForm().get();
FormTree formTree = catalog.getFormTree(nfiForm.getFormId());
LookupKeySet lookupKeySet = new LookupKeySet(formTree, nfiForm.getVillageField());
// Keys need to be topologically sorted,
// with parent keys preceding child keys in the list
assertThat(lookupKeySet.getKey(0).getKeyLabel(), equalTo("Province Name"));
assertThat(lookupKeySet.getKey(1).getKeyLabel(), equalTo("Territory Name"));
assertThat(lookupKeySet.getKey(2).getKeyLabel(), equalTo("Village Name"));
SymbolNode villageName = Formulas.symbol(villageForm.getNameField().getId());
SymbolNode villageTerritory = new SymbolNode(villageForm.getAdminFieldId());
FormulaNode territoryName = new CompoundExpr(villageTerritory, territoryForm.getNameFieldId());
FormulaNode territoryProvince = new CompoundExpr(villageTerritory, territoryForm.getParentFieldId());
FormulaNode provinceName = new CompoundExpr(territoryProvince, provinceForm.getNameFieldId());
assertThat(lookupKeySet.getLeafKeys(), hasSize(1));
LookupKey leafKey = Iterables.getOnlyElement(lookupKeySet.getLeafKeys());
assertThat(leafKey.getKeyFormulas().values(), containsInAnyOrder(villageName, territoryName, provinceName));
}
use of org.activityinfo.model.formTree.LookupKey in project activityinfo by bedatadriven.
the class LookupKeySetTest method overlappingHierarchiesParse.
@Test
public void overlappingHierarchiesParse() {
TestingStorageProvider catalog = setup.getCatalog();
LocaliteForm localiteForm = catalog.getLocaliteForm();
FormTree formTree = setup.getFormTree(localiteForm.getFormId());
LookupKeySet lookupKeySet = new LookupKeySet(formTree, localiteForm.getAdminField());
Map<LookupKey, FormulaNode> formulas = lookupKeySet.getKeyFormulas(localiteForm.getAdminField().getId());
ParsedFormula province = new ParsedFormula(formTree, formulas.get(lookupKeySet.getKey(0)).asExpression());
assertThat(province.isValid(), equalTo(true));
assertThat(province.getResultType(), instanceOf(TextType.class));
}
use of org.activityinfo.model.formTree.LookupKey in project activityinfo by bedatadriven.
the class LookupKeySetTest method overlappingHierarchiesKeyQuery.
@Test
public void overlappingHierarchiesKeyQuery() {
TestingStorageProvider catalog = setup.getCatalog();
LocaliteForm localiteForm = catalog.getLocaliteForm();
FormTree formTree = setup.getFormTree(localiteForm.getFormId());
LookupKeySet lookupKeySet = new LookupKeySet(formTree, localiteForm.getAdminField());
Map<LookupKey, FormulaNode> formulas = lookupKeySet.getKeyFormulas(localiteForm.getAdminField().getId());
QueryModel queryModel = new QueryModel(localiteForm.getFormId());
queryModel.selectResourceId().as("id");
queryModel.selectExpr(formulas.get(lookupKeySet.getKey(0))).as("province");
queryModel.selectExpr(formulas.get(lookupKeySet.getKey(1))).as("territory");
queryModel.selectExpr(formulas.get(lookupKeySet.getKey(2))).as("zs");
Connection<ColumnSet> table = setup.connect(setup.getFormStore().query(queryModel));
ColumnSet columnSet = table.assertLoaded();
ColumnView id = columnSet.getColumnView("id");
ColumnView province = columnSet.getColumnView("province");
ColumnView territory = columnSet.getColumnView("territory");
ColumnView zs = columnSet.getColumnView("zs");
// First row references a Zone de Sante
assertThat(id.getString(0), equalTo("c0"));
assertThat(province.getString(0), equalTo("Province 14"));
assertThat(territory.getString(0), nullValue());
assertThat(zs.getString(0), equalTo("Zone de Sante 56"));
// Second row references only a Province
assertThat(id.getString(1), equalTo("c1"));
assertThat(province.getString(1), equalTo("Province 8"));
assertThat(territory.getString(1), nullValue());
assertThat(zs.getString(1), nullValue());
// Fifth row references a territory
assertThat(id.getString(4), equalTo("c4"));
assertThat(province.getString(4), equalTo("Province 15"));
assertThat(territory.getString(4), equalTo("Territory 42"));
assertThat(zs.getString(4), nullValue());
}
Aggregations