Skip to content

Commit

Permalink
Clean output directory before generation
Browse files Browse the repository at this point in the history
Issue: #279
  • Loading branch information
muehmar committed Oct 10, 2024
1 parent 28a8ad4 commit acfaca1
Show file tree
Hide file tree
Showing 8 changed files with 69 additions and 20 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import com.github.muehmar.gradle.openapi.generator.settings.EnumDescriptionSettings;
import com.github.muehmar.gradle.openapi.generator.settings.GetterSuffixesBuilder;
import com.github.muehmar.gradle.openapi.generator.settings.JsonSupport;
import com.github.muehmar.gradle.openapi.generator.settings.PackageName;
import com.github.muehmar.gradle.openapi.generator.settings.PojoNameMappings;
import com.github.muehmar.gradle.openapi.generator.settings.PojoSettings;
import com.github.muehmar.gradle.openapi.generator.settings.StagedBuilderSettings;
Expand Down Expand Up @@ -149,10 +150,12 @@ public ValidationMethods getValidationMethods() {
return validationMethods;
}

public String getPackageName(Project project) {
return Optional.ofNullable(packageName)
.orElseGet(() -> String.format("%s.%s.api.model", project.getGroup(), project.getName()))
.replace("-", "");
public PackageName getPackageName(Project project) {
return PackageName.fromString(
Optional.ofNullable(packageName)
.orElseGet(
() -> String.format("%s.%s.api.model", project.getGroup(), project.getName()))
.replace("-", ""));
}

// DSL API
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ public ParameterGenerator() {
.topLevel()
.packageGen(
(a, settings, writer) ->
writer.println("package %s.parameter;", settings.getPackageName()))
writer.println("package %s.parameter;", settings.getPackageName().getName()))
.noJavaDoc()
.noAnnotations()
.modifiers(PUBLIC, FINAL)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,6 @@
public class PackageGenerator<T> implements Generator<T, PojoSettings> {
@Override
public Writer generate(T data, PojoSettings settings, Writer writer) {
return writer.println("package %s;", settings.getPackageName());
return writer.println("package %s;", settings.getPackageName().getName());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -28,27 +28,19 @@ public static JavaFileName fromSettingsAndPojo(PojoSettings settings, JavaPojo p
}

public static JavaFileName fromSettingsAndClassname(PojoSettings settings, JavaName className) {
final String packagePath =
settings
.getPackageName()
.replace(".", File.separator)
.replaceFirst("^" + File.separator, "");
final Path packagePath = settings.getPackageName().asPath();
final String fileNameString =
String.format("%s%s%s.java", packagePath, File.separator, className);
String.format("%s%s%s.java", packagePath.toFile(), File.separator, className);
return new JavaFileName(Paths.get(fileNameString));
}

public static JavaFileName fromSettingsAndParameter(
PojoSettings settings, JavaParameter parameter) {
final String packagePath =
settings
.getPackageName()
.replace(".", File.separator)
.replaceFirst("^" + File.separator, "");
final Path packagePath = settings.getPackageName().asPath();
final String fileNameString =
String.format(
"%s%sparameter%s%s.java",
packagePath, File.separator, File.separator, parameter.getParamClassName());
packagePath.toFile(), File.separator, File.separator, parameter.getParamClassName());
return new JavaFileName(Paths.get(fileNameString));
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package com.github.muehmar.gradle.openapi.generator.settings;

import java.io.File;
import java.io.Serializable;
import java.nio.file.Path;
import java.nio.file.Paths;
import lombok.EqualsAndHashCode;

@EqualsAndHashCode
public class PackageName implements Serializable {
private final String name;

private PackageName(String name) {
this.name = name;
}

public static PackageName fromString(String packageName) {
return new PackageName(packageName);
}

public String getName() {
return name;
}

public Path asPath() {
return Paths.get(name.replace(".", File.separator).replaceFirst("^" + File.separator, ""));
}

@Override
public String toString() {
return name;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
@PojoBuilder
public class PojoSettings implements Serializable {
JsonSupport jsonSupport;
String packageName;
PackageName packageName;
String suffix;
StagedBuilderSettings stagedBuilder;
String builderMethodPrefix;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import ch.bluecare.commons.data.NonEmptyList;
import com.github.muehmar.gradle.openapi.dsl.SingleSchemaExtension;
import com.github.muehmar.gradle.openapi.dsl.WarningsConfig;
import com.github.muehmar.gradle.openapi.exception.OpenApiGeneratorException;
import com.github.muehmar.gradle.openapi.generator.GeneratorFactory;
import com.github.muehmar.gradle.openapi.generator.Generators;
import com.github.muehmar.gradle.openapi.generator.mapper.MapResult;
Expand All @@ -23,10 +24,15 @@
import com.github.muehmar.gradle.openapi.writer.BaseDirFileWriter;
import com.github.muehmar.gradle.openapi.writer.FileWriter;
import com.github.muehmar.gradle.openapi.writer.GeneratedFile;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Comparator;
import java.util.Optional;
import java.util.function.Supplier;
import java.util.stream.Stream;
import javax.inject.Inject;
import org.gradle.api.Action;
import org.gradle.api.DefaultTask;
Expand Down Expand Up @@ -80,6 +86,8 @@ private void runTask() {
final MapResult mapResult = cachedMapping.get();
final Generators generators = GeneratorFactory.create(Language.JAVA);

cleanOutputDir();

mapResult.getPojos().flatMap(pojo -> createPojo(pojo, generators)).forEach(this::writeFile);

mapResult
Expand Down Expand Up @@ -108,6 +116,19 @@ private GeneratedFile createParameter(Parameter parameter, Generators generators
return generators.getParametersGenerator().generate(parameter, pojoSettings.get());
}

private void cleanOutputDir() {
final Path directory =
Paths.get(outputDir.get()).resolve(pojoSettings.get().getPackageName().asPath());
if (Files.exists(directory)) {
try (final Stream<Path> paths = Files.walk(directory)) {
paths.sorted(Comparator.reverseOrder()).map(Path::toFile).forEach(File::delete);
} catch (IOException e) {
throw new OpenApiGeneratorException(
"Error while cleaning the output directory: " + e.getMessage(), e);
}
}
}

private void writeFile(GeneratedFile file) {
final FileWriter fileWriter = new BaseDirFileWriter(outputDir.get());
fileWriter.writeFile(file);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ private TestPojoSettings() {}
public static PojoSettings defaultTestSettings() {
return fullPojoSettingsBuilder()
.jsonSupport(JsonSupport.JACKSON)
.packageName("com.github.muehmar")
.packageName(PackageName.fromString("com.github.muehmar"))
.suffix("Dto")
.stagedBuilder(defaultStagedBuilderSettings())
.builderMethodPrefix("set")
Expand Down

0 comments on commit acfaca1

Please sign in to comment.