Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
 - added new facets to support electorates and states from geographic info property and sites
  • Loading branch information
temi committed Feb 5, 2025
1 parent 417537d commit dc3b4da
Show file tree
Hide file tree
Showing 7 changed files with 44 additions and 16 deletions.
6 changes: 6 additions & 0 deletions grails-app/conf/data/mapping.json
Original file line number Diff line number Diff line change
Expand Up @@ -223,6 +223,12 @@
"services": {
"type": "keyword"
},
"autoElectFacet": {
"type": "keyword"
},
"autoStateFacet": {
"type": "keyword"
},
"extent":{
"properties": {
"geometry": {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -329,7 +329,7 @@ class ProjectController {
render status:400, text: "projectId is a required parameter"
} else {
Map project = projectService.get(params.projectId)
asJson projectService.findStateAndElectorateForProject(project)
asJson projectService.findAndFormatStatesAndElectoratesForProject(project)
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1167,6 +1167,9 @@ class ElasticSearchService {
it.remove('periodTargets')
it.remove('outcomeTargets')
} // Not useful for searching and is causing issues with the current mapping.

// add algorithmically generated or manually selected states and electorates of a project
projectMap << projectService.findStateAndElectorateForProject(projectMap)
} else {
projectMap.sites = siteService.findAllNonPrivateSitesForProjectId(project.projectId, SiteService.FLAT)
// GeoServer requires a single attribute with project area. Cannot use `sites` property (above) since it has
Expand Down
37 changes: 28 additions & 9 deletions grails-app/services/au/org/ala/ecodata/ProjectService.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -1248,13 +1248,35 @@ class ProjectService {
[]
}

Map findAndFormatStatesAndElectoratesForProject(Map project) {
Map result = findStateAndElectorateForProject (project)
if(!result) {
return [:]
}

List elect = result.remove('autoElectFacet') as List
List state = result.remove('autoStateFacet') as List

if (state) {
result["primarystate"] = state.pop()
result["otherstate"] = state?.join("; ")
}

if (elect) {
result["primaryelect"] = elect.pop()
result["otherelect"] = elect.join("; ")
}

result
}

/**
* Find primary/other state(s)/electorate(s) for a project.
* 1. If isDefault is true, use manually assigned state(s)/electorate(s) i.e project.geographicInfo.
* 2. If isDefault is false or missing, use the state(s)/electorate(s) from sites using site precedence.
* 3. If isDefault is false and there are no sites, use manual state(s)/electorate(s) in project.geographicInfo.
*/
Map findStateAndElectorateForProject(Map project) {
Map findStateAndElectorateForProject (Map project) {
Map result = [:]
if(project == null) {
return result
Expand All @@ -1271,8 +1293,7 @@ class ProjectService {
if (facetName.name) {
List intersectionValues = intersections[layer]
if (intersectionValues) {
result["primary${facetName.name}"] = intersectionValues.pop()
result["other${facetName.name}"] = intersectionValues.join("; ")
result["auto${facetName.name.capitalize()}Facet"] = intersectionValues
}
}
else
Expand All @@ -1283,14 +1304,12 @@ class ProjectService {
//isDefault is true or false and no sites.
if (geographicInfo) {
// load from manually assigned electorates/states
if (!result.containsKey("primaryelect")) {
result["primaryelect"] = geographicInfo.primaryElectorate
result["otherelect"] = geographicInfo.otherElectorates?.join("; ")
if (!result.containsKey("autoElectFacet")) {
result["autoElectFacet"] = (geographicInfo.primaryElectorate ? [geographicInfo.primaryElectorate] : []) + geographicInfo.otherElectorates
}

if (!result.containsKey("primarystate")) {
result["primarystate"] = geographicInfo.primaryState
result["otherstate"] = geographicInfo.otherStates?.join("; ")
if (!result.containsKey("autoStateFacet")) {
result["autoStateFacet"] = (geographicInfo.primaryState ? [geographicInfo.primaryState] : []) + geographicInfo.otherStates
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -336,7 +336,7 @@ class ProjectXlsExporter extends ProjectExporter {
}

private void addPrimaryAndOtherIntersections (Map project) {
Map result = projectService.findStateAndElectorateForProject(project) ?: [:]
Map result = projectService.findAndFormatStatesAndElectoratesForProject(project) ?: [:]
project << result
}

Expand Down
8 changes: 4 additions & 4 deletions src/test/groovy/au/org/ala/ecodata/ProjectServiceSpec.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -1118,7 +1118,7 @@ class ProjectServiceSpec extends MongoSpec implements ServiceUnitTest<ProjectSer
metadataService.getGeographicFacetConfig("layer2", _) >> [name: "elect", grouped: false]
when:
Map result = service.findStateAndElectorateForProject(project)
Map result = service.findAndFormatStatesAndElectoratesForProject(project)
then:
result.primarystate == "state1"
Expand All @@ -1142,7 +1142,7 @@ class ProjectServiceSpec extends MongoSpec implements ServiceUnitTest<ProjectSer
when:
Map result = service.findStateAndElectorateForProject(project)
Map result = service.findAndFormatStatesAndElectoratesForProject(project)
then:
result.primarystate == "ACT"
Expand All @@ -1157,7 +1157,7 @@ class ProjectServiceSpec extends MongoSpec implements ServiceUnitTest<ProjectSer
Map project = [geographicInfo: [isDefault: true, primaryState: "ACT", otherStates: ['NSW', 'VIC'], primaryElectorate: "Bean", otherElectorates: ['Canberra', 'Fenner']]]
when:
Map result = service.findStateAndElectorateForProject(project)
Map result = service.findAndFormatStatesAndElectoratesForProject(project)
then:
result.primarystate == "ACT"
Expand All @@ -1169,7 +1169,7 @@ class ProjectServiceSpec extends MongoSpec implements ServiceUnitTest<ProjectSer
def "findStateAndElectorateForProject should return empty map if project is null"() {
when:
Map project = null
Map result = service.findStateAndElectorateForProject(project)
Map result = service.findAndFormatStatesAndElectoratesForProject(project)
then:
result.isEmpty()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -230,7 +230,7 @@ class ProjectXlsExporterSpec extends Specification implements GrailsUnitTest {
setup:
String sheet = "Electorate Coord"
Map project = project()
projectService.findStateAndElectorateForProject(_) >> ["primarystate": "ACT", "otherstate": null, "primaryelect": "bean", "otherelect": "fenner; canberra"]
projectService.findAndFormatStatesAndElectoratesForProject(_) >> ["primarystate": "ACT", "otherstate": null, "primaryelect": "bean", "otherelect": "fenner; canberra"]

when:
projectXlsExporter.export(project)
Expand Down

0 comments on commit dc3b4da

Please sign in to comment.