From: Mathieu Baudier Date: Mon, 11 Mar 2024 08:23:19 +0000 (+0100) Subject: Refactor Argeo APIs X-Git-Tag: v2.3.24~6 X-Git-Url: https://git.argeo.org/?p=gpl%2Fargeo-suite.git;a=commitdiff_plain;h=41fef804f5fc161cc51256aa30e15fc048331ab4 Refactor Argeo APIs --- diff --git a/org.argeo.app.geo/src/org/argeo/api/app/geo/FeatureAdapter.java b/org.argeo.app.geo/src/org/argeo/api/app/geo/FeatureAdapter.java new file mode 100644 index 0000000..e0449e1 --- /dev/null +++ b/org.argeo.app.geo/src/org/argeo/api/app/geo/FeatureAdapter.java @@ -0,0 +1,18 @@ +package org.argeo.api.app.geo; + +import javax.xml.namespace.QName; + +import org.argeo.api.acr.Content; +import org.argeo.api.acr.search.AndFilter; +import org.locationtech.jts.geom.Geometry; + +import jakarta.json.stream.JsonGenerator; + +/** Transform a {@link Content} to an OGC feature. */ +public interface FeatureAdapter { + Geometry getDefaultGeometry(Content c, QName targetFeature); + + void writeProperties(JsonGenerator g, Content content, QName targetFeature); + + void addConstraintsForFeature(AndFilter filter, QName targetFeature); +} diff --git a/org.argeo.app.geo/src/org/argeo/api/app/geo/WfsKvp.java b/org.argeo.app.geo/src/org/argeo/api/app/geo/WfsKvp.java new file mode 100644 index 0000000..a6eb5d7 --- /dev/null +++ b/org.argeo.app.geo/src/org/argeo/api/app/geo/WfsKvp.java @@ -0,0 +1,24 @@ +package org.argeo.api.app.geo; + +/** Keys used for WFS KVP (key-value pair) encoding. */ +public enum WfsKvp { + CQL_FILTER("cql_filter"), // + OUTPUT_FORMAT("outputFormat"), // + TYPE_NAMES("typeNames"), // + BBOX("bbox"), // + FORMAT_OPTIONS("format_options"), // + ; + + public final static String FILENAME_ = "filename:"; + + private final String key; + + private WfsKvp(String key) { + this.key = key; + } + + public String getKey() { + return key; + } + +} 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 deleted file mode 100644 index 1dffbab..0000000 --- a/org.argeo.app.geo/src/org/argeo/app/api/geo/FeatureAdapter.java +++ /dev/null @@ -1,39 +0,0 @@ -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.api.app.EntityType; -import org.argeo.app.geo.acr.GeoEntityUtils; -import org.locationtech.jts.geom.Geometry; - -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)) { - return getGeoPointGeometry(c); - } - return null; - } - - void writeProperties(JsonGenerator g, Content content, QName targetFeature); - - void addConstraintsForFeature(AndFilter filter, QName targetFeature); - - static Geometry getGeoPointGeometry(Content c) { - if (c.hasContentClass(EntityType.geopoint)) { - return GeoEntityUtils.toPoint(c); -// 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; - } -} diff --git a/org.argeo.app.geo/src/org/argeo/app/api/geo/WfsKvp.java b/org.argeo.app.geo/src/org/argeo/app/api/geo/WfsKvp.java deleted file mode 100644 index 166cdf0..0000000 --- a/org.argeo.app.geo/src/org/argeo/app/api/geo/WfsKvp.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.argeo.app.api.geo; - -/** Keys used for WFS KVP (key-value pair) encoding. */ -public enum WfsKvp { - CQL_FILTER("cql_filter"), // - OUTPUT_FORMAT("outputFormat"), // - TYPE_NAMES("typeNames"), // - BBOX("bbox"), // - FORMAT_OPTIONS("format_options"), // - ; - - public final static String FILENAME_ = "filename:"; - - private final String key; - - private WfsKvp(String key) { - this.key = key; - } - - public String getKey() { - return key; - } - -} diff --git a/org.argeo.app.geo/src/org/argeo/app/geo/acr/AbstractFeatureAdapter.java b/org.argeo.app.geo/src/org/argeo/app/geo/acr/AbstractFeatureAdapter.java new file mode 100644 index 0000000..95e8216 --- /dev/null +++ b/org.argeo.app.geo/src/org/argeo/app/geo/acr/AbstractFeatureAdapter.java @@ -0,0 +1,34 @@ +package org.argeo.app.geo.acr; + +import javax.xml.namespace.QName; + +import org.argeo.api.acr.Content; +import org.argeo.api.app.EntityType; +import org.argeo.api.app.geo.FeatureAdapter; +import org.locationtech.jts.geom.Geometry; + +public abstract class AbstractFeatureAdapter implements FeatureAdapter { + @Override + public Geometry getDefaultGeometry(Content c, QName targetFeature) { + // TODO deal with more defaults + // TODO deal with target feature + if (c.hasContentClass(EntityType.geopoint)) { + return getGeoPointGeometry(c); + } + return null; + } + + protected Geometry getGeoPointGeometry(Content c) { + if (c.hasContentClass(EntityType.geopoint)) { + return GeoEntityUtils.toPoint(c); +// 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; + } + +} 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 9c0f8dc..21cc6c4 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 @@ -25,9 +25,9 @@ import org.argeo.api.acr.spi.ProvidedRepository; import org.argeo.api.app.EntityName; import org.argeo.api.app.EntityType; import org.argeo.api.app.WGS84PosName; +import org.argeo.api.app.geo.FeatureAdapter; +import org.argeo.api.app.geo.WfsKvp; import org.argeo.api.cms.CmsLog; -import org.argeo.app.api.geo.FeatureAdapter; -import org.argeo.app.api.geo.WfsKvp; import org.argeo.app.geo.CqlUtils; import org.argeo.app.geo.GeoJson; import org.argeo.app.geo.GeoUtils;