http://git-wip-us.apache.org/repos/asf/cayenne/blob/52ea45b5/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/CgenTask.java ---------------------------------------------------------------------- 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 384d366..3b339df 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 @@ -20,15 +20,18 @@ package org.apache.cayenne.tools; import java.io.File; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; import java.util.Set; -import com.sun.org.apache.xpath.internal.operations.Bool; import groovy.lang.Reference; import org.apache.cayenne.configuration.xml.DataChannelMetaData; import org.apache.cayenne.dbsync.filter.NamePatternMatcher; import org.apache.cayenne.dbsync.reverse.configuration.ToolsModule; import org.apache.cayenne.di.DIBootstrap; import org.apache.cayenne.di.Injector; +import org.apache.cayenne.gen.CgenConfiguration; import org.apache.cayenne.gen.CgenModule; import org.apache.cayenne.gen.ClassGenerationAction; import org.apache.cayenne.gen.ClientClassGenerationAction; @@ -74,6 +77,10 @@ public class CgenTask extends BaseCayenneTask { @Input @Optional + private String excludeEmbeddables; + + @Input + @Optional private String makePairs; @Input @@ -142,6 +149,8 @@ public class CgenTask extends BaseCayenneTask { private DataChannelMetaData metaData; + private boolean useConfigFromDataMap; + @TaskAction public void generate() { File dataMapFile = getDataMapFile(); @@ -152,9 +161,12 @@ public class CgenTask extends BaseCayenneTask { CayenneGeneratorMapLoaderAction loaderAction = new CayenneGeneratorMapLoaderAction(injector); loaderAction.setMainDataMapFile(dataMapFile); - CayenneGeneratorEntityFilterAction filterAction = new CayenneGeneratorEntityFilterAction(); - filterAction.setClient(client); - filterAction.setNameFilter(NamePatternMatcher.build(getLogger(), includeEntities, excludeEntities)); + CayenneGeneratorEntityFilterAction filterEntityAction = new CayenneGeneratorEntityFilterAction(); + filterEntityAction.setClient(client); + filterEntityAction.setNameFilter(NamePatternMatcher.build(getLogger(), includeEntities, excludeEntities)); + + CayenneGeneratorEmbeddableFilterAction filterEmbeddableAction = new CayenneGeneratorEmbeddableFilterAction(); + filterEmbeddableAction.setNameFilter(NamePatternMatcher.build(getLogger(), null, excludeEmbeddables)); try { loaderAction.setAdditionalDataMapFiles(convertAdditionalDataMaps()); @@ -165,16 +177,18 @@ public class CgenTask extends BaseCayenneTask { generator.setLogger(getLogger()); if(this.force || getProject().hasProperty("force")) { - generator.setForce(true); + generator.getCgenConfiguration().setForce(true); } - generator.setTimestamp(dataMapFile.lastModified()); - generator.setDataMap(dataMap); - if(generator.getEntities().isEmpty() && generator.getEmbeddables().isEmpty()) { - generator.addEntities(filterAction.getFilteredEntities(dataMap)); - generator.addEmbeddables(dataMap.getEmbeddables()); - generator.addQueries(dataMap.getQueryDescriptors()); - } else { + generator.getCgenConfiguration().setTimestamp(dataMapFile.lastModified()); + + if(!hasConfig() && useConfigFromDataMap) { generator.prepareArtifacts(); + setDestDir(generator.getCgenConfiguration().getRelPath()); + generator.getCgenConfiguration().setRelPath(getDestDirFile().toPath()); + } else { + generator.addEntities(filterEntityAction.getFilteredEntities(dataMap)); + generator.addEmbeddables(filterEmbeddableAction.getFilteredEmbeddables(dataMap)); + generator.addQueries(dataMap.getQueryDescriptors()); } generator.execute(); } catch (Exception exception) { @@ -196,35 +210,74 @@ public class CgenTask extends BaseCayenneTask { ); } - ClassGenerationAction newGeneratorInstance() { - return client ? new ClientClassGenerationAction() : new ClassGenerationAction(); - } - ClassGenerationAction createGenerator(DataMap dataMap) { - ClassGenerationAction action = this.newGeneratorInstance(); - - if(metaData != null && metaData.get(dataMap, ClassGenerationAction.class) != null){ - action = metaData.get(dataMap, ClassGenerationAction.class); + CgenConfiguration cgenConfiguration = buildConfiguration(dataMap); + return cgenConfiguration.isClient() ? new ClientClassGenerationAction(cgenConfiguration) : + new ClassGenerationAction(cgenConfiguration); + } + + CgenConfiguration buildConfiguration(DataMap dataMap) { + CgenConfiguration cgenConfiguration; + if(hasConfig()) { + return cgenConfigFromPom(dataMap); + } else if(metaData != null && metaData.get(dataMap, CgenConfiguration.class) != null) { + useConfigFromDataMap = true; + cgenConfiguration = metaData.get(dataMap, CgenConfiguration.class); + Path resourcePath = Paths.get(getDataMapFile().getPath()); + if(Files.isRegularFile(resourcePath)) { + resourcePath = resourcePath.getParent(); + } + cgenConfiguration.setRelPath(resourcePath.resolve(cgenConfiguration.getRelPath())); + return cgenConfiguration; + } else { + cgenConfiguration = new CgenConfiguration(); + cgenConfiguration.setRelPath(getDestDirFile().getPath()); + cgenConfiguration.setDataMap(dataMap); + return cgenConfiguration; } + } - action.setDestDir(getDestDirFile()); - action.setEncoding(encoding != null ? encoding : action.getEncoding()); - action.setMakePairs(makePairs != null ? Boolean.valueOf(makePairs) : action.isMakePairs()); - action.setArtifactsGenerationMode(mode != null ? mode : action.getArtifactsGenerationMode()); - action.setOutputPattern(outputPattern != null ? outputPattern : action.getOutputPattern()); - action.setOverwrite(overwrite != null ? Boolean.valueOf(overwrite) : action.isOverwrite()); - action.setSuperPkg(superPkg != null ? superPkg : action.getSuperPkg()); - action.setSuperTemplate(superTemplate != null ? superTemplate : action.getSuperclassTemplate()); - action.setTemplate(template != null ? template : action.getTemplate()); - action.setEmbeddableSuperTemplate(embeddableSuperTemplate != null ? embeddableSuperTemplate : action.getEmbeddableSuperTemplate()); - action.setEmbeddableTemplate(embeddableTemplate != null ? embeddableTemplate : action.getEmbeddableTemplate()); - action.setUsePkgPath(usePkgPath != null ? Boolean.valueOf(usePkgPath) : action.isUsePkgPath()); - action.setCreatePropertyNames(createPropertyNames != null ? Boolean.valueOf(createPropertyNames) : action.isCreatePropertyNames()); - action.setQueryTemplate(queryTemplate != null ? queryTemplate : action.getQueryTemplate()); - action.setQuerySuperTemplate(querySuperTemplate != null ? querySuperTemplate : action.getQuerySuperTemplate()); - return action; + private CgenConfiguration cgenConfigFromPom(DataMap dataMap){ + CgenConfiguration cgenConfiguration = new CgenConfiguration(); + cgenConfiguration.setDataMap(dataMap); + cgenConfiguration.setRelPath(getDestDirFile() != null ? getDestDirFile().getPath() : cgenConfiguration.getRelPath()); + cgenConfiguration.setEncoding(encoding != null ? encoding : cgenConfiguration.getEncoding()); + cgenConfiguration.setMakePairs(makePairs != null ? Boolean.valueOf(makePairs) : cgenConfiguration.isMakePairs()); + cgenConfiguration.setArtifactsGenerationMode(mode != null ? mode : cgenConfiguration.getArtifactsGenerationMode()); + cgenConfiguration.setOutputPattern(outputPattern != null ? outputPattern : cgenConfiguration.getOutputPattern()); + cgenConfiguration.setOverwrite(overwrite != null ? Boolean.valueOf(overwrite) : cgenConfiguration.isOverwrite()); + cgenConfiguration.setSuperPkg(superPkg != null ? superPkg : cgenConfiguration.getSuperPkg()); + cgenConfiguration.setSuperTemplate(superTemplate != null ? superTemplate : cgenConfiguration.getSuperTemplate()); + cgenConfiguration.setTemplate(template != null ? template : cgenConfiguration.getTemplate()); + cgenConfiguration.setEmbeddableSuperTemplate(embeddableSuperTemplate != null ? embeddableSuperTemplate : cgenConfiguration.getEmbeddableSuperTemplate()); + cgenConfiguration.setEmbeddableTemplate(embeddableTemplate != null ? embeddableTemplate : cgenConfiguration.getEmbeddableTemplate()); + cgenConfiguration.setUsePkgPath(usePkgPath != null ? Boolean.valueOf(usePkgPath) : cgenConfiguration.isUsePkgPath()); + cgenConfiguration.setCreatePropertyNames(createPropertyNames != null ? Boolean.valueOf(createPropertyNames) : cgenConfiguration.isCreatePropertyNames()); + cgenConfiguration.setQueryTemplate(queryTemplate != null ? queryTemplate : cgenConfiguration.getQueryTemplate()); + cgenConfiguration.setQuerySuperTemplate(querySuperTemplate != null ? querySuperTemplate : cgenConfiguration.getQuerySuperTemplate()); + cgenConfiguration.setCreatePKProperties(createPKProperties); + cgenConfiguration.setClient(client); + if(!cgenConfiguration.isMakePairs()) { + if(template == null) { + cgenConfiguration.setTemplate(client ? ClientClassGenerationAction.SINGLE_CLASS_TEMPLATE : ClassGenerationAction.SINGLE_CLASS_TEMPLATE); + } + if(embeddableTemplate == null) { + cgenConfiguration.setEmbeddableTemplate(ClassGenerationAction.EMBEDDABLE_SINGLE_CLASS_TEMPLATE); + } + if(queryTemplate == null) { + cgenConfiguration.setQueryTemplate(client ? ClientClassGenerationAction.DATAMAP_SINGLE_CLASS_TEMPLATE : ClassGenerationAction.DATAMAP_SINGLE_CLASS_TEMPLATE); + } + } + return cgenConfiguration; } + private boolean hasConfig() { + return destDir != null || destDirName != null || encoding != null || client || excludeEntities != null || excludeEmbeddables != null || includeEntities != null || + makePairs != null || mode != null || outputPattern != null || overwrite != null || superPkg != null || + superTemplate != null || template != null || embeddableTemplate != null || embeddableSuperTemplate != null || + usePkgPath != null || createPropertyNames != null || force || queryTemplate != null || + querySuperTemplate != null || createPKProperties; + } @OutputDirectory protected File getDestDirFile() { @@ -358,6 +411,18 @@ public class CgenTask extends BaseCayenneTask { setIncludeEntities(includeEntities); } + public String getExcludeEmbeddables() { + return excludeEmbeddables; + } + + public void setExcludeEmbeddables(String excludeEmbeddables) { + this.excludeEmbeddables = excludeEmbeddables; + } + + public void excludeEmbeddables(String excludeEmbeddables) { + setExcludeEmbeddables(excludeEmbeddables); + } + public boolean isMakePairs() { return Boolean.valueOf(makePairs); }
http://git-wip-us.apache.org/repos/asf/cayenne/blob/52ea45b5/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/CgenTaskIT.java ---------------------------------------------------------------------- diff --git a/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/CgenTaskIT.java b/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/CgenTaskIT.java index 132320c..b41c1d2 100644 --- a/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/CgenTaskIT.java +++ b/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/CgenTaskIT.java @@ -24,11 +24,14 @@ import org.gradle.testkit.runner.GradleRunner; import org.gradle.testkit.runner.TaskOutcome; import org.junit.Test; - import java.io.File; import java.net.URLDecoder; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; /** @@ -88,4 +91,59 @@ public class CgenTaskIT extends BaseTaskIT { assertEquals(TaskOutcome.SUCCESS, result.task(":cgen").getOutcome()); } + @Test + public void cgenWithConfig() throws Exception { + GradleRunner runner = createRunner( + "cgen_with_config", + "cgen", + "-PdataMap=" + URLDecoder.decode(getClass().getResource("cgenConfig.map.xml").getFile(), "UTF-8") + ); + + BuildResult result = runner.forwardOutput().build(); + + String generatedDirectoryPath = projectDir.getAbsolutePath() + "/customDirectory1/"; + + String generatedClassPath = generatedDirectoryPath + "ObjEntity1.txt"; + String datamap = generatedDirectoryPath + "CgenMap.txt"; + String notIncludedEntity = generatedDirectoryPath + "ObjEntity.txt"; + String notIncludedEmbeddable = generatedDirectoryPath + "Embeddable.txt"; + + Path generatedClass = Paths.get(generatedClassPath); + Path generatedDataMap = Paths.get(datamap); + Path generatedNotIncludedEntity = Paths.get(notIncludedEntity); + Path generatedNotIncludedEmbeddable = Paths.get(notIncludedEmbeddable); + + assertTrue(Files.exists(generatedClass)); + assertFalse(Files.exists(generatedDataMap)); + assertFalse(Files.exists(generatedNotIncludedEmbeddable)); + assertFalse(Files.exists(generatedNotIncludedEntity)); + assertEquals(TaskOutcome.SUCCESS, result.task(":cgen").getOutcome()); + } + + @Test + public void testWithConfigs() throws Exception { + GradleRunner runner = createRunner( + "cgen_with_configs", + "cgen", + "-PdataMap=" + URLDecoder.decode(getClass().getResource("cgenMap.map.xml").getFile(), "UTF-8") + ); + + BuildResult result = runner.forwardOutput().build(); + + String generatedDirectoryPath = projectDir.getAbsolutePath() + "/customDirectory/"; + + String generatedClassPath = generatedDirectoryPath + "ObjEntity.groovy"; + Path generatedClass = Paths.get(generatedClassPath); + assertTrue(Files.exists(generatedClass)); + + String notIncludedEntity = generatedDirectoryPath + "ObjEntity1.groovy"; + Path generatedNotIncludedEntity = Paths.get(notIncludedEntity); + assertFalse(Files.exists(generatedNotIncludedEntity)); + + String includedDataMap = generatedDirectoryPath + "CgenMap.groovy"; + Path generatedIncludedDataMap = Paths.get(includedDataMap); + assertTrue(Files.exists(generatedIncludedDataMap)); + + assertEquals(TaskOutcome.SUCCESS, result.task(":cgen").getOutcome()); + } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/cayenne/blob/52ea45b5/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/CgenTaskTest.java ---------------------------------------------------------------------- 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 478ac5c..e2fa3ca 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 @@ -19,6 +19,7 @@ package org.apache.cayenne.tools; +import org.apache.cayenne.gen.CgenConfiguration; import org.apache.cayenne.gen.ClassGenerationAction; import org.apache.cayenne.map.DataMap; import org.junit.Rule; @@ -27,7 +28,8 @@ import org.junit.rules.TemporaryFolder; import java.io.File; -import static junit.framework.TestCase.assertSame; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.*; /** @@ -40,7 +42,7 @@ public class CgenTaskTest { DataMap dataMap = new DataMap(); - private CgenTask createCgenTaskMock(ClassGenerationAction action) { + private CgenTask createCgenTaskMock() { CgenTask mock = mock(CgenTask.class); doCallRealMethod().when(mock).setClient(anyBoolean()); @@ -59,7 +61,7 @@ public class CgenTaskTest { doCallRealMethod().when(mock).setOverwrite(anyBoolean()); doCallRealMethod().when(mock).setUsePkgPath(anyBoolean()); doCallRealMethod().when(mock).setTemplate(anyString()); - when(mock.newGeneratorInstance()).thenReturn(action); + when(mock.buildConfiguration(dataMap)).thenCallRealMethod(); when(mock.createGenerator(dataMap)).thenCallRealMethod(); return mock; @@ -67,9 +69,7 @@ public class CgenTaskTest { @Test public void testGeneratorCreation() { - ClassGenerationAction action = mock(ClassGenerationAction.class); - CgenTask task = createCgenTaskMock(action); - + CgenTask task = createCgenTaskMock(); task.setEmbeddableSuperTemplate("superTemplate"); task.setEmbeddableTemplate("template"); task.setEncoding("UTF-8"); @@ -78,28 +78,29 @@ public class CgenTaskTest { task.setMode("entity"); task.setOutputPattern("pattern"); task.setSuperPkg("org.example.model.auto"); - task.setSuperTemplate("*.java"); - task.setTemplate("*.java"); + task.setSuperTemplate("superTemplate"); + task.setTemplate("template"); task.setMakePairs(true); task.setCreatePropertyNames(true); task.setOverwrite(true); task.setUsePkgPath(true); ClassGenerationAction createdAction = task.createGenerator(dataMap); - assertSame(action, createdAction); - verify(action).setCreatePropertyNames(true); - verify(action).setMakePairs(true); - verify(action).setOverwrite(true); - verify(action).setUsePkgPath(true); - verify(action).setArtifactsGenerationMode("entity"); - verify(action).setEncoding("UTF-8"); - verify(action).setEmbeddableSuperTemplate("superTemplate"); - verify(action).setEmbeddableTemplate("template"); - verify(action).setOutputPattern("pattern"); - verify(action).setSuperPkg("org.example.model.auto"); - verify(action).setSuperTemplate("*.java"); - verify(action).setTemplate("*.java"); + CgenConfiguration cgenConfiguration = createdAction.getCgenConfiguration(); + assertEquals(cgenConfiguration.getEmbeddableSuperTemplate(), "superTemplate"); + assertEquals(cgenConfiguration.getEmbeddableTemplate(), "template"); + assertEquals(cgenConfiguration.getEncoding(), "UTF-8"); + assertEquals(cgenConfiguration.getArtifactsGenerationMode(), "entity"); + assertEquals(cgenConfiguration.getOutputPattern(), "pattern"); + assertEquals(cgenConfiguration.getSuperPkg(), "org.example.model.auto"); + assertEquals(cgenConfiguration.getSuperTemplate(), "superTemplate"); + assertEquals(cgenConfiguration.getTemplate(), "template"); + assertTrue(cgenConfiguration.isMakePairs()); + assertTrue(cgenConfiguration.isCreatePropertyNames()); + assertTrue(cgenConfiguration.isOverwrite()); + assertTrue(cgenConfiguration.isUsePkgPath()); + } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/cayenne/blob/52ea45b5/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/CgenTaskWithConfigIT.java ---------------------------------------------------------------------- diff --git a/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/CgenTaskWithConfigIT.java b/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/CgenTaskWithConfigIT.java deleted file mode 100644 index bf981ec..0000000 --- a/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/CgenTaskWithConfigIT.java +++ /dev/null @@ -1,71 +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.cayenne.tools; - -import org.gradle.testkit.runner.BuildResult; -import org.gradle.testkit.runner.GradleRunner; -import org.gradle.testkit.runner.TaskOutcome; -import org.junit.Test; - - -import java.io.File; -import java.io.UnsupportedEncodingException; -import java.net.URLDecoder; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; - -/** - * @since 4.1 - */ -public class CgenTaskWithConfigIT extends BaseTaskIT{ - - @Test - public void cgenWithConfig() throws Exception { - GradleRunner runner = createRunner( - "cgen_with_config", - "cgen", - "-PdataMap=" + URLDecoder.decode(getClass().getResource("cgenMap.map.xml").getFile(), "UTF-8") - ); - - BuildResult result = runner.forwardOutput().build(); - - String generatedDirectoryPath = projectDir.getAbsolutePath() + "/customDirectory/"; - - String generatedClassPath = generatedDirectoryPath + "ObjEntity1.txt"; - String datamap = generatedDirectoryPath + "TestCgenMap.txt"; - String notIncludedEntity = generatedDirectoryPath + "ObjEntity.txt"; - String notIncludedSuperDatamap = generatedDirectoryPath + "_TestCgenMap.txt"; - - File notIncludeSuperDatamap = new File("_TestCgenMap.txt"); - assertFalse(notIncludeSuperDatamap.exists()); - - File generatedClass = new File(generatedClassPath); - File generatedDatamap = new File(datamap); - File generatedNotIncludedEntity = new File(notIncludedEntity); - File generatedNotIncludedSuperDatamap = new File(notIncludedSuperDatamap); - - assertTrue(generatedClass.exists()); - assertFalse(generatedDatamap.exists()); - assertFalse(generatedNotIncludedEntity.exists()); - assertFalse(generatedNotIncludedSuperDatamap.exists()); - } - -} http://git-wip-us.apache.org/repos/asf/cayenne/blob/52ea45b5/cayenne-gradle-plugin/src/test/resources/org/apache/cayenne/tools/cgenConfig.map.xml ---------------------------------------------------------------------- diff --git a/cayenne-gradle-plugin/src/test/resources/org/apache/cayenne/tools/cgenConfig.map.xml b/cayenne-gradle-plugin/src/test/resources/org/apache/cayenne/tools/cgenConfig.map.xml new file mode 100644 index 0000000..e3bfe55 --- /dev/null +++ b/cayenne-gradle-plugin/src/test/resources/org/apache/cayenne/tools/cgenConfig.map.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?> +<data-map xmlns="http://cayenne.apache.org/schema/10/modelMap" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://cayenne.apache.org/schema/10/modelMap http://cayenne.apache.org/schema/10/modelMap.xsd" + project-version="10"> + <embeddable className="Embeddable"/> + <obj-entity name="ObjEntity" className="ObjEntity"/> + <obj-entity name="ObjEntity1" className="ObjEntity1"/> + <cgen xmlns="http://cayenne.apache.org/schema/10/cgen"> + <destDir>./customDirectory1</destDir> + <excludeEntities>ObjEntity</excludeEntities> + <excludeEmbeddables>Embeddable</excludeEmbeddables> + <mode>entity</mode> + <template>templates/v4_1/subclass.vm</template> + <superTemplate>templates/v4_1/superclass.vm</superTemplate> + <outputPattern>*.txt</outputPattern> + <makePairs>false</makePairs> + <usePkgPath>true</usePkgPath> + <overwrite>false</overwrite> + <createPropertyNames>false</createPropertyNames> + </cgen> +</data-map> http://git-wip-us.apache.org/repos/asf/cayenne/blob/52ea45b5/cayenne-gradle-plugin/src/test/resources/org/apache/cayenne/tools/cgenMap.map.xml ---------------------------------------------------------------------- diff --git a/cayenne-gradle-plugin/src/test/resources/org/apache/cayenne/tools/cgenMap.map.xml b/cayenne-gradle-plugin/src/test/resources/org/apache/cayenne/tools/cgenMap.map.xml index 930acbc..78da7cd 100644 --- a/cayenne-gradle-plugin/src/test/resources/org/apache/cayenne/tools/cgenMap.map.xml +++ b/cayenne-gradle-plugin/src/test/resources/org/apache/cayenne/tools/cgenMap.map.xml @@ -7,21 +7,16 @@ <obj-entity name="ObjEntity" className="ObjEntity"/> <obj-entity name="ObjEntity1" className="ObjEntity1"/> <cgen xmlns="http://cayenne.apache.org/schema/10/cgen"> - <objEntity> - <name>ObjEntity1</name> - </objEntity> - <generationMode>all</generationMode> - <dataMapTemplate>templates/v4_1/datamap-subclass.vm</dataMapTemplate> - <dataMapSuperclassTemplate>templates/v4_1/datamap-superclass.vm</dataMapSuperclassTemplate> - <subclassTemplate>templates/v4_1/subclass.vm</subclassTemplate> - <superclassTemplate>templates/v4_1/superclass.vm</superclassTemplate> - <embeddableTemplate>templates/v4_1/embeddable-subclass.vm</embeddableTemplate> - <embeddableSuperclassTemplate>templates/v4_1/embeddable-superclass.vm</embeddableSuperclassTemplate> + <destDir>./customDirectory</destDir> + <excludeEntities>ObjEntity</excludeEntities> + <excludeEmbeddables>Embeddable</excludeEmbeddables> + <mode>entity</mode> + <template>templates/v4_1/subclass.vm</template> + <superTemplate>templates/v4_1/superclass.vm</superTemplate> <outputPattern>*.txt</outputPattern> <makePairs>false</makePairs> <usePkgPath>true</usePkgPath> - <overwriteSubclasses>false</overwriteSubclasses> + <overwrite>false</overwrite> <createPropertyNames>false</createPropertyNames> - <encoding>UTF-8</encoding> </cgen> </data-map> http://git-wip-us.apache.org/repos/asf/cayenne/blob/52ea45b5/cayenne-gradle-plugin/src/test/resources/org/apache/cayenne/tools/cgen_with_config.gradle ---------------------------------------------------------------------- diff --git a/cayenne-gradle-plugin/src/test/resources/org/apache/cayenne/tools/cgen_with_config.gradle b/cayenne-gradle-plugin/src/test/resources/org/apache/cayenne/tools/cgen_with_config.gradle index 3cad46e..94de25f 100644 --- a/cayenne-gradle-plugin/src/test/resources/org/apache/cayenne/tools/cgen_with_config.gradle +++ b/cayenne-gradle-plugin/src/test/resources/org/apache/cayenne/tools/cgen_with_config.gradle @@ -19,10 +19,9 @@ plugins { id 'org.apache.cayenne' + id 'java' } cgen { map dataMap - destDir = './customDirectory' - mode = 'entity' } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/cayenne/blob/52ea45b5/cayenne-gradle-plugin/src/test/resources/org/apache/cayenne/tools/cgen_with_configs.gradle ---------------------------------------------------------------------- diff --git a/cayenne-gradle-plugin/src/test/resources/org/apache/cayenne/tools/cgen_with_configs.gradle b/cayenne-gradle-plugin/src/test/resources/org/apache/cayenne/tools/cgen_with_configs.gradle new file mode 100644 index 0000000..9299033 --- /dev/null +++ b/cayenne-gradle-plugin/src/test/resources/org/apache/cayenne/tools/cgen_with_configs.gradle @@ -0,0 +1,32 @@ +/***************************************************************** + * 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. + ****************************************************************/ + +plugins { + id 'org.apache.cayenne' +} + +cgen { + map dataMap + destDir = './customDirectory' + makePairs false + outputPattern = '*.groovy' + excludeEntities = 'ObjEntity1' + overwrite = false + mode = 'all' +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/cayenne/blob/52ea45b5/maven-plugins/cayenne-maven-plugin/src/main/java/org/apache/cayenne/tools/CayenneGeneratorMojo.java ---------------------------------------------------------------------- diff --git a/maven-plugins/cayenne-maven-plugin/src/main/java/org/apache/cayenne/tools/CayenneGeneratorMojo.java b/maven-plugins/cayenne-maven-plugin/src/main/java/org/apache/cayenne/tools/CayenneGeneratorMojo.java index 1ab9f96..e936024 100644 --- a/maven-plugins/cayenne-maven-plugin/src/main/java/org/apache/cayenne/tools/CayenneGeneratorMojo.java +++ b/maven-plugins/cayenne-maven-plugin/src/main/java/org/apache/cayenne/tools/CayenneGeneratorMojo.java @@ -24,6 +24,7 @@ import org.apache.cayenne.dbsync.filter.NamePatternMatcher; import org.apache.cayenne.dbsync.reverse.configuration.ToolsModule; import org.apache.cayenne.di.DIBootstrap; import org.apache.cayenne.di.Injector; +import org.apache.cayenne.gen.CgenConfiguration; import org.apache.cayenne.gen.CgenModule; import org.apache.cayenne.gen.ClassGenerationAction; import org.apache.cayenne.gen.ClientClassGenerationAction; @@ -38,9 +39,13 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.File; +import java.net.URL; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; /** - * Maven mojo to perform class generation from data map. This class is an Maven + * Maven mojo to perform class generation from data cgenConfiguration. This class is an Maven * adapter to DefaultClassGenerator class. * * @since 3.0 @@ -94,6 +99,13 @@ public class CayenneGeneratorMojo extends AbstractMojo { private String includeEntities; /** + * Embeddables (expressed as a perl5 regex) to exclude from template + * generation. (Default is to include all embeddables in the DataMap). + */ + @Parameter + private String excludeEmbeddables; + + /** * If set to <code>true</code>, will generate subclass/superclass pairs, * with all generated code included in superclass (default is * <code>true</code>). @@ -207,30 +219,31 @@ public class CayenneGeneratorMojo extends AbstractMojo { * @since 4.1 */ @Parameter(defaultValue = "false") - private Boolean createPKProperties; + private boolean createPKProperties; private transient Injector injector; private static final Logger logger = LoggerFactory.getLogger(CayenneGeneratorMojo.class); + private boolean useConfigFromDataMap; + public void execute() throws MojoExecutionException, MojoFailureException { // Create the destination directory if necessary. // TODO: (KJM 11/2/06) The destDir really should be added as a // compilation resource for maven. - if (!destDir.exists()) { - destDir.mkdirs(); - } - injector = DIBootstrap.createInjector(new CgenModule(), new ToolsModule(LoggerFactory.getLogger(CayenneGeneratorMojo.class))); Logger logger = new MavenLogger(this); CayenneGeneratorMapLoaderAction loaderAction = new CayenneGeneratorMapLoaderAction(injector); loaderAction.setMainDataMapFile(map); - CayenneGeneratorEntityFilterAction filterAction = new CayenneGeneratorEntityFilterAction(); - filterAction.setClient(client); - filterAction.setNameFilter(NamePatternMatcher.build(logger, includeEntities, excludeEntities)); + CayenneGeneratorEntityFilterAction filterEntityAction = new CayenneGeneratorEntityFilterAction(); + filterEntityAction.setClient(client); + filterEntityAction.setNameFilter(NamePatternMatcher.build(logger, includeEntities, excludeEntities)); + + CayenneGeneratorEmbeddableFilterAction filterEmbeddableAction = new CayenneGeneratorEmbeddableFilterAction(); + filterEmbeddableAction.setNameFilter(NamePatternMatcher.build(logger, null, excludeEmbeddables)); try { loaderAction.setAdditionalDataMapFiles(convertAdditionalDataMaps()); @@ -242,17 +255,17 @@ public class CayenneGeneratorMojo extends AbstractMojo { if(force) { // will (re-)generate all files - generator.setForce(true); + generator.getCgenConfiguration().setForce(true); } - generator.setTimestamp(map.lastModified()); - generator.setDataMap(dataMap); - if(!generator.getEntities().isEmpty() || !generator.getEmbeddables().isEmpty()){ + generator.getCgenConfiguration().setTimestamp(map.lastModified()); + if(!hasConfig() && useConfigFromDataMap) { generator.prepareArtifacts(); } else { - generator.addEntities(filterAction.getFilteredEntities(dataMap)); - generator.addEmbeddables(dataMap.getEmbeddables()); + generator.addEntities(filterEntityAction.getFilteredEntities(dataMap)); + generator.addEmbeddables(filterEmbeddableAction.getFilteredEmbeddables(dataMap)); generator.addQueries(dataMap.getQueryDescriptors()); } + URL dataName = dataMap.getConfigurationSource().getURL(); generator.execute(); } catch (Exception e) { throw new MojoExecutionException("Error generating classes: ", e); @@ -260,7 +273,7 @@ public class CayenneGeneratorMojo extends AbstractMojo { } /** - * Loads and returns DataMap based on <code>map</code> attribute. + * Loads and returns DataMap based on <code>cgenConfiguration</code> attribute. */ protected File[] convertAdditionalDataMaps() throws Exception { @@ -277,40 +290,78 @@ public class CayenneGeneratorMojo extends AbstractMojo { ); } + private boolean hasConfig() { + return encoding != null || client || excludeEntities != null || excludeEmbeddables != null || includeEntities != null || + makePairs != null || mode != null || outputPattern != null || overwrite != null || superPkg != null || + superTemplate != null || template != null || embeddableTemplate != null || embeddableSuperTemplate != null || + usePkgPath != null || createPropertyNames != null || force || queryTemplate != null || + querySuperTemplate != null || createPKProperties; + } + /** * Factory method to create internal class generator. Called from * constructor. */ - protected ClassGenerationAction createGenerator(DataMap dataMap) { + private ClassGenerationAction createGenerator(DataMap dataMap) { + CgenConfiguration cgenConfiguration = buildConfiguration(dataMap); + ClassGenerationAction classGenerationAction = cgenConfiguration.isClient() ? new ClientClassGenerationAction(cgenConfiguration) : + new ClassGenerationAction(cgenConfiguration); + injector.injectMembers(classGenerationAction); - ClassGenerationAction action = injector.getInstance(DataChannelMetaData.class).get(dataMap, ClassGenerationAction.class); + return classGenerationAction; + } - if (client) { - action = new ClientClassGenerationAction(); + private CgenConfiguration buildConfiguration(DataMap dataMap) { + CgenConfiguration cgenConfiguration = injector.getInstance(DataChannelMetaData.class).get(dataMap, CgenConfiguration.class); + if(hasConfig()) { + return cgenConfigFromPom(dataMap); + } else if(cgenConfiguration != null) { + useConfigFromDataMap = true; + Path resourcePath = Paths.get(map.getPath()); + if(Files.isRegularFile(resourcePath)) { + resourcePath = resourcePath.getParent(); + } + cgenConfiguration.setRelPath(resourcePath.resolve(cgenConfiguration.getRelPath())); + return cgenConfiguration; } else { - if(action == null) { - action = new ClassGenerationAction(); - } + cgenConfiguration = new CgenConfiguration(); + cgenConfiguration.setDataMap(dataMap); + cgenConfiguration.setRelPath(destDir.getPath()); + return cgenConfiguration; } + } - injector.injectMembers(action); - -// action.setDestDir(destDir.toPath()); - action.setEncoding(encoding != null ? encoding : action.getEncoding()); - action.setMakePairs(makePairs != null ? makePairs : action.isMakePairs()); - action.setArtifactsGenerationMode(mode != null ? mode : action.getArtifactsGenerationMode()); - action.setOutputPattern(outputPattern != null ? outputPattern : action.getOutputPattern()); - action.setOverwrite(overwrite != null ? overwrite : action.isOverwrite()); - action.setSuperPkg(superPkg != null ? superPkg : action.getSuperPkg()); - action.setSuperTemplate(superTemplate != null ? superTemplate : action.getSuperclassTemplate()); - action.setTemplate(template != null ? template : action.getTemplate()); - action.setEmbeddableSuperTemplate(embeddableSuperTemplate != null ? embeddableSuperTemplate : action.getEmbeddableSuperTemplate()); - action.setEmbeddableTemplate(embeddableTemplate != null ? embeddableTemplate : action.getEmbeddableTemplate()); - action.setUsePkgPath(usePkgPath != null ? usePkgPath : action.isUsePkgPath()); - action.setCreatePropertyNames(createPropertyNames != null ? createPropertyNames : action.isCreatePropertyNames()); - action.setQueryTemplate(queryTemplate != null ? queryTemplate : action.getQueryTemplate()); - action.setQuerySuperTemplate(querySuperTemplate != null ? querySuperTemplate : action.getQuerySuperTemplate()); - action.setCreatePKProperties(createPKProperties != null ? createPKProperties : action.isCreatePropertyNames()); - return action; + private CgenConfiguration cgenConfigFromPom(DataMap dataMap){ + CgenConfiguration cgenConfiguration = new CgenConfiguration(); + cgenConfiguration.setDataMap(dataMap); + cgenConfiguration.setRelPath(destDir != null ? destDir.getPath() : cgenConfiguration.getRelPath()); + cgenConfiguration.setEncoding(encoding != null ? encoding : cgenConfiguration.getEncoding()); + cgenConfiguration.setMakePairs(makePairs != null ? makePairs : cgenConfiguration.isMakePairs()); + cgenConfiguration.setArtifactsGenerationMode(mode != null ? mode : cgenConfiguration.getArtifactsGenerationMode()); + cgenConfiguration.setOutputPattern(outputPattern != null ? outputPattern : cgenConfiguration.getOutputPattern()); + cgenConfiguration.setOverwrite(overwrite != null ? overwrite : cgenConfiguration.isOverwrite()); + cgenConfiguration.setSuperPkg(superPkg != null ? superPkg : cgenConfiguration.getSuperPkg()); + cgenConfiguration.setSuperTemplate(superTemplate != null ? superTemplate : cgenConfiguration.getSuperTemplate()); + cgenConfiguration.setTemplate(template != null ? template : cgenConfiguration.getTemplate()); + cgenConfiguration.setEmbeddableSuperTemplate(embeddableSuperTemplate != null ? embeddableSuperTemplate : cgenConfiguration.getEmbeddableSuperTemplate()); + cgenConfiguration.setEmbeddableTemplate(embeddableTemplate != null ? embeddableTemplate : cgenConfiguration.getEmbeddableTemplate()); + cgenConfiguration.setUsePkgPath(usePkgPath != null ? usePkgPath : cgenConfiguration.isUsePkgPath()); + cgenConfiguration.setCreatePropertyNames(createPropertyNames != null ? createPropertyNames : cgenConfiguration.isCreatePropertyNames()); + cgenConfiguration.setQueryTemplate(queryTemplate != null ? queryTemplate : cgenConfiguration.getQueryTemplate()); + cgenConfiguration.setQuerySuperTemplate(querySuperTemplate != null ? querySuperTemplate : cgenConfiguration.getQuerySuperTemplate()); + cgenConfiguration.setCreatePKProperties(createPKProperties); + cgenConfiguration.setClient(client); + if(!cgenConfiguration.isMakePairs()) { + if(template == null) { + cgenConfiguration.setTemplate(client ? ClientClassGenerationAction.SINGLE_CLASS_TEMPLATE : ClassGenerationAction.SINGLE_CLASS_TEMPLATE); + } + if(embeddableTemplate == null) { + cgenConfiguration.setEmbeddableTemplate(ClassGenerationAction.EMBEDDABLE_SINGLE_CLASS_TEMPLATE); + } + if(queryTemplate == null) { + cgenConfiguration.setQueryTemplate(client ? ClientClassGenerationAction.DATAMAP_SINGLE_CLASS_TEMPLATE : ClassGenerationAction.DATAMAP_SINGLE_CLASS_TEMPLATE); + } + } + return cgenConfiguration; } } http://git-wip-us.apache.org/repos/asf/cayenne/blob/52ea45b5/maven-plugins/cayenne-maven-plugin/src/test/java/org/apache/cayenne/tools/CayenneGeneratorMojoTest.java ---------------------------------------------------------------------- diff --git a/maven-plugins/cayenne-maven-plugin/src/test/java/org/apache/cayenne/tools/CayenneGeneratorMojoTest.java b/maven-plugins/cayenne-maven-plugin/src/test/java/org/apache/cayenne/tools/CayenneGeneratorMojoTest.java index 40338fb..edad490 100644 --- a/maven-plugins/cayenne-maven-plugin/src/test/java/org/apache/cayenne/tools/CayenneGeneratorMojoTest.java +++ b/maven-plugins/cayenne-maven-plugin/src/test/java/org/apache/cayenne/tools/CayenneGeneratorMojoTest.java @@ -65,4 +65,52 @@ public class CayenneGeneratorMojoTest extends AbstractMojoTestCase { assertTrue(content.contains("public void addToAdditionalRel(TestRelEntity obj)")); assertTrue(content.contains("public void removeFromAdditionalRel(TestRelEntity obj)")); } + + public void testCgenDataMapConfig() throws Exception { + File pom = getTestFile("src/test/resources/cgen/project-to-test/cgen-pom.xml"); + assertNotNull(pom); + assertTrue(pom.exists()); + + CayenneGeneratorMojo myMojo = (CayenneGeneratorMojo) lookupMojo("cgen", pom); + assertNotNull(myMojo); + myMojo.execute(); + + File testEntity = new File("target/cgenClasses/ObjEntity1.txt"); + File notIncludedDataMapEntity = new File("target/cgenClasses/TestCgenMap.txt"); + + File notIncludedEntity = new File("target/cgenClasses/ObjEntity.txt"); + File notIncludedEmbeddable = new File("target/cgenClasses/Embeddable.txt"); + File notIncludedSuperDataMap = new File("target/cgenClasses/_TestCgenMap.txt"); + + assertTrue(testEntity.exists()); + assertFalse(notIncludedDataMapEntity.exists()); + + assertFalse(notIncludedEntity.exists()); + assertFalse(notIncludedSuperDataMap.exists()); + assertFalse(notIncludedEmbeddable.exists()); + } + + public void testDataMapPomCgen() throws Exception { + File pom = getTestFile("src/test/resources/cgen/project-to-test/datamap-and-pom.xml"); + assertNotNull(pom); + assertTrue(pom.exists()); + + CayenneGeneratorMojo myMojo = (CayenneGeneratorMojo) lookupMojo("cgen", pom); + assertNotNull(myMojo); + myMojo.execute(); + + File objEntity1 = new File("target/resultClasses/ObjEntity1.txt"); + assertTrue(objEntity1.exists()); + File embeddable = new File("target/resultClasses/Embeddable.txt"); + assertTrue(embeddable.exists()); + File dataMap = new File("target/resultClasses/TestCgen.txt"); + assertTrue(dataMap.exists()); + + File objEntity = new File("target/resultClasses/ObjEntity.txt"); + assertFalse(objEntity.exists()); + File superObjEntity1 = new File("target/resultClasses/superPkg/_ObjEntity.txt"); + assertFalse(superObjEntity1.exists()); + File superDataMap = new File("target/resultClasses/superPkg/_TestCgen.txt"); + assertFalse(superDataMap.exists()); + } } http://git-wip-us.apache.org/repos/asf/cayenne/blob/52ea45b5/maven-plugins/cayenne-maven-plugin/src/test/java/org/apache/cayenne/tools/CgenWithConfigMojoTest.java ---------------------------------------------------------------------- diff --git a/maven-plugins/cayenne-maven-plugin/src/test/java/org/apache/cayenne/tools/CgenWithConfigMojoTest.java b/maven-plugins/cayenne-maven-plugin/src/test/java/org/apache/cayenne/tools/CgenWithConfigMojoTest.java deleted file mode 100644 index 2532db5..0000000 --- a/maven-plugins/cayenne-maven-plugin/src/test/java/org/apache/cayenne/tools/CgenWithConfigMojoTest.java +++ /dev/null @@ -1,51 +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.cayenne.tools; - -import org.apache.maven.plugin.testing.AbstractMojoTestCase; - -import java.io.File; - -/** - * @since 4.1 - */ -public class CgenWithConfigMojoTest extends AbstractMojoTestCase { - - public void testCgen() throws Exception { - File pom = getTestFile("src/test/resources/cgen/project-to-test/cgen-pom.xml"); - assertNotNull(pom); - assertTrue(pom.exists()); - - CayenneGeneratorMojo myMojo = (CayenneGeneratorMojo) lookupMojo("cgen", pom); - assertNotNull(myMojo); - myMojo.execute(); - - File testEntity = new File("target/cgenClasses/ObjEntity1.txt"); - File notIncludedDataMapEntity = new File("target/cgenClasses/TestCgenMap.txt"); - - File notIncludedEntity = new File("target/cgenClasses/ObjEntity.txt"); - File notIncludedSuperDataMap = new File("target/cgenClasses/_TestCgenMap.txt"); - - assertTrue(testEntity.exists()); - assertFalse(notIncludedDataMapEntity.exists()); - - assertFalse(notIncludedEntity.exists()); - assertFalse(notIncludedSuperDataMap.exists()); - } -} http://git-wip-us.apache.org/repos/asf/cayenne/blob/52ea45b5/maven-plugins/cayenne-maven-plugin/src/test/resources/cgen/project-to-test/cgen-pom.xml ---------------------------------------------------------------------- diff --git a/maven-plugins/cayenne-maven-plugin/src/test/resources/cgen/project-to-test/cgen-pom.xml b/maven-plugins/cayenne-maven-plugin/src/test/resources/cgen/project-to-test/cgen-pom.xml index eadddc6..f72e2db 100644 --- a/maven-plugins/cayenne-maven-plugin/src/test/resources/cgen/project-to-test/cgen-pom.xml +++ b/maven-plugins/cayenne-maven-plugin/src/test/resources/cgen/project-to-test/cgen-pom.xml @@ -38,8 +38,6 @@ <artifactId>cayenne-maven-plugin</artifactId> <configuration> <map>src/test/resources/cgen/testCgenMap.map.xml</map> - <destDir>target/cgenClasses</destDir> - <mode>entity</mode> </configuration> </plugin> </plugins> http://git-wip-us.apache.org/repos/asf/cayenne/blob/52ea45b5/maven-plugins/cayenne-maven-plugin/src/test/resources/cgen/project-to-test/datamap-and-pom.xml ---------------------------------------------------------------------- diff --git a/maven-plugins/cayenne-maven-plugin/src/test/resources/cgen/project-to-test/datamap-and-pom.xml b/maven-plugins/cayenne-maven-plugin/src/test/resources/cgen/project-to-test/datamap-and-pom.xml new file mode 100644 index 0000000..620a6d0 --- /dev/null +++ b/maven-plugins/cayenne-maven-plugin/src/test/resources/cgen/project-to-test/datamap-and-pom.xml @@ -0,0 +1,54 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + 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. +--> + +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 + http://maven.apache.org/xsd/maven-4.0.0.xsd"> + + <name>Test CayenneGeneratorMojo</name> + + <dependencies> + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <scope>test</scope> + </dependency> + </dependencies> + + <build> + <plugins> + <plugin> + <artifactId>cayenne-maven-plugin</artifactId> + <configuration> + <map>src/test/resources/cgen/testCgen.map.xml</map> + <destDir>target/resultClasses</destDir> + <outputPattern>*.txt</outputPattern> + <makePairs>false</makePairs> + <usePkgPath>true</usePkgPath> + <superPkg>superPkg</superPkg> + <encoding>UTF-8</encoding> + <excludeEntities>ObjEntity</excludeEntities> + <mode>all</mode> + </configuration> + </plugin> + </plugins> + </build> + +</project> http://git-wip-us.apache.org/repos/asf/cayenne/blob/52ea45b5/maven-plugins/cayenne-maven-plugin/src/test/resources/cgen/testCgen.map.xml ---------------------------------------------------------------------- diff --git a/maven-plugins/cayenne-maven-plugin/src/test/resources/cgen/testCgen.map.xml b/maven-plugins/cayenne-maven-plugin/src/test/resources/cgen/testCgen.map.xml new file mode 100644 index 0000000..6986022 --- /dev/null +++ b/maven-plugins/cayenne-maven-plugin/src/test/resources/cgen/testCgen.map.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?> +<data-map xmlns="http://cayenne.apache.org/schema/10/modelMap" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://cayenne.apache.org/schema/10/modelMap http://cayenne.apache.org/schema/10/modelMap.xsd" + project-version="10"> + <embeddable className="Embeddable"/> + <obj-entity name="ObjEntity" className="ObjEntity"/> + <obj-entity name="ObjEntity1" className="ObjEntity1"/> + <cgen xmlns="http://cayenne.apache.org/schema/10/cgen"> + <destDir>../../../../target/cgenClasses</destDir> + <mode>entity</mode> + <excludeEntities>ObjEntity1</excludeEntities> + <excludeEmbeddables>Embeddable</excludeEmbeddables> + <template>templates/v4_1/subclass.vm</template> + <superTemplate>templates/v4_1/superclass.vm</superTemplate> + <outputPattern>*.txt</outputPattern> + <makePairs>true</makePairs> + <usePkgPath>true</usePkgPath> + <overwrite>false</overwrite> + <createPropertyNames>false</createPropertyNames> + </cgen> +</data-map> http://git-wip-us.apache.org/repos/asf/cayenne/blob/52ea45b5/maven-plugins/cayenne-maven-plugin/src/test/resources/cgen/testCgenMap.map.xml ---------------------------------------------------------------------- diff --git a/maven-plugins/cayenne-maven-plugin/src/test/resources/cgen/testCgenMap.map.xml b/maven-plugins/cayenne-maven-plugin/src/test/resources/cgen/testCgenMap.map.xml index 930acbc..e320b07 100644 --- a/maven-plugins/cayenne-maven-plugin/src/test/resources/cgen/testCgenMap.map.xml +++ b/maven-plugins/cayenne-maven-plugin/src/test/resources/cgen/testCgenMap.map.xml @@ -7,21 +7,16 @@ <obj-entity name="ObjEntity" className="ObjEntity"/> <obj-entity name="ObjEntity1" className="ObjEntity1"/> <cgen xmlns="http://cayenne.apache.org/schema/10/cgen"> - <objEntity> - <name>ObjEntity1</name> - </objEntity> - <generationMode>all</generationMode> - <dataMapTemplate>templates/v4_1/datamap-subclass.vm</dataMapTemplate> - <dataMapSuperclassTemplate>templates/v4_1/datamap-superclass.vm</dataMapSuperclassTemplate> - <subclassTemplate>templates/v4_1/subclass.vm</subclassTemplate> - <superclassTemplate>templates/v4_1/superclass.vm</superclassTemplate> - <embeddableTemplate>templates/v4_1/embeddable-subclass.vm</embeddableTemplate> - <embeddableSuperclassTemplate>templates/v4_1/embeddable-superclass.vm</embeddableSuperclassTemplate> + <destDir>../../../../target/cgenClasses</destDir> + <mode>entity</mode> + <excludeEntities>ObjEntity</excludeEntities> + <excludeEmbeddables>Embeddable</excludeEmbeddables> + <template>templates/v4_1/subclass.vm</template> + <superTemplate>templates/v4_1/superclass.vm</superTemplate> <outputPattern>*.txt</outputPattern> <makePairs>false</makePairs> <usePkgPath>true</usePkgPath> - <overwriteSubclasses>false</overwriteSubclasses> + <overwrite>false</overwrite> <createPropertyNames>false</createPropertyNames> - <encoding>UTF-8</encoding> </cgen> </data-map> http://git-wip-us.apache.org/repos/asf/cayenne/blob/52ea45b5/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/GenerateCodeAction.java ---------------------------------------------------------------------- diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/GenerateCodeAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/GenerateCodeAction.java index bdb2e15..6861916 100644 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/GenerateCodeAction.java +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/GenerateCodeAction.java @@ -19,15 +19,14 @@ package org.apache.cayenne.modeler.action; + import org.apache.cayenne.configuration.DataChannelDescriptor; -import org.apache.cayenne.map.DataMap; import org.apache.cayenne.modeler.Application; -import org.apache.cayenne.modeler.dialog.codegen.CodeGeneratorController; +import org.apache.cayenne.modeler.event.DomainDisplayEvent; import org.apache.cayenne.modeler.util.CayenneAction; -import org.apache.cayenne.project.Project; import java.awt.event.ActionEvent; -import java.util.Collection; + public class GenerateCodeAction extends CayenneAction { @@ -44,9 +43,6 @@ public class GenerateCodeAction extends CayenneAction { } public void performAction(ActionEvent e) { - Collection<DataMap> dataMaps; - Project project = getProjectController().getProject(); - dataMaps = ((DataChannelDescriptor) project.getRootNode()).getDataMaps(); - new CodeGeneratorController(getApplication().getFrameController(), dataMaps).startup(); + getProjectController().fireDomainDisplayEvent(new DomainDisplayEvent(this, (DataChannelDescriptor) getProjectController().getProject().getRootNode())); } } http://git-wip-us.apache.org/repos/asf/cayenne/blob/52ea45b5/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClassesTabController.java ---------------------------------------------------------------------- diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClassesTabController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClassesTabController.java index b9d1c5b..8df07df 100644 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClassesTabController.java +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClassesTabController.java @@ -1,203 +1,203 @@ -/***************************************************************** - * 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.cayenne.modeler.dialog.codegen; - -import org.apache.cayenne.map.DataMap; -import org.apache.cayenne.modeler.util.CayenneController; -import org.apache.cayenne.swing.BindingBuilder; -import org.apache.cayenne.swing.ImageRendererColumn; -import org.apache.cayenne.swing.ObjectBinding; -import org.apache.cayenne.swing.TableBindingBuilder; - -import javax.swing.JCheckBox; -import javax.swing.JLabel; -import javax.swing.JTable; -import java.awt.Component; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; -import java.util.List; - -public class ClassesTabController extends CayenneController { - - public static final String GENERATE_PROPERTY = "generate"; - - protected ClassesTabPanel view; - - private Map<DataMap, ObjectBinding> objectBindings; - - protected Collection<DataMap> dataMaps; - - protected Map<DataMap, List<Object>> objectList; - - private List<Object> currentCollection; - - public ClassesTabController(CodeGeneratorControllerBase parent, Collection<DataMap> dataMaps) { - super(parent); - - currentCollection = new ArrayList<>(); - - this.objectList = new HashMap<>(); - for(DataMap dataMap : dataMaps) { - List<Object> list = new ArrayList<>(); - list.add(dataMap); - list.addAll(dataMap.getObjEntities()); - list.addAll(dataMap.getEmbeddables()); - objectList.put(dataMap, list); - } - - this.objectBindings = new HashMap<>(); - this.dataMaps = dataMaps; - this.view = new ClassesTabPanel(dataMaps); - - initBindings(); - } - - protected CodeGeneratorControllerBase getParentController() { - return (CodeGeneratorControllerBase) getParent(); - } - - public Component getView() { - return view; - } - - protected void initBindings() { - - BindingBuilder builder = new BindingBuilder( - getApplication().getBindingFactory(), - this); - - builder.bindToAction(view.getCheckAll(), "checkAllAction()"); - - TableBindingBuilder tableBuilder = new TableBindingBuilder(builder); - - tableBuilder.addColumn( - "", - "parent.setCurrentClass(#item), selected", - Boolean.class, - true, - Boolean.TRUE); - - tableBuilder.addColumn( - "Class", - "parent.getItemName(#item)", - JLabel.class, - false, - "XXXXXXXXXXXXXX"); - - tableBuilder.addColumn( - "Comments, Warnings", - "parent.getProblem(#item)", - String.class, - false, - "XXXXXXXXXXXXXXXXXXXXXXXXXXX"); - - for(DataMap dataMap : dataMaps) { - JTable table = view.getDataMapTables().get(dataMap); - if(table != null) { - currentCollection = objectList.get(dataMap); - objectBindings.put(dataMap, tableBuilder.bindToTable(table, "currentCollection")); - table.getColumnModel().getColumn(1).setCellRenderer(new ImageRendererColumn()); - } - JCheckBox checkBox = view.getDataMapJCheckBoxMap().get(dataMap); - if(checkBox != null) { - checkBox.addActionListener(val -> checkDataMap(dataMap, ((JCheckBox)val.getSource()).isSelected())); - } - } - } - - public List<Object> getCurrentCollection() { - return currentCollection; - } - - public boolean isSelected() { - return getParentController().isSelected(); - } - - public void setSelected(boolean selected) { - getParentController().setSelected(selected); - classSelectedAction(); - - for(DataMap dataMap : dataMaps) { - if(view.isAllCheckBoxesFromDataMapSelected(dataMap)) { - view.getDataMapJCheckBoxMap().get(dataMap).setSelected(true); - } else { - view.getDataMapJCheckBoxMap().get(dataMap).setSelected(false); - } - } - } - - /** - * A callback action that updates the state of Select All checkbox. - */ - public void classSelectedAction() { - int selectedCount = getParentController().getSelectedEntitiesSize() - + getParentController().getSelectedEmbeddablesSize() - + getParentController().getSelectedDataMapsSize(); - - if (selectedCount == 0) { - view.getCheckAll().setSelected(false); - } - else if (selectedCount == getParentController().getClasses().size()) { - view.getCheckAll().setSelected(true); - } - } - - /** - * An action that updates entity check boxes in response to the Select All state - * change. - */ - public void checkAllAction() { - if (getParentController().updateSelection(view.getCheckAll().isSelected() ? o -> true : o -> false)) { - dataMaps.forEach(dataMap -> { - ObjectBinding binding = objectBindings.get(dataMap); - if(binding != null) { - currentCollection = objectList.get(dataMap); - binding.updateView(); - } - }); - } - } - - private void checkDataMap(DataMap dataMap, boolean selected) { - if (getParentController().updateDataMapSelection(selected ? o -> true : o -> false, dataMap)){ - ObjectBinding binding = objectBindings.get(dataMap); - if(binding != null) { - currentCollection = objectList.get(dataMap); - binding.updateView(); - } - if(isAllMapsSelected()) { - view.getCheckAll().setSelected(true); - } - } - } - - private boolean isAllMapsSelected() { - for(DataMap dataMap : dataMaps) { - if(view.getDataMapJCheckBoxMap().get(dataMap) != null) { - if(!view.getDataMapJCheckBoxMap().get(dataMap).isSelected()) { - return false; - } - } - } - return true; - } -} \ No newline at end of file +///***************************************************************** +// * 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.cayenne.modeler.dialog.codegen; +// +//import org.apache.cayenne.map.DataMap; +//import org.apache.cayenne.modeler.util.CayenneController; +//import org.apache.cayenne.swing.BindingBuilder; +//import org.apache.cayenne.swing.ImageRendererColumn; +//import org.apache.cayenne.swing.ObjectBinding; +//import org.apache.cayenne.swing.TableBindingBuilder; +// +//import javax.swing.JCheckBox; +//import javax.swing.JLabel; +//import javax.swing.JTable; +//import java.awt.Component; +//import java.util.ArrayList; +//import java.util.Collection; +//import java.util.HashMap; +//import java.util.Map; +//import java.util.List; +// +//public class ClassesTabController extends CayenneController { +// +// public static final String GENERATE_PROPERTY = "generate"; +// +// protected ClassesTabPanel view; +// +// private Map<DataMap, ObjectBinding> objectBindings; +// +// protected Collection<DataMap> dataMaps; +// +// protected Map<DataMap, List<Object>> objectList; +// +// private List<Object> currentCollection; +// +// public ClassesTabController(CodeGeneratorControllerBase parent, Collection<DataMap> dataMaps) { +// super(parent); +// +// currentCollection = new ArrayList<>(); +// +// this.objectList = new HashMap<>(); +// for(DataMap dataMap : dataMaps) { +// List<Object> list = new ArrayList<>(); +// list.add(dataMap); +// list.addAll(dataMap.getObjEntities()); +// list.addAll(dataMap.getEmbeddables()); +// objectList.put(dataMap, list); +// } +// +// this.objectBindings = new HashMap<>(); +// this.dataMaps = dataMaps; +// this.view = new ClassesTabPanel(dataMaps); +// +// initBindings(); +// } +// +// protected CodeGeneratorControllerBase getParentController() { +// return (CodeGeneratorControllerBase) getParent(); +// } +// +// public Component getView() { +// return view; +// } +// +// protected void initBindings() { +// +// BindingBuilder builder = new BindingBuilder( +// getApplication().getBindingFactory(), +// this); +// +// builder.bindToAction(view.getCheckAll(), "checkAllAction()"); +// +// TableBindingBuilder tableBuilder = new TableBindingBuilder(builder); +// +// tableBuilder.addColumn( +// "", +// "parent.setCurrentClass(#item), selected", +// Boolean.class, +// true, +// Boolean.TRUE); +// +// tableBuilder.addColumn( +// "Class", +// "parent.getItemName(#item)", +// JLabel.class, +// false, +// "XXXXXXXXXXXXXX"); +// +// tableBuilder.addColumn( +// "Comments, Warnings", +// "parent.getProblem(#item)", +// String.class, +// false, +// "XXXXXXXXXXXXXXXXXXXXXXXXXXX"); +// +// for(DataMap dataMap : dataMaps) { +// JTable table = view.getDataMapTables().get(dataMap); +// if(table != null) { +// currentCollection = objectList.get(dataMap); +// objectBindings.put(dataMap, tableBuilder.bindToTable(table, "currentCollection")); +// table.getColumnModel().getColumn(1).setCellRenderer(new ImageRendererColumn()); +// } +// JCheckBox checkBox = view.getDataMapJCheckBoxMap().get(dataMap); +// if(checkBox != null) { +// checkBox.addActionListener(val -> checkDataMap(dataMap, ((JCheckBox)val.getSource()).isSelected())); +// } +// } +// } +// +// public List<Object> getCurrentCollection() { +// return currentCollection; +// } +// +// public boolean isSelected() { +// return getParentController().isSelected(); +// } +// +// public void setSelected(boolean selected) { +// getParentController().setSelected(selected); +// classSelectedAction(); +// +// for(DataMap dataMap : dataMaps) { +// if(view.isAllCheckBoxesFromDataMapSelected(dataMap)) { +// view.getDataMapJCheckBoxMap().get(dataMap).setSelected(true); +// } else { +// view.getDataMapJCheckBoxMap().get(dataMap).setSelected(false); +// } +// } +// } +// +// /** +// * A callback action that updates the state of Select All checkbox. +// */ +// public void classSelectedAction() { +// int selectedCount = getParentController().getSelectedEntitiesSize() +// + getParentController().getSelectedEmbeddablesSize() +// + getParentController().getSelectedDataMapsSize(); +// +// if (selectedCount == 0) { +// view.getCheckAll().setSelected(false); +// } +// else if (selectedCount == getParentController().getClasses().size()) { +// view.getCheckAll().setSelected(true); +// } +// } +// +// /** +// * An action that updates entity check boxes in response to the Select All state +// * change. +// */ +// public void checkAllAction() { +// if (getParentController().updateSelection(view.getCheckAll().isSelected() ? o -> true : o -> false)) { +// dataMaps.forEach(dataMap -> { +// ObjectBinding binding = objectBindings.get(dataMap); +// if(binding != null) { +// currentCollection = objectList.get(dataMap); +// binding.updateView(); +// } +// }); +// } +// } +// +// private void checkDataMap(DataMap dataMap, boolean selected) { +// if (getParentController().updateDataMapSelection(selected ? o -> true : o -> false, dataMap)){ +// ObjectBinding binding = objectBindings.get(dataMap); +// if(binding != null) { +// currentCollection = objectList.get(dataMap); +// binding.updateView(); +// } +// if(isAllMapsSelected()) { +// view.getCheckAll().setSelected(true); +// } +// } +// } +// +// private boolean isAllMapsSelected() { +// for(DataMap dataMap : dataMaps) { +// if(view.getDataMapJCheckBoxMap().get(dataMap) != null) { +// if(!view.getDataMapJCheckBoxMap().get(dataMap).isSelected()) { +// return false; +// } +// } +// } +// return true; +// } +//} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/cayenne/blob/52ea45b5/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClassesTabPanel.java ---------------------------------------------------------------------- diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClassesTabPanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClassesTabPanel.java index b1d3bd9..5d7e895 100644 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClassesTabPanel.java +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClassesTabPanel.java @@ -1,141 +1,141 @@ -/***************************************************************** - * 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.cayenne.modeler.dialog.codegen; - -import org.apache.cayenne.map.DataMap; - -import javax.swing.BoxLayout; -import javax.swing.JCheckBox; -import javax.swing.JLabel; -import javax.swing.JPanel; -import javax.swing.JScrollPane; -import javax.swing.JTable; -import javax.swing.ScrollPaneConstants; -import javax.swing.UIManager; -import javax.swing.border.EmptyBorder; -import java.awt.BorderLayout; -import java.awt.Component; -import java.awt.Dimension; -import java.awt.FlowLayout; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -/** - */ -public class ClassesTabPanel extends JPanel { - - protected JCheckBox checkAll; - protected JLabel checkAllLabel; - - private Map<DataMap, JTable> dataMapTables; - - private Map<DataMap, JCheckBox> dataMapJCheckBoxMap; - - public ClassesTabPanel(Collection<DataMap> dataMaps) { - dataMapTables = new HashMap<>(); - dataMapJCheckBoxMap = new HashMap<>(); - - // TODO: andrus 04/07/2006 - is there an easy way to stick that checkbox in the - // table header???? - this.checkAll = new JCheckBox(); - this.checkAllLabel = new JLabel("Check All Classes"); - - checkAll.addItemListener(event -> { - if (checkAll.isSelected()) { - checkAllLabel.setText("Uncheck All Classess"); - dataMapJCheckBoxMap.keySet().forEach(val -> dataMapJCheckBoxMap.get(val).setSelected(true)); - } - else { - checkAllLabel.setText("Check All Classes"); - dataMapJCheckBoxMap.keySet().forEach(val -> dataMapJCheckBoxMap.get(val).setSelected(false)); - } - }); - - // assemble - JPanel topPanel = new JPanel(new FlowLayout(FlowLayout.CENTER)); - topPanel.setBorder(UIManager.getBorder("ToolBar.border")); - topPanel.add(checkAll); - topPanel.add(checkAllLabel); - - JPanel panel = new JPanel(); - panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); - for(DataMap dataMap : dataMaps) { - JTable table = new JTable(); - table.setRowHeight(22); - dataMapTables.put(dataMap, table); - JPanel scrollTable = new JPanel(new BorderLayout()); - scrollTable.add(dataMapTables.get(dataMap).getTableHeader(), BorderLayout.NORTH); - scrollTable.add(dataMapTables.get(dataMap), BorderLayout.CENTER); - scrollTable.setPreferredSize(new Dimension(dataMapTables.get(dataMap).getPreferredSize().width, - (dataMap.getEmbeddables().size() + dataMap.getObjEntities().size()) * dataMapTables.get(dataMap).getRowHeight() + 45)); - JPanel labelPanel = new JPanel(new BorderLayout()); - labelPanel.setPreferredSize(new Dimension(dataMapTables.get(dataMap).getPreferredSize().width, 20)); - JLabel dataMapLabel = new JLabel(dataMap.getName()); - dataMapLabel.setAlignmentX(Component.CENTER_ALIGNMENT); - dataMapLabel.setBorder(new EmptyBorder(8, 8, 8, 0)); - labelPanel.add(dataMapLabel, BorderLayout.CENTER); - - JCheckBox dataMapCheckBox = new JCheckBox(); - dataMapJCheckBoxMap.put(dataMap, dataMapCheckBox); - labelPanel.add(dataMapCheckBox, BorderLayout.WEST); - - JPanel currPanel = new JPanel(new BorderLayout()); - currPanel.add(labelPanel, BorderLayout.NORTH); - currPanel.add(scrollTable, BorderLayout.CENTER); - - panel.add(currPanel); - } - - JScrollPane tablePanel = new JScrollPane( - panel, - ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, - ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); - - // set some minimal preferred size, so that it is smaller than other forms used in - // the dialog... this way we get the right automated overall size - tablePanel.setPreferredSize(new Dimension(450, 400)); - setLayout(new BorderLayout()); - add(topPanel, BorderLayout.NORTH); - add(tablePanel, BorderLayout.CENTER); - } - - public boolean isAllCheckBoxesFromDataMapSelected(DataMap dataMap) { - JTable table = dataMapTables.get(dataMap); - for(int i = 0; i < table.getRowCount(); i++) { - if(!(Boolean)table.getModel().getValueAt(i, 0)) { - return false; - } - } - return true; - } - - public Map<DataMap, JTable> getDataMapTables() { - return dataMapTables; - } - - public Map<DataMap, JCheckBox> getDataMapJCheckBoxMap() { - return dataMapJCheckBoxMap; - } - - public JCheckBox getCheckAll() { - return checkAll; - } -} \ No newline at end of file +///***************************************************************** +// * 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.cayenne.modeler.dialog.codegen; +// +//import org.apache.cayenne.map.DataMap; +// +//import javax.swing.BoxLayout; +//import javax.swing.JCheckBox; +//import javax.swing.JLabel; +//import javax.swing.JPanel; +//import javax.swing.JScrollPane; +//import javax.swing.JTable; +//import javax.swing.ScrollPaneConstants; +//import javax.swing.UIManager; +//import javax.swing.border.EmptyBorder; +//import java.awt.BorderLayout; +//import java.awt.Component; +//import java.awt.Dimension; +//import java.awt.FlowLayout; +//import java.util.Collection; +//import java.util.HashMap; +//import java.util.Map; +// +///** +// */ +//public class ClassesTabPanel extends JPanel { +// +// protected JCheckBox checkAll; +// protected JLabel checkAllLabel; +// +// private Map<DataMap, JTable> dataMapTables; +// +// private Map<DataMap, JCheckBox> dataMapJCheckBoxMap; +// +// public ClassesTabPanel(Collection<DataMap> dataMaps) { +// dataMapTables = new HashMap<>(); +// dataMapJCheckBoxMap = new HashMap<>(); +// +// // TODO: andrus 04/07/2006 - is there an easy way to stick that checkbox in the +// // table header???? +// this.checkAll = new JCheckBox(); +// this.checkAllLabel = new JLabel("Check All Classes"); +// +// checkAll.addItemListener(event -> { +// if (checkAll.isSelected()) { +// checkAllLabel.setText("Uncheck All Classess"); +// dataMapJCheckBoxMap.keySet().forEach(val -> dataMapJCheckBoxMap.get(val).setSelected(true)); +// } +// else { +// checkAllLabel.setText("Check All Classes"); +// dataMapJCheckBoxMap.keySet().forEach(val -> dataMapJCheckBoxMap.get(val).setSelected(false)); +// } +// }); +// +// // assemble +// JPanel topPanel = new JPanel(new FlowLayout(FlowLayout.CENTER)); +// topPanel.setBorder(UIManager.getBorder("ToolBar.border")); +// topPanel.add(checkAll); +// topPanel.add(checkAllLabel); +// +// JPanel panel = new JPanel(); +// panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); +// for(DataMap dataMap : dataMaps) { +// JTable table = new JTable(); +// table.setRowHeight(22); +// dataMapTables.put(dataMap, table); +// JPanel scrollTable = new JPanel(new BorderLayout()); +// scrollTable.add(dataMapTables.get(dataMap).getTableHeader(), BorderLayout.NORTH); +// scrollTable.add(dataMapTables.get(dataMap), BorderLayout.CENTER); +// scrollTable.setPreferredSize(new Dimension(dataMapTables.get(dataMap).getPreferredSize().width, +// (dataMap.getEmbeddables().size() + dataMap.getObjEntities().size()) * dataMapTables.get(dataMap).getRowHeight() + 45)); +// JPanel labelPanel = new JPanel(new BorderLayout()); +// labelPanel.setPreferredSize(new Dimension(dataMapTables.get(dataMap).getPreferredSize().width, 20)); +// JLabel dataMapLabel = new JLabel(dataMap.getName()); +// dataMapLabel.setAlignmentX(Component.CENTER_ALIGNMENT); +// dataMapLabel.setBorder(new EmptyBorder(8, 8, 8, 0)); +// labelPanel.add(dataMapLabel, BorderLayout.CENTER); +// +// JCheckBox dataMapCheckBox = new JCheckBox(); +// dataMapJCheckBoxMap.put(dataMap, dataMapCheckBox); +// labelPanel.add(dataMapCheckBox, BorderLayout.WEST); +// +// JPanel currPanel = new JPanel(new BorderLayout()); +// currPanel.add(labelPanel, BorderLayout.NORTH); +// currPanel.add(scrollTable, BorderLayout.CENTER); +// +// panel.add(currPanel); +// } +// +// JScrollPane tablePanel = new JScrollPane( +// panel, +// ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, +// ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); +// +// // set some minimal preferred size, so that it is smaller than other forms used in +// // the dialog... this way we get the right automated overall size +// tablePanel.setPreferredSize(new Dimension(450, 400)); +// setLayout(new BorderLayout()); +// add(topPanel, BorderLayout.NORTH); +// add(tablePanel, BorderLayout.CENTER); +// } +// +// public boolean isAllCheckBoxesFromDataMapSelected(DataMap dataMap) { +// JTable table = dataMapTables.get(dataMap); +// for(int i = 0; i < table.getRowCount(); i++) { +// if(!(Boolean)table.getModel().getValueAt(i, 0)) { +// return false; +// } +// } +// return true; +// } +// +// public Map<DataMap, JTable> getDataMapTables() { +// return dataMapTables; +// } +// +// public Map<DataMap, JCheckBox> getDataMapJCheckBoxMap() { +// return dataMapJCheckBoxMap; +// } +// +// public JCheckBox getCheckAll() { +// return checkAll; +// } +//} \ No newline at end of file