planetiler/planetiler-core/src/main/java/com/onthegomap/planetiler/archive/TileArchiveMetadata.java

66 wiersze
2.1 KiB
Java

package com.onthegomap.planetiler.archive;
import com.onthegomap.planetiler.Profile;
import com.onthegomap.planetiler.config.Arguments;
import com.onthegomap.planetiler.util.BuildInfo;
import java.util.LinkedHashMap;
import java.util.Map;
/** Controls information that {@link TileArchiveWriter} will write to the archive metadata. */
public record TileArchiveMetadata(
String name,
String description,
String attribution,
String version,
String type,
Map<String, String> planetilerSpecific
) {
public TileArchiveMetadata(Profile profile) {
this(
profile.name(),
profile.description(),
profile.attribution(),
profile.version(),
profile.isOverlay() ? "overlay" : "baselayer",
mapWithBuildInfo()
);
}
public TileArchiveMetadata(Profile profile, Arguments args) {
this(
args.getString("mbtiles_name", "'name' attribute for tileset metadata", profile.name()),
args.getString("mbtiles_description", "'description' attribute for tileset metadata", profile.description()),
args.getString("mbtiles_attribution", "'attribution' attribute for tileset metadata", profile.attribution()),
args.getString("mbtiles_version", "'version' attribute for tileset metadata", profile.version()),
args.getString("mbtiles_type", "'type' attribute for tileset metadata",
profile.isOverlay() ? "overlay" : "baselayer"),
mapWithBuildInfo()
);
}
private static Map<String, String> mapWithBuildInfo() {
Map<String, String> result = new LinkedHashMap<>();
var buildInfo = BuildInfo.get();
if (buildInfo != null) {
if (buildInfo.version() != null) {
result.put("planetiler:version", buildInfo.version());
}
if (buildInfo.githash() != null) {
result.put("planetiler:githash", buildInfo.githash());
}
if (buildInfo.buildTimeString() != null) {
result.put("planetiler:buildtime", buildInfo.buildTimeString());
}
}
return result;
}
public TileArchiveMetadata set(String key, Object value) {
if (key != null && value != null) {
planetilerSpecific.put(key, value.toString());
}
return this;
}
}