From db9efdc359aba0bb668c35c04263a80e21cb28c7 Mon Sep 17 00:00:00 2001 From: Colin DAMON Date: Sat, 28 May 2022 12:22:02 +0200 Subject: [PATCH] Module post actions --- .../module/domain/JHipsterModule.java | 13 ++++ .../module/domain/JHipsterModuleChanges.java | 27 ++++++++- .../domain/JHipsterModulePreActions.java | 5 +- .../domain/JHipsterModulesDomainService.java | 3 +- .../module/domain/JHipsterProjectFolder.java | 4 ++ .../JHipsterModuleExecutionContext.java | 10 ++++ .../postaction/JHipsterModulePostActions.java | 59 +++++++++++++++++++ .../domain/postaction/RunnableInContext.java | 6 ++ .../FileSystemJHipsterModulesRepository.java | 4 +- .../secondary/MissingPomException.java | 2 +- .../module/domain/JHipsterModulesFixture.java | 4 ++ .../FileSystemModulesRepositoryTest.java | 15 ++++- 12 files changed, 141 insertions(+), 11 deletions(-) create mode 100644 src/main/java/tech/jhipster/lite/generator/module/domain/postaction/JHipsterModuleExecutionContext.java create mode 100644 src/main/java/tech/jhipster/lite/generator/module/domain/postaction/JHipsterModulePostActions.java create mode 100644 src/main/java/tech/jhipster/lite/generator/module/domain/postaction/RunnableInContext.java diff --git a/src/main/java/tech/jhipster/lite/generator/module/domain/JHipsterModule.java b/src/main/java/tech/jhipster/lite/generator/module/domain/JHipsterModule.java index f70475292bb..74c148a0b72 100644 --- a/src/main/java/tech/jhipster/lite/generator/module/domain/JHipsterModule.java +++ b/src/main/java/tech/jhipster/lite/generator/module/domain/JHipsterModule.java @@ -14,6 +14,8 @@ import tech.jhipster.lite.generator.module.domain.javadependency.JavaDependency; import tech.jhipster.lite.generator.module.domain.javadependency.JavaDependency.JavaDependencyGroupIdBuilder; import tech.jhipster.lite.generator.module.domain.javadependency.VersionSlug; +import tech.jhipster.lite.generator.module.domain.postaction.JHipsterModulePostActions; +import tech.jhipster.lite.generator.module.domain.postaction.JHipsterModulePostActions.JHipsterModulePostActionsBuilder; import tech.jhipster.lite.generator.module.domain.replacement.JHipsterModuleReplacements; import tech.jhipster.lite.generator.module.domain.replacement.JHipsterModuleReplacements.JHipsterModuleReplacementsBuilder; @@ -25,6 +27,7 @@ public class JHipsterModule { private final JHipsterModuleContext context; private final JHipsterModuleJavaDependencies javaDependencies; private final JHipsterModulePreActions preActions; + private final JHipsterModulePostActions postActions; private JHipsterModule(JHipsterModuleBuilder builder) { projectFolder = builder.projectFolder; @@ -34,6 +37,7 @@ private JHipsterModule(JHipsterModuleBuilder builder) { context = builder.context.build(); javaDependencies = builder.javaDependencies.build(); preActions = builder.preActions.build(); + postActions = builder.postActions.build(); } public static JHipsterModuleBuilder moduleForProject(JHipsterProjectFolder project) { @@ -96,6 +100,10 @@ public JHipsterModulePreActions preActions() { return preActions; } + public JHipsterModulePostActions postActions() { + return postActions; + } + public static class JHipsterModuleBuilder { private final JHipsterProjectFolder projectFolder; @@ -104,6 +112,7 @@ public static class JHipsterModuleBuilder { private final JHipsterModuleReplacementsBuilder replacements = JHipsterModuleReplacements.builder(this); private final JHipsterModuleJavaDependenciesBuilder javaDependencies = JHipsterModuleJavaDependencies.builder(this); private final JHipsterModulePreActionsBuilder preActions = JHipsterModulePreActions.builder(this); + private final JHipsterModulePostActionsBuilder postActions = JHipsterModulePostActions.builder(this); private JHipsterModuleBuilder(JHipsterProjectFolder projectFolder) { Assert.notNull("projectFolder", projectFolder); @@ -131,6 +140,10 @@ public JHipsterModulePreActionsBuilder preActions() { return preActions; } + public JHipsterModulePostActionsBuilder postActions() { + return postActions; + } + public JHipsterModule build() { return new JHipsterModule(this); } diff --git a/src/main/java/tech/jhipster/lite/generator/module/domain/JHipsterModuleChanges.java b/src/main/java/tech/jhipster/lite/generator/module/domain/JHipsterModuleChanges.java index e8e6be6d634..a8de092a1da 100644 --- a/src/main/java/tech/jhipster/lite/generator/module/domain/JHipsterModuleChanges.java +++ b/src/main/java/tech/jhipster/lite/generator/module/domain/JHipsterModuleChanges.java @@ -2,6 +2,7 @@ import tech.jhipster.lite.error.domain.Assert; import tech.jhipster.lite.generator.module.domain.javadependency.command.JavaDependenciesCommands; +import tech.jhipster.lite.generator.module.domain.postaction.JHipsterModulePostActions; import tech.jhipster.lite.generator.module.domain.replacement.JHipsterModuleReplacements; public class JHipsterModuleChanges { @@ -12,6 +13,7 @@ public class JHipsterModuleChanges { private final JHipsterModuleReplacements replacements; private final JavaDependenciesCommands javaDependencies; private final JHipsterModulePreActions preActions; + private final JHipsterModulePostActions postActions; private JHipsterModuleChanges(JHipsterModuleChangesBuilder builder) { assertMandatoryFields(builder); @@ -22,6 +24,7 @@ private JHipsterModuleChanges(JHipsterModuleChangesBuilder builder) { replacements = builder.replacements; javaDependencies = builder.javaDependencies; preActions = builder.preActions; + postActions = builder.postActions; } private void assertMandatoryFields(JHipsterModuleChangesBuilder builder) { @@ -31,6 +34,7 @@ private void assertMandatoryFields(JHipsterModuleChangesBuilder builder) { Assert.notNull("replacements", builder.replacements); Assert.notNull("javaDependencies", builder.javaDependencies); Assert.notNull("preActions", builder.preActions); + Assert.notNull("postActions", builder.postActions); } public static JHipsterModuleChangesProjectFolderBuilder builder() { @@ -61,6 +65,10 @@ public JHipsterModulePreActions preActions() { return preActions; } + public JHipsterModulePostActions postActions() { + return postActions; + } + public static class JHipsterModuleChangesBuilder implements JHipsterModuleChangesProjectFolderBuilder, @@ -68,7 +76,8 @@ public static class JHipsterModuleChangesBuilder JHipsterModuleChangesFilesBuilder, JHipsterModuleChangesReplacementsBuilder, JHipsterModuleChangesJavaDependenciesBuilder, - JHipsterModuleChangesPreActionsBuilder { + JHipsterModuleChangesPreActionsBuilder, + JHipsterModuleChangesPostActionsBuilder { private JHipsterProjectFolder projectFolder; private TemplatedFiles files; @@ -76,6 +85,7 @@ public static class JHipsterModuleChangesBuilder private JavaDependenciesCommands javaDependencies; private Indentation indentation; private JHipsterModulePreActions preActions; + private JHipsterModulePostActions postActions; private JHipsterModuleChangesBuilder() {} @@ -115,9 +125,16 @@ public JHipsterModuleChangesPreActionsBuilder javaDependencies(JavaDependenciesC } @Override - public JHipsterModuleChanges preActions(JHipsterModulePreActions preActions) { + public JHipsterModuleChangesPostActionsBuilder preActions(JHipsterModulePreActions preActions) { this.preActions = preActions; + return this; + } + + @Override + public JHipsterModuleChanges postActions(JHipsterModulePostActions postActions) { + this.postActions = postActions; + return new JHipsterModuleChanges(this); } } @@ -143,6 +160,10 @@ public interface JHipsterModuleChangesJavaDependenciesBuilder { } public interface JHipsterModuleChangesPreActionsBuilder { - JHipsterModuleChanges preActions(JHipsterModulePreActions preActions); + JHipsterModuleChangesPostActionsBuilder preActions(JHipsterModulePreActions preActions); + } + + public interface JHipsterModuleChangesPostActionsBuilder { + JHipsterModuleChanges postActions(JHipsterModulePostActions postActions); } } diff --git a/src/main/java/tech/jhipster/lite/generator/module/domain/JHipsterModulePreActions.java b/src/main/java/tech/jhipster/lite/generator/module/domain/JHipsterModulePreActions.java index e840d08fd27..73eed67f481 100644 --- a/src/main/java/tech/jhipster/lite/generator/module/domain/JHipsterModulePreActions.java +++ b/src/main/java/tech/jhipster/lite/generator/module/domain/JHipsterModulePreActions.java @@ -2,7 +2,6 @@ import java.util.ArrayList; import java.util.Collection; -import tech.jhipster.lite.common.domain.JHipsterCollections; import tech.jhipster.lite.error.domain.Assert; import tech.jhipster.lite.generator.module.domain.JHipsterModule.JHipsterModuleBuilder; @@ -11,14 +10,14 @@ public class JHipsterModulePreActions { private final Collection actions; private JHipsterModulePreActions(JHipsterModulePreActionsBuilder builder) { - actions = JHipsterCollections.immutable(builder.actions); + actions = builder.actions; } public static JHipsterModulePreActionsBuilder builder(JHipsterModuleBuilder module) { return new JHipsterModulePreActionsBuilder(module); } - public void apply() { + public void run() { actions.forEach(Runnable::run); } diff --git a/src/main/java/tech/jhipster/lite/generator/module/domain/JHipsterModulesDomainService.java b/src/main/java/tech/jhipster/lite/generator/module/domain/JHipsterModulesDomainService.java index 5af0532f80c..51ff292ce32 100644 --- a/src/main/java/tech/jhipster/lite/generator/module/domain/JHipsterModulesDomainService.java +++ b/src/main/java/tech/jhipster/lite/generator/module/domain/JHipsterModulesDomainService.java @@ -32,7 +32,8 @@ public void apply(Indentation indentation, JHipsterModule module) { .files(module.templatedFiles()) .replacements(module.replacements()) .javaDependencies(buildDependenciesChanges(module)) - .preActions(module.preActions()); + .preActions(module.preActions()) + .postActions(module.postActions()); modules.apply(changes); } diff --git a/src/main/java/tech/jhipster/lite/generator/module/domain/JHipsterProjectFolder.java b/src/main/java/tech/jhipster/lite/generator/module/domain/JHipsterProjectFolder.java index cdb179eaff7..7a36e2a387b 100644 --- a/src/main/java/tech/jhipster/lite/generator/module/domain/JHipsterProjectFolder.java +++ b/src/main/java/tech/jhipster/lite/generator/module/domain/JHipsterProjectFolder.java @@ -14,4 +14,8 @@ public Path filePath(String file) { return Paths.get(folder(), file); } + + public String get() { + return folder(); + } } diff --git a/src/main/java/tech/jhipster/lite/generator/module/domain/postaction/JHipsterModuleExecutionContext.java b/src/main/java/tech/jhipster/lite/generator/module/domain/postaction/JHipsterModuleExecutionContext.java new file mode 100644 index 00000000000..d8ebbe0b29c --- /dev/null +++ b/src/main/java/tech/jhipster/lite/generator/module/domain/postaction/JHipsterModuleExecutionContext.java @@ -0,0 +1,10 @@ +package tech.jhipster.lite.generator.module.domain.postaction; + +import tech.jhipster.lite.error.domain.Assert; +import tech.jhipster.lite.generator.module.domain.JHipsterProjectFolder; + +public record JHipsterModuleExecutionContext(JHipsterProjectFolder projectFolder) { + public JHipsterModuleExecutionContext { + Assert.notNull("projectFolder", projectFolder); + } +} diff --git a/src/main/java/tech/jhipster/lite/generator/module/domain/postaction/JHipsterModulePostActions.java b/src/main/java/tech/jhipster/lite/generator/module/domain/postaction/JHipsterModulePostActions.java new file mode 100644 index 00000000000..c78fd8fac49 --- /dev/null +++ b/src/main/java/tech/jhipster/lite/generator/module/domain/postaction/JHipsterModulePostActions.java @@ -0,0 +1,59 @@ +package tech.jhipster.lite.generator.module.domain.postaction; + +import java.util.ArrayList; +import java.util.Collection; +import tech.jhipster.lite.error.domain.Assert; +import tech.jhipster.lite.generator.module.domain.JHipsterModule.JHipsterModuleBuilder; + +public class JHipsterModulePostActions { + + private final Collection actions; + + private JHipsterModulePostActions(JHipsterModulePostActionsBuilder builder) { + actions = builder.actions; + } + + public static JHipsterModulePostActionsBuilder builder(JHipsterModuleBuilder module) { + return new JHipsterModulePostActionsBuilder(module); + } + + public void run(JHipsterModuleExecutionContext context) { + Assert.notNull("context", context); + + actions.forEach(action -> action.run(context)); + } + + public static class JHipsterModulePostActionsBuilder { + + private final JHipsterModuleBuilder module; + private final Collection actions = new ArrayList<>(); + + private JHipsterModulePostActionsBuilder(JHipsterModuleBuilder module) { + Assert.notNull("module", module); + + this.module = module; + } + + public JHipsterModulePostActionsBuilder add(Runnable action) { + Assert.notNull("action", action); + + return add(context -> action.run()); + } + + public JHipsterModulePostActionsBuilder add(RunnableInContext action) { + Assert.notNull("action", action); + + actions.add(action); + + return this; + } + + public JHipsterModuleBuilder and() { + return module; + } + + public JHipsterModulePostActions build() { + return new JHipsterModulePostActions(this); + } + } +} diff --git a/src/main/java/tech/jhipster/lite/generator/module/domain/postaction/RunnableInContext.java b/src/main/java/tech/jhipster/lite/generator/module/domain/postaction/RunnableInContext.java new file mode 100644 index 00000000000..4c76d566b09 --- /dev/null +++ b/src/main/java/tech/jhipster/lite/generator/module/domain/postaction/RunnableInContext.java @@ -0,0 +1,6 @@ +package tech.jhipster.lite.generator.module.domain.postaction; + +@FunctionalInterface +public interface RunnableInContext { + void run(JHipsterModuleExecutionContext context); +} diff --git a/src/main/java/tech/jhipster/lite/generator/module/infrastructure/secondary/FileSystemJHipsterModulesRepository.java b/src/main/java/tech/jhipster/lite/generator/module/infrastructure/secondary/FileSystemJHipsterModulesRepository.java index 146fef342fc..f6e6dd556a5 100644 --- a/src/main/java/tech/jhipster/lite/generator/module/infrastructure/secondary/FileSystemJHipsterModulesRepository.java +++ b/src/main/java/tech/jhipster/lite/generator/module/infrastructure/secondary/FileSystemJHipsterModulesRepository.java @@ -4,6 +4,7 @@ import tech.jhipster.lite.error.domain.Assert; import tech.jhipster.lite.generator.module.domain.JHipsterModuleChanges; import tech.jhipster.lite.generator.module.domain.JHipsterModulesRepository; +import tech.jhipster.lite.generator.module.domain.postaction.JHipsterModuleExecutionContext; @Repository class FileSystemJHipsterModulesRepository implements JHipsterModulesRepository { @@ -23,11 +24,12 @@ public FileSystemJHipsterModulesRepository( public void apply(JHipsterModuleChanges changes) { Assert.notNull("changes", changes); - changes.preActions().apply(); + changes.preActions().run(); files.create(changes.projectFolder(), changes.files()); javaDependencies.handle(changes.indentation(), changes.projectFolder(), changes.javaDependenciesCommands()); changes.replacements().apply(changes.projectFolder()); + changes.postActions().run(new JHipsterModuleExecutionContext(changes.projectFolder())); } } diff --git a/src/main/java/tech/jhipster/lite/generator/module/infrastructure/secondary/MissingPomException.java b/src/main/java/tech/jhipster/lite/generator/module/infrastructure/secondary/MissingPomException.java index ab71facefdf..fe4f786b80e 100644 --- a/src/main/java/tech/jhipster/lite/generator/module/infrastructure/secondary/MissingPomException.java +++ b/src/main/java/tech/jhipster/lite/generator/module/infrastructure/secondary/MissingPomException.java @@ -6,6 +6,6 @@ class MissingPomException extends GeneratorException { public MissingPomException(JHipsterProjectFolder folder) { - super("Can't find pom.xml in " + folder.folder()); + super("Can't find pom.xml in " + folder.get()); } } diff --git a/src/test/java/tech/jhipster/lite/generator/module/domain/JHipsterModulesFixture.java b/src/test/java/tech/jhipster/lite/generator/module/domain/JHipsterModulesFixture.java index b1ed90434b7..6049e2723bc 100644 --- a/src/test/java/tech/jhipster/lite/generator/module/domain/JHipsterModulesFixture.java +++ b/src/test/java/tech/jhipster/lite/generator/module/domain/JHipsterModulesFixture.java @@ -55,6 +55,10 @@ public static JHipsterModule module() { .add(() -> log.debug("Applying fixture module")) .add(() -> log.debug("You shouldn't add this by default in your modules :D")) .and() + .postActions() + .add(() -> log.debug("Fixture module applied")) + .add(context -> log.debug("Applied on {}", context.projectFolder().get())) + .and() .build(); // @formatter:on } diff --git a/src/test/java/tech/jhipster/lite/generator/module/infrastructure/secondary/FileSystemModulesRepositoryTest.java b/src/test/java/tech/jhipster/lite/generator/module/infrastructure/secondary/FileSystemModulesRepositoryTest.java index 717789e3cb1..3f2c8ff6183 100644 --- a/src/test/java/tech/jhipster/lite/generator/module/infrastructure/secondary/FileSystemModulesRepositoryTest.java +++ b/src/test/java/tech/jhipster/lite/generator/module/infrastructure/secondary/FileSystemModulesRepositoryTest.java @@ -70,8 +70,8 @@ void shouldApplyModule() { .containing("Dummy replacement"); // @formatter:on - logs.assertLogged(Level.DEBUG, "Applying fixture module"); - logs.assertLogged(Level.DEBUG, "You shouldn't add this by default in your modules :D"); + assertPreActions(); + assertPostActions(); } private static void addPomToproject(JHipsterProjectFolder project) { @@ -89,4 +89,15 @@ private static void addPomToproject(JHipsterProjectFolder project) { throw new AssertionError(e); } } + + private void assertPreActions() { + logs.assertLogged(Level.DEBUG, "Applying fixture module"); + logs.assertLogged(Level.DEBUG, "You shouldn't add this by default in your modules :D"); + } + + private void assertPostActions() { + logs.assertLogged(Level.DEBUG, "Fixture module applied"); + logs.assertLogged(Level.DEBUG, "Applied on"); + logs.assertLogged(Level.DEBUG, System.getProperty("java.io.tmpdir")); + } }