This is an automated email from the ASF dual-hosted git repository. bchapuis pushed a commit to branch 590-flatgeobuf in repository https://gitbox.apache.org/repos/asf/incubator-baremaps.git
commit b8d50269abb901294e37e120e0dccc4dbeea60dd Author: Bertil Chapuis <[email protected]> AuthorDate: Sun Feb 26 20:47:34 2023 +0100 Improve naming and documentation --- .../baremaps/dataframe/AbstractDataFrame.java | 3 + .../java/org/apache/baremaps/dataframe/Column.java | 13 ++ .../org/apache/baremaps/dataframe/ColumnImpl.java | 3 + .../org/apache/baremaps/dataframe/DataFrame.java | 10 +- .../apache/baremaps/dataframe/DataFrameImpl.java | 22 +++- .../org/apache/baremaps/dataframe/DataStore.java | 28 ++++- .../java/org/apache/baremaps/dataframe/Row.java | 39 ++++-- .../org/apache/baremaps/dataframe/RowImpl.java | 23 ++-- .../dataframe/{DataType.java => Schema.java} | 22 +++- .../{DataTypeImpl.java => SchemaImpl.java} | 16 ++- ...form.java => DataFrameGeometryTransformer.java} | 29 +++-- ...BufFeatureSet.java => FlatGeoBufDataFrame.java} | 24 ++-- .../storage/flatgeobuf/RowConversions.java | 6 +- .../{FeatureIterator.java => RowIterator.java} | 12 +- .../storage/geopackage/GeoPackageDatabase.java | 12 +- .../storage/geopackage/GeoPackageTable.java | 20 +-- .../storage/postgres/PostgresDataFrame.java | 12 +- .../storage/postgres/PostgresDatabase.java | 140 ++++++++++----------- .../storage/shapefile/ShapefileDataFrame.java | 13 +- .../storage/shapefile/ShapefileDirectory.java | 10 +- .../shapefile/internal/InputFeatureStream.java | 45 +++---- .../shapefile/internal/ShapefileByteReader.java | 24 ++-- .../shapefile/internal/ShapefileReader.java | 14 +-- .../org/apache/baremaps/workflow/tasks/Entity.java | 16 +-- .../baremaps/workflow/tasks/ImportGeoPackage.java | 4 +- .../baremaps/workflow/tasks/ImportShapefile.java | 4 +- .../workflow/tasks/TransformEntityCollection.java | 4 +- .../org/apache/baremaps/mvt/ExpressionsTest.java | 12 +- ...reSetTest.java => FlatGeoBufDataFrameTest.java} | 14 +-- 29 files changed, 346 insertions(+), 248 deletions(-) diff --git a/baremaps-core/src/main/java/org/apache/baremaps/dataframe/AbstractDataFrame.java b/baremaps-core/src/main/java/org/apache/baremaps/dataframe/AbstractDataFrame.java index 8a0349a4..959238f4 100644 --- a/baremaps-core/src/main/java/org/apache/baremaps/dataframe/AbstractDataFrame.java +++ b/baremaps-core/src/main/java/org/apache/baremaps/dataframe/AbstractDataFrame.java @@ -14,6 +14,9 @@ package org.apache.baremaps.dataframe; import org.apache.baremaps.collection.AbstractDataCollection; +/** + * A data frame is a collection of rows respecting a schema. + */ public abstract class AbstractDataFrame extends AbstractDataCollection<Row> implements DataFrame { } diff --git a/baremaps-core/src/main/java/org/apache/baremaps/dataframe/Column.java b/baremaps-core/src/main/java/org/apache/baremaps/dataframe/Column.java index 174d86ad..189dd730 100644 --- a/baremaps-core/src/main/java/org/apache/baremaps/dataframe/Column.java +++ b/baremaps-core/src/main/java/org/apache/baremaps/dataframe/Column.java @@ -12,10 +12,23 @@ package org.apache.baremaps.dataframe; +/** + * A column in a data frame. + */ public interface Column { + /** + * Returns the name of the column. + * + * @return the name of the column + */ String name(); + /** + * Returns the type of the column. + * + * @return the type of the column + */ Class type(); } diff --git a/baremaps-core/src/main/java/org/apache/baremaps/dataframe/ColumnImpl.java b/baremaps-core/src/main/java/org/apache/baremaps/dataframe/ColumnImpl.java index ad3928c7..79d3e59c 100644 --- a/baremaps-core/src/main/java/org/apache/baremaps/dataframe/ColumnImpl.java +++ b/baremaps-core/src/main/java/org/apache/baremaps/dataframe/ColumnImpl.java @@ -12,6 +12,9 @@ package org.apache.baremaps.dataframe; +/** + * A A column in a data frame. + */ public record ColumnImpl(String name, Class type) implements Column { } diff --git a/baremaps-core/src/main/java/org/apache/baremaps/dataframe/DataFrame.java b/baremaps-core/src/main/java/org/apache/baremaps/dataframe/DataFrame.java index 3efccf11..02f59176 100644 --- a/baremaps-core/src/main/java/org/apache/baremaps/dataframe/DataFrame.java +++ b/baremaps-core/src/main/java/org/apache/baremaps/dataframe/DataFrame.java @@ -14,8 +14,16 @@ package org.apache.baremaps.dataframe; import org.apache.baremaps.collection.DataCollection; +/** + * A data frame is a collection of rows respecting a schema. + */ public interface DataFrame extends DataCollection<Row> { - DataType dataType(); + /** + * Returns the schema of the data frame. + * + * @return the schema of the data frame + */ + Schema schema(); } diff --git a/baremaps-core/src/main/java/org/apache/baremaps/dataframe/DataFrameImpl.java b/baremaps-core/src/main/java/org/apache/baremaps/dataframe/DataFrameImpl.java index 4b0ffd27..a31e8267 100644 --- a/baremaps-core/src/main/java/org/apache/baremaps/dataframe/DataFrameImpl.java +++ b/baremaps-core/src/main/java/org/apache/baremaps/dataframe/DataFrameImpl.java @@ -14,21 +14,35 @@ package org.apache.baremaps.dataframe; import java.util.ArrayList; +/** + * A data frame is a collection of rows respecting a schema. + */ public class DataFrameImpl extends ArrayList<Row> implements DataFrame { - private final DataType dataType; + private final Schema dataType; - public DataFrameImpl(DataType dataType) { - this.dataType = dataType; + /** + * Constructs a data frame with the specified schema. + * + * @param schema the schema of the data frame + */ + public DataFrameImpl(Schema schema) { + this.dataType = schema; } + /** + * {@inheritDoc} + */ @Override public long sizeAsLong() { return size(); } + /** + * {@inheritDoc} + */ @Override - public DataType dataType() { + public Schema schema() { return dataType; } } diff --git a/baremaps-core/src/main/java/org/apache/baremaps/dataframe/DataStore.java b/baremaps-core/src/main/java/org/apache/baremaps/dataframe/DataStore.java index ce89b957..451a563a 100644 --- a/baremaps-core/src/main/java/org/apache/baremaps/dataframe/DataStore.java +++ b/baremaps-core/src/main/java/org/apache/baremaps/dataframe/DataStore.java @@ -14,14 +14,38 @@ package org.apache.baremaps.dataframe; import java.util.Collection; +/** + * A data store is a collection of data frames. + */ public interface DataStore { - Collection<DataFrame> list() throws DataFrameException; - + /** + * Lists the names of the data frames. + * + * @return the names of the data frames + */ + Collection<String> list() throws DataFrameException; + + /** + * Gets a data frame by its name. + * + * @param name the name of the data frame + * @return the data frame + */ DataFrame get(String name) throws DataFrameException; + /** + * Adds a data frame to the data store. + * + * @param value the data frame + */ void add(DataFrame value) throws DataFrameException; + /** + * Removes a data frame from the data store. + * + * @param name the name of the data frame + */ void remove(String name) throws DataFrameException; } diff --git a/baremaps-core/src/main/java/org/apache/baremaps/dataframe/Row.java b/baremaps-core/src/main/java/org/apache/baremaps/dataframe/Row.java index 8b291119..ac97fa76 100644 --- a/baremaps-core/src/main/java/org/apache/baremaps/dataframe/Row.java +++ b/baremaps-core/src/main/java/org/apache/baremaps/dataframe/Row.java @@ -14,14 +14,39 @@ package org.apache.baremaps.dataframe; import java.util.List; +/** + * A row in a data frame. + */ public interface Row { - DataType dataType(); - - List<Object> values(); - - Object get(String name); - - void set(String name, Object value); + /** + * Returns the schema of the row. + * + * @return the schema of the row + */ + Schema dataType(); + + /** + * Returns the values of the columns in the row. + * + * @return the values of the columns in the row + */ + List values(); + + /** + * Returns the value of the specified column. + * + * @param column the column + * @return the value of the specified column + */ + Object get(String column); + + /** + * Sets the value of the specified column. + * + * @param column the column + * @param value the value + */ + void set(String column, Object value); } diff --git a/baremaps-core/src/main/java/org/apache/baremaps/dataframe/RowImpl.java b/baremaps-core/src/main/java/org/apache/baremaps/dataframe/RowImpl.java index 027b383e..3b7aa0e4 100644 --- a/baremaps-core/src/main/java/org/apache/baremaps/dataframe/RowImpl.java +++ b/baremaps-core/src/main/java/org/apache/baremaps/dataframe/RowImpl.java @@ -14,27 +14,36 @@ package org.apache.baremaps.dataframe; import java.util.List; -public record RowImpl(DataType dataType, List values) implements Row { +/** + * A row in a data frame. + */ +public record RowImpl(Schema dataType, List values) implements Row { + /** + * {@inheritDoc} + */ @Override - public Object get(String name) { + public Object get(String column) { for (int i = 0; i < dataType().columns().size(); i++) { - if (dataType().columns().get(i).name().equals(name)) { + if (dataType().columns().get(i).name().equals(column)) { return values.get(i); } } - throw new IllegalArgumentException("Column " + name + " not found."); + throw new IllegalArgumentException("Column " + column + " not found."); } + /** + * {@inheritDoc} + */ @Override - public void set(String name, Object value) { + public void set(String column, Object value) { for (int i = 0; i < dataType().columns().size(); i++) { - if (dataType().columns().get(i).name().equals(name)) { + if (dataType().columns().get(i).name().equals(column)) { values.set(i, value); return; } } - throw new IllegalArgumentException("Column " + name + " not found."); + throw new IllegalArgumentException("Column " + column + " not found."); } } diff --git a/baremaps-core/src/main/java/org/apache/baremaps/dataframe/DataType.java b/baremaps-core/src/main/java/org/apache/baremaps/dataframe/Schema.java similarity index 63% rename from baremaps-core/src/main/java/org/apache/baremaps/dataframe/DataType.java rename to baremaps-core/src/main/java/org/apache/baremaps/dataframe/Schema.java index 29352566..2c6fb2fd 100644 --- a/baremaps-core/src/main/java/org/apache/baremaps/dataframe/DataType.java +++ b/baremaps-core/src/main/java/org/apache/baremaps/dataframe/Schema.java @@ -14,12 +14,30 @@ package org.apache.baremaps.dataframe; import java.util.List; -public interface DataType { +/** + * A schema defines the structure of a data frame. + */ +public interface Schema { + /** + * Returns the name of the schema. + * + * @return the name of the schema + */ String name(); + /** + * Returns the columns of the schema. + * + * @return the columns of the schema + */ List<Column> columns(); - Row newInstance(); + /** + * Creates a new row of the schema. + * + * @return a new row of the schema + */ + Row createRow(); } diff --git a/baremaps-core/src/main/java/org/apache/baremaps/dataframe/DataTypeImpl.java b/baremaps-core/src/main/java/org/apache/baremaps/dataframe/SchemaImpl.java similarity index 64% rename from baremaps-core/src/main/java/org/apache/baremaps/dataframe/DataTypeImpl.java rename to baremaps-core/src/main/java/org/apache/baremaps/dataframe/SchemaImpl.java index ee362fd2..ac13b179 100644 --- a/baremaps-core/src/main/java/org/apache/baremaps/dataframe/DataTypeImpl.java +++ b/baremaps-core/src/main/java/org/apache/baremaps/dataframe/SchemaImpl.java @@ -15,10 +15,20 @@ package org.apache.baremaps.dataframe; import java.util.ArrayList; import java.util.List; -public record DataTypeImpl(String name, List<Column> columns) implements DataType { +/** + * A schema defines the structure of a data frame. + */ +public record SchemaImpl(String name, List<Column> columns) implements Schema { + /** + * {@inheritDoc} + */ @Override - public Row newInstance() { - return new RowImpl(this, new ArrayList(columns.size())); + public Row createRow() { + var values = new ArrayList<>(columns.size()); + for (int i = 0; i < columns.size(); i++) { + values.add(null); + } + return new RowImpl(this, values); } } diff --git a/baremaps-core/src/main/java/org/apache/baremaps/storage/DataFrameProjectionTransform.java b/baremaps-core/src/main/java/org/apache/baremaps/storage/DataFrameGeometryTransformer.java similarity index 64% rename from baremaps-core/src/main/java/org/apache/baremaps/storage/DataFrameProjectionTransform.java rename to baremaps-core/src/main/java/org/apache/baremaps/storage/DataFrameGeometryTransformer.java index 9074d45e..75330537 100644 --- a/baremaps-core/src/main/java/org/apache/baremaps/storage/DataFrameProjectionTransform.java +++ b/baremaps-core/src/main/java/org/apache/baremaps/storage/DataFrameGeometryTransformer.java @@ -13,51 +13,50 @@ package org.apache.baremaps.storage; - import java.util.Iterator; import org.apache.baremaps.collection.AbstractDataCollection; import org.apache.baremaps.dataframe.Column; import org.apache.baremaps.dataframe.DataFrame; -import org.apache.baremaps.dataframe.DataType; import org.apache.baremaps.dataframe.Row; -import org.apache.baremaps.openstreetmap.utils.ProjectionTransformer; +import org.apache.baremaps.dataframe.Schema; import org.locationtech.jts.geom.Geometry; +import org.locationtech.jts.geom.util.GeometryTransformer; -public class DataFrameProjectionTransform extends AbstractDataCollection<Row> implements DataFrame { +public class DataFrameGeometryTransformer extends AbstractDataCollection<Row> implements DataFrame { private final DataFrame dataFrame; - private final ProjectionTransformer projectionTransformer; + private final GeometryTransformer transformer; - public DataFrameProjectionTransform(DataFrame dataFrame, - ProjectionTransformer projectionTransformer) { + public DataFrameGeometryTransformer(DataFrame dataFrame, + GeometryTransformer geometryTransformer) { this.dataFrame = dataFrame; - this.projectionTransformer = projectionTransformer; + this.transformer = geometryTransformer; } @Override - public DataType dataType() { - return dataFrame.dataType(); + public Schema schema() { + return dataFrame.schema(); } - public Row transformProjection(Row row) { - var columns = dataType().columns().stream() + public Row transform(Row row) { + var columns = schema().columns().stream() .filter(column -> column.type().isInstance(Geometry.class)).toList(); for (Column column : columns) { var name = column.name(); var geometry = (Geometry) row.get(name); - row.set(name, projectionTransformer.transform(geometry)); + row.set(name, transformer.transform(geometry)); } return row; } @Override public Iterator<Row> iterator() { - return dataFrame.stream().map(this::transformProjection).iterator(); + return dataFrame.stream().map(this::transform).iterator(); } @Override public long sizeAsLong() { - return 0; + return dataFrame.sizeAsLong(); } } diff --git a/baremaps-core/src/main/java/org/apache/baremaps/storage/flatgeobuf/FlatGeoBufFeatureSet.java b/baremaps-core/src/main/java/org/apache/baremaps/storage/flatgeobuf/FlatGeoBufDataFrame.java similarity index 88% rename from baremaps-core/src/main/java/org/apache/baremaps/storage/flatgeobuf/FlatGeoBufFeatureSet.java rename to baremaps-core/src/main/java/org/apache/baremaps/storage/flatgeobuf/FlatGeoBufDataFrame.java index 6d22a890..f0d2788f 100644 --- a/baremaps-core/src/main/java/org/apache/baremaps/storage/flatgeobuf/FlatGeoBufFeatureSet.java +++ b/baremaps-core/src/main/java/org/apache/baremaps/storage/flatgeobuf/FlatGeoBufDataFrame.java @@ -21,8 +21,8 @@ import java.nio.channels.SeekableByteChannel; import java.util.Collection; import java.util.Iterator; import org.apache.baremaps.collection.AbstractDataCollection; -import org.apache.baremaps.dataframe.DataType; import org.apache.baremaps.dataframe.Row; +import org.apache.baremaps.dataframe.Schema; import org.locationtech.jts.geom.Geometry; import org.wololo.flatgeobuf.Constants; import org.wololo.flatgeobuf.GeometryConversions; @@ -30,26 +30,26 @@ import org.wololo.flatgeobuf.HeaderMeta; import org.wololo.flatgeobuf.PackedRTree; import org.wololo.flatgeobuf.generated.GeometryType; -public class FlatGeoBufFeatureSet { +public class FlatGeoBufDataFrame { private final SeekableByteChannel channel; private HeaderMeta headerMeta; - private DataType dataType; + private Schema schema; - public FlatGeoBufFeatureSet(SeekableByteChannel channel) { + public FlatGeoBufDataFrame(SeekableByteChannel channel) { this.channel = channel; } - public FlatGeoBufFeatureSet(SeekableByteChannel channel, DataType dataType) { + public FlatGeoBufDataFrame(SeekableByteChannel channel, Schema schema) { this.channel = channel; - this.dataType = dataType; + this.schema = schema; } - public DataType getType() throws IOException { + public Schema getSchema() throws IOException { readHeaderMeta(); - return dataType; + return schema; } public Collection<Row> read() throws IOException { @@ -68,7 +68,7 @@ public class FlatGeoBufFeatureSet { channel.position(headerMeta.offset + indexSize); // create the feature stream - return new FeatureIterator(channel, headerMeta, dataType); + return new RowIterator(channel, headerMeta, schema); } catch (IOException e) { throw new RuntimeException(e); } @@ -88,7 +88,7 @@ public class FlatGeoBufFeatureSet { channel.read(headerMetaBuffer); headerMetaBuffer.flip(); headerMeta = HeaderMeta.read(headerMetaBuffer); - dataType = RowConversions.asFeatureType(headerMeta); + schema = RowConversions.asFeatureType(headerMeta); } public void write(Collection<Row> features) throws IOException { @@ -105,8 +105,8 @@ public class FlatGeoBufFeatureSet { headerMeta.indexNodeSize = 16; headerMeta.featuresCount = features instanceof AbstractDataCollection<Row>c ? c.sizeAsLong() : features.size(); - headerMeta.name = dataType.name(); - headerMeta.columns = RowConversions.asColumns(dataType.columns()); + headerMeta.name = schema.name(); + headerMeta.columns = RowConversions.asColumns(schema.columns()); HeaderMeta.write(headerMeta, outputStream, bufferBuilder); diff --git a/baremaps-core/src/main/java/org/apache/baremaps/storage/flatgeobuf/RowConversions.java b/baremaps-core/src/main/java/org/apache/baremaps/storage/flatgeobuf/RowConversions.java index 53d08391..84c940d7 100644 --- a/baremaps-core/src/main/java/org/apache/baremaps/storage/flatgeobuf/RowConversions.java +++ b/baremaps-core/src/main/java/org/apache/baremaps/storage/flatgeobuf/RowConversions.java @@ -33,16 +33,16 @@ import org.wololo.flatgeobuf.generated.Header; public class RowConversions { - public static DataType asFeatureType(HeaderMeta headerMeta) { + public static Schema asFeatureType(HeaderMeta headerMeta) { var name = headerMeta.name; var columns = headerMeta.columns.stream() .map(column -> new ColumnImpl(column.name, column.getBinding())) .map(Column.class::cast) .toList(); - return new DataTypeImpl(name, columns); + return new SchemaImpl(name, columns); } - public static RowImpl asFeature(HeaderMeta headerMeta, DataType dataType, Feature feature) { + public static Row asRow(HeaderMeta headerMeta, Schema dataType, Feature feature) { var values = new ArrayList(); var geometryBuffer = feature.geometry(); diff --git a/baremaps-core/src/main/java/org/apache/baremaps/storage/flatgeobuf/FeatureIterator.java b/baremaps-core/src/main/java/org/apache/baremaps/storage/flatgeobuf/RowIterator.java similarity index 83% rename from baremaps-core/src/main/java/org/apache/baremaps/storage/flatgeobuf/FeatureIterator.java rename to baremaps-core/src/main/java/org/apache/baremaps/storage/flatgeobuf/RowIterator.java index cb1dab60..f1b611ad 100644 --- a/baremaps-core/src/main/java/org/apache/baremaps/storage/flatgeobuf/FeatureIterator.java +++ b/baremaps-core/src/main/java/org/apache/baremaps/storage/flatgeobuf/RowIterator.java @@ -18,16 +18,16 @@ import java.nio.ByteOrder; import java.nio.channels.SeekableByteChannel; import java.util.Iterator; import java.util.NoSuchElementException; -import org.apache.baremaps.dataframe.DataType; import org.apache.baremaps.dataframe.Row; +import org.apache.baremaps.dataframe.Schema; import org.wololo.flatgeobuf.HeaderMeta; import org.wololo.flatgeobuf.generated.Feature; -public class FeatureIterator implements Iterator<Row> { +public class RowIterator implements Iterator<Row> { private final HeaderMeta headerMeta; - private final DataType dataType; + private final Schema dataType; private final SeekableByteChannel channel; @@ -35,8 +35,8 @@ public class FeatureIterator implements Iterator<Row> { private long cursor = 0; - public FeatureIterator(SeekableByteChannel channel, HeaderMeta headerMeta, - DataType dataType) { + public RowIterator(SeekableByteChannel channel, HeaderMeta headerMeta, + Schema dataType) { this.channel = channel; this.headerMeta = headerMeta; this.dataType = dataType; @@ -56,7 +56,7 @@ public class FeatureIterator implements Iterator<Row> { var featureSize = buffer.getInt(); var row = - RowConversions.asFeature(headerMeta, dataType, Feature.getRootAsFeature(buffer)); + RowConversions.asRow(headerMeta, dataType, Feature.getRootAsFeature(buffer)); buffer.position(Integer.BYTES + featureSize); buffer.compact(); diff --git a/baremaps-core/src/main/java/org/apache/baremaps/storage/geopackage/GeoPackageDatabase.java b/baremaps-core/src/main/java/org/apache/baremaps/storage/geopackage/GeoPackageDatabase.java index 1b05afe5..8c2008c2 100644 --- a/baremaps-core/src/main/java/org/apache/baremaps/storage/geopackage/GeoPackageDatabase.java +++ b/baremaps-core/src/main/java/org/apache/baremaps/storage/geopackage/GeoPackageDatabase.java @@ -36,19 +36,13 @@ public class GeoPackageDatabase implements DataStore, AutoCloseable { } @Override - public Collection<DataFrame> list() throws DataFrameException { - return geoPackage.getFeatureTables().stream() - .map(table -> new GeoPackageTable(geoPackage.getFeatureDao(table))) - .map(DataFrame.class::cast) - .toList(); + public Collection<String> list() throws DataFrameException { + return geoPackage.getFeatureTables(); } @Override public DataFrame get(String name) throws DataFrameException { - return list().stream() - .filter(dataFrame -> dataFrame.dataType().name().equals(name)) - .findFirst() - .orElseThrow(() -> new DataFrameException()); + return new GeoPackageTable(geoPackage.getFeatureDao(name)); } @Override diff --git a/baremaps-core/src/main/java/org/apache/baremaps/storage/geopackage/GeoPackageTable.java b/baremaps-core/src/main/java/org/apache/baremaps/storage/geopackage/GeoPackageTable.java index b406f29c..c992858e 100644 --- a/baremaps-core/src/main/java/org/apache/baremaps/storage/geopackage/GeoPackageTable.java +++ b/baremaps-core/src/main/java/org/apache/baremaps/storage/geopackage/GeoPackageTable.java @@ -26,7 +26,7 @@ public class GeoPackageTable extends AbstractDataCollection<Row> implements Data private final FeatureDao featureDao; - private final DataType featureType; + private final Schema schema; private final GeometryFactory geometryFactory; @@ -39,7 +39,7 @@ public class GeoPackageTable extends AbstractDataCollection<Row> implements Data var propertyType = classType(column); columns.add(new ColumnImpl(propertyName, propertyType)); } - featureType = new DataTypeImpl(name, columns); + schema = new SchemaImpl(name, columns); geometryFactory = new GeometryFactory(new PrecisionModel(), (int) featureDao.getSrs().getId()); } @@ -53,30 +53,30 @@ public class GeoPackageTable extends AbstractDataCollection<Row> implements Data @Override public Iterator<Row> iterator() { - return new FeatureIterator(featureDao.queryForAll(), featureType); + return new FeatureIterator(featureDao.queryForAll(), schema); } @Override public long sizeAsLong() { - return 0; + return featureDao.count(); } @Override - public DataType dataType() { - return null; + public Schema schema() { + return schema; } public class FeatureIterator implements Iterator<Row> { private final FeatureResultSet featureResultSet; - private final DataType dataType; + private final Schema schema; private boolean hasNext; - public FeatureIterator(FeatureResultSet featureResultSet, DataType dataType) { + public FeatureIterator(FeatureResultSet featureResultSet, Schema schema) { this.featureResultSet = featureResultSet; - this.dataType = dataType; + this.schema = schema; this.hasNext = featureResultSet.moveToFirst(); } @@ -90,7 +90,7 @@ public class GeoPackageTable extends AbstractDataCollection<Row> implements Data if (!hasNext) { throw new NoSuchElementException(); } - Row row = dataType.newInstance(); + Row row = schema.createRow(); for (FeatureColumn featureColumn : featureResultSet.getColumns().getColumns()) { var value = featureResultSet.getValue(featureColumn); if (value != null) { diff --git a/baremaps-core/src/main/java/org/apache/baremaps/storage/postgres/PostgresDataFrame.java b/baremaps-core/src/main/java/org/apache/baremaps/storage/postgres/PostgresDataFrame.java index 3c49de7c..994d1d53 100644 --- a/baremaps-core/src/main/java/org/apache/baremaps/storage/postgres/PostgresDataFrame.java +++ b/baremaps-core/src/main/java/org/apache/baremaps/storage/postgres/PostgresDataFrame.java @@ -17,15 +17,15 @@ package org.apache.baremaps.storage.postgres; import java.util.Iterator; import org.apache.baremaps.collection.AbstractDataCollection; import org.apache.baremaps.dataframe.DataFrame; -import org.apache.baremaps.dataframe.DataType; import org.apache.baremaps.dataframe.Row; +import org.apache.baremaps.dataframe.Schema; public class PostgresDataFrame extends AbstractDataCollection<Row> implements DataFrame { - private final DataType dataType; + private final Schema schema; - public PostgresDataFrame(DataType dataType) { - this.dataType = dataType; + public PostgresDataFrame(Schema schema) { + this.schema = schema; } @Override @@ -39,7 +39,7 @@ public class PostgresDataFrame extends AbstractDataCollection<Row> implements Da } @Override - public DataType dataType() { - return dataType(); + public Schema schema() { + return schema(); } } diff --git a/baremaps-core/src/main/java/org/apache/baremaps/storage/postgres/PostgresDatabase.java b/baremaps-core/src/main/java/org/apache/baremaps/storage/postgres/PostgresDatabase.java index 76df463a..ecfe2f96 100644 --- a/baremaps-core/src/main/java/org/apache/baremaps/storage/postgres/PostgresDatabase.java +++ b/baremaps-core/src/main/java/org/apache/baremaps/storage/postgres/PostgresDatabase.java @@ -19,7 +19,6 @@ import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; import java.util.Collection; -import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -34,54 +33,48 @@ import org.postgresql.copy.PGCopyOutputStream; public class PostgresDatabase implements DataStore { // TODO: Instantiate with Map.of() - private static Map<Class, String> typeToName = new HashMap<>(); - - static { - typeToName.put(String.class, "varchar"); - typeToName.put(Short.class, "int2"); - typeToName.put(Integer.class, "int4"); - typeToName.put(Long.class, "int8"); - typeToName.put(Float.class, "float4"); - typeToName.put(Double.class, "float8"); - typeToName.put(Geometry.class, "geometry"); - typeToName.put(Point.class, "geometry"); - typeToName.put(MultiPoint.class, "geometry"); - typeToName.put(Point.class, "geometry"); - typeToName.put(LineString.class, "geometry"); - typeToName.put(MultiLineString.class, "geometry"); - typeToName.put(Polygon.class, "geometry"); - typeToName.put(MultiPolygon.class, "geometry"); - typeToName.put(LinearRing.class, "geometry"); - typeToName.put(GeometryCollection.class, "geometry"); - typeToName.put(LocalDate.class, "date"); - typeToName.put(LocalTime.class, "time"); - typeToName.put(LocalDateTime.class, "timestamp"); - } + private static Map<Class, String> typeToName = Map.ofEntries( + Map.entry(String.class, "varchar"), + Map.entry(Short.class, "int2"), + Map.entry(Integer.class, "int4"), + Map.entry(Long.class, "int8"), + Map.entry(Float.class, "float4"), + Map.entry(Double.class, "float8"), + Map.entry(Geometry.class, "geometry"), + Map.entry(Point.class, "geometry"), + Map.entry(MultiPoint.class, "geometry"), + Map.entry(Point.class, "geometry"), + Map.entry(LineString.class, "geometry"), + Map.entry(MultiLineString.class, "geometry"), + Map.entry(Polygon.class, "geometry"), + Map.entry(MultiPolygon.class, "geometry"), + Map.entry(LinearRing.class, "geometry"), + Map.entry(GeometryCollection.class, "geometry"), + Map.entry(LocalDate.class, "date"), + Map.entry(LocalTime.class, "time"), + Map.entry(LocalDateTime.class, "timestamp")); // TODO: Instantiate with Map.of() - private static Map<Class, BaseValueHandler> typeToHandler = new HashMap<>(); - - static { - typeToHandler.put(String.class, new StringValueHandler()); - typeToHandler.put(Short.class, new ShortValueHandler()); - typeToHandler.put(Integer.class, new IntegerValueHandler()); - typeToHandler.put(Long.class, new LongValueHandler()); - typeToHandler.put(Float.class, new FloatValueHandler()); - typeToHandler.put(Double.class, new DoubleValueHandler()); - typeToHandler.put(Geometry.class, new PostgisGeometryValueHandler()); - typeToHandler.put(Point.class, new PostgisGeometryValueHandler()); - typeToHandler.put(MultiPoint.class, new PostgisGeometryValueHandler()); - typeToHandler.put(Point.class, new PostgisGeometryValueHandler()); - typeToHandler.put(LineString.class, new PostgisGeometryValueHandler()); - typeToHandler.put(MultiLineString.class, new PostgisGeometryValueHandler()); - typeToHandler.put(Polygon.class, new PostgisGeometryValueHandler()); - typeToHandler.put(MultiPolygon.class, new PostgisGeometryValueHandler()); - typeToHandler.put(LinearRing.class, new PostgisGeometryValueHandler()); - typeToHandler.put(GeometryCollection.class, new PostgisGeometryValueHandler()); - typeToHandler.put(LocalDate.class, new LocalDateValueHandler()); - typeToHandler.put(LocalTime.class, new LocalTimeValueHandler()); - typeToHandler.put(LocalDateTime.class, new LocalDateTimeValueHandler()); - } + private static Map<Class, BaseValueHandler> typeToHandler = Map.ofEntries( + Map.entry(String.class, new StringValueHandler()), + Map.entry(Short.class, new ShortValueHandler()), + Map.entry(Integer.class, new IntegerValueHandler()), + Map.entry(Long.class, new LongValueHandler()), + Map.entry(Float.class, new FloatValueHandler()), + Map.entry(Double.class, new DoubleValueHandler()), + Map.entry(Geometry.class, new PostgisGeometryValueHandler()), + Map.entry(Point.class, new PostgisGeometryValueHandler()), + Map.entry(MultiPoint.class, new PostgisGeometryValueHandler()), + Map.entry(Point.class, new PostgisGeometryValueHandler()), + Map.entry(LineString.class, new PostgisGeometryValueHandler()), + Map.entry(MultiLineString.class, new PostgisGeometryValueHandler()), + Map.entry(Polygon.class, new PostgisGeometryValueHandler()), + Map.entry(MultiPolygon.class, new PostgisGeometryValueHandler()), + Map.entry(LinearRing.class, new PostgisGeometryValueHandler()), + Map.entry(GeometryCollection.class, new PostgisGeometryValueHandler()), + Map.entry(LocalDate.class, new LocalDateValueHandler()), + Map.entry(LocalTime.class, new LocalTimeValueHandler()), + Map.entry(LocalDateTime.class, new LocalDateTimeValueHandler())); private final DataSource dataSource; @@ -89,16 +82,16 @@ public class PostgresDatabase implements DataStore { this.dataSource = dataSource; } - private DataType adaptDataType(DataType datatype) { + private Schema adaptDataType(Schema datatype) { var name = datatype.name().replaceAll("[^a-zA-Z0-9]", "_"); var properties = datatype.columns().stream() .filter(columnType -> typeToName.containsKey(columnType.type())) .toList(); - return new DataTypeImpl(name, properties); + return new SchemaImpl(name, properties); } @Override - public Collection<DataFrame> list() throws DataFrameException { + public Collection<String> list() throws DataFrameException { throw new UnsupportedOperationException(); } @@ -110,33 +103,33 @@ public class PostgresDatabase implements DataStore { @Override public void add(DataFrame dataFrame) { try (var connection = dataSource.getConnection()) { - var dataType = adaptDataType(dataFrame.dataType()); + var schema = adaptDataType(dataFrame.schema()); // Drop the table if it exists - var dropQuery = dropTable(dataType); + var dropQuery = dropTable(schema); try (var dropStatement = connection.prepareStatement(dropQuery)) { dropStatement.execute(); } // Create the table - var createQuery = createTable(dataType); + var createQuery = createTable(schema); try (var createStatement = connection.prepareStatement(createQuery)) { createStatement.execute(); } // Populate the table with a copy query PGConnection pgConnection = connection.unwrap(PGConnection.class); - var copyQuery = copyTable(dataType); + var copyQuery = copyTable(schema); try (var writer = new CopyWriter(new PGCopyOutputStream(pgConnection, copyQuery))) { writer.writeHeader(); - var featureIterator = dataFrame.iterator(); - while (featureIterator.hasNext()) { - var feature = featureIterator.next(); - var attributes = getAttributes(dataType); - writer.startRow(attributes.size()); - for (var attribute : attributes) { - var name = attribute.name().toString(); - var value = feature.get(name); + var rowIterator = dataFrame.iterator(); + while (rowIterator.hasNext()) { + var row = rowIterator.next(); + var columns = getColumns(schema); + writer.startRow(columns.size()); + for (var column : columns) { + var name = column.name().toString(); + var value = row.get(name); if (value == null) { writer.writeNull(); } else { @@ -150,21 +143,22 @@ public class PostgresDatabase implements DataStore { } } - private List<Column> getAttributes(DataType dataType) { - return dataType.columns().stream() - .filter(this::isSupported).collect(Collectors.toList()); + private List<Column> getColumns(Schema schema) { + return schema.columns().stream() + .filter(this::isSupported) + .collect(Collectors.toList()); } private boolean isSupported(Column column) { return typeToName.containsKey(column.type()); } - private String createTable(DataType dataType) { + private String createTable(Schema schema) { StringBuilder builder = new StringBuilder(); builder.append("CREATE TABLE "); - builder.append(dataType.name()); + builder.append(schema.name()); builder.append(" ("); - builder.append(dataType.columns().stream() + builder.append(schema.columns().stream() .map(column -> column.name() + " " + typeToName.get(column.type())) .collect(Collectors.joining(", "))); @@ -172,12 +166,12 @@ public class PostgresDatabase implements DataStore { return builder.toString(); } - private String copyTable(DataType dataType) { + private String copyTable(Schema schema) { StringBuilder builder = new StringBuilder(); builder.append("COPY "); - builder.append(dataType.name()); + builder.append(schema.name()); builder.append(" ("); - builder.append(dataType.columns().stream() + builder.append(schema.columns().stream() .map(column -> column.name()) .collect(Collectors.joining(", "))); builder.append(") FROM STDIN BINARY"); @@ -194,7 +188,7 @@ public class PostgresDatabase implements DataStore { } } - private String dropTable(DataType type) { - return String.format("DROP TABLE IF EXISTS %s CASCADE", type.name()); + private String dropTable(Schema schema) { + return String.format("DROP TABLE IF EXISTS %s CASCADE", schema.name()); } } diff --git a/baremaps-core/src/main/java/org/apache/baremaps/storage/shapefile/ShapefileDataFrame.java b/baremaps-core/src/main/java/org/apache/baremaps/storage/shapefile/ShapefileDataFrame.java index 8226ea26..a762de5d 100644 --- a/baremaps-core/src/main/java/org/apache/baremaps/storage/shapefile/ShapefileDataFrame.java +++ b/baremaps-core/src/main/java/org/apache/baremaps/storage/shapefile/ShapefileDataFrame.java @@ -20,8 +20,8 @@ import java.util.NoSuchElementException; import org.apache.baremaps.collection.AbstractDataCollection; import org.apache.baremaps.dataframe.DataFrame; import org.apache.baremaps.dataframe.DataFrameException; -import org.apache.baremaps.dataframe.DataType; import org.apache.baremaps.dataframe.Row; +import org.apache.baremaps.dataframe.Schema; import org.apache.baremaps.storage.shapefile.internal.InputFeatureStream; import org.apache.baremaps.storage.shapefile.internal.ShapefileReader; @@ -35,9 +35,9 @@ public class ShapefileDataFrame extends AbstractDataCollection<Row> } @Override - public DataType dataType() throws DataFrameException { + public Schema schema() throws DataFrameException { try (var input = shapeFile.read()) { - return input.getDataType(); + return input.getSchema(); } catch (IOException e) { throw new DataFrameException(e); } @@ -72,14 +72,13 @@ public class ShapefileDataFrame extends AbstractDataCollection<Row> this.inputFeatureStream = inputFeatureStream; } - @Override public boolean hasNext() { try { if (next == null) { - next = inputFeatureStream.readFeature(); + next = inputFeatureStream.readRow(); } - return true; + return next != null; } catch (IOException exception) { return false; } @@ -89,7 +88,7 @@ public class ShapefileDataFrame extends AbstractDataCollection<Row> public Row next() { try { if (next == null) { - next = inputFeatureStream.readFeature(); + next = inputFeatureStream.readRow(); } Row current = next; next = null; diff --git a/baremaps-core/src/main/java/org/apache/baremaps/storage/shapefile/ShapefileDirectory.java b/baremaps-core/src/main/java/org/apache/baremaps/storage/shapefile/ShapefileDirectory.java index 919bc062..1a7779dc 100644 --- a/baremaps-core/src/main/java/org/apache/baremaps/storage/shapefile/ShapefileDirectory.java +++ b/baremaps-core/src/main/java/org/apache/baremaps/storage/shapefile/ShapefileDirectory.java @@ -31,12 +31,11 @@ public class ShapefileDirectory implements DataStore { } @Override - public Collection<DataFrame> list() { + public Collection<String> list() { try { return Files.list(directory) .filter(file -> file.toString().toLowerCase().endsWith(".shp")) - .map(file -> new ShapefileDataFrame(file)) - .map(DataFrame.class::cast) + .map(file -> file.getFileName().toString()) .toList(); } catch (IOException e) { throw new DataFrameException(e); @@ -45,10 +44,7 @@ public class ShapefileDirectory implements DataStore { @Override public DataFrame get(String name) { - return list().stream() - .filter(dataFrame -> dataFrame.dataType().name().equals(name)) - .findFirst() - .orElseThrow(() -> new DataFrameException()); + return new ShapefileDataFrame(directory.resolve(name)); } @Override diff --git a/baremaps-core/src/main/java/org/apache/baremaps/storage/shapefile/internal/InputFeatureStream.java b/baremaps-core/src/main/java/org/apache/baremaps/storage/shapefile/internal/InputFeatureStream.java index 7fb8d72e..4a0b4758 100644 --- a/baremaps-core/src/main/java/org/apache/baremaps/storage/shapefile/internal/InputFeatureStream.java +++ b/baremaps-core/src/main/java/org/apache/baremaps/storage/shapefile/internal/InputFeatureStream.java @@ -17,10 +17,9 @@ package org.apache.baremaps.storage.shapefile.internal; import java.io.File; import java.io.IOException; import java.io.InputStream; -import java.sql.SQLFeatureNotSupportedException; import java.util.List; -import org.apache.baremaps.dataframe.DataType; import org.apache.baremaps.dataframe.Row; +import org.apache.baremaps.dataframe.Schema; /** * Input Stream of features. @@ -47,8 +46,8 @@ public class InputFeatureStream extends InputStream { /** Indicates that the shape file has a valid index provided with it. */ private boolean hasShapefileIndex; - /** Type of the features contained in this shapefile. */ - private DataType dataType; + /** Schema of the features contained in this shapefile. */ + private Schema schema; /** Shapefile reader. */ private ShapefileByteReader shapefileReader; @@ -74,7 +73,7 @@ public class InputFeatureStream extends InputStream { this.shapefileReader = new ShapefileByteReader(this.shapefile, this.databaseFile, this.shapefileIndex); - this.dataType = this.shapefileReader.getDataType(); + this.schema = this.shapefileReader.getSchema(); } /** @@ -113,17 +112,24 @@ public class InputFeatureStream extends InputStream { * @throws ShapefileException if the current connection used to query the shapefile has been * closed. */ - public Row readFeature() throws ShapefileException { - return internalReadFeature(); + public Row readRow() throws ShapefileException { + if (!this.dbaseReader.nextRowAvailable()) { + return null; + } + Row row = this.schema.createRow(); + this.dbaseReader.loadRow(row); + this.shapefileReader.setRowNum(this.dbaseReader.getRowNum()); + this.shapefileReader.completeFeature(row); + return row; } /** - * Return the features type. + * Returns the schema. * - * @return Features type. + * @return the schema. */ - public DataType getDataType() { - return dataType; + public Schema getSchema() { + return schema; } /** @@ -153,21 +159,4 @@ public class InputFeatureStream extends InputStream { return this.hasShapefileIndex; } - /** - * Read next feature responding to the SQL query. - * - * @return Feature, null if no more feature is available. - * @throws SQLFeatureNotSupportedException if a SQL ability is not currently available through - * this driver. - */ - private Row internalReadFeature() throws ShapefileException { - if (!this.dbaseReader.nextRowAvailable()) { - return null; - } - Row row = this.dataType.newInstance(); - this.dbaseReader.loadRow(row); - this.shapefileReader.setRowNum(this.dbaseReader.getRowNum()); - this.shapefileReader.completeFeature(row); - return row; - } } diff --git a/baremaps-core/src/main/java/org/apache/baremaps/storage/shapefile/internal/ShapefileByteReader.java b/baremaps-core/src/main/java/org/apache/baremaps/storage/shapefile/internal/ShapefileByteReader.java index a7572903..dbc44ade 100644 --- a/baremaps-core/src/main/java/org/apache/baremaps/storage/shapefile/internal/ShapefileByteReader.java +++ b/baremaps-core/src/main/java/org/apache/baremaps/storage/shapefile/internal/ShapefileByteReader.java @@ -44,8 +44,8 @@ public class ShapefileByteReader extends CommonByteReader { /** Database Field descriptors. */ private List<DBaseFieldDescriptor> databaseFieldsDescriptors; - /** Type of the features contained in this shapefile. */ - private DataType dataType; + /** Schema of the features contained in this shapefile. */ + private Schema schema; /** Shapefile index. */ private File shapeFileIndex; @@ -80,7 +80,7 @@ public class ShapefileByteReader extends CommonByteReader { loadShapefileIndexes(); } - this.dataType = getDataType(shapefile.getName()); + this.schema = getSchema(shapefile.getName()); } /** @@ -102,12 +102,12 @@ public class ShapefileByteReader extends CommonByteReader { } /** - * Returns the type of the features contained in this shapefile. + * Returns the schema of the data contained in this shapefile. * - * @return Features type. + * @return the schema */ - public DataType getDataType() { - return this.dataType; + public Schema getSchema() { + return this.schema; } /** @@ -116,14 +116,14 @@ public class ShapefileByteReader extends CommonByteReader { * @param name Name of the field. * @return The feature type. */ - private DataType getDataType(final String name) { + private Schema getSchema(final String name) { Objects.requireNonNull(name, "The feature name cannot be null."); var columns = new ArrayList<Column>(); for (int i = 0; i < databaseFieldsDescriptors.size(); i++) { var fieldDescriptor = this.databaseFieldsDescriptors.get(i); - var propertyName = fieldDescriptor.getName(); - var propertyType = switch (fieldDescriptor.getType()) { + var columnName = fieldDescriptor.getName(); + var columnType = switch (fieldDescriptor.getType()) { case Character -> String.class; case Number -> fieldDescriptor.getDecimalCount() == 0 ? Long.class : Double.class; case Currency -> Double.class; @@ -143,13 +143,13 @@ public class ShapefileByteReader extends CommonByteReader { case DateTime -> String.class; }; - columns.add(new ColumnImpl(propertyName, propertyType)); + columns.add(new ColumnImpl(columnName, columnType)); } // Add geometry column. columns.add(new ColumnImpl(GEOMETRY_NAME, Geometry.class)); - return new DataTypeImpl(name, columns); + return new SchemaImpl(name, columns); } /** Load shapefile descriptor. */ diff --git a/baremaps-core/src/main/java/org/apache/baremaps/storage/shapefile/internal/ShapefileReader.java b/baremaps-core/src/main/java/org/apache/baremaps/storage/shapefile/internal/ShapefileReader.java index 9d5314ec..3b3d5c52 100644 --- a/baremaps-core/src/main/java/org/apache/baremaps/storage/shapefile/internal/ShapefileReader.java +++ b/baremaps-core/src/main/java/org/apache/baremaps/storage/shapefile/internal/ShapefileReader.java @@ -18,7 +18,7 @@ import java.io.File; import java.io.IOException; import java.util.List; import java.util.Objects; -import org.apache.baremaps.dataframe.DataType; +import org.apache.baremaps.dataframe.Schema; /** * Provides a ShapeFile Reader. @@ -44,7 +44,7 @@ public class ShapefileReader { private File shapeFileIndex; /** Type of the features contained in this shapefile. */ - private DataType dataType; + private Schema schema; /** Shapefile descriptor. */ private ShapefileDescriptor shapefileDescriptor; @@ -113,12 +113,12 @@ public class ShapefileReader { } /** - * Return the default feature type. + * Return the schema. * - * @return Feature type. + * @return the schema. */ - public DataType getDataType() { - return this.dataType; + public Schema getSchema() { + return this.schema; } /** @@ -174,7 +174,7 @@ public class ShapefileReader { public InputFeatureStream read() throws IOException { InputFeatureStream is = new InputFeatureStream(this.shapefile, this.databaseFile, this.shapeFileIndex); - this.dataType = is.getDataType(); + this.schema = is.getSchema(); this.shapefileDescriptor = is.getShapefileDescriptor(); this.databaseFieldsDescriptors = is.getDatabaseFieldsDescriptors(); return is; diff --git a/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/Entity.java b/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/Entity.java index b173a0c2..e43c1163 100644 --- a/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/Entity.java +++ b/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/Entity.java @@ -34,29 +34,29 @@ public class Entity implements Row { @Override - public DataType dataType() { + public Schema dataType() { var columns = new ArrayList<Column>(); columns.add(new ColumnImpl("id", Long.class)); columns.add(new ColumnImpl("geometry", Geometry.class)); for (var entry : tags.entrySet()) { columns.add(new ColumnImpl(entry.getKey(), String.class)); } - return new DataTypeImpl("entity", columns); + return new SchemaImpl("entity", columns); } @Override - public void set(String name, Object value) { - tags.put(name, value.toString()); + public void set(String column, Object value) { + tags.put(column, value.toString()); } @Override - public Object get(String name) { - if (name.equals("id")) { + public Object get(String column) { + if (column.equals("id")) { return id; - } else if (name.equals("geometry")) { + } else if (column.equals("geometry")) { return geometry; } else { - return tags.get(name); + return tags.get(column); } } diff --git a/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/ImportGeoPackage.java b/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/ImportGeoPackage.java index 735127df..784d093e 100644 --- a/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/ImportGeoPackage.java +++ b/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/ImportGeoPackage.java @@ -14,7 +14,7 @@ package org.apache.baremaps.workflow.tasks; import java.nio.file.Path; import org.apache.baremaps.openstreetmap.utils.ProjectionTransformer; -import org.apache.baremaps.storage.DataFrameProjectionTransform; +import org.apache.baremaps.storage.DataFrameGeometryTransformer; import org.apache.baremaps.storage.geopackage.GeoPackageDatabase; import org.apache.baremaps.storage.postgres.PostgresDatabase; import org.apache.baremaps.workflow.Task; @@ -38,7 +38,7 @@ public record ImportGeoPackage(Path file, String database, Integer sourceSRID, I var postgresDatabase = new PostgresDatabase(dataSource); for (var dataFrame : geoPackageStore.list()) { var transformer = new ProjectionTransformer(sourceSRID, targetSRID); - var transformedDataFrame = new DataFrameProjectionTransform(dataFrame, transformer); + var transformedDataFrame = new DataFrameGeometryTransformer(dataFrame, transformer); postgresDatabase.add(transformedDataFrame); } logger.info("Finished importing {} into {}", file, database); diff --git a/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/ImportShapefile.java b/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/ImportShapefile.java index 4582efe6..95745562 100644 --- a/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/ImportShapefile.java +++ b/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/ImportShapefile.java @@ -14,7 +14,7 @@ package org.apache.baremaps.workflow.tasks; import java.nio.file.Path; import org.apache.baremaps.openstreetmap.utils.ProjectionTransformer; -import org.apache.baremaps.storage.DataFrameProjectionTransform; +import org.apache.baremaps.storage.DataFrameGeometryTransformer; import org.apache.baremaps.storage.postgres.PostgresDatabase; import org.apache.baremaps.storage.shapefile.ShapefileDataFrame; import org.apache.baremaps.workflow.Task; @@ -36,7 +36,7 @@ public record ImportShapefile(Path file, String database, Integer sourceSRID, In try (var featureSet = new ShapefileDataFrame(path)) { var dataSource = context.getDataSource(database); var postgresDatabase = new PostgresDatabase(dataSource); - postgresDatabase.add(new DataFrameProjectionTransform( + postgresDatabase.add(new DataFrameGeometryTransformer( featureSet, new ProjectionTransformer(sourceSRID, targetSRID))); logger.info("Finished importing {} into {}", file, database); } catch (Exception e) { diff --git a/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/TransformEntityCollection.java b/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/TransformEntityCollection.java index f2cc47b3..afcd0fff 100644 --- a/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/TransformEntityCollection.java +++ b/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/TransformEntityCollection.java @@ -53,7 +53,7 @@ public record TransformEntityCollection(Path collection, String database, public void execute(WorkflowContext context) throws Exception { logger.info("Transform {} with {}", collection, recipe); - var dataType = new DataTypeImpl(recipe.name, columns()); + var dataType = new SchemaImpl(recipe.name, columns()); var groups = new AppendOnlyBuffer<>(new EntityDataType(), new MemoryMappedFile(collection)) .stream() @@ -71,7 +71,7 @@ public record TransformEntityCollection(Path collection, String database, var dataFrame = new AbstractDataFrame() { @Override - public DataType dataType() { + public Schema schema() { return dataType; } diff --git a/baremaps-core/src/test/java/org/apache/baremaps/mvt/ExpressionsTest.java b/baremaps-core/src/test/java/org/apache/baremaps/mvt/ExpressionsTest.java index 83e7b80b..629ea6c1 100644 --- a/baremaps-core/src/test/java/org/apache/baremaps/mvt/ExpressionsTest.java +++ b/baremaps-core/src/test/java/org/apache/baremaps/mvt/ExpressionsTest.java @@ -17,8 +17,8 @@ import static org.junit.jupiter.api.Assertions.*; import java.io.IOException; import java.util.List; import java.util.Map; -import org.apache.baremaps.dataframe.DataType; import org.apache.baremaps.dataframe.Row; +import org.apache.baremaps.dataframe.Schema; import org.apache.baremaps.mvt.expression.Expressions; import org.apache.baremaps.mvt.expression.Expressions.*; import org.junit.jupiter.api.Test; @@ -28,7 +28,7 @@ class ExpressionsTest { record RowMock(Map<String, Object> properties) implements Row { @Override - public DataType dataType() { + public Schema dataType() { throw new UnsupportedOperationException(); } @@ -38,13 +38,13 @@ class ExpressionsTest { } @Override - public void set(String name, Object value) { - properties.put(name, value); + public void set(String column, Object value) { + properties.put(column, value); } @Override - public Object get(String name) { - return properties.get(name); + public Object get(String column) { + return properties.get(column); } } diff --git a/baremaps-core/src/test/java/org/apache/baremaps/storage/flatgeobuf/FlatGeoBufFeatureSetTest.java b/baremaps-core/src/test/java/org/apache/baremaps/storage/flatgeobuf/FlatGeoBufDataFrameTest.java similarity index 82% rename from baremaps-core/src/test/java/org/apache/baremaps/storage/flatgeobuf/FlatGeoBufFeatureSetTest.java rename to baremaps-core/src/test/java/org/apache/baremaps/storage/flatgeobuf/FlatGeoBufDataFrameTest.java index a47088be..32b8fab2 100644 --- a/baremaps-core/src/test/java/org/apache/baremaps/storage/flatgeobuf/FlatGeoBufFeatureSetTest.java +++ b/baremaps-core/src/test/java/org/apache/baremaps/storage/flatgeobuf/FlatGeoBufDataFrameTest.java @@ -21,13 +21,13 @@ import java.nio.file.StandardOpenOption; import org.apache.baremaps.testing.TestFiles; import org.junit.jupiter.api.Test; -class FlatGeoBufFeatureSetTest { +class FlatGeoBufDataFrameTest { @Test void getType() throws IOException { try (var channel = FileChannel.open(TestFiles.resolve("countries.fgb"))) { - var featureSet = new FlatGeoBufFeatureSet(channel); - var featureType = featureSet.getType(); + var featureSet = new FlatGeoBufDataFrame(channel); + var featureType = featureSet.getSchema(); assertEquals(featureType.name(), null); assertEquals(featureType.columns().size(), 2); } @@ -36,7 +36,7 @@ class FlatGeoBufFeatureSetTest { @Test void read() throws IOException { try (var channel = FileChannel.open(TestFiles.resolve("countries.fgb"))) { - var featureSet = new FlatGeoBufFeatureSet(channel); + var featureSet = new FlatGeoBufDataFrame(channel); assertEquals(179, featureSet.read().size()); assertEquals(179, featureSet.read().stream().count()); } @@ -48,14 +48,14 @@ class FlatGeoBufFeatureSetTest { file.toFile().deleteOnExit(); try (var channel1 = FileChannel.open(TestFiles.resolve("countries.fgb")); var channel2 = FileChannel.open(file, StandardOpenOption.WRITE)) { - var featureSet1 = new FlatGeoBufFeatureSet(channel1); + var featureSet1 = new FlatGeoBufDataFrame(channel1); var featureList = featureSet1.read().stream().toList(); - var featureSet2 = new FlatGeoBufFeatureSet(channel2, featureSet1.getType()); + var featureSet2 = new FlatGeoBufDataFrame(channel2, featureSet1.getSchema()); featureSet2.write(featureList); } try (var channel = FileChannel.open(file, StandardOpenOption.READ)) { - var featureSet = new FlatGeoBufFeatureSet(channel); + var featureSet = new FlatGeoBufDataFrame(channel); assertEquals(179, featureSet.read().size()); } }
