From: Mathieu Baudier Date: Sun, 24 Sep 2023 10:00:36 +0000 (+0200) Subject: Introduce a package for Geo API X-Git-Tag: v2.3.16~21 X-Git-Url: https://git.argeo.org/?p=gpl%2Fargeo-suite.git;a=commitdiff_plain;h=b4ffcdbc144ccb0633f033bb0be498988374ae68 Introduce a package for Geo API --- diff --git a/org.argeo.app.geo/OSGI-INF/wfsHttpHandler.xml b/org.argeo.app.geo/OSGI-INF/wfsHttpHandler.xml index 356fa03..0347631 100644 --- a/org.argeo.app.geo/OSGI-INF/wfsHttpHandler.xml +++ b/org.argeo.app.geo/OSGI-INF/wfsHttpHandler.xml @@ -6,5 +6,5 @@ - + diff --git a/org.argeo.app.geo/src/org/argeo/app/api/geo/FeatureAdapter.java b/org.argeo.app.geo/src/org/argeo/app/api/geo/FeatureAdapter.java new file mode 100644 index 0000000..d00a2c0 --- /dev/null +++ b/org.argeo.app.geo/src/org/argeo/app/api/geo/FeatureAdapter.java @@ -0,0 +1,34 @@ +package org.argeo.app.api.geo; + +import javax.xml.namespace.QName; + +import org.argeo.api.acr.Content; +import org.argeo.api.acr.search.AndFilter; +import org.argeo.app.api.EntityType; +import org.argeo.app.api.WGS84PosName; +import org.argeo.app.geo.JTS; +import org.locationtech.jts.geom.Coordinate; +import org.locationtech.jts.geom.Geometry; +import org.locationtech.jts.geom.Point; + +import jakarta.json.stream.JsonGenerator; + +public interface FeatureAdapter { + default Geometry getDefaultGeometry(Content c, QName targetFeature) { + // TODO deal with more defaults + // TODO deal with target feature + if (c.hasContentClass(EntityType.geopoint)) { + double latitude = c.get(WGS84PosName.lat, Double.class).get(); + double longitude = c.get(WGS84PosName.lon, Double.class).get(); + + Coordinate coordinate = new Coordinate(longitude, latitude); + Point the_geom = JTS.GEOMETRY_FACTORY.createPoint(coordinate); + return the_geom; + } + return null; + } + + void writeProperties(JsonGenerator g, Content content, QName targetFeature); + + void addConstraintsForFeature(AndFilter filter, QName targetFeature); +} diff --git a/org.argeo.app.geo/src/org/argeo/app/geo/http/FeatureAdapter.java b/org.argeo.app.geo/src/org/argeo/app/geo/http/FeatureAdapter.java deleted file mode 100644 index 22e1445..0000000 --- a/org.argeo.app.geo/src/org/argeo/app/geo/http/FeatureAdapter.java +++ /dev/null @@ -1,34 +0,0 @@ -package org.argeo.app.geo.http; - -import javax.xml.namespace.QName; - -import org.argeo.api.acr.Content; -import org.argeo.api.acr.search.AndFilter; -import org.argeo.app.api.EntityType; -import org.argeo.app.api.WGS84PosName; -import org.argeo.app.geo.JTS; -import org.locationtech.jts.geom.Coordinate; -import org.locationtech.jts.geom.Geometry; -import org.locationtech.jts.geom.Point; - -import jakarta.json.stream.JsonGenerator; - -public interface FeatureAdapter { - default Geometry getDefaultGeometry(Content c, QName targetFeature) { - // TODO deal with more defaults - // TODO deal with target feature - if (c.hasContentClass(EntityType.geopoint)) { - double latitude = c.get(WGS84PosName.lat, Double.class).get(); - double longitude = c.get(WGS84PosName.lon, Double.class).get(); - - Coordinate coordinate = new Coordinate(longitude, latitude); - Point the_geom = JTS.GEOMETRY_FACTORY.createPoint(coordinate); - return the_geom; - } - return null; - } - - void writeProperties(JsonGenerator g, Content content, QName targetFeature); - - void addConstraintsForFeature(AndFilter filter, QName targetFeature); -} diff --git a/org.argeo.app.geo/src/org/argeo/app/geo/http/WfsHttpHandler.java b/org.argeo.app.geo/src/org/argeo/app/geo/http/WfsHttpHandler.java index 8b2d159..2a63757 100644 --- a/org.argeo.app.geo/src/org/argeo/app/geo/http/WfsHttpHandler.java +++ b/org.argeo.app.geo/src/org/argeo/app/geo/http/WfsHttpHandler.java @@ -18,7 +18,6 @@ import javax.xml.namespace.QName; import org.argeo.api.acr.Content; import org.argeo.api.acr.ContentSession; -import org.argeo.api.acr.DName; import org.argeo.api.acr.NamespaceUtils; import org.argeo.api.acr.ldap.LdapAttr; import org.argeo.api.acr.search.AndFilter; @@ -27,10 +26,12 @@ import org.argeo.api.cms.CmsLog; import org.argeo.app.api.EntityName; import org.argeo.app.api.EntityType; import org.argeo.app.api.WGS84PosName; +import org.argeo.app.api.geo.FeatureAdapter; import org.argeo.app.geo.CqlUtils; import org.argeo.app.geo.GeoJSon; import org.argeo.app.geo.GpxUtils; import org.argeo.app.geo.JTS; +import org.argeo.cms.acr.json.AcrJsonUtils; import org.argeo.cms.http.HttpHeader; import org.argeo.cms.http.server.HttpServerUtils; import org.argeo.cms.util.LangUtils; @@ -205,10 +206,11 @@ public class WfsHttpHandler implements HttpHandler { GeoJSon.writeGeometry(generator, defaultGeometry); generator.writeStartObject("properties"); - writeTimeProperties(generator, c); - writeProperties(generator, c); + AcrJsonUtils.writeTimeProperties(generator, c); if (featureAdapter != null) featureAdapter.writeProperties(generator, c, typeName); + else + writeProperties(generator, c); generator.writeEnd();// properties object generator.writeEnd();// feature object @@ -243,24 +245,7 @@ public class WfsHttpHandler implements HttpHandler { return uuid; } - private final QName JCR_CREATED = NamespaceUtils.parsePrefixedName("jcr:created"); - - private final QName JCR_LAST_MODIFIED = NamespaceUtils.parsePrefixedName("jcr:lastModified"); - - protected void writeTimeProperties(JsonGenerator g, Content content) { - String creationDate = content.attr(DName.creationdate); - if (creationDate == null) - creationDate = content.attr(JCR_CREATED); - if (creationDate != null) - g.write(DName.creationdate.get(), creationDate); - String lastModified = content.attr(DName.getlastmodified); - if (lastModified == null) - lastModified = content.attr(JCR_LAST_MODIFIED); - if (lastModified != null) - g.write(DName.getlastmodified.get(), lastModified); - } - - protected void writeProperties(JsonGenerator generator, Content content) { + public void writeProperties(JsonGenerator generator, Content content) { String path = content.getPath(); generator.write("path", path); if (content.hasContentClass(EntityType.local)) {