Cgen. Refactoring, changes
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/0e19c961 Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/0e19c961 Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/0e19c961 Branch: refs/heads/master Commit: 0e19c96147992fcbd10d285d13d3b029cc013f7d Parents: b85a090 Author: Arseni Bulatski <ancars...@gmail.com> Authored: Thu Jun 21 16:55:07 2018 +0300 Committer: Arseni Bulatski <ancars...@gmail.com> Committed: Wed Oct 24 13:41:33 2018 +0300 ---------------------------------------------------------------------- .../cayenne/gen/ClassGenerationAction.java | 110 +++++---- .../org/apache/cayenne/gen/DataMapArtifact.java | 1 - .../cayenne/gen/xml/CgenConfigHandler.java | 55 ++++- .../apache/cayenne/gen/xml/CgenExtension.java | 21 ++ .../cayenne/gen/xml/CgenLoaderDelegate.java | 21 ++ .../cayenne/gen/xml/CgenSaverDelegate.java | 21 ++ .../cayenne/gen/xml/EmbeddableHandler.java | 21 ++ .../cayenne/gen/xml/ObjEntityHandler.java | 21 ++ .../cayenne/modeler/CodeTemplateManager.java | 44 +++- .../editor/cgen/ClassesTabController.java | 9 +- .../modeler/editor/cgen/ClassesTabPanel.java | 17 +- .../editor/cgen/CodeGeneratorController.java | 2 +- .../cgen/CodeGeneratorControllerBase.java | 26 +- .../editor/cgen/CustomModeController.java | 188 ++++----------- .../modeler/editor/cgen/CustomModePanel.java | 238 ++++++++++++------- .../editor/cgen/CustomPreferencesUpdater.java | 193 --------------- .../editor/cgen/GeneratorController.java | 29 +-- .../editor/cgen/GeneratorControllerPanel.java | 34 ++- .../editor/cgen/GeneratorTabController.java | 5 - .../modeler/editor/cgen/GeneratorTabPanel.java | 1 + .../cayenne/modeler/util/ComboBoxAdapter.java | 72 ++++++ 21 files changed, 575 insertions(+), 554 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cayenne/blob/0e19c961/cayenne-cgen/src/main/java/org/apache/cayenne/gen/ClassGenerationAction.java ---------------------------------------------------------------------- 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 35e34cf..f56f81e 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 @@ -22,7 +22,10 @@ package org.apache.cayenne.gen; import org.apache.cayenne.CayenneRuntimeException; import org.apache.cayenne.configuration.ConfigurationNodeVisitor; import org.apache.cayenne.gen.xml.CgenExtension; -import org.apache.cayenne.map.*; +import org.apache.cayenne.map.DataMap; +import org.apache.cayenne.map.Embeddable; +import org.apache.cayenne.map.ObjEntity; +import org.apache.cayenne.map.QueryDescriptor; import org.apache.cayenne.util.XMLEncoder; import org.apache.cayenne.util.XMLSerializable; import org.apache.velocity.Template; @@ -102,6 +105,9 @@ public class ClassGenerationAction implements Serializable, XMLSerializable { this.embeddableTemplate = EMBEDDABLE_SUBCLASS_TEMPLATE; this.embeddableSuperTemplate = EMBEDDABLE_SUPERCLASS_TEMPLATE; + this.queryTemplate = DATAMAP_SUBCLASS_TEMPLATE; + this.querySuperTemplate = DATAMAP_SUPERCLASS_TEMPLATE; + this.artifactsGenerationMode = ArtifactsGenerationMode.ENTITY; this.artifacts = new ArrayList<>(); @@ -218,6 +224,11 @@ public class ClassGenerationAction implements Serializable, XMLSerializable { */ public void execute() throws Exception { + resetArtifacts(); + addAllEntities(); + addAllEmbeddables(); + addQueries(dataMap.getQueryDescriptors()); + validateAttributes(); try { @@ -255,26 +266,6 @@ public class ClassGenerationAction implements Serializable, XMLSerializable { } } - public void prepareArtifacts(){ -// resetArtifacts(); - if(!entityArtifacts.isEmpty()) { - for(String name : entityArtifacts) { - ObjEntity objEntity = dataMap.getObjEntity(name); - if(objEntity != null) { - artifacts.add(new EntityArtifact(objEntity)); - } - } - } - if(!embeddableArtifacts.isEmpty()) { - for(String name : embeddableArtifacts) { - Embeddable embeddable = dataMap.getEmbeddable(name); - if(embeddable != null) { - artifacts.add(new EmbeddableArtifact(embeddable)); - } - } - } - } - private Template getTemplate(TemplateType type) { String templateName = customTemplateName(type); @@ -577,20 +568,36 @@ public class ClassGenerationAction implements Serializable, XMLSerializable { } } - public void loadEntity(String name) { - if (artifactsGenerationMode == ArtifactsGenerationMode.ENTITY + private void addAllEntities() { + if(artifactsGenerationMode == ArtifactsGenerationMode.ENTITY || artifactsGenerationMode == ArtifactsGenerationMode.ALL) { - entityArtifacts.add(name); + entityArtifacts.forEach(val -> + artifacts.add(new EntityArtifact(dataMap.getObjEntity(val)))); } } - public void loadEmbeddable(String name) { - if (artifactsGenerationMode == ArtifactsGenerationMode.ENTITY + private void addAllEmbeddables() { + if(artifactsGenerationMode == ArtifactsGenerationMode.ENTITY || artifactsGenerationMode == ArtifactsGenerationMode.ALL) { - embeddableArtifacts.add(name); + embeddableArtifacts.forEach(val -> + artifacts.add(new EmbeddableArtifact(dataMap.getEmbeddable(val)))); } } + /** + * @since 4.1 + */ + public void loadEntity(String name) { + entityArtifacts.add(name); + } + + /** + * @since 4.1 + */ + public void loadEmbeddable(String name) { + embeddableArtifacts.add(name); + } + /** * Sets an optional shared VelocityContext. Useful with tools like VPP that * can set custom values in the context, not known to Cayenne. @@ -625,21 +632,23 @@ public class ClassGenerationAction implements Serializable, XMLSerializable { } } - /** - * @since 4.1 - */ - public boolean isCreatePKProperties() { - return createPKProperties; - } + /** + * @since 4.1 + */ + public boolean isCreatePKProperties() { + return createPKProperties; + } - /** - * @since 4.1 - */ - public void setCreatePKProperties(boolean createPKProperties) { - this.createPKProperties = createPKProperties; - } + /** + * @since 4.1 + */ + public void setCreatePKProperties(boolean createPKProperties) { + this.createPKProperties = createPKProperties; + } - public Collection<EntityArtifact> getEntityArtifacts() { + private Collection<EntityArtifact> getEntityArtifacts() { + resetArtifacts(); + addAllEntities(); Collection<EntityArtifact> entityArtifacts = new ArrayList<>(); for(Artifact artifact : artifacts){ if(artifact instanceof EntityArtifact){ @@ -649,7 +658,9 @@ public class ClassGenerationAction implements Serializable, XMLSerializable { return entityArtifacts; } - public Collection<EmbeddableArtifact> getEmbeddableArtifacts() { + private Collection<EmbeddableArtifact> getEmbeddableArtifacts() { + resetArtifacts(); + addAllEmbeddables(); Collection<EmbeddableArtifact> embeddableArtifacts = new ArrayList<>(); for(Artifact artifact : artifacts){ if(artifact instanceof EmbeddableArtifact){ @@ -699,7 +710,7 @@ public class ClassGenerationAction implements Serializable, XMLSerializable { return superPkg; } - public void resetArtifacts(){ + private void resetArtifacts(){ this.artifacts = new ArrayList<>(); } @@ -735,6 +746,19 @@ public class ClassGenerationAction implements Serializable, XMLSerializable { return embeddableSuperTemplate; } + public String getQueryTemplate() { + return queryTemplate; + } + + public String getQuerySuperTemplate() { + return querySuperTemplate; + } + + public void resetCollections(){ + this.embeddableArtifacts = new ArrayList<>(); + this.entityArtifacts = new ArrayList<>(); + } + @Override public void encodeAsXML(XMLEncoder encoder, ConfigurationNodeVisitor delegate) { encoder.start("cgen") @@ -743,6 +767,8 @@ public class ClassGenerationAction implements Serializable, XMLSerializable { .nested(this.getEmbeddableArtifacts(), delegate) .simpleTag("outputDirectory", this.destDir.getAbsolutePath()) .simpleTag("generationMode", this.artifactsGenerationMode.getLabel()) + .simpleTag("dataMapTemplate", this.queryTemplate) + .simpleTag("dataMapSuperclassTemplate", this.querySuperTemplate) .simpleTag("subclassTemplate", this.template) .simpleTag("superclassTemplate", this.superTemplate) .simpleTag("embeddableTemplate", this.embeddableTemplate) http://git-wip-us.apache.org/repos/asf/cayenne/blob/0e19c961/cayenne-cgen/src/main/java/org/apache/cayenne/gen/DataMapArtifact.java ---------------------------------------------------------------------- diff --git a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/DataMapArtifact.java b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/DataMapArtifact.java index 54a7426..937f451 100644 --- a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/DataMapArtifact.java +++ b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/DataMapArtifact.java @@ -137,5 +137,4 @@ public class DataMapArtifact implements Artifact { public DataMap getDataMap() { return dataMap; } - } http://git-wip-us.apache.org/repos/asf/cayenne/blob/0e19c961/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenConfigHandler.java ---------------------------------------------------------------------- diff --git a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenConfigHandler.java b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenConfigHandler.java index 667a4a6..f77f1f1 100644 --- a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenConfigHandler.java +++ b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenConfigHandler.java @@ -1,3 +1,21 @@ +/***************************************************************** + * 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.gen.xml; import org.apache.cayenne.configuration.xml.DataChannelMetaData; @@ -9,6 +27,9 @@ import org.xml.sax.SAXException; import java.io.File; +/** + * @since 4.1 + */ public class CgenConfigHandler extends NamespaceAwareNestedTagHandler{ public static final String CONFIG_TAG = "cgen"; @@ -28,6 +49,8 @@ public class CgenConfigHandler extends NamespaceAwareNestedTagHandler{ private static final String ENCODING_TAG = "encoding"; private static final String EMBEDDABLE_TEMPLATE_TAG = "embeddableTemplate"; private static final String EMBEDDABLE_SUPERCLASS_TEMPLATE_TAG = "embeddableSuperclassTemplate"; + private static final String DATAMAP_TEMPLATE_TAG = "dataMapTemplate"; + private static final String DATAMAP_SUPERCLASS_TEMPLATE_TAG = "dataMapSuperclassTemplate"; public static final String TRUE = "true"; @@ -108,7 +131,12 @@ public class CgenConfigHandler extends NamespaceAwareNestedTagHandler{ case EMBEDDABLE_SUPERCLASS_TEMPLATE_TAG: createEmbeddableSuperclassTemplate(data); break; - + case DATAMAP_TEMPLATE_TAG: + createDataMapTemplate(data); + break; + case DATAMAP_SUPERCLASS_TEMPLATE_TAG: + createDataMapSuperclassTemplate(data); + break; } } @@ -152,7 +180,7 @@ public class CgenConfigHandler extends NamespaceAwareNestedTagHandler{ } } - public void createEmbeddableTemplate(String template) { + private void createEmbeddableTemplate(String template) { if(template.trim().length() == 0) { return; } @@ -162,7 +190,7 @@ public class CgenConfigHandler extends NamespaceAwareNestedTagHandler{ } } - public void createEmbeddableSuperclassTemplate(String template) { + private void createEmbeddableSuperclassTemplate(String template) { if(template.trim().length() == 0) { return; } @@ -258,11 +286,30 @@ public class CgenConfigHandler extends NamespaceAwareNestedTagHandler{ } } + private void createDataMapTemplate(String data) { + if(data.trim().length() == 0) { + return; + } + + if(configuration != null) { + configuration.setQueryTemplate(data); + } + } + + private void createDataMapSuperclassTemplate(String data) { + if(data.trim().length() == 0) { + return; + } + + if(configuration != null) { + configuration.setQuerySuperTemplate(data); + } + } + private void createConfig() { configuration = new ClassGenerationAction(); loaderContext.addDataMapListener(dataMap -> { configuration.setDataMap(dataMap); - configuration.prepareArtifacts(); CgenConfigHandler.this.metaData.add(dataMap, configuration); }); } http://git-wip-us.apache.org/repos/asf/cayenne/blob/0e19c961/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenExtension.java ---------------------------------------------------------------------- diff --git a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenExtension.java b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenExtension.java index e98eca9..074a532 100644 --- a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenExtension.java +++ b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenExtension.java @@ -1,3 +1,21 @@ +/***************************************************************** + * 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.gen.xml; import org.apache.cayenne.configuration.ConfigurationNodeVisitor; @@ -9,6 +27,9 @@ import org.apache.cayenne.project.extension.LoaderDelegate; import org.apache.cayenne.project.extension.ProjectExtension; import org.apache.cayenne.project.extension.SaverDelegate; +/** + * @since 4.1 + */ public class CgenExtension implements ProjectExtension { public static final String NAMESPACE = "http://cayenne.apache.org/schema/" + Project.VERSION + "/cgen"; http://git-wip-us.apache.org/repos/asf/cayenne/blob/0e19c961/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenLoaderDelegate.java ---------------------------------------------------------------------- diff --git a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenLoaderDelegate.java b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenLoaderDelegate.java index 8b3728f..b2f1cba 100644 --- a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenLoaderDelegate.java +++ b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenLoaderDelegate.java @@ -1,3 +1,21 @@ +/***************************************************************** + * 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.gen.xml; import org.apache.cayenne.configuration.xml.DataChannelMetaData; @@ -5,6 +23,9 @@ import org.apache.cayenne.configuration.xml.NamespaceAwareNestedTagHandler; import org.apache.cayenne.project.extension.LoaderDelegate; +/** + * @since 4.1 + */ public class CgenLoaderDelegate implements LoaderDelegate { private DataChannelMetaData metaData; http://git-wip-us.apache.org/repos/asf/cayenne/blob/0e19c961/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenSaverDelegate.java ---------------------------------------------------------------------- diff --git a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenSaverDelegate.java b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenSaverDelegate.java index d4d4b8f..8d25cf1 100644 --- a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenSaverDelegate.java +++ b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenSaverDelegate.java @@ -1,3 +1,21 @@ +/***************************************************************** + * 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.gen.xml; import org.apache.cayenne.configuration.xml.DataChannelMetaData; @@ -5,6 +23,9 @@ import org.apache.cayenne.gen.ClassGenerationAction; import org.apache.cayenne.map.DataMap; import org.apache.cayenne.project.extension.BaseSaverDelegate; +/** + * @since 4.1 + */ public class CgenSaverDelegate extends BaseSaverDelegate{ private DataChannelMetaData metaData; http://git-wip-us.apache.org/repos/asf/cayenne/blob/0e19c961/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/EmbeddableHandler.java ---------------------------------------------------------------------- diff --git a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/EmbeddableHandler.java b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/EmbeddableHandler.java index 4e11a6f..4772348 100644 --- a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/EmbeddableHandler.java +++ b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/EmbeddableHandler.java @@ -1,3 +1,21 @@ +/***************************************************************** + * 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.gen.xml; import org.apache.cayenne.configuration.xml.NamespaceAwareNestedTagHandler; @@ -5,6 +23,9 @@ import org.apache.cayenne.gen.ClassGenerationAction; import org.xml.sax.Attributes; import org.xml.sax.SAXException; +/** + * @since 4.1 + */ public class EmbeddableHandler extends NamespaceAwareNestedTagHandler { private static final String EMBEDDABLE_TAG = "embeddable"; http://git-wip-us.apache.org/repos/asf/cayenne/blob/0e19c961/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/ObjEntityHandler.java ---------------------------------------------------------------------- diff --git a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/ObjEntityHandler.java b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/ObjEntityHandler.java index f4ebc48..593a002 100644 --- a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/ObjEntityHandler.java +++ b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/ObjEntityHandler.java @@ -1,3 +1,21 @@ +/***************************************************************** + * 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.gen.xml; import org.apache.cayenne.configuration.xml.NamespaceAwareNestedTagHandler; @@ -5,6 +23,9 @@ import org.apache.cayenne.gen.ClassGenerationAction; import org.xml.sax.Attributes; import org.xml.sax.SAXException; +/** + * @since 4.1 + */ public class ObjEntityHandler extends NamespaceAwareNestedTagHandler { private static final String OBJENTITY_TAG = "objEntity"; http://git-wip-us.apache.org/repos/asf/cayenne/blob/0e19c961/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CodeTemplateManager.java ---------------------------------------------------------------------- diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CodeTemplateManager.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CodeTemplateManager.java index b56851a..98f0dc9 100644 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CodeTemplateManager.java +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CodeTemplateManager.java @@ -43,19 +43,26 @@ public class CodeTemplateManager { static final String STANDARD_CLIENT_SUPERCLASS = "Standard Client Superclass"; static final String STANDARD_CLIENT_SUBCLASS = "Standard Client Subclass"; - public static final String STANDART_EMBEDDABLE_SUPERCLASS = "Standart Embeddable Superclass"; - public static final String STANDART_EMBEDDABLE_SUBCLASS = "Standart Embeddable Subclass"; - public static final String SINGLE_EMBEDDABLE_CLASS = "Single Embeddable class"; + private static final String STANDART_EMBEDDABLE_SUPERCLASS = "Standart Embeddable Superclass"; + private static final String STANDART_EMBEDDABLE_SUBCLASS = "Standart Embeddable Subclass"; + private static final String SINGLE_EMBEDDABLE_CLASS = "Single Embeddable class"; + + private static final String STANDART_DATAMAP_SUPERCLASS = "Standart DataMap Superclass"; + private static final String STANDART_DATAMAP_SUBCLASS = "Standart DataMap Subclass"; + private static final String SINGLE_DATAMAP_CLASS = "Single DataMap class"; public static final String NODE_NAME = "codeTemplateManager"; - protected List<String> standardSubclassTemplates; - protected List<String> standardSuperclassTemplates; - protected Map<String, String> customTemplates; - protected Map<String, String> standardTemplates; + private List<String> standardSubclassTemplates; + private List<String> standardSuperclassTemplates; + private Map<String, String> customTemplates; + private Map<String, String> standardTemplates; + + private List<String> standartEmbeddableTemplates; + private List<String> standartEmbeddableSuperclassTemplates; - protected List<String> standartEmbeddableTemplates; - protected List<String> standartEmbeddableSuperclassTemplates; + private List<String> standartDataMapTemplates; + private List<String> standartDataMapSuperclassTemplates; private Map<String, String> reverseStandartTemplates; @@ -83,6 +90,13 @@ public class CodeTemplateManager { standartEmbeddableSuperclassTemplates = new ArrayList<>(); standartEmbeddableSuperclassTemplates.add(STANDART_EMBEDDABLE_SUPERCLASS); + standartDataMapTemplates = new ArrayList<>(); + standartDataMapTemplates.add(STANDART_DATAMAP_SUBCLASS); + standartDataMapTemplates.add(SINGLE_DATAMAP_CLASS); + + standartDataMapSuperclassTemplates = new ArrayList<>(); + standartDataMapSuperclassTemplates.add(STANDART_DATAMAP_SUPERCLASS); + updateCustomTemplates(getTemplatePreferences(application)); standardTemplates = new HashMap<>(); @@ -96,6 +110,10 @@ public class CodeTemplateManager { standardTemplates.put(STANDART_EMBEDDABLE_SUBCLASS, ClassGenerationAction.EMBEDDABLE_SUBCLASS_TEMPLATE); standardTemplates.put(SINGLE_EMBEDDABLE_CLASS, ClassGenerationAction.EMBEDDABLE_SINGLE_CLASS_TEMPLATE); + standardTemplates.put(STANDART_DATAMAP_SUBCLASS, ClassGenerationAction.DATAMAP_SUBCLASS_TEMPLATE); + standardTemplates.put(SINGLE_DATAMAP_CLASS, ClassGenerationAction.DATAMAP_SINGLE_CLASS_TEMPLATE); + standardTemplates.put(STANDART_DATAMAP_SUPERCLASS, ClassGenerationAction.DATAMAP_SUPERCLASS_TEMPLATE); + reverseStandartTemplates = new HashMap<>(); reverseStandartTemplates.put(ClassGenerationAction.SUBCLASS_TEMPLATE, STANDARD_SERVER_SUBCLASS); reverseStandartTemplates.put(ClientClassGenerationAction.SUBCLASS_TEMPLATE, STANDARD_CLIENT_SUBCLASS); @@ -106,6 +124,10 @@ public class CodeTemplateManager { reverseStandartTemplates.put(ClassGenerationAction.EMBEDDABLE_SUPERCLASS_TEMPLATE, STANDART_EMBEDDABLE_SUPERCLASS); reverseStandartTemplates.put(ClassGenerationAction.EMBEDDABLE_SUBCLASS_TEMPLATE, STANDART_EMBEDDABLE_SUBCLASS); reverseStandartTemplates.put(ClassGenerationAction.EMBEDDABLE_SINGLE_CLASS_TEMPLATE, SINGLE_EMBEDDABLE_CLASS); + + reverseStandartTemplates.put(ClassGenerationAction.DATAMAP_SUBCLASS_TEMPLATE, STANDART_DATAMAP_SUBCLASS); + reverseStandartTemplates.put(ClassGenerationAction.DATAMAP_SINGLE_CLASS_TEMPLATE, SINGLE_DATAMAP_CLASS); + reverseStandartTemplates.put(ClassGenerationAction.DATAMAP_SUPERCLASS_TEMPLATE, STANDART_DATAMAP_SUPERCLASS); } /** @@ -166,4 +188,8 @@ public class CodeTemplateManager { public List<String> getStandartEmbeddableSuperclassTemplates() { return standartEmbeddableSuperclassTemplates; } + + public List<String> getStandartDataMapTemplates() { return standartDataMapTemplates; } + + public List<String> getStandartDataMapSuperclassTemplates() { return standartDataMapSuperclassTemplates; } } http://git-wip-us.apache.org/repos/asf/cayenne/blob/0e19c961/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/ClassesTabController.java ---------------------------------------------------------------------- diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/ClassesTabController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/ClassesTabController.java index 586416e..704e851 100644 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/ClassesTabController.java +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/ClassesTabController.java @@ -106,7 +106,7 @@ public class ClassesTabController extends CayenneController { else if (selectedCount == getParentController().getClasses().size()) { view.getCheckAll().setSelected(true); } - updateEntities(); + getParentController().updateEntities(); } /** @@ -116,12 +116,7 @@ public class ClassesTabController extends CayenneController { public void checkAllAction() { if (getParentController().updateSelection(view.getCheckAll().isSelected() ? o -> true : o -> false)) { tableBinding.updateView(); - updateEntities(); + getParentController().updateEntities(); } } - - private void updateEntities(){ - getParentController().updateEntities(); -// getParentController().getProjectController().setDirty(true); - } } http://git-wip-us.apache.org/repos/asf/cayenne/blob/0e19c961/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/ClassesTabPanel.java ---------------------------------------------------------------------- diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/ClassesTabPanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/ClassesTabPanel.java index e4fc20c..f6cad0b 100644 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/ClassesTabPanel.java +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/ClassesTabPanel.java @@ -21,8 +21,6 @@ package org.apache.cayenne.modeler.editor.cgen; import javax.swing.*; import java.awt.*; -import java.awt.event.ItemEvent; -import java.awt.event.ItemListener; /** */ @@ -42,15 +40,12 @@ public class ClassesTabPanel extends JPanel { this.checkAll = new JCheckBox(); this.checkAllLabel = new JLabel("Check All Classes"); - checkAll.addItemListener(new ItemListener() { - - public void itemStateChanged(ItemEvent event) { - if (checkAll.isSelected()) { - checkAllLabel.setText("Uncheck All Classess"); - } - else { - checkAllLabel.setText("Check All Classes"); - } + checkAll.addItemListener(event -> { + if (checkAll.isSelected()) { + checkAllLabel.setText("Uncheck All Classess"); + } + else { + checkAllLabel.setText("Check All Classes"); } }); http://git-wip-us.apache.org/repos/asf/cayenne/blob/0e19c961/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CodeGeneratorController.java ---------------------------------------------------------------------- diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CodeGeneratorController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CodeGeneratorController.java index ac5e152..64a15fa 100644 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CodeGeneratorController.java +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CodeGeneratorController.java @@ -58,7 +58,6 @@ public class CodeGeneratorController extends CodeGeneratorControllerBase { projectController.addDataMapDisplayListener(e -> { super.startup(e.getDataMap()); classesSelector.startup(); - generatorSelector.startup(e.getDataMap()); GeneratorController modeController = generatorSelector.getGeneratorController(); ClassGenerationAction classGenerationAction = modeController.createGenerator(); @@ -125,6 +124,7 @@ public class CodeGeneratorController extends CodeGeneratorControllerBase { } view.getClassesCount().setText(label); + projectController.setDirty(true); } public void generateAction() { http://git-wip-us.apache.org/repos/asf/cayenne/blob/0e19c961/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CodeGeneratorControllerBase.java ---------------------------------------------------------------------- diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CodeGeneratorControllerBase.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CodeGeneratorControllerBase.java index d99e708..0642fb9 100644 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CodeGeneratorControllerBase.java +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CodeGeneratorControllerBase.java @@ -264,20 +264,16 @@ public abstract class CodeGeneratorControllerBase extends CayenneController { DataMap map = getProjectController().getCurrentDataMap(); ClassGenerationAction generator = projectController.getApplication().getMetaData().get(map, ClassGenerationAction.class); if(generator != null) { - generator.resetArtifacts(); - LinkedList<ObjEntity> objEntities = new LinkedList<>(map.getObjEntities()); - - Collection<ObjEntity> selected = new ArrayList<>(getSelectedEntities()); - selected.removeIf(ObjEntity::isGeneric); - - objEntities.retainAll(selected); - generator.addEntities(objEntities); - - LinkedList<Embeddable> embeddables = new LinkedList<>(map.getEmbeddables()); - embeddables.retainAll(getSelectedEmbeddables()); - generator.addEmbeddables(embeddables); + generator.resetCollections(); + for(ObjEntity entity: getSelectedEntities()) { + if(!entity.isGeneric()) { + generator.loadEntity(entity.getName()); + } + } - generator.addQueries(map.getQueryDescriptors()); + for(Embeddable embeddable : getSelectedEmbeddables()) { + generator.loadEmbeddable(embeddable.getClassName()); + } } } @@ -312,8 +308,4 @@ public abstract class CodeGeneratorControllerBase extends CayenneController { public void setCurrentClass(Object currentClass) { this.currentClass = currentClass; } - -// public Collection<DataMap> getDataMaps() { -// return dataMaps; -// } } http://git-wip-us.apache.org/repos/asf/cayenne/blob/0e19c961/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CustomModeController.java ---------------------------------------------------------------------- diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CustomModeController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CustomModeController.java index 134381b..2559657 100644 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CustomModeController.java +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CustomModeController.java @@ -23,11 +23,8 @@ import org.apache.cayenne.gen.ClassGenerationAction; import org.apache.cayenne.modeler.CodeTemplateManager; import org.apache.cayenne.modeler.dialog.pref.PreferenceDialog; import org.apache.cayenne.swing.BindingBuilder; -import org.apache.cayenne.swing.ObjectBinding; import javax.swing.*; -import javax.swing.event.DocumentEvent; -import javax.swing.event.DocumentListener; import java.awt.*; import java.util.*; import java.util.List; @@ -38,17 +35,17 @@ import java.util.List; public class CustomModeController extends GeneratorController { // correspond to non-public constants on MapClassGenerator. - static final String MODE_DATAMAP = "datamap"; - static final String MODE_ENTITY = "entity"; - static final String MODE_ALL = "all"; + private static final String MODE_DATAMAP = "datamap"; + private static final String MODE_ENTITY = "entity"; + private static final String MODE_ALL = "all"; - static final String DATA_MAP_MODE_LABEL = "DataMap generation"; - static final String ENTITY_MODE_LABEL = "Entity and Embeddable generation"; + private static final String DATA_MAP_MODE_LABEL = "DataMap generation"; + private static final String ENTITY_MODE_LABEL = "Entity and Embeddable generation"; static final String ALL_MODE_LABEL = "Generate all"; static final Map<String, String> modesByLabel = new HashMap<>(); - static final Map<String, String> labelByMode = new HashMap<>(); + private static final Map<String, String> labelByMode = new HashMap<>(); static { modesByLabel.put(DATA_MAP_MODE_LABEL, MODE_DATAMAP); @@ -60,56 +57,29 @@ public class CustomModeController extends GeneratorController { } protected CustomModePanel view; - private CodeTemplateManager templateManager; - - protected ObjectBinding superTemplate; - protected ObjectBinding subTemplate; - - private BindingBuilder builder; - - private CustomPreferencesUpdater preferencesUpdater; private ClassGenerationAction classGenerationAction; public CustomModeController(CodeGeneratorControllerBase parent) { super(parent); - this.view = new CustomModePanel(); - initListeners(); + this.view = new CustomModePanel(parent.getProjectController()); bind(); + initListeners(); } private void bind() { initBindings(new BindingBuilder(getApplication().getBindingFactory(), this)); - builder = new BindingBuilder(getApplication().getBindingFactory(), this); + BindingBuilder builder = new BindingBuilder(getApplication().getBindingFactory(), this); builder.bindToAction(view.getManageTemplatesLink(), "popPreferencesAction()"); updateTemplates(); } - protected void createDefaults() { -// TreeMap<DataMap, DataMapDefaults> map = new TreeMap<>(); -// DataMap dataMap = getParentController().getDataMap(); -// DataMapDefaults preferences; -// preferences = getApplication().getFrameController().getProjectController() -// .getDataMapPreferences(this.getClass().getName().replace(".", "/"), dataMap); -// preferences.setSuperclassPackage(""); -// preferences.updateSuperclassPackage(dataMap, false); -// -// map.put(dataMap, preferences); -// -// if (getOutputPath() == null) { -// setOutputPath(preferences.getOutputPath()); -// } -// -// setMapPreferences(map); -// preferencesUpdater = new CustomPreferencesUpdater(map); - } - protected void updateTemplates() { Object[] modeChoices = new Object[]{ENTITY_MODE_LABEL, DATA_MAP_MODE_LABEL, ALL_MODE_LABEL}; - view.getGenerationMode().setModel(new DefaultComboBoxModel(modeChoices)); + view.getGenerationMode().getComboBox().setModel(new DefaultComboBoxModel(modeChoices)); - this.templateManager = getApplication().getCodeTemplateManager(); + CodeTemplateManager templateManager = getApplication().getCodeTemplateManager(); List<String> customTemplates = new ArrayList<>(templateManager.getCustomTemplates().keySet()); Collections.sort(customTemplates); @@ -130,11 +100,22 @@ public class CustomModeController extends GeneratorController { Collections.sort(embeddableSuperTemplates); embeddableSuperTemplates.addAll(customTemplates); - this.view.getSubclassTemplate().setModel(new DefaultComboBoxModel(subTemplates.toArray())); - this.view.getSuperclassTemplate().setModel(new DefaultComboBoxModel(superTemplates.toArray())); + List<String> dataMapTemplates = new ArrayList<>(templateManager.getStandartDataMapTemplates()); + Collections.sort(dataMapTemplates); + dataMapTemplates.addAll(customTemplates); + + List<String> dataMapSuperTemplates = new ArrayList<>(templateManager.getStandartDataMapSuperclassTemplates()); + Collections.sort(dataMapSuperTemplates); + dataMapSuperTemplates.addAll(customTemplates); + + this.view.getSubclassTemplate().getComboBox().setModel(new DefaultComboBoxModel(subTemplates.toArray())); + this.view.getSuperclassTemplate().getComboBox().setModel(new DefaultComboBoxModel(superTemplates.toArray())); - this.view.getEmbeddableTemplate().setModel(new DefaultComboBoxModel(embeddableTemplates.toArray())); - this.view.getEmbeddableSuperTemplate().setModel(new DefaultComboBoxModel(embeddableSuperTemplates.toArray())); + this.view.getEmbeddableTemplate().getComboBox().setModel(new DefaultComboBoxModel(embeddableTemplates.toArray())); + this.view.getEmbeddableSuperTemplate().getComboBox().setModel(new DefaultComboBoxModel(embeddableSuperTemplates.toArray())); + + this.view.getDataMapTemplate().getComboBox().setModel(new DefaultComboBoxModel(dataMapTemplates.toArray())); + this.view.getDataMapSuperTemplate().getComboBox().setModel(new DefaultComboBoxModel(dataMapSuperTemplates.toArray())); } public Component getView() { @@ -144,6 +125,19 @@ public class CustomModeController extends GeneratorController { public void popPreferencesAction() { new PreferenceDialog(getApplication().getFrameController()).startupAction(PreferenceDialog.TEMPLATES_KEY); updateTemplates(); + updateComboBoxes(); + } + + private void updateComboBoxes() { + view.getEmbeddableTemplate().setItem(getApplication().getCodeTemplateManager().getNameByPath(classGenerationAction.getEmbeddableTemplate())); + view.getEmbeddableSuperTemplate().setItem(getApplication().getCodeTemplateManager().getNameByPath(classGenerationAction.getEmbeddableSuperTemplate())); + view.getSubclassTemplate().setItem(getApplication().getCodeTemplateManager().getNameByPath(classGenerationAction.getTemplate())); + view.getSuperclassTemplate().setItem(getApplication().getCodeTemplateManager().getNameByPath(classGenerationAction.getSuperclassTemplate())); + view.getGenerationMode().setItem(labelByMode.get(classGenerationAction.getArtifactsGenerationMode())); + view.getDataMapTemplate().setItem(getApplication().getCodeTemplateManager().getNameByPath(classGenerationAction.getQueryTemplate())); + view.getDataMapSuperTemplate().setItem(getApplication().getCodeTemplateManager().getNameByPath(classGenerationAction.getQuerySuperTemplate())); + + view.setDisableSuperComboBoxes(view.getPairs().isSelected()); } @Override @@ -154,19 +148,6 @@ public class CustomModeController extends GeneratorController { } private void initListeners(){ - view.getOutputFolder().getDocument().addDocumentListener(new DocumentListener() { - @Override - public void insertUpdate(DocumentEvent e) { - classGenerationAction.setDestDir(view.getOutputDir()); - getParentController().getProjectController().setDirty(true); - } - @Override - public void removeUpdate(DocumentEvent e) {} - - @Override - public void changedUpdate(DocumentEvent e) {} - }); - view.getPairs().addActionListener(val -> { classGenerationAction.setMakePairs(view.getPairs().isSelected()); getParentController().getProjectController().setDirty(true); @@ -186,92 +167,19 @@ public class CustomModeController extends GeneratorController { classGenerationAction.setUsePkgPath(view.getUsePackagePath().isSelected()); getParentController().getProjectController().setDirty(true); }); - - view.getSubclassTemplate().addActionListener(val -> { - classGenerationAction.setTemplate(getApplication().getCodeTemplateManager().getTemplatePath(String.valueOf(view.getSubclassTemplate().getSelectedItem()))); - getParentController().getProjectController().setDirty(true); - }); - - view.getSuperclassTemplate().addActionListener(val -> { - classGenerationAction.setSuperTemplate(getApplication().getCodeTemplateManager().getTemplatePath(String.valueOf(view.getSuperclassTemplate().getSelectedItem()))); - getParentController().getProjectController().setDirty(true); - }); - - view.getEmbeddableTemplate().addActionListener(val -> { - classGenerationAction.setEmbeddableTemplate(getApplication().getCodeTemplateManager().getTemplatePath(String.valueOf(view.getEmbeddableTemplate().getSelectedItem()))); - getParentController().getProjectController().setDirty(true); - }); - - view.getEmbeddableSuperTemplate().addActionListener(val -> { - classGenerationAction.setEmbeddableSuperTemplate(getApplication().getCodeTemplateManager().getTemplatePath(String.valueOf(view.getEmbeddableSuperTemplate().getSelectedItem()))); - getParentController().getProjectController().setDirty(true); - }); - - view.getGenerationMode().addActionListener(val -> { - classGenerationAction.setArtifactsGenerationMode(modesByLabel.get(view.getGenerationMode().getSelectedItem())); - getParentController().getProjectController().setDirty(true); - }); - - view.getOutputPattern().getDocument().addDocumentListener(new DocumentListener() { - @Override - public void insertUpdate(DocumentEvent e) { - classGenerationAction.setOutputPattern(view.getOutputPattern().getText()); - getParentController().getProjectController().setDirty(true); - } - - @Override - public void removeUpdate(DocumentEvent e) {} - - @Override - public void changedUpdate(DocumentEvent e) {} - }); - - view.getSuperclassPackage().getDocument().addDocumentListener(new DocumentListener() { - @Override - public void insertUpdate(DocumentEvent e) { - classGenerationAction.setSuperPkg(view.getSuperclassPackage().getText()); - getParentController().getProjectController().setDirty(true); - } - - @Override - public void removeUpdate(DocumentEvent e) {} - - @Override - public void changedUpdate(DocumentEvent e) {} - }); - - view.getEncoding().getDocument().addDocumentListener(new DocumentListener() { - @Override - public void insertUpdate(DocumentEvent e) { - classGenerationAction.setEncoding(view.getEncoding().getText()); - getParentController().getProjectController().setDirty(true); - } - - @Override - public void removeUpdate(DocumentEvent e) {} - - @Override - public void changedUpdate(DocumentEvent e) {} - }); } public void initForm(ClassGenerationAction classGenerationAction){ this.classGenerationAction = classGenerationAction; - view.setOutputFolder(classGenerationAction.getDir()); - view.setGenerationMode(labelByMode.get(classGenerationAction.getArtifactsGenerationMode())); - view.setTemplate(getApplication().getCodeTemplateManager().getNameByPath(classGenerationAction.getTemplate())); - view.setSuperclassTemplate(getApplication().getCodeTemplateManager().getNameByPath(classGenerationAction.getSuperclassTemplate())); + view.getOutputFolder().setText(classGenerationAction.getDir()); view.setDataMapName(classGenerationAction.getDataMap().getName()); - view.setOutputPattern(classGenerationAction.getOutputPattern()); - view.setPairs(classGenerationAction.isMakePairs()); - view.setUsePackagePath(classGenerationAction.isUsePkgPath()); - view.setOverwrite(classGenerationAction.isOverwrite()); - view.setCreatePropertyNames(classGenerationAction.isCreatePropertyNames()); - view.setSuperclassPackage(classGenerationAction.getSuperPkg()); - view.setEncoding(classGenerationAction.getEncoding()); - view.setEmbeddableTemplate(getApplication().getCodeTemplateManager().getNameByPath(classGenerationAction.getEmbeddableTemplate())); - view.setEmbeddableSuperTemplate(getApplication().getCodeTemplateManager().getNameByPath(classGenerationAction.getEmbeddableSuperTemplate())); - -// getParentController().getProjectController().setDirty(false); + view.getOutputPattern().setText(classGenerationAction.getOutputPattern()); + view.getPairs().setSelected(classGenerationAction.isMakePairs()); + view.getUsePackagePath().setSelected(classGenerationAction.isUsePkgPath()); + view.getOverwrite().setSelected(classGenerationAction.isOverwrite()); + view.getCreatePropertyNames().setSelected(classGenerationAction.isCreatePropertyNames()); + view.getSuperclassPackage().setText(classGenerationAction.getSuperPkg()); + view.getEncoding().setText(classGenerationAction.getEncoding()); + updateComboBoxes(); } } http://git-wip-us.apache.org/repos/asf/cayenne/blob/0e19c961/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CustomModePanel.java ---------------------------------------------------------------------- diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CustomModePanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CustomModePanel.java index e79ef7a..bfadc8a 100644 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CustomModePanel.java +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CustomModePanel.java @@ -21,85 +21,179 @@ package org.apache.cayenne.modeler.editor.cgen; import com.jgoodies.forms.builder.DefaultFormBuilder; import com.jgoodies.forms.layout.FormLayout; +import org.apache.cayenne.modeler.Application; +import org.apache.cayenne.modeler.ProjectController; +import org.apache.cayenne.modeler.util.ComboBoxAdapter; +import org.apache.cayenne.modeler.util.TextAdapter; +import org.apache.cayenne.swing.components.JCayenneCheckBox; import org.apache.cayenne.swing.control.ActionLink; +import org.apache.cayenne.validation.ValidationException; import javax.swing.*; import java.awt.*; public class CustomModePanel extends GeneratorControllerPanel { - private JComboBox generationMode; - private JComboBox subclassTemplate; - private JComboBox superclassTemplate; + private ComboBoxAdapter generationMode; + private ComboBoxAdapter subclassTemplate; + private ComboBoxAdapter superclassTemplate; + private ComboBoxAdapter embeddableTemplate; + private ComboBoxAdapter embeddableSuperTemplate; + private ComboBoxAdapter dataMapTemplate; + private ComboBoxAdapter dataMapSuperTemplate; protected JCheckBox pairs; private JCheckBox overwrite; private JCheckBox usePackagePath; - private JTextField outputPattern; + private TextAdapter outputPattern; private JCheckBox createPropertyNames; - private JTextField superclassPackage; + private TextAdapter superclassPackage; - private JTextField encoding; - private JComboBox embeddableTemplate; - private JComboBox embeddableSuperTemplate; - private JLabel dataMapName; - - private DefaultFormBuilder builder; - - protected ActionLink manageTemplatesLink; + private TextAdapter encoding; - public CustomModePanel() { + private JLabel dataMapName; - this.generationMode = new JComboBox(); - this.superclassTemplate = new JComboBox(); - this.subclassTemplate = new JComboBox(); - this.pairs = new JCheckBox(); - this.overwrite = new JCheckBox(); - this.usePackagePath = new JCheckBox(); - this.outputPattern = new JTextField(); - this.createPropertyNames = new JCheckBox(); + private ActionLink manageTemplatesLink; + + CustomModePanel(ProjectController projectController) { + super(projectController); + + JComboBox modeField = new JComboBox(); + this.generationMode = new ComboBoxAdapter(modeField) { + @Override + protected void updateModel(Object item) throws ValidationException { + getCgenByDataMap().setArtifactsGenerationMode(CustomModeController.modesByLabel.get(item)); + projectController.setDirty(true); + } + }; + + JComboBox superclassField = new JComboBox(); + this.superclassTemplate = new ComboBoxAdapter(superclassField) { + @Override + protected void updateModel(Object item) throws ValidationException { + getCgenByDataMap().setSuperTemplate(Application.getInstance().getCodeTemplateManager().getTemplatePath(String.valueOf(item))); + projectController.setDirty(true); + } + }; + + JComboBox subclassField = new JComboBox(); + this.subclassTemplate = new ComboBoxAdapter(subclassField) { + @Override + protected void updateModel(Object item) throws ValidationException { + getCgenByDataMap().setTemplate(Application.getInstance().getCodeTemplateManager().getTemplatePath(String.valueOf(item))); + projectController.setDirty(true); + } + }; + + JComboBox dataMapField = new JComboBox(); + this.dataMapTemplate = new ComboBoxAdapter(dataMapField) { + @Override + protected void updateModel(Object item) throws ValidationException { + getCgenByDataMap().setQueryTemplate(Application.getInstance().getCodeTemplateManager().getTemplatePath(String.valueOf(item))); + projectController.setDirty(true); + } + }; + + JComboBox dataMapSuperField = new JComboBox(); + this.dataMapSuperTemplate = new ComboBoxAdapter(dataMapSuperField) { + @Override + protected void updateModel(Object item) throws ValidationException { + getCgenByDataMap().setQuerySuperTemplate(Application.getInstance().getCodeTemplateManager().getTemplatePath(String.valueOf(item))); + projectController.setDirty(true); + } + }; + + this.pairs = new JCayenneCheckBox(); + this.overwrite = new JCayenneCheckBox(); + this.usePackagePath = new JCayenneCheckBox(); + + JTextField outputPatternField = new JTextField(); + this.outputPattern = new TextAdapter(outputPatternField) { + protected void updateModel(String text) { + getCgenByDataMap().setOutputPattern(text); + projectController.setDirty(true); + } + }; + + this.createPropertyNames = new JCayenneCheckBox(); this.manageTemplatesLink = new ActionLink("Customize Templates..."); this.manageTemplatesLink.setFont(manageTemplatesLink.getFont().deriveFont(10f)); - this.superclassPackage = new JTextField(); - this.encoding = new JTextField(); - this.embeddableTemplate = new JComboBox(); - this.embeddableSuperTemplate = new JComboBox(); + JTextField superclassPackageField = new JTextField(); + this.superclassPackage = new TextAdapter(superclassPackageField) { + protected void updateModel(String text) { + getCgenByDataMap().setSuperPkg(text); + projectController.setDirty(true); + } + }; + + JTextField encodingField = new JTextField(); + this.encoding = new TextAdapter(encodingField) { + protected void updateModel(String text) { + getCgenByDataMap().setEncoding(text); + projectController.setDirty(true); + } + }; + + JComboBox embeddableField = new JComboBox(); + this.embeddableTemplate = new ComboBoxAdapter(embeddableField) { + @Override + protected void updateModel(Object item) throws ValidationException { + getCgenByDataMap().setEmbeddableTemplate(Application.getInstance().getCodeTemplateManager().getTemplatePath(String.valueOf(item))); + projectController.setDirty(true); + } + }; + + JComboBox embeddableSuperclassField = new JComboBox(); + this.embeddableSuperTemplate = new ComboBoxAdapter(embeddableSuperclassField) { + @Override + protected void updateModel(Object item) throws ValidationException { + getCgenByDataMap().setEmbeddableSuperTemplate(Application.getInstance().getCodeTemplateManager().getTemplatePath(String.valueOf(item))); + projectController.setDirty(true); + } + }; + this.dataMapName = new JLabel(); this.dataMapName.setFont(dataMapName.getFont().deriveFont(1)); pairs.addChangeListener(e -> { - superclassTemplate.setEnabled(pairs.isSelected()); + setDisableSuperComboBoxes(pairs.isSelected()); overwrite.setEnabled(!pairs.isSelected()); }); // assemble FormLayout layout = new FormLayout( - "right:77dlu, 3dlu, fill:200:grow, 6dlu, fill:50dlu, 3dlu", ""); - builder = new DefaultFormBuilder(layout); + "right:100dlu, 3dlu, fill:100:grow, 6dlu, fill:50dlu, 3dlu", ""); + DefaultFormBuilder builder = new DefaultFormBuilder(layout); builder.setDefaultDialogBorder(); - builder.append("Output Directory:", outputFolder, selectOutputFolder); + builder.append("Output Directory:", outputFolder.getComponent(), selectOutputFolder); + builder.nextLine(); + + builder.append("Generation Mode:", generationMode.getComboBox()); + builder.nextLine(); + + builder.append("DataMap Template:", dataMapTemplate.getComboBox()); builder.nextLine(); - builder.append("Generation Mode:", generationMode); + builder.append("DataMap Superclass Template", dataMapSuperTemplate.getComboBox()); builder.nextLine(); - builder.append("Subclass Template:", subclassTemplate); + builder.append("Subclass Template:", subclassTemplate.getComboBox()); builder.nextLine(); - builder.append("Superclass Template:", superclassTemplate); + builder.append("Superclass Template:", superclassTemplate.getComboBox()); builder.nextLine(); - builder.append("Embeddable Template", embeddableTemplate); + builder.append("Embeddable Template", embeddableTemplate.getComboBox()); builder.nextLine(); - builder.append("Embeddable Super Template", embeddableSuperTemplate); + builder.append("Embeddable Super Template", embeddableSuperTemplate.getComboBox()); builder.nextLine(); - builder.append("Output Pattern:", outputPattern); + builder.append("Output Pattern:", outputPattern.getComponent()); builder.nextLine(); - builder.append("Encoding", encoding); + builder.append("Encoding", encoding.getComponent()); builder.nextLine(); builder.append("Make Pairs:", pairs); @@ -117,7 +211,7 @@ public class CustomModePanel extends GeneratorControllerPanel { builder.append(dataMapName); builder.nextLine(); - builder.append("Superclass package", superclassPackage); + builder.append("Superclass package", superclassPackage.getComponent()); setLayout(new BorderLayout()); add(builder.getPanel(), BorderLayout.CENTER); @@ -129,7 +223,13 @@ public class CustomModePanel extends GeneratorControllerPanel { add(builder.getPanel(), BorderLayout.CENTER); } - public JComboBox getGenerationMode() { + public void setDisableSuperComboBoxes(boolean val){ + superclassTemplate.getComboBox().setEnabled(val); + embeddableSuperTemplate.getComboBox().setEnabled(val); + dataMapSuperTemplate.getComboBox().setEnabled(val); + } + + public ComboBoxAdapter getGenerationMode() { return generationMode; } @@ -137,16 +237,20 @@ public class CustomModePanel extends GeneratorControllerPanel { return manageTemplatesLink; } - public JComboBox getSubclassTemplate() { return subclassTemplate; } + public ComboBoxAdapter getSubclassTemplate() { return subclassTemplate; } - public JComboBox getEmbeddableTemplate() { return embeddableTemplate; } + public ComboBoxAdapter getEmbeddableTemplate() { return embeddableTemplate; } - public JComboBox getEmbeddableSuperTemplate() { return embeddableSuperTemplate; } + public ComboBoxAdapter getEmbeddableSuperTemplate() { return embeddableSuperTemplate; } - public JComboBox getSuperclassTemplate() { + public ComboBoxAdapter getSuperclassTemplate() { return superclassTemplate; } + public ComboBoxAdapter getDataMapTemplate() { return dataMapTemplate; } + + public ComboBoxAdapter getDataMapSuperTemplate() { return dataMapSuperTemplate; } + public JCheckBox getOverwrite() { return overwrite; } @@ -159,7 +263,7 @@ public class CustomModePanel extends GeneratorControllerPanel { return usePackagePath; } - public JTextField getOutputPattern() { + public TextAdapter getOutputPattern() { return outputPattern; } @@ -167,55 +271,13 @@ public class CustomModePanel extends GeneratorControllerPanel { return createPropertyNames; } - public JTextField getSuperclassPackage() { + public TextAdapter getSuperclassPackage() { return superclassPackage; } - public JTextField getEncoding() { return encoding; } + public TextAdapter getEncoding() { return encoding; } public void setDataMapName(String mapName){ dataMapName.setText(mapName); } - - public void setSuperclassPackage(String pack) { - superclassPackage.setText(pack); - } - - public void setPairs(boolean val){ - pairs.setSelected(val); - } - - public void setOverwrite(boolean val){ - overwrite.setSelected(val); - } - - public void setUsePackagePath(boolean val) { - usePackagePath.setSelected(val); - } - - public void setCreatePropertyNames(boolean val) { - createPropertyNames.setSelected(val); - } - - public void setOutputPattern(String pattern){ - outputPattern.setText(pattern); - } - - public void setSuperclassTemplate(String template){ - superclassTemplate.setSelectedItem(template); - } - - public void setTemplate(String template) { - subclassTemplate.setSelectedItem(template); - } - - public void setGenerationMode(String mode) { - generationMode.setSelectedItem(mode); - } - - public void setEncoding(String encoding) { this.encoding.setText(encoding); } - - public void setEmbeddableTemplate(String template) { embeddableTemplate.setSelectedItem(template); } - - public void setEmbeddableSuperTemplate(String template) { embeddableSuperTemplate.setSelectedItem(template); } } http://git-wip-us.apache.org/repos/asf/cayenne/blob/0e19c961/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CustomPreferencesUpdater.java ---------------------------------------------------------------------- diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CustomPreferencesUpdater.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CustomPreferencesUpdater.java deleted file mode 100644 index 469e594..0000000 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CustomPreferencesUpdater.java +++ /dev/null @@ -1,193 +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.modeler.editor.cgen; - -import org.apache.cayenne.map.DataMap; -import org.apache.cayenne.modeler.pref.DataMapDefaults; - -import java.util.Map; -import java.util.Map.Entry; -import java.util.Set; - -public class CustomPreferencesUpdater { - - enum Property { - SUBCLASS_TEMPLATE, - SUPERCLASS_TEMPLATE, - OVERWRITE, - PAIRS, - USE_PACKAGE_PATH, - MODE, - OUTPUT_PATTERN, - CREATE_PROPERTY_NAMES - } - - private static final String OVERWRITE = "overwrite"; - private static final String PAIRS = "pairs"; - private static final String USE_PACKAGE_PATH = "usePackagePath"; - private static final String MODE = "mode"; - private static final String OUTPUT_PATTERN = "outputPattern"; - private static final String CREATE_PROPERTY_NAMES = "createPropertyNames"; - - private Map<DataMap, DataMapDefaults> mapPreferences; - - - public CustomPreferencesUpdater(Map<DataMap, DataMapDefaults> mapPreferences) { - this.mapPreferences = mapPreferences; - } - - public String getMode() { - return (String) getProperty(Property.MODE); - } - - public void setMode(String mode) { - updatePreferences(Property.MODE, mode); - } - - public String getSubclassTemplate() { - return (String) getProperty(Property.SUBCLASS_TEMPLATE); - } - - public void setSubclassTemplate(String subclassTemplate) { - updatePreferences(Property.SUBCLASS_TEMPLATE, subclassTemplate); - } - - public String getSuperclassTemplate() { - return (String) getProperty(Property.SUPERCLASS_TEMPLATE); - } - - public void setSuperclassTemplate(String superclassTemplate) { - updatePreferences(Property.SUPERCLASS_TEMPLATE, superclassTemplate); - } - - public Boolean getOverwrite() { - return (Boolean) getProperty(Property.OVERWRITE); - } - - public void setOverwrite(Boolean overwrite) { - updatePreferences(Property.OVERWRITE, overwrite); - } - - public Boolean getPairs() { - return (Boolean) getProperty(Property.PAIRS); - } - - public void setPairs(Boolean pairs) { - updatePreferences(Property.PAIRS, pairs); - } - - public Boolean getUsePackagePath() { - return (Boolean) getProperty(Property.USE_PACKAGE_PATH); - } - - public void setUsePackagePath(Boolean usePackagePath) { - updatePreferences(Property.USE_PACKAGE_PATH, usePackagePath); - } - - public String getOutputPattern() { - return (String) getProperty(Property.OUTPUT_PATTERN); - } - - public void setOutputPattern(String outputPattern) { - updatePreferences(Property.OUTPUT_PATTERN, outputPattern); - } - - public Boolean getCreatePropertyNames() { - return (Boolean) getProperty(Property.CREATE_PROPERTY_NAMES); - } - - public void setCreatePropertyNames(Boolean createPropertyNames) { - updatePreferences(Property.CREATE_PROPERTY_NAMES, createPropertyNames); - } - - private Object getProperty(Property property) { - Object obj = null; - - Set<Entry<DataMap, DataMapDefaults>> entities = mapPreferences.entrySet(); - for (Entry<DataMap, DataMapDefaults> entry : entities) { - - switch (property) { - case MODE: - obj = entry.getValue().getProperty(MODE); - break; - case OUTPUT_PATTERN: - obj = entry.getValue().getProperty(OUTPUT_PATTERN); - break; - case SUBCLASS_TEMPLATE: - obj = entry.getValue().getSubclassTemplate(); - break; - case SUPERCLASS_TEMPLATE: - obj = entry.getValue().getSuperclassTemplate(); - break; - case OVERWRITE: - obj = entry.getValue().getBooleanProperty(OVERWRITE); - break; - case PAIRS: - obj = entry.getValue().getBooleanProperty(PAIRS); - break; - case USE_PACKAGE_PATH: - obj = entry.getValue().getBooleanProperty(USE_PACKAGE_PATH); - break; - case CREATE_PROPERTY_NAMES: - obj = entry.getValue().getBooleanProperty(CREATE_PROPERTY_NAMES); - break; - default: - throw new IllegalArgumentException("Bad type property: " + property); - } - - } - return obj; - } - - private void updatePreferences(Property property, Object value) { - Set<Entry<DataMap, DataMapDefaults>> entities = mapPreferences.entrySet(); - for (Entry<DataMap, DataMapDefaults> entry : entities) { - - switch (property) { - case MODE: - entry.getValue().setProperty(MODE, (String) value); - break; - case OUTPUT_PATTERN: - entry.getValue().setProperty(OUTPUT_PATTERN, (String) value); - break; - case SUBCLASS_TEMPLATE: - entry.getValue().setSubclassTemplate((String) value); - break; - case SUPERCLASS_TEMPLATE: - entry.getValue().setSuperclassTemplate((String) value); - break; - case OVERWRITE: - entry.getValue().setBooleanProperty(OVERWRITE, (Boolean) value); - break; - case PAIRS: - entry.getValue().setBooleanProperty(PAIRS, (Boolean) value); - break; - case USE_PACKAGE_PATH: - entry.getValue().setBooleanProperty(USE_PACKAGE_PATH, (Boolean) value); - break; - case CREATE_PROPERTY_NAMES: - entry.getValue().setBooleanProperty(CREATE_PROPERTY_NAMES, (Boolean) value); - break; - default: - throw new IllegalArgumentException("Bad type property: " + property); - } - } - } -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/cayenne/blob/0e19c961/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorController.java ---------------------------------------------------------------------- diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorController.java index 7a62efc..7e8087f 100644 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorController.java +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorController.java @@ -29,6 +29,7 @@ import org.apache.cayenne.modeler.pref.DataMapDefaults; import org.apache.cayenne.modeler.pref.FSPath; import org.apache.cayenne.modeler.util.CayenneController; import org.apache.cayenne.modeler.util.CodeValidationUtil; +import org.apache.cayenne.modeler.util.TextAdapter; import org.apache.cayenne.swing.BindingBuilder; import org.apache.cayenne.util.Util; import org.apache.cayenne.validation.BeanValidationFailure; @@ -56,10 +57,6 @@ public abstract class GeneratorController extends CayenneController { super(parent); } - public String getOutputPath() { - return outputPath; - } - public void setOutputPath(String path) { String old = this.outputPath; this.outputPath = path; @@ -79,14 +76,6 @@ public abstract class GeneratorController extends CayenneController { } } - public void setMapPreferences(Map<DataMap, DataMapDefaults> mapPreferences) { - this.mapPreferences = mapPreferences; - } - - public Map<DataMap, DataMapDefaults> getMapPreferences() { - return this.mapPreferences; - } - protected void initBindings(BindingBuilder bindingBuilder) { JButton outputSelect = ((GeneratorControllerPanel) getView()).getSelectOutputFolder(); bindingBuilder.bindToAction(outputSelect, "selectOutputFolderAction()"); @@ -113,8 +102,6 @@ public abstract class GeneratorController extends CayenneController { if(generator != null){ getParentController().addToSelectedEntities(generator.getEntities()); getParentController().addToSelectedEmbeddables(generator.getEmbeddables()); - generator.getEntities().clear(); - generator.getEmbeddables().clear(); return generator; } @@ -451,20 +438,14 @@ public abstract class GeneratorController extends CayenneController { } } - public File getOutputDir() { - String dir = ((GeneratorControllerPanel) getView()).getOutputFolder().getText(); - return dir != null ? new File(dir) : new File(System.getProperty("user.dir")); - } - /** * An action method that pops up a file chooser dialog to pick the * generation directory. */ public void selectOutputFolderAction() { + TextAdapter outputFolder = ((GeneratorControllerPanel) getView()).getOutputFolder(); - JTextField outputFolder = ((GeneratorControllerPanel) getView()).getOutputFolder(); - - String currentDir = outputFolder.getText(); + String currentDir = outputFolder.getComponent().getText(); JFileChooser chooser = new JFileChooser(); chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); @@ -484,8 +465,8 @@ public abstract class GeneratorController extends CayenneController { // update model String path = selected.getAbsolutePath(); - outputFolder.setText(path); -// setOutputPath(path); + ((GeneratorControllerPanel) getView()).getOutputFolder().setText(path); + ((GeneratorControllerPanel) getView()).getOutputFolder().updateModel(); } } http://git-wip-us.apache.org/repos/asf/cayenne/blob/0e19c961/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorControllerPanel.java ---------------------------------------------------------------------- diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorControllerPanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorControllerPanel.java index 7f1f689..7536a01 100644 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorControllerPanel.java +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorControllerPanel.java @@ -19,6 +19,11 @@ package org.apache.cayenne.modeler.editor.cgen; +import org.apache.cayenne.gen.ClassGenerationAction; +import org.apache.cayenne.map.DataMap; +import org.apache.cayenne.modeler.ProjectController; +import org.apache.cayenne.modeler.util.TextAdapter; + import javax.swing.*; import java.io.File; @@ -28,27 +33,32 @@ import java.io.File; */ public class GeneratorControllerPanel extends JPanel { - protected JTextField outputFolder; + protected TextAdapter outputFolder; protected JButton selectOutputFolder; - public GeneratorControllerPanel() { - this.outputFolder = new JTextField(); + ProjectController projectController; + + public GeneratorControllerPanel(ProjectController projectController) { + this.projectController = projectController; + JTextField outputFolderField = new JTextField(); + this.outputFolder = new TextAdapter(outputFolderField) { + protected void updateModel(String text) { + getCgenByDataMap().setDestDir(new File(text)); + projectController.setDirty(true); + } + }; this.selectOutputFolder = new JButton("Select"); } - public JTextField getOutputFolder() { - return outputFolder; + public ClassGenerationAction getCgenByDataMap() { + DataMap dataMap = projectController.getCurrentDataMap(); + return projectController.getApplication().getMetaData().get(dataMap, ClassGenerationAction.class); } - - public File getOutputDir(){ - return new File(outputFolder.getText()); + public TextAdapter getOutputFolder() { + return outputFolder; } public JButton getSelectOutputFolder() { return selectOutputFolder; } - - public void setOutputFolder(String folder) { - this.outputFolder.setText(folder); - } } http://git-wip-us.apache.org/repos/asf/cayenne/blob/0e19c961/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabController.java ---------------------------------------------------------------------- diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabController.java index fc3f567..53000da 100644 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabController.java +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabController.java @@ -20,7 +20,6 @@ package org.apache.cayenne.modeler.editor.cgen; import org.apache.cayenne.gen.ClassGenerationAction; -import org.apache.cayenne.map.DataMap; import org.apache.cayenne.modeler.util.CayenneController; import org.apache.cayenne.pref.PreferenceDetail; @@ -43,10 +42,6 @@ public class GeneratorTabController extends CayenneController { this.view = new GeneratorTabPanel(customModeController.getView()); } - public void startup(DataMap dataMap){ -// customModeController.startup(dataMap); - } - public Component getView() { return view; } http://git-wip-us.apache.org/repos/asf/cayenne/blob/0e19c961/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabPanel.java ---------------------------------------------------------------------- diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabPanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabPanel.java index 40249f4..4082f36 100644 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabPanel.java +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabPanel.java @@ -23,6 +23,7 @@ import javax.swing.*; import java.awt.*; /** + * @since 4.1 */ public class GeneratorTabPanel extends JPanel { http://git-wip-us.apache.org/repos/asf/cayenne/blob/0e19c961/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/ComboBoxAdapter.java ---------------------------------------------------------------------- diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/ComboBoxAdapter.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/ComboBoxAdapter.java new file mode 100644 index 0000000..2a7fd79 --- /dev/null +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/ComboBoxAdapter.java @@ -0,0 +1,72 @@ +/***************************************************************** + * 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.util; + +import org.apache.cayenne.modeler.undo.JComboBoxUndoListener; +import org.apache.cayenne.validation.ValidationException; + +import javax.swing.*; +import java.awt.event.ActionListener; + +/** + * @since 4.1 + */ +public abstract class ComboBoxAdapter { + + private JComboBox comboBox; + private ActionListener listener; + + private JComboBoxUndoListener undoListener; + + protected ComboBoxAdapter(JComboBox comboBox) { + this.comboBox = comboBox; + listener = e -> updateModel(); + + undoListener = new JComboBoxUndoListener(); + + comboBox.addActionListener(listener); + comboBox.addItemListener(undoListener); + } + + public void setItem(Object item) { + comboBox.removeActionListener(listener); + comboBox.removeItemListener(undoListener); + + try{ + comboBox.setSelectedItem(item); + } + finally { + comboBox.addActionListener(listener); + comboBox.addItemListener(undoListener); + } + } + + public JComboBox getComboBox() { + return comboBox; + } + + /** + * Updates bound model with document text. + */ + protected abstract void updateModel(Object item) throws ValidationException; + + public void updateModel() { + updateModel(comboBox.getSelectedItem()); + } +}