This is an automated email from the ASF dual-hosted git repository. asf-gitbox-commits pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/cayenne.git
commit 35b7daedba536ddac0ec0523b2c9de6989ce39f5 Author: Andrus Adamchik <[email protected]> AuthorDate: Sat Aug 8 16:56:58 2026 -0400 ClassGenerationAction cleanup - maximally immutable state --- .../apache/cayenne/tools/CayenneGeneratorTask.java | 3 +- .../apache/cayenne/gen/ClassGenerationAction.java | 58 ++++++++-------------- .../cayenne/gen/ClassGenerationActionFactory.java | 9 +++- .../gen/DefaultClassGenerationActionFactory.java | 8 ++- .../cayenne/gen/BaseTemplatesGenerationTest.java | 10 ++-- .../cayenne/gen/ClassGenerationActionTest.java | 23 +++++++-- .../apache/cayenne/gen/TemplateLocationTest.java | 9 +++- .../gen/mock/TestClassGenerationAction.java | 12 +++-- .../java/org/apache/cayenne/tools/CgenTask.java | 4 +- .../org/apache/cayenne/tools/CgenTaskTest.java | 26 ++++------ .../apache/cayenne/tools/CayenneGeneratorMojo.java | 7 ++- .../apache/cayenne/mcp/tools/cgen/CgenRunTool.java | 9 ++-- .../cgen/InstrumentedClassGenerationAction.java | 12 ++++- .../editor/datadomain/cgen/DataDomainCgenTab.java | 4 +- .../ui/project/editor/datamap/cgen/CgenPanel.java | 3 +- .../templateeditor/PreviewActionConfigurator.java | 3 +- .../PreviewClassGenerationFactory.java | 9 ++-- .../templateeditor/PreviewGenerationAction.java | 20 +++++--- .../templateeditor/ArtifactsConfiguratorTest.java | 11 +++- 19 files changed, 138 insertions(+), 102 deletions(-) diff --git a/cayenne-ant/src/main/java/org/apache/cayenne/tools/CayenneGeneratorTask.java b/cayenne-ant/src/main/java/org/apache/cayenne/tools/CayenneGeneratorTask.java index 831169a53..dc19c0539 100644 --- a/cayenne-ant/src/main/java/org/apache/cayenne/tools/CayenneGeneratorTask.java +++ b/cayenne-ant/src/main/java/org/apache/cayenne/tools/CayenneGeneratorTask.java @@ -121,7 +121,6 @@ public class CayenneGeneratorTask extends CayenneTask { CayenneGeneratorEmbeddableFilterAction filterEmbeddableAction = new CayenneGeneratorEmbeddableFilterAction(); filterEmbeddableAction.setNameFilter(NamePatternMatcher.build(logger, null, excludeEmbeddablesPattern)); - action.setLogger(logger); if (!hasConfig() && useConfigFromDataMap) { action.prepareArtifacts(); } else { @@ -141,7 +140,7 @@ public class CayenneGeneratorTask extends CayenneTask { private List<ClassGenerationAction> createActions(DataMap dataMap) { List<ClassGenerationAction> actions = new ArrayList<>(); for (CgenConfiguration configuration : buildConfigurations(dataMap)) { - actions.add(injector.getInstance(ClassGenerationActionFactory.class).createAction(configuration)); + actions.add(injector.getInstance(ClassGenerationActionFactory.class).createAction(configuration, logger)); } return actions; } diff --git a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/ClassGenerationAction.java b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/ClassGenerationAction.java index 20cc26f0e..4c8684401 100644 --- a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/ClassGenerationAction.java +++ b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/ClassGenerationAction.java @@ -46,23 +46,24 @@ import java.util.Arrays; import java.util.Collection; import java.util.HashMap; import java.util.Map; +import java.util.Objects; import java.util.Properties; import java.util.stream.Collectors; public class ClassGenerationAction { - public static final String SUPERCLASS_PREFIX = "_"; + private static final String SUPERCLASS_PREFIX = "_"; private static final String WILDCARD = "*"; private static final String CUSTOM_TEMPLATE_REPO = "customTemplateRepo"; - protected CgenConfiguration configuration; - protected Logger logger; - - protected Context context; + protected final CgenConfiguration configuration; + protected final Logger logger; protected final Map<String, Template> templateCache; - private ToolsUtilsFactory utilsFactory; - private MetadataUtils metadataUtils; + private final ToolsUtilsFactory utilsFactory; + private final MetadataUtils metadataUtils; + + protected Context context; /** * Optionally allows user-defined tools besides {@link ImportUtils} for working with velocity templates.<br/> @@ -75,8 +76,17 @@ public class ClassGenerationAction { * tools.application.myTool = com.mycompany.MyTool</pre> * Then the methods in the MyTool class will be available for use in the template like ${myTool.myMethod(arg)} */ - public ClassGenerationAction(CgenConfiguration configuration) { - this.configuration = configuration; + public ClassGenerationAction( + CgenConfiguration configuration, + ToolsUtilsFactory utilsFactory, + MetadataUtils metadataUtils, + Logger logger) { + + this.configuration = Objects.requireNonNull(configuration); + this.utilsFactory = Objects.requireNonNull(utilsFactory); + this.metadataUtils = Objects.requireNonNull(metadataUtils); + this.logger = Objects.requireNonNull(logger); + String toolConfigFile = configuration.getExternalToolConfig(); if (System.getProperty("org.apache.velocity.tools") != null || toolConfigFile != null) { @@ -374,14 +384,6 @@ public class ClassGenerationAction { return fullPath; } - /** - * Injects an optional logger that will be used to trace generated files at - * the info level. - */ - public void setLogger(Logger logger) { - this.logger = logger; - } - /** * @since 4.1 */ @@ -397,22 +399,6 @@ public class ClassGenerationAction { this.context = context; } - public ToolsUtilsFactory getUtilsFactory() { - return utilsFactory; - } - - public void setUtilsFactory(ToolsUtilsFactory utilsFactory) { - this.utilsFactory = utilsFactory; - } - - public void setMetadataUtils(MetadataUtils metadataUtils) { - this.metadataUtils = metadataUtils; - } - - public MetadataUtils getMetadataUtils() { - return metadataUtils; - } - /** * Collects generated class text in memory, and on close writes it to the target file, but only if it * differs from what the file already contains. @@ -454,10 +440,8 @@ public class ClassGenerationAction { Files.write(file.toPath(), generated); - if (logger != null) { - String label = templateType.isSuperclass() ? "superclass" : "class"; - logger.info("Generating {} file: {}", label, file.getCanonicalPath()); - } + String label = templateType.isSuperclass() ? "superclass" : "class"; + logger.info("Generating {} file: {}", label, file.getCanonicalPath()); fileWritten(file, templateType); } diff --git a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/ClassGenerationActionFactory.java b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/ClassGenerationActionFactory.java index 9c6f2a07b..378b6a046 100644 --- a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/ClassGenerationActionFactory.java +++ b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/ClassGenerationActionFactory.java @@ -18,10 +18,17 @@ ****************************************************************/ package org.apache.cayenne.gen; +import org.slf4j.Logger; + /** * @since 4.2 */ public interface ClassGenerationActionFactory { - ClassGenerationAction createAction(CgenConfiguration configuration); + /** + * @param logger a logger used to trace generated files. Callers embedded in a build tool normally pass a + * logger that routes to that tool's own output. + * @since 5.0 takes a logger + */ + ClassGenerationAction createAction(CgenConfiguration configuration, Logger logger); } diff --git a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/DefaultClassGenerationActionFactory.java b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/DefaultClassGenerationActionFactory.java index b698369ac..3268dca19 100644 --- a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/DefaultClassGenerationActionFactory.java +++ b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/DefaultClassGenerationActionFactory.java @@ -20,6 +20,7 @@ package org.apache.cayenne.gen; import org.apache.cayenne.di.Inject; +import org.slf4j.Logger; /** * @since 4.2 @@ -33,11 +34,8 @@ public class DefaultClassGenerationActionFactory implements ClassGenerationActio private MetadataUtils metadataUtils; @Override - public ClassGenerationAction createAction(CgenConfiguration configuration) { - ClassGenerationAction classGenerationAction = new ClassGenerationAction(configuration); - classGenerationAction.setUtilsFactory(utilsFactory); - classGenerationAction.setMetadataUtils(metadataUtils); - return classGenerationAction; + public ClassGenerationAction createAction(CgenConfiguration configuration, Logger logger) { + return new ClassGenerationAction(configuration, utilsFactory, metadataUtils, logger); } } diff --git a/cayenne-cgen/src/test/java/org/apache/cayenne/gen/BaseTemplatesGenerationTest.java b/cayenne-cgen/src/test/java/org/apache/cayenne/gen/BaseTemplatesGenerationTest.java index fdf1b76d8..8b7359774 100644 --- a/cayenne-cgen/src/test/java/org/apache/cayenne/gen/BaseTemplatesGenerationTest.java +++ b/cayenne-cgen/src/test/java/org/apache/cayenne/gen/BaseTemplatesGenerationTest.java @@ -32,6 +32,7 @@ import org.apache.cayenne.map.SelectQueryDescriptor; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; +import org.slf4j.helpers.NOPLogger; import java.io.BufferedReader; import java.io.File; @@ -47,7 +48,7 @@ import java.util.Collection; import static org.junit.jupiter.api.Assertions.assertEquals; -public class BaseTemplatesGenerationTest { +public class BaseTemplatesGenerationTest extends CgenCase { @TempDir public File folder; @@ -60,7 +61,11 @@ public class BaseTemplatesGenerationTest { @BeforeEach public void setUp() { cgenConfiguration = new CgenConfiguration(); - action = new ClassGenerationAction(cgenConfiguration); + action = new ClassGenerationAction( + cgenConfiguration, + getUnitTestInjector().getInstance(ToolsUtilsFactory.class), + getUnitTestInjector().getInstance(MetadataUtils.class), + NOPLogger.NOP_LOGGER); dataMap = new DataMap(); dataMap.setDefaultPackage("test"); objEntity = new ObjEntity(); @@ -148,7 +153,6 @@ public class BaseTemplatesGenerationTest { cgenConfiguration.loadEntity(objEntity); cgenConfiguration.setDataMap(dataMap); - action.setUtilsFactory(new DefaultToolsUtilsFactory()); action.execute(); String targetName = dataMap.getName(); diff --git a/cayenne-cgen/src/test/java/org/apache/cayenne/gen/ClassGenerationActionTest.java b/cayenne-cgen/src/test/java/org/apache/cayenne/gen/ClassGenerationActionTest.java index 963a40622..7888e693d 100644 --- a/cayenne-cgen/src/test/java/org/apache/cayenne/gen/ClassGenerationActionTest.java +++ b/cayenne-cgen/src/test/java/org/apache/cayenne/gen/ClassGenerationActionTest.java @@ -37,6 +37,7 @@ import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; +import org.slf4j.helpers.NOPLogger; import static org.junit.jupiter.api.Assertions.*; @@ -54,8 +55,12 @@ public class ClassGenerationActionTest extends CgenCase { public void setUp() throws Exception { writers = new ArrayList<>(3); cgenConfiguration = new CgenConfiguration(); - action = new TestClassGenerationAction(getUnitTestInjector().getInstance(ClassGenerationActionFactory.class) - .createAction(cgenConfiguration), writers); + action = new TestClassGenerationAction( + cgenConfiguration, + getUnitTestInjector().getInstance(ToolsUtilsFactory.class), + getUnitTestInjector().getInstance(MetadataUtils.class), + NOPLogger.NOP_LOGGER, + writers); } @AfterEach @@ -64,6 +69,14 @@ public class ClassGenerationActionTest extends CgenCase { writers = null; } + private ClassGenerationAction newAction() { + return new ClassGenerationAction( + cgenConfiguration, + getUnitTestInjector().getInstance(ToolsUtilsFactory.class), + getUnitTestInjector().getInstance(MetadataUtils.class), + NOPLogger.NOP_LOGGER); + } + @Test public void executeArtifactPairsImports() throws Exception { @@ -230,7 +243,7 @@ public class ClassGenerationActionTest extends CgenCase { cgenConfiguration.setRootPath(tempFolder.toPath()); cgenConfiguration.updateOutputPath(Paths.get(".")); - action = new ClassGenerationAction(cgenConfiguration); + action = newAction(); ObjEntity testEntity1 = new ObjEntity("TEST"); testEntity1.setClassName("TestClass1"); action.context.put(Artifact.SUPER_PACKAGE_KEY, ""); @@ -261,7 +274,7 @@ public class ClassGenerationActionTest extends CgenCase { cgenConfiguration.setRootPath(tempFolder.toPath()); cgenConfiguration.updateOutputPath(Paths.get(".")); - action = new ClassGenerationAction(cgenConfiguration); + action = newAction(); action.context.put(Artifact.SUPER_PACKAGE_KEY, ""); action.context.put(Artifact.SUPER_CLASS_KEY, "TestClass1"); @@ -289,7 +302,7 @@ public class ClassGenerationActionTest extends CgenCase { cgenConfiguration.setRootPath(tempFolder.toPath()); cgenConfiguration.updateOutputPath(Paths.get(".")); - action = new ClassGenerationAction(cgenConfiguration); + action = newAction(); ObjEntity testEntity1 = new ObjEntity("TEST"); testEntity1.setClassName("TestClass1"); action.context.put(Artifact.SUB_PACKAGE_KEY, ""); diff --git a/cayenne-cgen/src/test/java/org/apache/cayenne/gen/TemplateLocationTest.java b/cayenne-cgen/src/test/java/org/apache/cayenne/gen/TemplateLocationTest.java index 9e69db5c5..8c6b28daa 100644 --- a/cayenne-cgen/src/test/java/org/apache/cayenne/gen/TemplateLocationTest.java +++ b/cayenne-cgen/src/test/java/org/apache/cayenne/gen/TemplateLocationTest.java @@ -22,13 +22,14 @@ package org.apache.cayenne.gen; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; +import org.slf4j.helpers.NOPLogger; import java.io.File; import java.nio.file.Paths; import static org.junit.jupiter.api.Assertions.assertNotNull; -public class TemplateLocationTest { +public class TemplateLocationTest extends CgenCase { @TempDir public File tempFolder; @@ -40,7 +41,11 @@ public class TemplateLocationTest { @BeforeEach public void setUp() { cgenConfiguration = new CgenConfiguration(); - action = new ClassGenerationAction(cgenConfiguration); + action = new ClassGenerationAction( + cgenConfiguration, + getUnitTestInjector().getInstance(ToolsUtilsFactory.class), + getUnitTestInjector().getInstance(MetadataUtils.class), + NOPLogger.NOP_LOGGER); templateType = TemplateType.ENTITY_SUBCLASS; } diff --git a/cayenne-cgen/src/test/java/org/apache/cayenne/gen/mock/TestClassGenerationAction.java b/cayenne-cgen/src/test/java/org/apache/cayenne/gen/mock/TestClassGenerationAction.java index 7ba5c07df..8869f996d 100644 --- a/cayenne-cgen/src/test/java/org/apache/cayenne/gen/mock/TestClassGenerationAction.java +++ b/cayenne-cgen/src/test/java/org/apache/cayenne/gen/mock/TestClassGenerationAction.java @@ -22,16 +22,20 @@ import java.io.StringWriter; import java.io.Writer; import java.util.Collection; +import org.apache.cayenne.gen.CgenConfiguration; import org.apache.cayenne.gen.ClassGenerationAction; +import org.apache.cayenne.gen.MetadataUtils; import org.apache.cayenne.gen.TemplateType; +import org.apache.cayenne.gen.ToolsUtilsFactory; +import org.slf4j.Logger; public class TestClassGenerationAction extends ClassGenerationAction { - private Collection<StringWriter> writers; + private final Collection<StringWriter> writers; - public TestClassGenerationAction(ClassGenerationAction classGenerationAction, Collection<StringWriter> writers){ - super(classGenerationAction.getConfiguration()); - setUtilsFactory(classGenerationAction.getUtilsFactory()); + public TestClassGenerationAction(CgenConfiguration configuration, ToolsUtilsFactory utilsFactory, + MetadataUtils metadataUtils, Logger logger, Collection<StringWriter> writers) { + super(configuration, utilsFactory, metadataUtils, logger); this.writers = writers; } diff --git a/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/CgenTask.java b/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/CgenTask.java index 227834b57..dc2ddb7f9 100644 --- a/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/CgenTask.java +++ b/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/CgenTask.java @@ -284,7 +284,6 @@ public class CgenTask extends BaseCayenneTask { CayenneGeneratorEmbeddableFilterAction filterEmbeddableAction = new CayenneGeneratorEmbeddableFilterAction(); filterEmbeddableAction.setNameFilter(NamePatternMatcher.build(getLogger(), null, excludeEmbeddables)); - generator.setLogger(getLogger()); if (!hasConfig() && useConfigFromDataMap) { generator.prepareArtifacts(); @@ -324,7 +323,8 @@ public class CgenTask extends BaseCayenneTask { List<ClassGenerationAction> createGenerators(DataMap dataMap) { List<ClassGenerationAction> generators = new ArrayList<>(); for (CgenConfiguration configuration : buildConfigurations(dataMap)) { - generators.add(injector.getInstance(ClassGenerationActionFactory.class).createAction(configuration)); + generators.add(injector.getInstance(ClassGenerationActionFactory.class) + .createAction(configuration, getLogger())); } return generators; } diff --git a/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/CgenTaskTest.java b/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/CgenTaskTest.java index a345e985d..969d87e18 100644 --- a/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/CgenTaskTest.java +++ b/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/CgenTaskTest.java @@ -21,7 +21,6 @@ package org.apache.cayenne.tools; import org.apache.cayenne.gen.CgenConfiguration; import org.apache.cayenne.gen.CgenTemplate; -import org.apache.cayenne.gen.ClassGenerationAction; import org.apache.cayenne.map.DataMap; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; @@ -86,23 +85,20 @@ public class CgenTaskTest { for (CgenConfiguration configuration : task.buildConfigurations(dataMap)) { - ClassGenerationAction createdAction = new ClassGenerationAction(configuration); + CgenTemplate cgenTemplate = configuration.getTemplate(); + assertNotNull(configuration.getEmbeddableSuperTemplate()); + assertNotNull(configuration.getEmbeddableTemplate()); - CgenConfiguration cgenConfiguration = createdAction.getCgenConfiguration(); - CgenTemplate cgenTemplate = cgenConfiguration.getTemplate(); - assertNotNull(cgenConfiguration.getEmbeddableSuperTemplate()); - assertNotNull(cgenConfiguration.getEmbeddableTemplate()); - - assertEquals("UTF-8", cgenConfiguration.getEncoding()); - assertEquals("entity", cgenConfiguration.getArtifactsGenerationMode()); - assertEquals("pattern", cgenConfiguration.getOutputPattern()); - assertEquals("org.example.model.auto", cgenConfiguration.getSuperPkg()); + assertEquals("UTF-8", configuration.getEncoding()); + assertEquals("entity", configuration.getArtifactsGenerationMode()); + assertEquals("pattern", configuration.getOutputPattern()); + assertEquals("org.example.model.auto", configuration.getSuperPkg()); assertTrue(cgenTemplate.isFile()); assertEquals("org/apache/cayenne/tools/velotemplate.vm", cgenTemplate.getData()); - assertTrue(cgenConfiguration.isMakePairs()); - assertTrue(cgenConfiguration.isCreatePropertyNames()); - assertTrue(cgenConfiguration.isOverwrite()); - assertTrue(cgenConfiguration.isUsePkgPath()); + assertTrue(configuration.isMakePairs()); + assertTrue(configuration.isCreatePropertyNames()); + assertTrue(configuration.isOverwrite()); + assertTrue(configuration.isUsePkgPath()); } } diff --git a/cayenne-maven-plugin/src/main/java/org/apache/cayenne/tools/CayenneGeneratorMojo.java b/cayenne-maven-plugin/src/main/java/org/apache/cayenne/tools/CayenneGeneratorMojo.java index 2cf447569..25fb8590b 100644 --- a/cayenne-maven-plugin/src/main/java/org/apache/cayenne/tools/CayenneGeneratorMojo.java +++ b/cayenne-maven-plugin/src/main/java/org/apache/cayenne/tools/CayenneGeneratorMojo.java @@ -275,13 +275,12 @@ public class CayenneGeneratorMojo extends AbstractMojo { try { loaderAction.setAdditionalDataMapFiles(convertAdditionalDataMaps()); DataMap dataMap = loaderAction.getMainDataMap(); - for (ClassGenerationAction action : createActions(dataMap)) { + for (ClassGenerationAction action : createActions(dataMap, logger)) { CayenneGeneratorEntityFilterAction filterEntityAction = new CayenneGeneratorEntityFilterAction(); filterEntityAction.setNameFilter(NamePatternMatcher.build(logger, includeEntities, excludeEntities)); CayenneGeneratorEmbeddableFilterAction filterEmbeddableAction = new CayenneGeneratorEmbeddableFilterAction(); filterEmbeddableAction.setNameFilter(NamePatternMatcher.build(logger, null, excludeEmbeddables)); - action.setLogger(logger); if (!hasConfig() && useConfigFromDataMap) { action.prepareArtifacts(); @@ -323,10 +322,10 @@ public class CayenneGeneratorMojo extends AbstractMojo { dataMapSuperTemplate != null || createPKProperties != null || externalToolConfig != null; } - private List<ClassGenerationAction> createActions(DataMap dataMap) { + private List<ClassGenerationAction> createActions(DataMap dataMap, Logger logger) { List<ClassGenerationAction> actions = new ArrayList<>(); for (CgenConfiguration configuration : buildConfigurations(dataMap)) { - actions.add(injector.getInstance(ClassGenerationActionFactory.class).createAction(configuration)); + actions.add(injector.getInstance(ClassGenerationActionFactory.class).createAction(configuration, logger)); } return actions; } diff --git a/cayenne-mcp-server/src/main/java/org/apache/cayenne/mcp/tools/cgen/CgenRunTool.java b/cayenne-mcp-server/src/main/java/org/apache/cayenne/mcp/tools/cgen/CgenRunTool.java index 26a73ad45..4cfa413e9 100644 --- a/cayenne-mcp-server/src/main/java/org/apache/cayenne/mcp/tools/cgen/CgenRunTool.java +++ b/cayenne-mcp-server/src/main/java/org/apache/cayenne/mcp/tools/cgen/CgenRunTool.java @@ -43,6 +43,7 @@ import org.apache.cayenne.project.ProjectLoader; import org.apache.cayenne.project.ProjectModule; import org.apache.cayenne.resource.URLResource; import org.apache.cayenne.tools.ToolsInjectorBuilder; +import org.slf4j.helpers.NOPLogger; import java.io.IOException; import java.nio.file.Files; @@ -186,9 +187,11 @@ public class CgenRunTool { CgenValidation allPassed = new CgenValidation(true, true, true, true, true); // Execute cgen - InstrumentedClassGenerationAction action = new InstrumentedClassGenerationAction(cgenConfig); - action.setUtilsFactory(injector.getInstance(ToolsUtilsFactory.class)); - action.setMetadataUtils(injector.getInstance(MetadataUtils.class)); + InstrumentedClassGenerationAction action = new InstrumentedClassGenerationAction( + cgenConfig, + injector.getInstance(ToolsUtilsFactory.class), + injector.getInstance(MetadataUtils.class), + NOPLogger.NOP_LOGGER); action.prepareArtifacts(); int filesConsidered = action.countFilesConsidered(); diff --git a/cayenne-mcp-server/src/main/java/org/apache/cayenne/mcp/tools/cgen/InstrumentedClassGenerationAction.java b/cayenne-mcp-server/src/main/java/org/apache/cayenne/mcp/tools/cgen/InstrumentedClassGenerationAction.java index 572e453b1..9cdb48508 100644 --- a/cayenne-mcp-server/src/main/java/org/apache/cayenne/mcp/tools/cgen/InstrumentedClassGenerationAction.java +++ b/cayenne-mcp-server/src/main/java/org/apache/cayenne/mcp/tools/cgen/InstrumentedClassGenerationAction.java @@ -22,11 +22,14 @@ import org.apache.cayenne.gen.Artifact; import org.apache.cayenne.gen.ArtifactGenerationMode; import org.apache.cayenne.gen.CgenConfiguration; import org.apache.cayenne.gen.ClassGenerationAction; +import org.apache.cayenne.gen.MetadataUtils; import org.apache.cayenne.gen.TemplateType; +import org.apache.cayenne.gen.ToolsUtilsFactory; import org.apache.cayenne.map.Embeddable; import org.apache.cayenne.map.ObjEntity; import org.apache.cayenne.mcp.tools.cgen.protocol.CgenFileEntry; import org.apache.cayenne.mcp.tools.cgen.protocol.CgenFileKind; +import org.slf4j.Logger; import java.io.File; import java.util.ArrayList; @@ -44,8 +47,13 @@ class InstrumentedClassGenerationAction extends ClassGenerationAction { private final List<CgenFileEntry> writtenFiles; private Artifact currentArtifact; - public InstrumentedClassGenerationAction(CgenConfiguration configuration) { - super(configuration); + public InstrumentedClassGenerationAction( + CgenConfiguration configuration, + ToolsUtilsFactory utilsFactory, + MetadataUtils metadataUtils, + Logger logger) { + + super(configuration, utilsFactory, metadataUtils, logger); this.writtenFiles = new ArrayList<>(); } diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datadomain/cgen/DataDomainCgenTab.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datadomain/cgen/DataDomainCgenTab.java index c8e5bf755..e6f586ebb 100644 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datadomain/cgen/DataDomainCgenTab.java +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datadomain/cgen/DataDomainCgenTab.java @@ -32,6 +32,7 @@ import org.apache.cayenne.modeler.project.CgenOps; import org.apache.cayenne.modeler.project.ProjectSession; import org.apache.cayenne.modeler.ui.project.editor.datadomain.DataDomainGeneratorsTab; import org.apache.cayenne.tools.ToolsInjectorBuilder; +import org.slf4j.helpers.NOPLogger; import javax.swing.JOptionPane; import java.util.Set; @@ -64,7 +65,8 @@ public class DataDomainCgenTab extends DataDomainGeneratorsTab<CgenConfiguration cgenConfigList.add(createConfiguration(dataMap)); } for (CgenConfiguration cgenConfiguration : cgenConfigList.getAll()) { - ClassGenerationAction action = actionFactory.createAction(cgenConfiguration); + ClassGenerationAction action = actionFactory.createAction(cgenConfiguration, + NOPLogger.NOP_LOGGER); action.prepareArtifacts(); action.execute(); } diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/cgen/CgenPanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/cgen/CgenPanel.java index f153b2fb7..e57bc1a40 100644 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/cgen/CgenPanel.java +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/cgen/CgenPanel.java @@ -50,6 +50,7 @@ import org.apache.cayenne.modeler.toolkit.icon.IconFactory; import org.apache.cayenne.tools.ToolsInjectorBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.slf4j.helpers.NOPLogger; import javax.swing.*; import java.awt.*; @@ -358,7 +359,7 @@ public class CgenPanel extends ProjectPanel implements ObjEntityListener, Embedd .addModule(binder -> binder.bind(DataChannelMetaData.class).toInstance(app.getMetaData())) .create() .getInstance(ClassGenerationActionFactory.class) - .createAction(cgenConfiguration); + .createAction(cgenConfiguration, NOPLogger.NOP_LOGGER); try { generator.prepareArtifacts(); diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/cgen/templateeditor/PreviewActionConfigurator.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/cgen/templateeditor/PreviewActionConfigurator.java index 450ccb4d5..ae8b562a6 100644 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/cgen/templateeditor/PreviewActionConfigurator.java +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/cgen/templateeditor/PreviewActionConfigurator.java @@ -29,6 +29,7 @@ import org.apache.cayenne.gen.ClassGenerationActionFactory; import org.apache.cayenne.gen.CgenTemplate; import org.apache.cayenne.gen.TemplateType; import org.apache.cayenne.tools.ToolsInjectorBuilder; +import org.slf4j.helpers.NOPLogger; import java.io.StringWriter; import java.io.Writer; @@ -68,7 +69,7 @@ public class PreviewActionConfigurator { ClassGenerationAction action = injector .getInstance(ClassGenerationActionFactory.class) - .createAction(previewCgenConfiguration); + .createAction(previewCgenConfiguration, NOPLogger.NOP_LOGGER); artefactsConfigurator.config(action, editor.getSelectedArtifactName()); return action; } diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/cgen/templateeditor/PreviewClassGenerationFactory.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/cgen/templateeditor/PreviewClassGenerationFactory.java index c50210367..5846a8f12 100644 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/cgen/templateeditor/PreviewClassGenerationFactory.java +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/cgen/templateeditor/PreviewClassGenerationFactory.java @@ -25,6 +25,7 @@ import org.apache.cayenne.gen.ClassGenerationAction; import org.apache.cayenne.gen.ClassGenerationActionFactory; import org.apache.cayenne.gen.MetadataUtils; import org.apache.cayenne.gen.ToolsUtilsFactory; +import org.slf4j.Logger; import java.io.StringWriter; @@ -41,12 +42,8 @@ public class PreviewClassGenerationFactory implements ClassGenerationActionFacto private StringWriter writer; @Override - public ClassGenerationAction createAction(CgenConfiguration configuration) { - PreviewGenerationAction action = new PreviewGenerationAction(configuration); - action.setUtilsFactory(utilsFactory); - action.setMetadataUtils(metadataUtils); - action.setWriter(writer); - return action; + public ClassGenerationAction createAction(CgenConfiguration configuration, Logger logger) { + return new PreviewGenerationAction(configuration, utilsFactory, metadataUtils, logger, writer); } } diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/cgen/templateeditor/PreviewGenerationAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/cgen/templateeditor/PreviewGenerationAction.java index cf47fc74d..3e52740f6 100644 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/cgen/templateeditor/PreviewGenerationAction.java +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/cgen/templateeditor/PreviewGenerationAction.java @@ -22,7 +22,10 @@ package org.apache.cayenne.modeler.ui.project.editor.datamap.cgen.templateeditor import org.apache.cayenne.gen.CgenConfiguration; import org.apache.cayenne.gen.ClassGenerationAction; +import org.apache.cayenne.gen.MetadataUtils; import org.apache.cayenne.gen.TemplateType; +import org.apache.cayenne.gen.ToolsUtilsFactory; +import org.slf4j.Logger; import java.io.StringWriter; import java.io.Writer; @@ -32,10 +35,17 @@ import java.io.Writer; */ public class PreviewGenerationAction extends ClassGenerationAction { - private StringWriter writer; + private final StringWriter writer; - public PreviewGenerationAction(CgenConfiguration configuration) { - super(configuration); + public PreviewGenerationAction( + CgenConfiguration configuration, + ToolsUtilsFactory utilsFactory, + MetadataUtils metadataUtils, + Logger logger, + StringWriter writer) { + + super(configuration, utilsFactory, metadataUtils, logger); + this.writer = writer; } @Override @@ -43,10 +53,6 @@ public class PreviewGenerationAction extends ClassGenerationAction { //Mock } - public void setWriter(StringWriter writer) { - this.writer = writer; - } - @Override protected Writer openWriter(TemplateType templateType) { // clear and return diff --git a/modeler/cayenne-modeler/src/test/java/org/apache/cayenne/modeler/editor/templateeditor/ArtifactsConfiguratorTest.java b/modeler/cayenne-modeler/src/test/java/org/apache/cayenne/modeler/editor/templateeditor/ArtifactsConfiguratorTest.java index 787114429..abcd793a3 100644 --- a/modeler/cayenne-modeler/src/test/java/org/apache/cayenne/modeler/editor/templateeditor/ArtifactsConfiguratorTest.java +++ b/modeler/cayenne-modeler/src/test/java/org/apache/cayenne/modeler/editor/templateeditor/ArtifactsConfiguratorTest.java @@ -22,7 +22,10 @@ package org.apache.cayenne.modeler.editor.templateeditor; import org.apache.cayenne.gen.Artifact; import org.apache.cayenne.gen.ArtifactsGenerationMode; import org.apache.cayenne.gen.CgenConfiguration; +import org.apache.cayenne.configuration.xml.DataChannelMetaData; +import org.apache.cayenne.configuration.xml.DefaultDataChannelMetaData; import org.apache.cayenne.gen.ClassGenerationAction; +import org.apache.cayenne.gen.ClassGenerationActionFactory; import org.apache.cayenne.map.DataMap; import org.apache.cayenne.map.Embeddable; import org.apache.cayenne.map.ObjEntity; @@ -30,9 +33,11 @@ import org.apache.cayenne.map.QueryDescriptor; import org.apache.cayenne.modeler.ui.project.editor.datamap.cgen.templateeditor.DataMapArtefactsConfigurator; import org.apache.cayenne.modeler.ui.project.editor.datamap.cgen.templateeditor.EmbeddableArtefactsConfigurator; import org.apache.cayenne.modeler.ui.project.editor.datamap.cgen.templateeditor.EntityArtefactsConfigurator; +import org.apache.cayenne.tools.ToolsInjectorBuilder; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.slf4j.helpers.NOPLogger; import java.lang.reflect.Field; import java.util.Collection; @@ -50,7 +55,11 @@ public class ArtifactsConfiguratorTest { @BeforeEach public void config(){ this.dataMap = configureDataMap(); - this.action = new ClassGenerationAction(createCgenConfiguration()); + this.action = new ToolsInjectorBuilder() + .addModule(binder -> binder.bind(DataChannelMetaData.class).to(DefaultDataChannelMetaData.class)) + .create() + .getInstance(ClassGenerationActionFactory.class) + .createAction(createCgenConfiguration(), NOPLogger.NOP_LOGGER); this.entityArtefactsConfigurator = new EntityArtefactsConfigurator(); this.embeddableArtefactsConfigurator = new EmbeddableArtefactsConfigurator(); this.dataMapArtefactsConfigurator = new DataMapArtefactsConfigurator();
