This is an automated email from the ASF dual-hosted git repository. bchapuis pushed a commit to branch workflow in repository https://gitbox.apache.org/repos/asf/incubator-baremaps.git
commit a8d8939ea805d5e2de4548b5ad61560db420dbf1 Author: Bertil Chapuis <[email protected]> AuthorDate: Mon Nov 13 16:33:29 2023 +0100 Add javadoc --- .../baremaps/workflow/tasks/DecompressBZip2.java | 78 -------------- .../baremaps/workflow/tasks/DecompressFile.java | 117 ++++++++++++++++++--- .../baremaps/workflow/tasks/DownloadUrl.java | 17 ++- .../baremaps/workflow/tasks/ExecuteCommand.java | 25 +++++ .../apache/baremaps/workflow/tasks/ExecuteSql.java | 50 ++++++++- .../baremaps/workflow/tasks/ExecuteSqlScript.java | 35 ++++++ .../baremaps/workflow/tasks/ExportVectorTiles.java | 1 + .../workflow/tasks/ImportDaylightFeatures.java | 44 ++++++-- .../workflow/tasks/ImportDaylightTranslations.java | 35 ++++++ .../baremaps/workflow/tasks/ImportGeoPackage.java | 57 ++++++++++ .../baremaps/workflow/tasks/ImportOsmOsc.java | 68 ++++++++++++ .../baremaps/workflow/tasks/ImportOsmPbf.java | 92 ++++++++++++++++ .../baremaps/workflow/tasks/ImportShapefile.java | 57 ++++++++++ .../apache/baremaps/workflow/tasks/LogMessage.java | 24 +++++ .../apache/baremaps/workflow/tasks/UngzipFile.java | 35 ++++++ .../apache/baremaps/workflow/tasks/UnzipFile.java | 35 ++++++ .../baremaps/workflow/tasks/UpdateOsmDatabase.java | 66 ++++++++++++ .../apache/baremaps/workflow/ObjectMapperTest.java | 2 +- .../org/apache/baremaps/workflow/WorkflowTest.java | 15 +-- .../baremaps/workflow/tasks/DownloadUrlTest.java | 6 +- 20 files changed, 738 insertions(+), 121 deletions(-) diff --git a/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/DecompressBZip2.java b/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/DecompressBZip2.java deleted file mode 100644 index ef17fe00..00000000 --- a/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/DecompressBZip2.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to you under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.baremaps.workflow.tasks; - -import com.fasterxml.jackson.annotation.JsonTypeName; -import java.io.BufferedInputStream; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.StandardCopyOption; -import org.apache.baremaps.workflow.Task; -import org.apache.baremaps.workflow.WorkflowContext; -import org.apache.baremaps.workflow.WorkflowException; -import org.apache.commons.compress.compressors.bzip2.BZip2CompressorInputStream; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -@JsonTypeName("DecompressBZip2") -public class DecompressBZip2 implements Task { - - private static final Logger logger = LoggerFactory.getLogger(DecompressBZip2.class); - - private Path source; - private Path target; - - public DecompressBZip2() {} - - public DecompressBZip2(Path source, Path target) { - this.source = source; - this.target = target; - } - - public Path getSource() { - return source; - } - - public void setSource(Path source) { - this.source = source; - } - - public Path getTarget() { - return target; - } - - public void setTarget(Path target) { - this.target = target; - } - - @Override - public void execute(WorkflowContext context) throws Exception { - var sourcePath = source.toAbsolutePath(); - try (var bufferedInputStream = new BufferedInputStream(Files.newInputStream(sourcePath)); - var compressedInputStream = new BZip2CompressorInputStream(bufferedInputStream)) { - var targetPath = target.toAbsolutePath(); - if (!Files.exists(targetPath)) { - Files.createDirectories(targetPath.getParent()); - Files.createFile(targetPath); - } - Files.copy(compressedInputStream, targetPath, StandardCopyOption.REPLACE_EXISTING); - } catch (Exception e) { - throw new WorkflowException(e); - } - } -} diff --git a/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/DecompressFile.java b/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/DecompressFile.java index 4d991077..37b0ac0e 100644 --- a/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/DecompressFile.java +++ b/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/DecompressFile.java @@ -33,11 +33,18 @@ import org.apache.commons.compress.compressors.bzip2.BZip2CompressorInputStream; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +/** + * Decompresses a file based on a given compression format. The supported formats are zip, targz, + * tarbz2, gzip and bzip2. + */ @JsonTypeName("DecompressFile") public class DecompressFile implements Task { private static final Logger logger = LoggerFactory.getLogger(DecompressFile.class); + /** + * The compression format. + */ public enum Compression { zip, targz, @@ -47,43 +54,84 @@ public class DecompressFile implements Task { } private Path source; - private Path target; - private Compression compression; + /** + * Constructs a {@code DecompressFile}. + */ public DecompressFile() {} + /** + * Constructs a {@code DecompressFile}. + * + * @param source the source file + * @param target the target file + * @param compression the compression format (zip, targz, tarbz2, gzip or bzip2) + */ public DecompressFile(Path source, Path target, Compression compression) { this.source = source; this.target = target; this.compression = compression; } + /** + * Returns the source file. + * + * @return the source file + */ public Path getSource() { return source; } + /** + * Sets the source file. + * + * @param source the source file + */ public void setSource(Path source) { this.source = source; } + /** + * Returns the target file. + * + * @return the target file + */ public Path getTarget() { return target; } + /** + * Sets the target file. + * + * @param target the target file + */ public void setTarget(Path target) { this.target = target; } + /** + * Returns the compression format. + * + * @return the compression format + */ public Compression getCompression() { return compression; } + /** + * Sets the compression format. + * + * @param compression the compression format + */ public void setCompression(Compression compression) { this.compression = compression; } + /** + * {@inheritDoc} + */ @Override public void execute(WorkflowContext context) throws Exception { var sourcePath = source.toAbsolutePath(); @@ -97,26 +145,47 @@ public class DecompressFile implements Task { } } - public static void decompressBzip2(Path sourcePath, Path targetPath) throws IOException { - try (var bufferedInputStream = new BufferedInputStream(Files.newInputStream(sourcePath)); + /** + * Decompresses a bzip2 file. + * + * @param source the source file + * @param target the target file + * @throws IOException if an I/O error occurs + */ + protected static void decompressBzip2(Path source, Path target) throws IOException { + try (var bufferedInputStream = new BufferedInputStream(Files.newInputStream(source)); var bzip2InputStream = new BZip2CompressorInputStream(bufferedInputStream)) { - Files.copy(bzip2InputStream, targetPath, StandardCopyOption.REPLACE_EXISTING); + Files.copy(bzip2InputStream, target, StandardCopyOption.REPLACE_EXISTING); } } - public static void decompressGzip(Path sourcePath, Path targetPath) throws IOException { - try (var zis = new GZIPInputStream(new BufferedInputStream(Files.newInputStream(sourcePath)))) { - Files.copy(zis, targetPath, StandardCopyOption.REPLACE_EXISTING); + /** + * Decompresses a gzip file. + * + * @param source the source file + * @param target the target file + * @throws IOException if an I/O error occurs + */ + protected static void decompressGzip(Path source, Path target) throws IOException { + try (var zis = new GZIPInputStream(new BufferedInputStream(Files.newInputStream(source)))) { + Files.copy(zis, target, StandardCopyOption.REPLACE_EXISTING); } } - public static void decompressTarGz(Path sourcePath, Path targetPath) throws IOException { - try (var bufferedInputStream = new BufferedInputStream(Files.newInputStream(sourcePath)); + /** + * Decompresses a tar.gz file. + * + * @param source the source file + * @param target the target file + * @throws IOException if an I/O error occurs + */ + protected static void decompressTarGz(Path source, Path target) throws IOException { + try (var bufferedInputStream = new BufferedInputStream(Files.newInputStream(source)); var gzipInputStream = new GZIPInputStream(bufferedInputStream); var tarInputStream = new TarArchiveInputStream(gzipInputStream)) { TarArchiveEntry entry; while ((entry = (TarArchiveEntry) tarInputStream.getNextEntry()) != null) { - var path = targetPath.resolve(entry.getName()); + var path = target.resolve(entry.getName()); if (entry.isDirectory()) { Files.createDirectories(path); } else { @@ -134,13 +203,20 @@ public class DecompressFile implements Task { } } - public static void decompressTarBz2(Path sourcePath, Path targetPath) throws IOException { - try (var bufferedInputStream = new BufferedInputStream(Files.newInputStream(sourcePath)); + /** + * Decompresses a tar.bz2 file. + * + * @param source the source file + * @param target the target file + * @throws IOException if an I/O error occurs + */ + protected static void decompressTarBz2(Path source, Path target) throws IOException { + try (var bufferedInputStream = new BufferedInputStream(Files.newInputStream(source)); var bzip2InputStream = new BZip2CompressorInputStream(bufferedInputStream); var tarInputStream = new TarArchiveInputStream(bzip2InputStream)) { TarArchiveEntry entry; while ((entry = (TarArchiveEntry) tarInputStream.getNextEntry()) != null) { - var path = targetPath.resolve(entry.getName()); + var path = target.resolve(entry.getName()); if (entry.isDirectory()) { Files.createDirectories(path); } else { @@ -158,12 +234,19 @@ public class DecompressFile implements Task { } } - public static void decompressZip(Path sourcePath, Path targetPath) throws IOException { - try (var zipFile = new ZipFile(sourcePath.toFile())) { + /** + * Decompresses a zip file. + * + * @param source the source file + * @param target the target file + * @throws IOException if an I/O error occurs + */ + protected static void decompressZip(Path source, Path target) throws IOException { + try (var zipFile = new ZipFile(source.toFile())) { var entries = zipFile.entries(); while (entries.hasMoreElements()) { var entry = entries.nextElement(); - var path = targetPath.resolve(entry.getName()); + var path = target.resolve(entry.getName()); Files.createDirectories(path.getParent()); Files.write(path, new byte[] {}, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING); diff --git a/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/DownloadUrl.java b/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/DownloadUrl.java index 3b7bd5b6..767de347 100644 --- a/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/DownloadUrl.java +++ b/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/DownloadUrl.java @@ -30,6 +30,9 @@ import org.apache.baremaps.workflow.WorkflowContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +/** + * Downloads a file from a URL. + */ @JsonTypeName("DownloadUrl") public class DownloadUrl implements Task { @@ -47,12 +50,18 @@ public class DownloadUrl implements Task { private Boolean replaceExisting; + /** + * Constructs an {@code DownloadUrl}. + */ public DownloadUrl() {} - public DownloadUrl(String url, Path path) { - this(url, path, false); - } - + /** + * Constructs an {@code DownloadUrl}. + * + * @param url the url + * @param path the path + * @param replaceExisting whether to replace existing files + */ public DownloadUrl(String url, Path path, boolean replaceExisting) { this.url = url; this.path = path; diff --git a/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/ExecuteCommand.java b/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/ExecuteCommand.java index 6ccd6ddb..6d273a09 100644 --- a/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/ExecuteCommand.java +++ b/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/ExecuteCommand.java @@ -23,6 +23,9 @@ import org.apache.baremaps.workflow.WorkflowContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +/** + * Execute a bash command. + */ @JsonTypeName("ExecuteCommand") public class ExecuteCommand implements Task { @@ -30,22 +33,44 @@ public class ExecuteCommand implements Task { private String command; + /** + * Constructs an {@code ExecuteCommand}. + */ public ExecuteCommand() {} + /** + * Constructs an {@code ExecuteCommand}. + * + * @param command the bash command + */ public ExecuteCommand(String command) { this.command = command; } + /** + * Returns the bash command. + * + * @return the bash command + */ public String getCommand() { return command; } + /** + * Sets the bash command. + * + * @param command the bash command + */ public void setCommand(String command) { this.command = command; } + /** + * {@inheritDoc} + */ @Override public void execute(WorkflowContext context) throws Exception { new ProcessBuilder().command("/bin/sh", "-c", command).start().waitFor(); } + } diff --git a/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/ExecuteSql.java b/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/ExecuteSql.java index f405250c..96bb151e 100644 --- a/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/ExecuteSql.java +++ b/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/ExecuteSql.java @@ -30,6 +30,9 @@ import org.apache.baremaps.workflow.WorkflowException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +/** + * Execute a SQL query (single statement). + */ @JsonTypeName("ExecuteSql") public class ExecuteSql implements Task { @@ -39,42 +42,85 @@ public class ExecuteSql implements Task { private Path file; - private boolean parallel; + private Boolean parallel; + /** + * Constructs an {@code ExecuteSql}. + */ public ExecuteSql() { } - public ExecuteSql(Object database, Path file, boolean parallel) { + /** + * Constructs an {@code ExecuteSql}. + * + * @param database the database + * @param file the SQL file + * @param parallel whether to execute the queries in parallel + */ + public ExecuteSql(Object database, Path file, Boolean parallel) { this.database = database; this.file = file; this.parallel = parallel; } + /** + * Returns the database. + * + * @return the database + */ public Object getDatabase() { return database; } + /** + * Sets the database. + * + * @param database the database + */ public void setDatabase(Object database) { this.database = database; } + /** + * Returns the SQL file. + * + * @return the SQL file + */ public Path getFile() { return file; } + /** + * Sets the SQL file. + * + * @param file the SQL file + */ public void setFile(Path file) { this.file = file; } + /** + * Returns whether to execute the queries in parallel. + * + * @return whether to execute the queries in parallel + */ public boolean isParallel() { return parallel; } + /** + * Sets whether to execute the queries in parallel. + * + * @param parallel whether to execute the queries in parallel + */ public void setParallel(boolean parallel) { this.parallel = parallel; } + /** + * {@inheritDoc} + */ @Override public void execute(WorkflowContext context) throws Exception { var script = clean(Files.readString(file)); diff --git a/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/ExecuteSqlScript.java b/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/ExecuteSqlScript.java index e8b95e82..af8dff0d 100644 --- a/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/ExecuteSqlScript.java +++ b/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/ExecuteSqlScript.java @@ -27,6 +27,9 @@ import org.apache.baremaps.workflow.WorkflowException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +/** + * Execute a SQL script (multiple statements). + */ @JsonTypeName("ExecuteSqlScript") public class ExecuteSqlScript implements Task { @@ -36,31 +39,63 @@ public class ExecuteSqlScript implements Task { private Path file; + /** + * Constructs an {@code ExecuteSqlScript}. + */ public ExecuteSqlScript() { } + /** + * Constructs an {@code ExecuteSqlScript}. + * + * @param database the database + * @param file the SQL file + */ public ExecuteSqlScript(Object database, Path file) { this.database = database; this.file = file; } + /** + * Returns the database. + * + * @return the database + */ public Object getDatabase() { return database; } + /** + * Sets the database. + * + * @param database the database + */ public void setDatabase(Object database) { this.database = database; } + /** + * Returns the SQL file. + * + * @return the SQL file + */ public Path getFile() { return file; } + /** + * Sets the SQL file. + * + * @param file the SQL file + */ public void setFile(Path file) { this.file = file; } + /** + * {@inheritDoc} + */ @Override public void execute(WorkflowContext context) throws Exception { var script = Files.readString(file); diff --git a/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/ExportVectorTiles.java b/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/ExportVectorTiles.java index cf6c7202..7e54476a 100644 --- a/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/ExportVectorTiles.java +++ b/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/ExportVectorTiles.java @@ -44,6 +44,7 @@ import org.locationtech.jts.geom.Envelope; import org.slf4j.Logger; import org.slf4j.LoggerFactory; + @JsonTypeName("ExportVectorTiles") public class ExportVectorTiles implements Task { diff --git a/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/ImportDaylightFeatures.java b/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/ImportDaylightFeatures.java index ba00a255..d116e339 100644 --- a/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/ImportDaylightFeatures.java +++ b/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/ImportDaylightFeatures.java @@ -32,6 +32,9 @@ import org.apache.baremaps.workflow.WorkflowContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +/** + * Import daylight features. + */ @JsonTypeName("ImportDaylightFeatures") public class ImportDaylightFeatures implements Task { @@ -49,31 +52,63 @@ public class ImportDaylightFeatures implements Task { private Object database; + /** + * Constructs an {@code ImportDaylightFeatures}. + */ public ImportDaylightFeatures() { } + /** + * Constructs an {@code ImportDaylightFeatures}. + * + * @param file the daylight file + * @param database the database + */ public ImportDaylightFeatures(Path file, Object database) { this.file = file; this.database = database; } + /** + * Returns the daylight file. + * + * @return the daylight file + */ public Path getFile() { return file; } + /** + * Sets the daylight file. + * + * @param file + */ public void setFile(Path file) { this.file = file; } + /** + * Returns the database. + * + * @return + */ public Object getDatabase() { return database; } + /** + * Sets the database. + * + * @param database + */ public void setDatabase(Object database) { this.database = database; } + /** + * {@inheritDoc} + */ @Override public void execute(WorkflowContext context) throws Exception { var datasource = context.getDataSource(database); @@ -95,42 +130,33 @@ public class ImportDaylightFeatures implements Task { case "node" -> { var node = nodeRepository.get(feature.id()); if (node != null) { - // Merge the tags var tags = new HashMap<>(feature.tags()); if (node.getTags() != null) { tags.putAll(node.getTags()); } node.setTags(tags); - - // Update the node nodeRepository.put(node); } } case "way" -> { var way = wayRepository.get(feature.id()); if (way != null) { - // Merge the tags var tags = new HashMap<>(feature.tags()); if (way.getTags() != null) { tags.putAll(way.getTags()); } way.setTags(tags); - - // Update the way wayRepository.put(way); } } case "relation" -> { var relation = relationRepository.get(feature.id()); if (relation != null) { - // Merge the tags var tags = new HashMap<>(feature.tags()); if (relation.getTags() != null) { tags.putAll(relation.getTags()); } relation.setTags(tags); - - // Update the relation relationRepository.put(relation); } } diff --git a/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/ImportDaylightTranslations.java b/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/ImportDaylightTranslations.java index dc6dc619..93ef1b09 100644 --- a/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/ImportDaylightTranslations.java +++ b/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/ImportDaylightTranslations.java @@ -30,6 +30,9 @@ import org.apache.baremaps.workflow.WorkflowContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +/** + * Import daylight translations. + */ @JsonTypeName("ImportDaylightTranslations") public class ImportDaylightTranslations implements Task { @@ -61,31 +64,63 @@ public class ImportDaylightTranslations implements Task { private Object database; + /** + * Constructs an {@code ImportDaylightTranslations}. + */ public ImportDaylightTranslations() { } + /** + * Constructs an {@code ImportDaylightTranslations}. + * + * @param file the daylight file + * @param database the database + */ public ImportDaylightTranslations(Path file, Object database) { this.file = file; this.database = database; } + /** + * Returns the daylight file. + * + * @return the daylight file + */ public Path getFile() { return file; } + /** + * Sets the daylight file. + * + * @param file the daylight file + */ public void setFile(Path file) { this.file = file; } + /** + * Returns the database. + * + * @return the database + */ public Object getDatabase() { return database; } + /** + * Sets the database. + * + * @param database the database + */ public void setDatabase(Object database) { this.database = database; } + /** + * {@inheritDoc} + */ @Override public void execute(WorkflowContext context) throws Exception { var datasource = context.getDataSource(database); 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 882f8548..c2e73f5a 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 @@ -30,6 +30,9 @@ import org.apache.baremaps.workflow.WorkflowException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +/** + * Import a GeoPackage into a database. + */ @JsonTypeName("ImportGeoPackage") public class ImportGeoPackage implements Task { @@ -40,10 +43,21 @@ public class ImportGeoPackage implements Task { private Integer sourceSRID; private Integer targetSRID; + /** + * Constructs an {@code ImportGeoPackage}. + */ public ImportGeoPackage() { } + /** + * Constructs an {@code ImportGeoPackage}. + * + * @param file the GeoPackage file + * @param database the database + * @param sourceSRID the source SRID + * @param targetSRID the target SRID + */ public ImportGeoPackage(Path file, Object database, Integer sourceSRID, Integer targetSRID) { this.file = file; this.database = database; @@ -51,38 +65,81 @@ public class ImportGeoPackage implements Task { this.targetSRID = targetSRID; } + /** + * Returns the GeoPackage file. + * + * @return the GeoPackage file + */ public Path getFile() { return file; } + /** + * Sets the GeoPackage file. + * + * @param file the GeoPackage file + */ public void setFile(Path file) { this.file = file; } + /** + * Returns the database. + * + * @return the database + */ public Object getDatabase() { return database; } + /** + * Sets the database. + * + * @param database the database + */ public void setDatabase(Object database) { this.database = database; } + /** + * Returns the source SRID. + * + * @return the source SRID + */ public Integer getSourceSRID() { return sourceSRID; } + /** + * Sets the source SRID. + * + * @param sourceSRID the source SRID + */ public void setSourceSRID(Integer sourceSRID) { this.sourceSRID = sourceSRID; } + /** + * Returns the target SRID. + * + * @return the target SRID + */ public Integer getTargetSRID() { return targetSRID; } + /** + * Sets the target SRID. + * + * @param targetSRID the target SRID + */ public void setTargetSRID(Integer targetSRID) { this.targetSRID = targetSRID; } + /** + * {@inheritDoc} + */ @Override public void execute(WorkflowContext context) throws Exception { var path = file.toAbsolutePath(); diff --git a/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/ImportOsmOsc.java b/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/ImportOsmOsc.java index da65e523..045ce4c2 100644 --- a/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/ImportOsmOsc.java +++ b/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/ImportOsmOsc.java @@ -42,6 +42,9 @@ import org.locationtech.jts.geom.Coordinate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +/** + * Import an OSM OSC file into a database. + */ @JsonTypeName("ImportOsmOsc") public class ImportOsmOsc implements Task { @@ -53,10 +56,22 @@ public class ImportOsmOsc implements Task { private Integer srid; private Compression compression; + /** + * Constructs an {@code ImportOsmOsc}. + */ public ImportOsmOsc() { } + /** + * Constructs an {@code ImportOsmOsc}. + * + * @param file the OSM OSC file + * @param cache the cache directory + * @param database the database + * @param srid the database SRID + * @param compression the compression + */ public ImportOsmOsc(Path file, Path cache, Object database, Integer srid, Compression compression) { this.file = file; @@ -66,46 +81,99 @@ public class ImportOsmOsc implements Task { this.compression = compression; } + /** + * Returns the OSM OSC file. + * + * @return the OSM OSC file + */ public Path getFile() { return file; } + /** + * Sets the OSM OSC file. + * + * @param file + */ public void setFile(Path file) { this.file = file; } + /** + * Returns the cache directory. + * + * @return the cache directory + */ public Path getCache() { return cache; } + /** + * Sets the cache directory. + * + * @param cache the cache directory + */ public void setCache(Path cache) { this.cache = cache; } + /** + * Returns the database. + * + * @return the database + */ public Object getDatabase() { return database; } + /** + * Sets the database. + * + * @param database the database + */ public void setDatabase(Object database) { this.database = database; } + /** + * Returns the database SRID. + * + * @return the database SRID + */ public Integer getSrid() { return srid; } + /** + * Sets the database SRID. + * + * @param srid the database SRID + */ public void setSrid(Integer srid) { this.srid = srid; } + /** + * Returns the compression. + * + * @return the compression + */ public Compression getCompression() { return compression; } + /** + * Sets the compression. + * + * @param compression the compression + */ public void setCompression(Compression compression) { this.compression = compression; } + /** + * {@inheritDoc} + */ @Override public void execute(WorkflowContext context) throws Exception { var datasource = context.getDataSource(database); diff --git a/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/ImportOsmPbf.java b/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/ImportOsmPbf.java index 8a14d78c..d996037c 100644 --- a/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/ImportOsmPbf.java +++ b/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/ImportOsmPbf.java @@ -47,6 +47,9 @@ import org.locationtech.jts.geom.Coordinate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +/** + * Import an OSM PBF file into a database. + */ @JsonTypeName("ImportOsmPbf") public class ImportOsmPbf implements Task { @@ -59,10 +62,23 @@ public class ImportOsmPbf implements Task { private Integer databaseSrid; private Boolean replaceExisting; + /** + * Constructs an {@code ImportOsmPbf}. + */ public ImportOsmPbf() { } + /** + * Constructs an {@code ImportOsmPbf}. + * + * @param file the OSM PBF file + * @param cache the cache directory + * @param cleanCache whether to clean the cache directory + * @param database the database + * @param databaseSrid the database SRID + * @param replaceExisting whether to replace the existing tables + */ public ImportOsmPbf(Path file, Path cache, Boolean cleanCache, Object database, Integer databaseSrid, Boolean replaceExisting) { this.file = file; @@ -73,54 +89,117 @@ public class ImportOsmPbf implements Task { this.replaceExisting = replaceExisting; } + /** + * Returns the OSM PBF file. + * + * @return the OSM PBF file + */ public Path getFile() { return file; } + /** + * Sets the OSM PBF file. + * + * @param file the OSM PBF file + */ public void setFile(Path file) { this.file = file; } + /** + * Returns the cache directory. + * + * @return the cache directory + */ public Path getCache() { return cache; } + /** + * Sets the cache directory. + * + * @param cache the cache directory + */ public void setCache(Path cache) { this.cache = cache; } + /** + * Returns whether to clean the cache directory. + * + * @return whether to clean the cache directory + */ public Boolean getCleanCache() { return cleanCache; } + /** + * Sets whether to clean the cache directory. + * + * @param cleanCache whether to clean the cache directory + */ public void setCleanCache(Boolean cleanCache) { this.cleanCache = cleanCache; } + /** + * Returns the database. + * + * @return the database + */ public Object getDatabase() { return database; } + /** + * Sets the database. + * + * @param database the database + */ public void setDatabase(Object database) { this.database = database; } + /** + * Returns the database SRID. + * + * @return the database SRID + */ public Integer getDatabaseSrid() { return databaseSrid; } + /** + * Sets the database SRID. + * + * @param databaseSrid the database SRID + */ public void setDatabaseSrid(Integer databaseSrid) { this.databaseSrid = databaseSrid; } + /** + * Returns whether to replace the existing tables. + * + * @return whether to replace the existing tables + */ public Boolean getReplaceExisting() { return replaceExisting; } + /** + * Sets whether to replace the existing tables. + * + * @param replaceExisting whether to replace the existing tables + */ public void setReplaceExisting(Boolean replaceExisting) { this.replaceExisting = replaceExisting; } + /** + * {@inheritDoc} + */ @Override public void execute(WorkflowContext context) throws Exception { var dataSource = context.getDataSource(database); @@ -189,6 +268,19 @@ public class ImportOsmPbf implements Task { } } + /** + * Imports an OSM PBF file into a database. + * + * @param path the OSM PBF file + * @param coordinateMap the coordinate map + * @param referenceMap the reference map + * @param headerRepository the header repository + * @param nodeRepository the node repository + * @param wayRepository the way repository + * @param relationRepository the relation repository + * @param databaseSrid the database SRID + * @throws IOException + */ public static void execute( Path path, DataMap<Long, Coordinate> coordinateMap, 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 5a68ce03..d67cad51 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 @@ -30,6 +30,9 @@ import org.apache.baremaps.workflow.WorkflowException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +/** + * Import a shapefile into a database. + */ @JsonTypeName("ImportShapefile") public class ImportShapefile implements Task { @@ -40,10 +43,21 @@ public class ImportShapefile implements Task { private Integer sourceSRID; private Integer targetSRID; + /** + * Constructs an {@code ImportShapefile}. + */ public ImportShapefile() { } + /** + * Constructs an {@code ImportShapefile}. + * + * @param file the shapefile file + * @param database the database + * @param sourceSRID the source SRID + * @param targetSRID the target SRID + */ public ImportShapefile(Path file, Object database, Integer sourceSRID, Integer targetSRID) { this.file = file; this.database = database; @@ -51,38 +65,81 @@ public class ImportShapefile implements Task { this.targetSRID = targetSRID; } + /** + * Returns the shapefile file. + * + * @return the shapefile file + */ public Path getFile() { return file; } + /** + * Sets the shapefile file. + * + * @param file the shapefile file + */ public void setFile(Path file) { this.file = file; } + /** + * Returns the database. + * + * @return the database + */ public Object getDatabase() { return database; } + /** + * Sets the database. + * + * @param database the database + */ public void setDatabase(Object database) { this.database = database; } + /** + * Returns the source SRID. + * + * @return the source SRID + */ public Integer getSourceSRID() { return sourceSRID; } + /** + * Sets the source SRID. + * + * @param sourceSRID the source SRID + */ public void setSourceSRID(Integer sourceSRID) { this.sourceSRID = sourceSRID; } + /** + * Returns the target SRID. + * + * @return the target SRID + */ public Integer getTargetSRID() { return targetSRID; } + /** + * Sets the target SRID. + * + * @param targetSRID the target SRID + */ public void setTargetSRID(Integer targetSRID) { this.targetSRID = targetSRID; } + /** + * {@inheritDoc} + */ @Override public void execute(WorkflowContext context) throws Exception { var path = file.toAbsolutePath(); diff --git a/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/LogMessage.java b/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/LogMessage.java index f57387bd..2261d3f6 100644 --- a/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/LogMessage.java +++ b/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/LogMessage.java @@ -23,6 +23,9 @@ import org.apache.baremaps.workflow.WorkflowContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +/** + * Log a message. + */ @JsonTypeName("LogMessage") public class LogMessage implements Task { @@ -30,22 +33,43 @@ public class LogMessage implements Task { private String message; + /** + * Constructs an {@code LogMessage}. + */ public LogMessage() { } + /** + * Constructs an {@code LogMessage}. + * + * @param message the message + */ public LogMessage(String message) { this.message = message; } + /** + * Returns the message. + * + * @return the message + */ public String getMessage() { return message; } + /** + * Sets the message. + * + * @param message the message + */ public void setMessage(String message) { this.message = message; } + /** + * {@inheritDoc} + */ @Override public void execute(WorkflowContext context) throws Exception { logger.info(message); diff --git a/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/UngzipFile.java b/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/UngzipFile.java index cd9d3f8c..c34bcb1d 100644 --- a/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/UngzipFile.java +++ b/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/UngzipFile.java @@ -29,6 +29,9 @@ import org.apache.baremaps.workflow.WorkflowException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +/** + * Ungzip a file. + */ @JsonTypeName("UngzipFile") public class UngzipFile implements Task { @@ -37,31 +40,63 @@ public class UngzipFile implements Task { private Path file; private Path directory; + /** + * Constructs an {@code UngzipFile}. + */ public UngzipFile() { } + /** + * Constructs an {@code UngzipFile}. + * + * @param file the file + * @param directory the directory + */ public UngzipFile(Path file, Path directory) { this.file = file; this.directory = directory; } + /** + * Returns the file. + * + * @return the file + */ public Path getFile() { return file; } + /** + * Sets the file. + * + * @param file the file + */ public void setFile(Path file) { this.file = file; } + /** + * Returns the directory. + * + * @return the directory + */ public Path getDirectory() { return directory; } + /** + * Sets the directory. + * + * @param directory the directory + */ public void setDirectory(Path directory) { this.directory = directory; } + /** + * {@inheritDoc} + */ @Override public void execute(WorkflowContext context) throws Exception { var filePath = file.toAbsolutePath(); diff --git a/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/UnzipFile.java b/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/UnzipFile.java index 4c95f599..02185a90 100644 --- a/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/UnzipFile.java +++ b/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/UnzipFile.java @@ -26,6 +26,9 @@ import org.apache.baremaps.workflow.WorkflowContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +/** + * Unzip a file. + */ @JsonTypeName("UnzipFile") public class UnzipFile implements Task { @@ -34,31 +37,63 @@ public class UnzipFile implements Task { private Path file; private Path directory; + /** + * Constructs an {@code UnzipFile}. + */ public UnzipFile() { } + /** + * Constructs an {@code UnzipFile}. + * + * @param file the file + * @param directory the directory + */ public UnzipFile(Path file, Path directory) { this.file = file; this.directory = directory; } + /** + * Returns the file. + * + * @return the file + */ public Path getFile() { return file; } + /** + * Sets the file. + * + * @param file the file + */ public void setFile(Path file) { this.file = file; } + /** + * Returns the directory. + * + * @return the directory + */ public Path getDirectory() { return directory; } + /** + * Sets the directory. + * + * @param directory the directory + */ public void setDirectory(Path directory) { this.directory = directory; } + /** + * {@inheritDoc} + */ @Override public void execute(WorkflowContext context) throws Exception { var filePath = file.toAbsolutePath(); diff --git a/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/UpdateOsmDatabase.java b/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/UpdateOsmDatabase.java index b11e8449..9dce1563 100644 --- a/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/UpdateOsmDatabase.java +++ b/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/UpdateOsmDatabase.java @@ -21,6 +21,9 @@ import static org.apache.baremaps.stream.ConsumerUtils.consumeThenReturn; import com.fasterxml.jackson.annotation.JsonTypeName; import java.io.BufferedInputStream; +import java.net.MalformedURLException; +import java.net.URI; +import java.net.URL; import java.util.List; import java.util.zip.GZIPInputStream; import org.apache.baremaps.database.collection.DataMap; @@ -47,6 +50,9 @@ import org.locationtech.jts.geom.Coordinate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +/** + * Update an OSM database based on the header data stored in the database. + */ @JsonTypeName("UpdateOsmDatabase") public class UpdateOsmDatabase implements Task { @@ -58,27 +64,56 @@ public class UpdateOsmDatabase implements Task { private String replicationUrl; + /** + * Constructs an {@code UpdateOsmDatabase}. + */ public UpdateOsmDatabase() { } + /** + * Constructs an {@code UpdateOsmDatabase}. + * + * @param database the database + * @param databaseSrid the database SRID + */ public UpdateOsmDatabase(Object database, Integer databaseSrid) { this.database = database; this.databaseSrid = databaseSrid; } + /** + * Returns the database. + * + * @return the database + */ public Object getDatabase() { return database; } + /** + * Sets the database. + * + * @param database the database + */ public void setDatabase(Object database) { this.database = database; } + /** + * Returns the database SRID. + * + * @return the database SRID + */ public Integer getDatabaseSrid() { return databaseSrid; } + /** + * Sets the database SRID. + * + * @param databaseSrid the database SRID + */ public void setDatabaseSrid(Integer databaseSrid) { this.databaseSrid = databaseSrid; } @@ -91,6 +126,9 @@ public class UpdateOsmDatabase implements Task { this.replicationUrl = replicationUrl; } + /** + * {@inheritDoc} + */ @Override public void execute(WorkflowContext context) throws Exception { var datasource = context.getDataSource(database); @@ -111,6 +149,18 @@ public class UpdateOsmDatabase implements Task { replicationUrl); } + /** + * Executes the task. + * + * @param coordinateMap the coordinate map + * @param referenceMap the reference map + * @param headerRepository the header repository + * @param nodeRepository the node repository + * @param wayRepository the way repository + * @param relationRepository the relation repository + * @param databaseSrid the SRID + * @throws Exception if something went wrong + */ public static void execute(DataMap<Long, Coordinate> coordinateMap, DataMap<Long, List<Long>> referenceMap, HeaderRepository headerRepository, Repository<Long, Node> nodeRepository, @@ -160,4 +210,20 @@ public class UpdateOsmDatabase implements Task { } } + /** + * Returns the URL of the file with the given sequence number. + * + * @param replicationUrl the replication URL + * @param sequenceNumber the sequence number + * @param extension the file extension + * @return the URL of the file + * @throws MalformedURLException if the URL is malformed + */ + public static URL resolve(String replicationUrl, Long sequenceNumber, String extension) + throws MalformedURLException { + var s = String.format("%09d", sequenceNumber); + var uri = String.format("%s/%s/%s/%s.%s", replicationUrl, s.substring(0, 3), s.substring(3, 6), + s.substring(6, 9), extension); + return URI.create(uri).toURL(); + } } diff --git a/baremaps-core/src/test/java/org/apache/baremaps/workflow/ObjectMapperTest.java b/baremaps-core/src/test/java/org/apache/baremaps/workflow/ObjectMapperTest.java index 0bfd1dab..a754c92d 100644 --- a/baremaps-core/src/test/java/org/apache/baremaps/workflow/ObjectMapperTest.java +++ b/baremaps-core/src/test/java/org/apache/baremaps/workflow/ObjectMapperTest.java @@ -39,7 +39,7 @@ public class ObjectMapperTest { new Step("download", List.of(), List.of(new DownloadUrl( "https://download.geofabrik.de/europe/liechtenstein-latest.osm.pbf", - Paths.get("liechtenstein-latest.osm.pbf")))), + Paths.get("liechtenstein-latest.osm.pbf"), false))), new Step("import", List.of("download"), List.of(new ImportOsmPbf(Paths.get("liechtenstein-latest.osm.pbf"), null, diff --git a/baremaps-core/src/test/java/org/apache/baremaps/workflow/WorkflowTest.java b/baremaps-core/src/test/java/org/apache/baremaps/workflow/WorkflowTest.java index d52a27b6..c8ba01d8 100644 --- a/baremaps-core/src/test/java/org/apache/baremaps/workflow/WorkflowTest.java +++ b/baremaps-core/src/test/java/org/apache/baremaps/workflow/WorkflowTest.java @@ -37,7 +37,7 @@ class WorkflowTest extends PostgresContainerTest { void naturalearthGeoPackage() { var workflow = new Workflow(List.of(new Step("fetch-geopackage", List.of(), List.of( new DownloadUrl("https://naciscdn.org/naturalearth/packages/natural_earth_vector.gpkg.zip", - Paths.get("natural_earth_vector.gpkg.zip")), + Paths.get("natural_earth_vector.gpkg.zip"), false), new UnzipFile(Paths.get("natural_earth_vector.gpkg.zip"), Paths.get("natural_earth_vector")), new ImportGeoPackage(Paths.get("natural_earth_vector/packages/natural_earth_vector.gpkg"), @@ -52,7 +52,7 @@ class WorkflowTest extends PostgresContainerTest { var workflow = new Workflow(List.of(new Step("fetch-geopackage", List.of(), List.of( new DownloadUrl("https://osmdata.openstreetmap.de/download/coastlines-split-4326.zip", - Paths.get("coastlines-split-4326.zip")), + Paths.get("coastlines-split-4326.zip"), false), new UnzipFile(Paths.get("coastlines-split-4326.zip"), Paths.get("coastlines-split-4326")), new ImportShapefile(Paths.get("coastlines-split-4326/coastlines-split-4326/lines.shp"), @@ -84,7 +84,7 @@ class WorkflowTest extends PostgresContainerTest { void workflow() { var workflow = new Workflow(List.of(new Step("fetch-geopackage", List.of(), List.of( new DownloadUrl("https://naciscdn.org/naturalearth/packages/natural_earth_vector.gpkg.zip", - Paths.get("downloads/import_db.gpkg")), + Paths.get("downloads/import_db.gpkg"), false), new ImportShapefile(Paths.get("downloads/import_db.gpkg"), jdbcUrl(), 4326, 3857))))); new WorkflowExecutor(workflow).execute(); } @@ -95,20 +95,20 @@ class WorkflowTest extends PostgresContainerTest { var workflow = new Workflow(List.of( new Step("fetch-geopackage", List.of(), List.of(new DownloadUrl("https://tiles.baremaps.com/samples/import_db.gpkg", - Paths.get("downloads/import_db.gpkg")))), + Paths.get("downloads/import_db.gpkg"), false))), new Step("import-geopackage", List.of("fetch-geopackage"), List.of(new ImportGeoPackage(Paths.get("downloads/import_db.gpkg"), jdbcUrl(), 4326, 3857))), new Step("fetch-osmpbf", List.of(), List.of(new DownloadUrl("https://tiles.baremaps.com/samples/liechtenstein.osm.pbf", - Paths.get("downloads/liechtenstein.osm.pbf")))), + Paths.get("downloads/liechtenstein.osm.pbf"), false))), new Step("import-osmpbf", List.of("fetch-osmpbf"), List.of(new ImportOsmPbf(Paths.get("downloads/liechtenstein.osm.pbf"), null, true, jdbcUrl(), 3857, true))), new Step("fetch-shapefile", List.of(), List.of(new DownloadUrl( "https://osmdata.openstreetmap.de/download/simplified-water-polygons-split-3857.zip", - Paths.get("downloads/simplified-water-polygons-split-3857.zip")))), + Paths.get("downloads/simplified-water-polygons-split-3857.zip"), false))), new Step("unzip-shapefile", List.of("fetch-shapefile"), List.of( new UnzipFile(Paths.get("downloads/simplified-water-polygons-split-3857.zip"), @@ -116,7 +116,8 @@ class WorkflowTest extends PostgresContainerTest { new Step("fetch-projection", List.of("unzip-shapefile"), List.of(new DownloadUrl("https://spatialreference.org/ref/sr-org/epsg3857/prj/", Paths.get( - "archives/simplified-water-polygons-split-3857/simplified_water_polygons.prj")))), + "archives/simplified-water-polygons-split-3857/simplified_water_polygons.prj"), + false))), new Step("import-shapefile", List.of("fetch-projection"), List.of(new ImportShapefile( Paths.get( diff --git a/baremaps-core/src/test/java/org/apache/baremaps/workflow/tasks/DownloadUrlTest.java b/baremaps-core/src/test/java/org/apache/baremaps/workflow/tasks/DownloadUrlTest.java index ac8c68b7..1c2526f1 100644 --- a/baremaps-core/src/test/java/org/apache/baremaps/workflow/tasks/DownloadUrlTest.java +++ b/baremaps-core/src/test/java/org/apache/baremaps/workflow/tasks/DownloadUrlTest.java @@ -49,7 +49,7 @@ class DownloadUrlTest { var file = directory.resolve("file"); // TODO: do not use a 3rd party server, replaces test URL to a baremaps owned test resource. var task = new DownloadUrl("ftp://whois.in.bell.ca/bell.db.gz", - file); + file, false); task.execute(new WorkflowContext()); assertTrue(file.toFile().length() > 50, "file is less than 50 bytes"); FileUtils.deleteRecursively(directory); @@ -62,7 +62,7 @@ class DownloadUrlTest { var file = directory.resolve("file"); assertThrows(IllegalArgumentException.class, () -> { var task = new DownloadUrl("file://not-existing-file-243jhks", - file); + file, false); task.execute(new WorkflowContext()); }, "Unsupported protocol throws IOException"); FileUtils.deleteRecursively(directory); @@ -74,7 +74,7 @@ class DownloadUrlTest { var directory = Files.createTempDirectory("tmp_"); var file = directory.resolve("README.md"); var task = new DownloadUrl("https://raw.githubusercontent.com/baremaps/baremaps/main/README.md", - file.toAbsolutePath()); + file.toAbsolutePath(), false); task.execute(new WorkflowContext()); assertTrue(Files.readString(file).contains("Baremaps")); FileUtils.deleteRecursively(directory);
