BGTSchemaMapper.java
/*
* Copyright (C) 2021 B3Partners B.V.
*
* SPDX-License-Identifier: MIT
*
*/
package nl.b3p.brmo.bgt.schema;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import nl.b3p.brmo.bgt.loader.Utils;
import nl.b3p.brmo.schema.ObjectType;
import nl.b3p.brmo.schema.SchemaSQLMapper;
import nl.b3p.brmo.sql.dialect.SQLDialect;
public class BGTSchemaMapper extends SchemaSQLMapper {
public static BGTSchemaMapper instance;
private static final String SCHEMA_VERSION_VALUE = "1";
public static final String METADATA_TABLE_NAME = "brmo_metadata";
public enum Metadata {
SCHEMA_VERSION,
LOADER_VERSION,
BRMOVERSIE,
FEATURE_TYPES,
INCLUDE_HISTORY,
LINEARIZE_CURVES,
TABLE_PREFIX,
INITIAL_LOAD_TIME,
INITIAL_LOAD_DELTA_ID,
DELTA_ID,
DELTA_TIME_TO,
GEOM_FILTER;
public String getDbKey() {
return this.name().toLowerCase();
}
}
public static Map<String, String> bgtObjectTypeTableNames =
Stream.of(
new String[][] {
{"PlantCover", "begroeidterreindeel"},
{"BuildingInstallation", "gebouwinstallatie"},
{"AuxiliaryTrafficArea", "ondersteunendwegdeel"},
{"BridgeConstructionElement", "overbruggingsdeel"},
{"BuildingPart", "pand"},
{"Railway", "spoor"},
{"TunnelPart", "tunneldeel"},
{"SolitaryVegetationObject", "vegetatieobject"},
{"TrafficArea", "wegdeel"}
})
.collect(Collectors.toMap(e -> e[0], e -> e[1]));
public BGTSchemaMapper() {
super(BGTSchema.getInstance());
objectTypeNameToTableName.putAll(bgtObjectTypeTableNames);
}
public static BGTSchemaMapper getInstance() {
if (instance == null) {
instance = new BGTSchemaMapper();
}
return instance;
}
@Override
public String getMetadataTableName() {
return METADATA_TABLE_NAME;
}
@Override
public String getColumnNameForObjectType(ObjectType objectType, String attributeName) {
if (attributeName.startsWith("geometrie")) {
return "geom";
}
if (attributeName.startsWith("kruinlijn")) {
return "geom_kruinlijn";
}
return super.getColumnNameForObjectType(objectType, attributeName);
}
@Override
public List<String> getCreateMetadataTableStatements(
SQLDialect dialect, String tablePrefix, boolean dropIfExists) {
List<String> statements =
super.getCreateMetadataTableStatements(dialect, tablePrefix, dropIfExists);
Map<BGTSchemaMapper.Metadata, String> defaultMetadata =
Stream.of(
new Object[][] {
{BGTSchemaMapper.Metadata.SCHEMA_VERSION, SCHEMA_VERSION_VALUE},
{BGTSchemaMapper.Metadata.LOADER_VERSION, Utils.getLoaderVersion()},
{BGTSchemaMapper.Metadata.BRMOVERSIE, Utils.getBrmoVersion()},
{BGTSchemaMapper.Metadata.TABLE_PREFIX, tablePrefix},
})
.collect(
Collectors.toMap(
entry -> (BGTSchemaMapper.Metadata) entry[0], entry -> (String) entry[1]));
Stream.of(BGTSchemaMapper.Metadata.values())
.forEach(
metadata -> {
String value = defaultMetadata.get(metadata);
statements.add(
String.format(
"insert into %s (naam, waarde) values ('%s', %s)",
getMetadataTableName(),
metadata.getDbKey(),
value == null ? "null" : "'" + value + "'"));
});
return statements;
}
}