You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by nt...@apache.org on 2018/11/14 14:27:37 UTC
[06/32] cayenne git commit: Create global cgen config
Create global cgen config
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/e41f1e44
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/e41f1e44
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/e41f1e44
Branch: refs/heads/master
Commit: e41f1e44e801ff80640983fa621c84f0049a1113
Parents: 0e19c96
Author: Arseni Bulatski <an...@gmail.com>
Authored: Fri Jun 22 15:56:59 2018 +0300
Committer: Arseni Bulatski <an...@gmail.com>
Committed: Wed Oct 24 13:41:41 2018 +0300
----------------------------------------------------------------------
.../cayenne/gen/ClassGenerationAction.java | 12 +-
.../cayenne/tools/CayenneGeneratorMojo.java | 4 +-
.../cayenne/modeler/action/CgenAction.java | 54 ++--
.../modeler/dialog/codegen/cgen/CgenDialog.java | 44 +++
.../codegen/cgen/CgenGlobalController.java | 47 +++
.../dialog/codegen/cgen/CgenGlobalPanel.java | 274 ++++++++++++++++++
.../codegen/cgen/CgenGlobalPanelController.java | 285 +++++++++++++++++++
.../editor/cgen/CodeGeneratorController.java | 1 +
.../modeler/editor/cgen/CustomModePanel.java | 2 +-
9 files changed, 687 insertions(+), 36 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cayenne/blob/e41f1e44/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 f56f81e..5b10a07 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
@@ -219,16 +219,18 @@ public class ClassGenerationAction implements Serializable, XMLSerializable {
artifact.postInitContext(context);
}
+ public void prepareArtifacts() {
+ resetArtifacts();
+ addAllEntities();
+ addAllEmbeddables();
+ addQueries(dataMap.getQueryDescriptors());
+ }
+
/**
* Executes class generation once per each artifact.
*/
public void execute() throws Exception {
- resetArtifacts();
- addAllEntities();
- addAllEmbeddables();
- addQueries(dataMap.getQueryDescriptors());
-
validateAttributes();
try {
http://git-wip-us.apache.org/repos/asf/cayenne/blob/e41f1e44/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 10cd860..d043c30 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
@@ -26,13 +26,13 @@ import org.apache.cayenne.di.Injector;
import org.apache.cayenne.gen.ClassGenerationAction;
import org.apache.cayenne.gen.ClientClassGenerationAction;
import org.apache.cayenne.map.DataMap;
-import org.slf4j.Logger;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.plugins.annotations.LifecyclePhase;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
+import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
@@ -288,7 +288,7 @@ public class CayenneGeneratorMojo extends AbstractMojo {
action.setEmbeddableSuperTemplate(embeddableSuperTemplate);
action.setEmbeddableTemplate(embeddableTemplate);
action.setUsePkgPath(usePkgPath);
- action.setCreatePropertyNames(createPropertyNames);
+ action.setCreatePropertyNames(createPropertyNames);
action.setCreatePKProperties(createPKProperties);
return action;
http://git-wip-us.apache.org/repos/asf/cayenne/blob/e41f1e44/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CgenAction.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CgenAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CgenAction.java
index 2cd3012..b197991 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CgenAction.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CgenAction.java
@@ -1,18 +1,12 @@
package org.apache.cayenne.modeler.action;
-import org.apache.cayenne.configuration.DataChannelDescriptor;
-import org.apache.cayenne.configuration.xml.DataChannelMetaData;
-import org.apache.cayenne.gen.ClassGenerationAction;
-import org.apache.cayenne.map.DataMap;
import org.apache.cayenne.modeler.Application;
+import org.apache.cayenne.modeler.dialog.codegen.cgen.CgenGlobalController;
import org.apache.cayenne.modeler.util.CayenneAction;
-import org.apache.cayenne.project.Project;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import javax.swing.*;
import java.awt.event.ActionEvent;
-import java.util.Collection;
public class CgenAction extends CayenneAction{
@@ -28,26 +22,30 @@ public class CgenAction extends CayenneAction{
@Override
public void performAction(ActionEvent e) {
- Collection<DataMap> dataMaps;
- DataChannelMetaData metaData = getApplication().getMetaData();
-
- try {
- Project project = getProjectController().getProject();
- dataMaps = ((DataChannelDescriptor) project.getRootNode()).getDataMaps();
- for (DataMap dataMap : dataMaps) {
- ClassGenerationAction classGenerationAction = metaData.get(dataMap, ClassGenerationAction.class);
- if (classGenerationAction != null) {
- classGenerationAction.execute();
- }
- }
- JOptionPane.showMessageDialog(
- this.getApplication().getFrameController().getView(),
- "Class generation finished");
- } catch (Exception ex) {
- logObj.error("Error generating classes", e);
- JOptionPane.showMessageDialog(
- this.getApplication().getFrameController().getView(),
- "Error generating classes - " + ex.getMessage());
- }
+
+ new CgenGlobalController(getApplication().getFrameController()).startup();
+
+// Collection<DataMap> dataMaps;
+// DataChannelMetaData metaData = getApplication().getMetaData();
+//
+// try {
+// Project project = getProjectController().getProject();
+// dataMaps = ((DataChannelDescriptor) project.getRootNode()).getDataMaps();
+// for (DataMap dataMap : dataMaps) {
+// ClassGenerationAction classGenerationAction = metaData.get(dataMap, ClassGenerationAction.class);
+// if (classGenerationAction != null) {
+// classGenerationAction.prepareArtifacts();
+// classGenerationAction.execute();
+// }
+// }
+// JOptionPane.showMessageDialog(
+// this.getApplication().getFrameController().getView(),
+// "Class generation finished");
+// } catch (Exception ex) {
+// logObj.error("Error generating classes", e);
+// JOptionPane.showMessageDialog(
+// this.getApplication().getFrameController().getView(),
+// "Error generating classes - " + ex.getMessage());
+// }
}
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/e41f1e44/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/cgen/CgenDialog.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/cgen/CgenDialog.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/cgen/CgenDialog.java
new file mode 100644
index 0000000..9db205b
--- /dev/null
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/cgen/CgenDialog.java
@@ -0,0 +1,44 @@
+package org.apache.cayenne.modeler.dialog.codegen.cgen;
+
+import org.apache.cayenne.modeler.Application;
+import org.apache.cayenne.swing.components.TopBorder;
+
+import javax.swing.*;
+import java.awt.*;
+
+public class CgenDialog extends JDialog {
+
+ protected JPanel panel;
+ protected JButton cancelButton;
+
+ public CgenDialog(Component generatorPanel) {
+ super(Application.getFrame());
+
+ this.panel = new JPanel();
+ this.panel.setFocusable(false);
+
+ this.cancelButton = new JButton("Cancel");
+ JScrollPane scrollPane = new JScrollPane(
+ generatorPanel,
+ ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
+ ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+ scrollPane.setPreferredSize(new Dimension(900, 550));
+ JPanel buttons = new JPanel(new FlowLayout(FlowLayout.RIGHT));
+ buttons.setBorder(TopBorder.create());
+ buttons.add(Box.createHorizontalStrut(50));
+ buttons.add(cancelButton);
+
+ panel.add(scrollPane);
+
+ Container contentPane = getContentPane();
+ contentPane.setLayout(new BorderLayout());
+ contentPane.add(panel, BorderLayout.CENTER);
+ contentPane.add(buttons, BorderLayout.SOUTH);
+
+ setTitle("Cgen Global Config");
+ }
+
+ public JButton getCancelButton() {
+ return cancelButton;
+ }
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/e41f1e44/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/cgen/CgenGlobalController.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/cgen/CgenGlobalController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/cgen/CgenGlobalController.java
new file mode 100644
index 0000000..4b88697
--- /dev/null
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/cgen/CgenGlobalController.java
@@ -0,0 +1,47 @@
+package org.apache.cayenne.modeler.dialog.codegen.cgen;
+
+import org.apache.cayenne.modeler.util.CayenneController;
+import org.apache.cayenne.swing.BindingBuilder;
+
+import java.awt.*;
+
+public class CgenGlobalController extends CayenneController{
+
+ protected CgenDialog view;
+
+ protected CgenGlobalPanelController globalPanelController;
+
+ public CgenGlobalController(CayenneController parent){
+ super(parent);
+
+ globalPanelController = new CgenGlobalPanelController(this);
+ }
+
+ public void startup(){
+ this.view = new CgenDialog(globalPanelController.getView());
+ initBindings();
+
+ view.pack();
+ view.setModal(true);
+ centerView();
+ makeCloseableOnEscape();
+ view.setVisible(true);
+ }
+
+ protected void initBindings() {
+ BindingBuilder builder = new BindingBuilder(
+ getApplication().getBindingFactory(),
+ this);
+
+ builder.bindToAction(view.getCancelButton(), "cancelAction()");
+ }
+
+ public void cancelAction() {
+ view.dispose();
+ }
+
+ @Override
+ public Component getView() {
+ return view;
+ }
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/e41f1e44/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/cgen/CgenGlobalPanel.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/cgen/CgenGlobalPanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/cgen/CgenGlobalPanel.java
new file mode 100644
index 0000000..3c9b68a
--- /dev/null
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/cgen/CgenGlobalPanel.java
@@ -0,0 +1,274 @@
+package org.apache.cayenne.modeler.dialog.codegen.cgen;
+
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+import com.jgoodies.forms.layout.FormLayout;
+import org.apache.cayenne.modeler.ProjectController;
+
+import javax.swing.*;
+import java.awt.*;
+
+public class CgenGlobalPanel extends JPanel {
+
+ private JButton generateButton;
+
+ private JTextField outputFolder;
+ private JButton selectOutputFolder;
+ private JComboBox generationMode;
+ private JComboBox subclassTemplate;
+ private JComboBox superclassTemplate;
+ private JComboBox embeddableTemplate;
+ private JComboBox embeddableSuperTemplate;
+ private JComboBox dataMapTemplate;
+ private JComboBox dataMapSuperTemplate;
+ private JCheckBox pairs;
+ private JCheckBox overwrite;
+ private JCheckBox usePackagePath;
+ private JTextField outputPattern;
+ private JCheckBox createPropertyNames;
+ private JTextField superclassPackage;
+ private JTextField encoding;
+
+ private JButton resetFolder;
+ private JButton resetMode;
+ private JButton resetDataMapTemplate;
+ private JButton resetDataMapSuperTemplate;
+ private JButton resetTemplate;
+ private JButton resetSuperTemplate;
+ private JButton resetEmbeddableTemplate;
+ private JButton resetEmbeddableSuperTemplate;
+ private JButton resetPattern;
+ private JButton resetEncoding;
+ private JButton resetPairs;
+ private JButton resetPath;
+ private JButton resetOverwrite;
+ private JButton resetNames;
+ private JButton resetPackage;
+
+ private ProjectController projectController;
+
+ CgenGlobalPanel(ProjectController projectController) {
+ this.projectController = projectController;
+
+ this.generateButton = new JButton("Generate All classes");
+ this.outputFolder = new JTextField();
+ this.selectOutputFolder = new JButton("Select");
+ this.generationMode = new JComboBox();
+ this.subclassTemplate = new JComboBox();
+ this.superclassTemplate = new JComboBox();
+ this.embeddableTemplate = new JComboBox();
+ this.embeddableSuperTemplate = new JComboBox();
+ this.dataMapTemplate = new JComboBox();
+ this.dataMapSuperTemplate = new JComboBox();
+ this.pairs = new JCheckBox();
+ this.overwrite = new JCheckBox();
+ this.usePackagePath = new JCheckBox();
+ this.outputPattern = new JTextField();
+ this.createPropertyNames = new JCheckBox();
+ this.encoding = new JTextField();
+ this.superclassPackage = new JTextField();
+
+ // assemble
+ FormLayout layout = new FormLayout(
+ "right:100dlu, 3dlu, fill:50:grow, 6dlu, fill:70dlu, 3dlu", "");
+ DefaultFormBuilder builder = new DefaultFormBuilder(layout);
+ builder.setDefaultDialogBorder();
+
+ builder.append("Generate Classes for dataMaps", generateButton);
+ builder.nextLine();
+
+ builder.appendSeparator();
+
+ resetFolder = new JButton("Reset Folder");
+ builder.append("Output Directory:", outputFolder, selectOutputFolder);
+ builder.nextLine();
+ builder.append(resetFolder);
+ builder.nextLine();
+ resetMode = new JButton("Reset Mode");
+ builder.append("Generation Mode:", generationMode, resetMode);
+ builder.nextLine();
+
+ resetDataMapTemplate = new JButton("Reset Template");
+ builder.append("DataMap Template:", dataMapTemplate, resetDataMapTemplate);
+ builder.nextLine();
+
+ resetDataMapSuperTemplate = new JButton("Reset Template");
+ builder.append("DataMap Superclass Template", dataMapSuperTemplate, resetDataMapSuperTemplate);
+ builder.nextLine();
+
+ resetTemplate = new JButton("Reset Template");
+ builder.append("Subclass Template:", subclassTemplate, resetTemplate);
+ builder.nextLine();
+
+ resetSuperTemplate = new JButton("Reset Template");
+ builder.append("Superclass Template:", superclassTemplate, resetSuperTemplate);
+ builder.nextLine();
+
+ resetEmbeddableTemplate = new JButton("Reset Template");
+ builder.append("Embeddable Template", embeddableTemplate, resetEmbeddableTemplate);
+ builder.nextLine();
+
+ resetEmbeddableSuperTemplate = new JButton("Reset Template");
+ builder.append("Embeddable Super Template", embeddableSuperTemplate, resetEmbeddableSuperTemplate);
+ builder.nextLine();
+
+ resetPattern = new JButton("Reset pattern");
+ builder.append("Output Pattern:", outputPattern, resetPattern);
+ builder.nextLine();
+
+ resetEncoding = new JButton("Reset encoding");
+ builder.append("Encoding", encoding, resetEncoding);
+ builder.nextLine();
+
+ resetPairs = new JButton("Reset pairs");
+ builder.append("Make Pairs:", pairs, resetPairs);
+ builder.nextLine();
+
+ resetPath = new JButton("Reset path");
+ builder.append("Use Package Path:", usePackagePath, resetPath);
+ builder.nextLine();
+
+ resetOverwrite = new JButton("Reset overwrite");
+ builder.append("Overwrite Subclasses:", overwrite, resetOverwrite);
+ builder.nextLine();
+
+ resetNames = new JButton("Reset Names");
+ builder.append("Create Property Names:", createPropertyNames, resetNames);
+ builder.nextLine();
+
+ resetPackage = new JButton("Reset Package");
+ builder.append("Superclass package", superclassPackage, resetPackage);
+
+ setLayout(new BorderLayout());
+ add(builder.getPanel(), BorderLayout.CENTER);
+
+ add(builder.getPanel(), BorderLayout.CENTER);
+ }
+
+ public JButton getGenerateButton() {
+ return generateButton;
+ }
+
+ public JTextField getOutputFolder() {
+ return outputFolder;
+ }
+
+ public JButton getSelectOutputFolder() {
+ return selectOutputFolder;
+ }
+
+ public JComboBox getGenerationMode() {
+ return generationMode;
+ }
+
+ public JComboBox getSubclassTemplate() {
+ return subclassTemplate;
+ }
+
+ public JComboBox getSuperclassTemplate() {
+ return superclassTemplate;
+ }
+
+ public JComboBox getEmbeddableTemplate() {
+ return embeddableTemplate;
+ }
+
+ public JComboBox getEmbeddableSuperTemplate() {
+ return embeddableSuperTemplate;
+ }
+
+ public JComboBox getDataMapTemplate() {
+ return dataMapTemplate;
+ }
+
+ public JComboBox getDataMapSuperTemplate() {
+ return dataMapSuperTemplate;
+ }
+
+ public JCheckBox getPairs() {
+ return pairs;
+ }
+
+ public JCheckBox getOverwrite() {
+ return overwrite;
+ }
+
+ public JCheckBox getUsePackagePath() {
+ return usePackagePath;
+ }
+
+ public JTextField getOutputPattern() {
+ return outputPattern;
+ }
+
+ public JCheckBox getCreatePropertyNames() {
+ return createPropertyNames;
+ }
+
+ public JTextField getSuperclassPackage() {
+ return superclassPackage;
+ }
+
+ public JTextField getEncoding() {
+ return encoding;
+ }
+
+ public JButton getResetFolder() {
+ return resetFolder;
+ }
+
+ public JButton getResetMode() {
+ return resetMode;
+ }
+
+ public JButton getResetDataMapTemplate() {
+ return resetDataMapTemplate;
+ }
+
+ public JButton getResetDataMapSuperTemplate() {
+ return resetDataMapSuperTemplate;
+ }
+
+ public JButton getResetTemplate() {
+ return resetTemplate;
+ }
+
+ public JButton getResetSuperTemplate() {
+ return resetSuperTemplate;
+ }
+
+ public JButton getResetEmbeddableTemplate() {
+ return resetEmbeddableTemplate;
+ }
+
+ public JButton getResetEmbeddableSuperTemplate() {
+ return resetEmbeddableSuperTemplate;
+ }
+
+ public JButton getResetPattern() {
+ return resetPattern;
+ }
+
+ public JButton getResetEncoding() {
+ return resetEncoding;
+ }
+
+ public JButton getResetPairs() {
+ return resetPairs;
+ }
+
+ public JButton getResetPath() {
+ return resetPath;
+ }
+
+ public JButton getResetOverwrite() {
+ return resetOverwrite;
+ }
+
+ public JButton getResetNames() {
+ return resetNames;
+ }
+
+ public JButton getResetPackage() {
+ return resetPackage;
+ }
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/e41f1e44/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/cgen/CgenGlobalPanelController.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/cgen/CgenGlobalPanelController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/cgen/CgenGlobalPanelController.java
new file mode 100644
index 0000000..b07bdd2
--- /dev/null
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/cgen/CgenGlobalPanelController.java
@@ -0,0 +1,285 @@
+package org.apache.cayenne.modeler.dialog.codegen.cgen;
+
+import org.apache.cayenne.configuration.DataChannelDescriptor;
+import org.apache.cayenne.configuration.xml.DataChannelMetaData;
+import org.apache.cayenne.gen.ClassGenerationAction;
+import org.apache.cayenne.map.DataMap;
+import org.apache.cayenne.modeler.Application;
+import org.apache.cayenne.modeler.CodeTemplateManager;
+import org.apache.cayenne.modeler.ProjectController;
+import org.apache.cayenne.modeler.event.DataMapDisplayEvent;
+import org.apache.cayenne.modeler.pref.FSPath;
+import org.apache.cayenne.modeler.util.CayenneController;
+import org.apache.cayenne.project.Project;
+import org.apache.cayenne.util.Util;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.swing.*;
+import java.awt.*;
+import java.io.File;
+import java.util.*;
+import java.util.List;
+
+public class CgenGlobalPanelController extends CayenneController{
+
+ static final String ALL_MODE_LABEL = "Generate all";
+ static final Map<String, String> modesByLabel = new HashMap<>();
+ // correspond to non-public constants on MapClassGenerator.
+ private static final String MODE_DATAMAP = "datamap";
+ private static final String MODE_ENTITY = "entity";
+ private static final String MODE_ALL = "all";
+ private static final String DATA_MAP_MODE_LABEL = "DataMap generation";
+ private static final String ENTITY_MODE_LABEL = "Entity and Embeddable generation";
+ private static final Map<String, String> labelByMode = new HashMap<>();
+ private static Logger logObj = LoggerFactory.getLogger(CgenGlobalPanelController.class);
+
+ static {
+ modesByLabel.put(DATA_MAP_MODE_LABEL, MODE_DATAMAP);
+ modesByLabel.put(ENTITY_MODE_LABEL, MODE_ENTITY);
+ modesByLabel.put(ALL_MODE_LABEL, MODE_ALL);
+ labelByMode.put(MODE_DATAMAP, DATA_MAP_MODE_LABEL);
+ labelByMode.put(MODE_ENTITY, ENTITY_MODE_LABEL);
+ labelByMode.put(MODE_ALL, ALL_MODE_LABEL);
+ }
+
+ protected CgenGlobalPanel view;
+ private ProjectController projectController;
+
+ private Collection<ClassGenerationAction> generators;
+
+ public CgenGlobalPanelController(CayenneController parent) {
+ super(parent);
+ this.projectController = Application.getInstance().getFrameController().getProjectController();
+
+ this.view = new CgenGlobalPanel(projectController);
+ this.generators = new HashSet<>();
+ initSources();
+
+ updateTemplates();
+ initButtons();
+ }
+
+ private void updateTemplates() {
+ Object[] modeChoices = new Object[]{ENTITY_MODE_LABEL, DATA_MAP_MODE_LABEL, ALL_MODE_LABEL};
+ view.getGenerationMode().setModel(new DefaultComboBoxModel(modeChoices));
+
+ CodeTemplateManager templateManager = getApplication().getCodeTemplateManager();
+
+ java.util.List<String> customTemplates = new ArrayList<>(templateManager.getCustomTemplates().keySet());
+ Collections.sort(customTemplates);
+
+ java.util.List<String> superTemplates = new ArrayList<>(templateManager.getStandardSuperclassTemplates());
+ Collections.sort(superTemplates);
+ superTemplates.addAll(customTemplates);
+
+ java.util.List<String> subTemplates = new ArrayList<>(templateManager.getStandardSubclassTemplates());
+ Collections.sort(subTemplates);
+ subTemplates.addAll(customTemplates);
+
+ java.util.List<String> embeddableTemplates = new ArrayList<>(templateManager.getStandartEmbeddableTemplates());
+ Collections.sort(embeddableTemplates);
+ embeddableTemplates.addAll(customTemplates);
+
+ java.util.List<String> embeddableSuperTemplates = new ArrayList<>(templateManager.getStandartEmbeddableSuperclassTemplates());
+ Collections.sort(embeddableSuperTemplates);
+ embeddableSuperTemplates.addAll(customTemplates);
+
+ java.util.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().setModel(new DefaultComboBoxModel(subTemplates.toArray()));
+ this.view.getSuperclassTemplate().setModel(new DefaultComboBoxModel(superTemplates.toArray()));
+
+ this.view.getEmbeddableTemplate().setModel(new DefaultComboBoxModel(embeddableTemplates.toArray()));
+ this.view.getEmbeddableSuperTemplate().setModel(new DefaultComboBoxModel(embeddableSuperTemplates.toArray()));
+
+ this.view.getDataMapTemplate().setModel(new DefaultComboBoxModel(dataMapTemplates.toArray()));
+ this.view.getDataMapSuperTemplate().setModel(new DefaultComboBoxModel(dataMapSuperTemplates.toArray()));
+
+ this.view.getOutputPattern().setText("*.java");
+ this.view.getPairs().setSelected(true);
+ this.view.getUsePackagePath().setSelected(true);
+
+ this.view.getOutputFolder().setText(System.getProperty("user.home"));
+ }
+
+ private void initSources() {
+ DataChannelMetaData metaData = getApplication().getMetaData();
+ Project project = projectController.getProject();
+ Collection<DataMap> dataMaps = ((DataChannelDescriptor) project.getRootNode()).getDataMaps();
+ for (DataMap dataMap : dataMaps) {
+ ClassGenerationAction classGenerationAction = metaData.get(dataMap, ClassGenerationAction.class);
+ if (classGenerationAction != null) {
+ generators.add(classGenerationAction);
+ }
+ }
+ }
+
+ private void initButtons() {
+ this.view.getSelectOutputFolder().addActionListener(action -> {
+
+ JTextField outputFolder = view.getOutputFolder();
+
+ String currentDir = outputFolder.getText();
+
+ JFileChooser chooser = new JFileChooser();
+ chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
+ chooser.setDialogType(JFileChooser.OPEN_DIALOG);
+
+ // guess start directory
+ if (!Util.isEmptyString(currentDir)) {
+ chooser.setCurrentDirectory(new File(currentDir));
+ } else {
+ FSPath lastDir = Application.getInstance().getFrameController().getLastDirectory();
+ lastDir.updateChooser(chooser);
+ }
+
+ int result = chooser.showOpenDialog(getView());
+ if (result == JFileChooser.APPROVE_OPTION) {
+ File selected = chooser.getSelectedFile();
+
+ // update model
+ String path = selected.getAbsolutePath();
+ view.getOutputFolder().setText(path);
+ }
+ });
+
+ this.view.getGenerateButton().addActionListener(action -> {
+ try {
+ for(ClassGenerationAction generator : generators) {
+ generator.prepareArtifacts();
+ generator.execute();
+ }
+ JOptionPane.showMessageDialog(
+ this.getApplication().getFrameController().getView(),
+ "Class generation finished");
+ } catch (Exception ex) {
+ logObj.error("Error generating classes", ex);
+ JOptionPane.showMessageDialog(
+ this.getApplication().getFrameController().getView(),
+ "Error generating classes - " + ex.getMessage());
+ }
+ });
+
+ this.view.getResetFolder().addActionListener(action ->
+ generators.forEach(val -> {
+ val.setDestDir(new File(view.getOutputFolder().getText()));
+ update(val.getDataMap());
+ projectController.setDirty(true);
+ }));
+
+ this.view.getResetMode().addActionListener(action ->
+ generators.forEach(val -> {
+ val.setArtifactsGenerationMode(modesByLabel.get(String.valueOf(view.getGenerationMode().getSelectedItem())));
+ update(val.getDataMap());
+ projectController.setDirty(true);
+ }));
+
+ this.view.getResetDataMapTemplate().addActionListener(action ->
+ generators.forEach(val -> {
+ val.setQueryTemplate(Application.getInstance().getCodeTemplateManager().getTemplatePath(String.valueOf(view.getDataMapTemplate().getSelectedItem())));
+ update(val.getDataMap());
+ projectController.setDirty(true);
+ }));
+
+ this.view.getResetDataMapSuperTemplate().addActionListener(action ->
+ generators.forEach(val -> {
+ val.setQuerySuperTemplate(Application.getInstance().getCodeTemplateManager().getTemplatePath(String.valueOf(view.getDataMapSuperTemplate().getSelectedItem())));
+ update(val.getDataMap());
+ projectController.setDirty(true);
+ }));
+
+ this.view.getResetTemplate().addActionListener(action ->
+ generators.forEach(val -> {
+ val.setTemplate(Application.getInstance().getCodeTemplateManager().getTemplatePath(String.valueOf(view.getSubclassTemplate().getSelectedItem())));
+ update(val.getDataMap());
+ projectController.setDirty(true);
+ }));
+
+ this.view.getResetSuperTemplate().addActionListener(action ->
+ generators.forEach(val -> {
+ val.setSuperTemplate(Application.getInstance().getCodeTemplateManager().getTemplatePath(String.valueOf(view.getSuperclassTemplate().getSelectedItem())));
+ update(val.getDataMap());
+ projectController.setDirty(true);
+ }));
+
+ this.view.getResetEmbeddableTemplate().addActionListener(action ->
+ generators.forEach(val -> {
+ val.setEmbeddableTemplate(Application.getInstance().getCodeTemplateManager().getTemplatePath(String.valueOf(view.getEmbeddableTemplate().getSelectedItem())));
+ update(val.getDataMap());
+ projectController.setDirty(true);
+ }));
+
+ this.view.getResetEmbeddableSuperTemplate().addActionListener(action ->
+ generators.forEach(val -> {
+ val.setEmbeddableSuperTemplate(Application.getInstance().getCodeTemplateManager().getTemplatePath(String.valueOf(view.getEmbeddableSuperTemplate().getSelectedItem())));
+ update(val.getDataMap());
+ projectController.setDirty(true);
+ }));
+
+ this.view.getResetEncoding().addActionListener(action ->
+ generators.forEach(val -> {
+ val.setEncoding(view.getEncoding().getText());
+ update(val.getDataMap());
+ projectController.setDirty(true);
+ }));
+
+ this.view.getResetPattern().addActionListener(action ->
+ generators.forEach(val -> {
+ val.setOutputPattern(view.getOutputPattern().getText());
+ update(val.getDataMap());
+ projectController.setDirty(true);
+ }));
+
+ this.view.getResetPairs().addActionListener(action ->
+ generators.forEach(val -> {
+ val.setMakePairs(view.getPairs().isSelected());
+ update(val.getDataMap());
+ projectController.setDirty(true);
+ }));
+
+ this.view.getUsePackagePath().addActionListener(action ->
+ generators.forEach(val -> {
+ val.setUsePkgPath(view.getUsePackagePath().isSelected());
+ update(val.getDataMap());
+ projectController.setDirty(true);
+ }));
+
+ this.view.getResetOverwrite().addActionListener(action ->
+ generators.forEach(val -> {
+ val.setUsePkgPath(view.getUsePackagePath().isSelected());
+ update(val.getDataMap());
+ projectController.setDirty(true);
+ }));
+
+ this.view.getResetNames().addActionListener(action ->
+ generators.forEach(val -> {
+ val.setCreatePropertyNames(view.getCreatePropertyNames().isSelected());
+ update(val.getDataMap());
+ projectController.setDirty(true);
+ }));
+
+ this.view.getResetPackage().addActionListener(action ->
+ generators.forEach(val -> {
+ val.setSuperPkg(view.getSuperclassPackage().getText());
+ update(val.getDataMap());
+ projectController.setDirty(true);
+ }));
+ }
+
+ private void update(DataMap dataMap) {
+ projectController.fireDataMapDisplayEvent(new DataMapDisplayEvent(this, dataMap, (DataChannelDescriptor)projectController.getProject().getRootNode()));
+
+ }
+
+ @Override
+ public Component getView() {
+ return view;
+ }
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/e41f1e44/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 64a15fa..2ee1034 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
@@ -131,6 +131,7 @@ public class CodeGeneratorController extends CodeGeneratorControllerBase {
ClassGenerationAction generator = generatorSelector.getGenerator();
if (generator != null) {
try {
+ generator.prepareArtifacts();
generator.execute();
JOptionPane.showMessageDialog(
getView(),
http://git-wip-us.apache.org/repos/asf/cayenne/blob/e41f1e44/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 bfadc8a..ca4b50f 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
@@ -41,7 +41,7 @@ public class CustomModePanel extends GeneratorControllerPanel {
private ComboBoxAdapter embeddableSuperTemplate;
private ComboBoxAdapter dataMapTemplate;
private ComboBoxAdapter dataMapSuperTemplate;
- protected JCheckBox pairs;
+ private JCheckBox pairs;
private JCheckBox overwrite;
private JCheckBox usePackagePath;
private TextAdapter outputPattern;