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:43 UTC
[12/32] cayenne git commit: Add cgen tab.
http://git-wip-us.apache.org/repos/asf/cayenne/blob/6a43436a/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
deleted file mode 100644
index 9242f21..0000000
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/cgen/CgenGlobalController.java
+++ /dev/null
@@ -1,68 +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.dialog.codegen.cgen;
-
-import org.apache.cayenne.modeler.util.CayenneController;
-import org.apache.cayenne.swing.BindingBuilder;
-
-import java.awt.Component;
-
-/**
- * @since 4.1
- */
-public class CgenGlobalController extends CayenneController{
-
- protected CgenDialog view;
-
- private 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/6a43436a/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
deleted file mode 100644
index c234d70..0000000
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/cgen/CgenGlobalPanel.java
+++ /dev/null
@@ -1,293 +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.dialog.codegen.cgen;
-
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-import com.jgoodies.forms.layout.FormLayout;
-import org.apache.cayenne.modeler.ProjectController;
-
-import javax.swing.JButton;
-import javax.swing.JCheckBox;
-import javax.swing.JComboBox;
-import javax.swing.JPanel;
-import javax.swing.JTextField;
-import java.awt.BorderLayout;
-
-/**
- * @since 4.1
- */
-public class CgenGlobalPanel extends JPanel {
-
- private JButton generateButton;
-
- private JTextField outputFolder;
- private JButton selectOutputFolder;
- private JComboBox<String> generationMode;
- private JComboBox<String> subclassTemplate;
- private JComboBox<String> superclassTemplate;
- private JComboBox<String> embeddableTemplate;
- private JComboBox<String> embeddableSuperTemplate;
- private JComboBox<String> dataMapTemplate;
- private JComboBox<String> 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;
-
- CgenGlobalPanel(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<String> getGenerationMode() { return generationMode; }
-
- public JComboBox<String> getSubclassTemplate() {
- return subclassTemplate;
- }
-
- public JComboBox<String> getSuperclassTemplate() {
- return superclassTemplate;
- }
-
- public JComboBox<String> getEmbeddableTemplate() {
- return embeddableTemplate;
- }
-
- public JComboBox<String> getEmbeddableSuperTemplate() {
- return embeddableSuperTemplate;
- }
-
- public JComboBox<String> getDataMapTemplate() {
- return dataMapTemplate;
- }
-
- public JComboBox<String> 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/6a43436a/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
deleted file mode 100644
index f694b73..0000000
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/cgen/CgenGlobalPanelController.java
+++ /dev/null
@@ -1,306 +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.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;
-
-/**
- * @since 4.1
- */
-public class CgenGlobalPanelController extends CayenneController{
-
- private static final String ALL_MODE_LABEL = "Generate all";
- private 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;
-
- 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() {
- String[] modeChoices = new String[]{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(new String[0])));
- this.view.getSuperclassTemplate().setModel(new DefaultComboBoxModel<>(superTemplates.toArray(new String[0])));
-
- this.view.getEmbeddableTemplate().setModel(new DefaultComboBoxModel<>(embeddableTemplates.toArray(new String[0])));
- this.view.getEmbeddableSuperTemplate().setModel(new DefaultComboBoxModel<>(embeddableSuperTemplates.toArray(new String[0])));
-
- this.view.getDataMapTemplate().setModel(new DefaultComboBoxModel<>(dataMapTemplates.toArray(new String[0])));
- this.view.getDataMapSuperTemplate().setModel(new DefaultComboBoxModel<>(dataMapSuperTemplates.toArray(new String[0])));
-
- 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/6a43436a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/DataMapTabbedView.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/DataMapTabbedView.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/DataMapTabbedView.java
index 770c713..388e087 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/DataMapTabbedView.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/DataMapTabbedView.java
@@ -23,8 +23,7 @@ import org.apache.cayenne.modeler.ProjectController;
import org.apache.cayenne.modeler.editor.cgen.CodeGeneratorController;
import org.apache.cayenne.modeler.editor.dbimport.DbImportView;
-import javax.swing.JScrollPane;
-import javax.swing.JTabbedPane;
+import javax.swing.*;
/**
@@ -33,6 +32,7 @@ import javax.swing.JTabbedPane;
*/
public class DataMapTabbedView extends JTabbedPane {
ProjectController mediator;
+ private CodeGeneratorController codeGeneratorController;
/**
* constructor
@@ -41,7 +41,6 @@ public class DataMapTabbedView extends JTabbedPane {
*/
public DataMapTabbedView(ProjectController mediator) {
this.mediator = mediator;
-
initView();
}
@@ -57,11 +56,27 @@ public class DataMapTabbedView extends JTabbedPane {
// must be wrapped in a scroll pane
JScrollPane dataMapView = new JScrollPane(new DataMapView(mediator));
JScrollPane dbImportView = new JScrollPane(new DbImportView(mediator));
- CodeGeneratorController codeGeneratorController = new CodeGeneratorController(Application.getInstance().getFrameController(), mediator);
+ this.codeGeneratorController = new CodeGeneratorController(Application.getInstance().getFrameController(), mediator);
JScrollPane cgenView = new JScrollPane(codeGeneratorController.getView());
addTab("DataMap", dataMapView);
addTab("DbImport", dbImportView);
- addTab("Cgen", cgenView);
+ addTab("Class Generation", cgenView);
+
+ addChangeListener(tab -> {
+ if(isCgenTabActive()) {
+ codeGeneratorController.startup(mediator.getCurrentDataMap());
+ }
+ });
+ mediator.addDataMapDisplayListener(e -> {
+ if(isCgenTabActive()) {
+ fireStateChanged();
+ }
+ });
}
+
+ private boolean isCgenTabActive() {
+ return getSelectedIndex() == 2;
+ }
+
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/6a43436a/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 a83ef3d..cfa6a57 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
@@ -25,13 +25,11 @@ import org.apache.cayenne.swing.ImageRendererColumn;
import org.apache.cayenne.swing.ObjectBinding;
import org.apache.cayenne.swing.TableBindingBuilder;
-import javax.swing.JLabel;
-import java.awt.Component;
+import javax.swing.*;
+import java.awt.*;
public class ClassesTabController extends CayenneController {
- public static final String GENERATE_PROPERTY = "generate";
-
protected ClassesTabPanel view;
protected ObjectBinding tableBinding;
@@ -48,6 +46,7 @@ public class ClassesTabController extends CayenneController {
public void startup(){
initBindings();
+ classSelectedAction();
}
protected CodeGeneratorControllerBase getParentController() {
@@ -98,9 +97,11 @@ public class ClassesTabController extends CayenneController {
* A callback action that updates the state of Select All checkbox.
*/
public void classSelectedAction() {
- int selectedCount = getParentController().getSelectedEntitiesSize() + getParentController().getSelectedEmbeddablesSize() ;
+ int selectedCount = getParentController().getSelectedEntitiesSize()
+ + getParentController().getSelectedEmbeddablesSize()
+ + (getParentController().isDataMapSelected() ? 1 : 0);
- if (selectedCount == 0) {
+ if (selectedCount < getParentController().getClasses().size()) {
view.getCheckAll().setSelected(false);
}
else if (selectedCount == getParentController().getClasses().size()) {
http://git-wip-us.apache.org/repos/asf/cayenne/blob/6a43436a/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 7b5776c..403058f 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
@@ -19,16 +19,8 @@
package org.apache.cayenne.modeler.editor.cgen;
-import javax.swing.JCheckBox;
-import javax.swing.JLabel;
-import javax.swing.JPanel;
-import javax.swing.JScrollPane;
-import javax.swing.JTable;
-import javax.swing.ScrollPaneConstants;
-import javax.swing.UIManager;
-import java.awt.BorderLayout;
-import java.awt.Dimension;
-import java.awt.FlowLayout;
+import javax.swing.*;
+import java.awt.*;
/**
* @since 4.1
http://git-wip-us.apache.org/repos/asf/cayenne/blob/6a43436a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/ClientModeController.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/ClientModeController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/ClientModeController.java
new file mode 100644
index 0000000..9f217f0
--- /dev/null
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/ClientModeController.java
@@ -0,0 +1,40 @@
+/*****************************************************************
+ * 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.gen.ClassGenerationAction;
+import org.apache.cayenne.gen.ClientClassGenerationAction;
+
+public class ClientModeController extends StandardModeController {
+
+ public ClientModeController(CodeGeneratorControllerBase parent) {
+ super(parent);
+ }
+
+ protected GeneratorControllerPanel createView() {
+ this.view = new StandardModePanel();
+ return view;
+ }
+
+ @Override
+ protected ClassGenerationAction newGenerator() {
+ return new ClientClassGenerationAction();
+ }
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/6a43436a/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 35aa8d6..db6edb4 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
@@ -20,6 +20,7 @@
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.dialog.ErrorDebugDialog;
import org.apache.cayenne.modeler.util.CayenneController;
@@ -27,8 +28,9 @@ import org.apache.cayenne.swing.BindingBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import javax.swing.JOptionPane;
-import java.awt.Component;
+import javax.swing.*;
+import java.awt.*;
+import java.util.Collections;
import java.util.function.Predicate;
/**
@@ -47,22 +49,25 @@ public class CodeGeneratorController extends CodeGeneratorControllerBase {
public CodeGeneratorController(CayenneController parent, ProjectController projectController) {
super(parent, projectController);
- initListeners();
this.classesSelector = new ClassesTabController(this);
this.generatorSelector = new GeneratorTabController(this);
view = new CodeGeneratorPane(generatorSelector.getView(), classesSelector.getView());
initBindings();
+ initListeners();
+ }
+
+ public void startup(DataMap dataMap) {
+ super.startup(dataMap);
+ classesSelectedAction();
+ GeneratorController modeController = generatorSelector.getGeneratorController();
+ ClassGenerationAction classGenerationAction = modeController.createGenerator();
+ modeController.initForm(classGenerationAction);
+ classesSelector.startup();
}
private void initListeners(){
- projectController.addDataMapDisplayListener(e -> {
- super.startup(e.getDataMap());
- classesSelector.startup();
-
- GeneratorController modeController = generatorSelector.getGeneratorController();
- ClassGenerationAction classGenerationAction = modeController.createGenerator();
- ((CustomModeController)modeController).initForm(classGenerationAction);
- });
+ projectController.addObjEntityDisplayListener(e -> super.addToSelectedEntities(e.getEntity().getDataMap(), Collections.singleton(e.getEntity().getName())));
+ projectController.addEmbeddableDisplayListener(e -> super.addToSelectedEmbeddables(e.getEmbeddable().getDataMap(), Collections.singleton(e.getEmbeddable().getClassName())));
}
@Override
@@ -75,7 +80,7 @@ public class CodeGeneratorController extends CodeGeneratorControllerBase {
getApplication().getBindingFactory(),
this);
- builder.bindToAction(view.getGenerateButton(), "generateAction()");
+ builder.bindToAction(((GeneratorTabPanel)generatorSelector.getView()).getGenerateButton(), "generateAction()");
builder.bindToAction(this, "classesSelectedAction()", SELECTED_PROPERTY);
builder.bindToAction(generatorSelector, "generatorSelectedAction()",
GeneratorTabController.GENERATOR_PROPERTY);
@@ -120,26 +125,35 @@ public class CodeGeneratorController extends CodeGeneratorControllerBase {
label = label + "One embeddable selected";
}
else {
- label =label + sizeEmb + " embeddables selected";
+ label = label + sizeEmb + " embeddables selected";
}
-
- view.getClassesCount().setText(label);
+
+ label = label.concat("; ");
+
+ if(isDataMapSelected()) {
+ label = label + "DataMap selected";
+ } else {
+ label = label + "No dataMap selected";
+ }
+
+ ((GeneratorTabPanel)generatorSelector.getView()).getClassesCount().setText(label);
projectController.setDirty(true);
}
public void generateAction() {
ClassGenerationAction generator = generatorSelector.getGenerator();
+
if (generator != null) {
try {
generator.prepareArtifacts();
generator.execute();
JOptionPane.showMessageDialog(
- getView(),
+ this.getView(),
"Class generation finished");
} catch (Exception e) {
logObj.error("Error generating classes", e);
JOptionPane.showMessageDialog(
- getView(),
+ this.getView(),
"Error generating classes - " + e.getMessage());
}
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/6a43436a/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 0642fb9..e9c2965 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
@@ -44,35 +44,44 @@ public abstract class CodeGeneratorControllerBase extends CayenneController {
public static final String SELECTED_PROPERTY = "selected";
- protected Collection<DataMap> dataMaps;
-
protected DataMap dataMap;
-
protected ValidationResult validation;
-
protected List<Object> classes;
-
- protected Set<String> selectedEntities;
- protected Set<String> selectedEmbeddables;
-
+ private Set<String> selectedEntities;
+ private Set<String> selectedEmbeddables;
+ private Set<String> isDataMapSelected;
+ private Map<DataMap, Set<String>> selectedEntitiesForDataMap;
+ private Map<DataMap, Set<String>> selectedEmbeddablesForDataMap;
+ private Map<DataMap, Set<String>> selectedDataMaps;
protected transient Object currentClass;
-
protected ProjectController projectController;
public CodeGeneratorControllerBase(CayenneController parent, ProjectController projectController) {
super(parent);
this.projectController = projectController;
this.classes = new ArrayList<>();
-
- this.selectedEntities = new HashSet<>();
- this.selectedEmbeddables = new HashSet<>();
+ this.selectedEntitiesForDataMap = new HashMap<>();
+ this.selectedEmbeddablesForDataMap = new HashMap<>();
+ this.selectedDataMaps = new HashMap<>();
}
public void startup(DataMap dataMap){
this.dataMap = dataMap;
classes.clear();
+ this.classes.add(dataMap);
this.classes.addAll(dataMap.getObjEntities());
this.classes.addAll(dataMap.getEmbeddables());
+
+ initCollectionsForSelection(dataMap);
+ }
+
+ private void initCollectionsForSelection(DataMap dataMap) {
+ selectedEntities = selectedEntitiesForDataMap.compute(dataMap, (key,value) ->
+ value == null ? new HashSet<>() : value);
+ selectedEmbeddables = selectedEmbeddablesForDataMap.compute(dataMap, (key, value) ->
+ value == null ? new HashSet<>() : value);
+ isDataMapSelected = selectedDataMaps.compute(dataMap, (key, value) ->
+ value == null ? new HashSet<>() : value);
}
public List<Object> getClasses() {
@@ -104,7 +113,6 @@ public abstract class CodeGeneratorControllerBase extends CayenneController {
}
public boolean updateSelection(Predicate<Object> predicate) {
-
boolean modified = false;
for (Object classObj : classes) {
@@ -112,25 +120,35 @@ public abstract class CodeGeneratorControllerBase extends CayenneController {
if (classObj instanceof ObjEntity) {
if (select) {
- if (selectedEntities.add(((ObjEntity) classObj).getName())) {
+ if(selectedEntities.add(((ObjEntity) classObj).getName())) {
modified = true;
}
}
else {
- if (selectedEntities.remove(((ObjEntity) classObj).getName())) {
+ if(selectedEntities.remove(((ObjEntity) classObj).getName())) {
modified = true;
}
}
}
else if (classObj instanceof Embeddable) {
if (select) {
- if (selectedEmbeddables.add(((Embeddable) classObj).getClassName())) {
+ if(selectedEmbeddables.add(((Embeddable) classObj).getClassName())) {
modified = true;
}
}
else {
- if (selectedEmbeddables
- .remove(((Embeddable) classObj).getClassName())) {
+ if(selectedEmbeddables.remove(((Embeddable) classObj).getClassName())) {
+ modified = true;
+ }
+ }
+ } else if (classObj instanceof DataMap) {
+ updateArtifactGenerationMode(classObj, select);
+ if(select) {
+ if(isDataMapSelected.add(((DataMap) classObj).getName())) {
+ modified = true;
+ }
+ } else {
+ if(isDataMapSelected.remove(((DataMap) classObj).getName())) {
modified = true;
}
}
@@ -208,8 +226,11 @@ public abstract class CodeGeneratorControllerBase extends CayenneController {
return selectedEmbeddables
.contains(((Embeddable) currentClass).getClassName());
}
+ if(currentClass instanceof DataMap) {
+ return isDataMapSelected
+ .contains(((DataMap) currentClass).getName());
+ }
return false;
-
}
public void setSelected(boolean selectedFlag) {
@@ -221,8 +242,7 @@ public abstract class CodeGeneratorControllerBase extends CayenneController {
if (selectedEntities.add(((ObjEntity) currentClass).getName())) {
firePropertyChange(SELECTED_PROPERTY, null, null);
}
- }
- else {
+ } else {
if (selectedEntities.remove(((ObjEntity) currentClass).getName())) {
firePropertyChange(SELECTED_PROPERTY, null, null);
}
@@ -233,14 +253,36 @@ public abstract class CodeGeneratorControllerBase extends CayenneController {
if (selectedEmbeddables.add(((Embeddable) currentClass).getClassName())) {
firePropertyChange(SELECTED_PROPERTY, null, null);
}
- }
- else {
+ } else {
if (selectedEmbeddables
.remove(((Embeddable) currentClass).getClassName())) {
firePropertyChange(SELECTED_PROPERTY, null, null);
}
}
}
+ if(currentClass instanceof DataMap) {
+ updateArtifactGenerationMode(currentClass, selectedFlag);
+ if(selectedFlag) {
+ if(isDataMapSelected.add(dataMap.getName())) {
+ firePropertyChange(SELECTED_PROPERTY, null, null);
+ }
+ } else {
+ if(isDataMapSelected
+ .remove(((DataMap) currentClass).getName())) {
+ firePropertyChange(SELECTED_PROPERTY, null, null);
+ }
+ }
+ }
+ }
+
+ private void updateArtifactGenerationMode(Object classObj, boolean selected) {
+ DataMap dataMap = (DataMap) classObj;
+ ClassGenerationAction generator = projectController.getApplication().getMetaData().get(dataMap, ClassGenerationAction.class);
+ if(selected) {
+ generator.setArtifactsGenerationMode("all");
+ } else {
+ generator.setArtifactsGenerationMode("entity");
+ }
}
public JLabel getItemName(Object obj) {
@@ -249,9 +291,12 @@ public abstract class CodeGeneratorControllerBase extends CayenneController {
if (obj instanceof Embeddable) {
className = ((Embeddable) obj).getClassName();
icon = CellRenderers.iconForObject(new Embeddable());
- } else {
+ } else if(obj instanceof ObjEntity) {
className = ((ObjEntity) obj).getName();
icon = CellRenderers.iconForObject(new ObjEntity());
+ } else {
+ className = ((DataMap) obj).getName();
+ icon = CellRenderers.iconForObject(new DataMap());
}
JLabel labelIcon = new JLabel();
labelIcon.setIcon(icon);
@@ -270,27 +315,36 @@ public abstract class CodeGeneratorControllerBase extends CayenneController {
generator.loadEntity(entity.getName());
}
}
-
for(Embeddable embeddable : getSelectedEmbeddables()) {
generator.loadEmbeddable(embeddable.getClassName());
}
}
}
- public void addToSelectedEntities(Collection<String> entities) {
+ public void addToSelectedEntities(DataMap dataMap, Collection<String> entities) {
+ if(selectedEntities == null) {
+ initCollectionsForSelection(dataMap);
+ }
selectedEntities.addAll(entities);
}
- public void addToSelectedEmbeddables(Collection<String> embeddables) {
+ public void addToSelectedEmbeddables(DataMap dataMap, Collection<String> embeddables) {
+ if(selectedEmbeddables == null) {
+ initCollectionsForSelection(dataMap);
+ }
selectedEmbeddables.addAll(embeddables);
}
public int getSelectedEntitiesSize() {
- return selectedEntities.size();
+ return selectedEntities != null ? selectedEntities.size() : 0;
}
public int getSelectedEmbeddablesSize() {
- return selectedEmbeddables.size();
+ return selectedEmbeddables != null ? selectedEmbeddables.size() : 0;
+ }
+
+ public boolean isDataMapSelected() {
+ return isDataMapSelected != null && isDataMapSelected.size() == 1;
}
public DataMap getDataMap() {
http://git-wip-us.apache.org/repos/asf/cayenne/blob/6a43436a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CodeGeneratorPane.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CodeGeneratorPane.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CodeGeneratorPane.java
index cac063c..859cb2d 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CodeGeneratorPane.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CodeGeneratorPane.java
@@ -19,38 +19,17 @@
package org.apache.cayenne.modeler.editor.cgen;
-import org.apache.cayenne.swing.components.TopBorder;
-
-import javax.swing.Box;
-import javax.swing.JButton;
-import javax.swing.JLabel;
-import javax.swing.JPanel;
-import javax.swing.JScrollPane;
-import javax.swing.JSplitPane;
-import javax.swing.ScrollPaneConstants;
-import java.awt.BorderLayout;
-import java.awt.Component;
-import java.awt.Dimension;
-import java.awt.FlowLayout;
+import javax.swing.*;
+import java.awt.*;
/**
*/
public class CodeGeneratorPane extends JSplitPane {
- protected JSplitPane splitPane;
-
- protected JButton generateButton;
- protected JLabel classesCount;
-
public CodeGeneratorPane(Component generatorPanel, Component entitySelectorPanel) {
super();
- splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
-
- this.generateButton = new JButton("Generate");
- this.classesCount = new JLabel("No classes selected");
- classesCount.setFont(classesCount.getFont().deriveFont(10f));
-
+ JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
JScrollPane scrollPane = new JScrollPane(
generatorPanel,
ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
@@ -61,25 +40,7 @@ public class CodeGeneratorPane extends JSplitPane {
splitPane.setRightComponent(scrollPane);
splitPane.setLeftComponent(entitySelectorPanel);
- JPanel messages = new JPanel(new BorderLayout());
- messages.add(classesCount, BorderLayout.WEST);
-
- JPanel buttons = new JPanel(new FlowLayout(FlowLayout.RIGHT));
- buttons.setBorder(TopBorder.create());
- buttons.add(classesCount);
- buttons.add(Box.createHorizontalStrut(50));
- buttons.add(generateButton);
-
setLayout(new BorderLayout());
add(splitPane, BorderLayout.CENTER);
- add(buttons, BorderLayout.SOUTH);
- }
-
- public JButton getGenerateButton() {
- return generateButton;
- }
-
- public JLabel getClassesCount() {
- return classesCount;
}
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/6a43436a/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 029f92e..6a081a5 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
@@ -26,7 +26,8 @@ import org.apache.cayenne.swing.BindingBuilder;
import javax.swing.*;
import java.awt.*;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
/**
@@ -34,41 +35,21 @@ import java.util.List;
*/
public class CustomModeController extends GeneratorController {
- // 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";
- static final String ALL_MODE_LABEL = "Generate all";
-
- static final Map<String, String> modesByLabel = new HashMap<>();
-
- private static final Map<String, String> labelByMode = new HashMap<>();
-
- 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 CustomModePanel view;
- private ClassGenerationAction classGenerationAction;
-
public CustomModeController(CodeGeneratorControllerBase parent) {
super(parent);
- this.view = new CustomModePanel(parent.getProjectController());
bind();
initListeners();
}
+ @Override
+ protected GeneratorControllerPanel createView() {
+ this.view = new CustomModePanel(getApplication().getFrameController().getProjectController());
+ return view;
+ }
+
private void bind() {
- initBindings(new BindingBuilder(getApplication().getBindingFactory(), this));
BindingBuilder builder = new BindingBuilder(getApplication().getBindingFactory(), this);
builder.bindToAction(view.getManageTemplatesLink(), "popPreferencesAction()");
@@ -76,9 +57,6 @@ public class CustomModeController extends GeneratorController {
}
protected void updateTemplates() {
- String[] modeChoices = new String[]{ENTITY_MODE_LABEL, DATA_MAP_MODE_LABEL, ALL_MODE_LABEL};
- view.getGenerationMode().getComboBox().setModel(new DefaultComboBoxModel<>(modeChoices));
-
CodeTemplateManager templateManager = getApplication().getCodeTemplateManager();
List<String> customTemplates = new ArrayList<>(templateManager.getCustomTemplates().keySet());
@@ -92,30 +70,8 @@ public class CustomModeController extends GeneratorController {
Collections.sort(subTemplates);
subTemplates.addAll(customTemplates);
- List<String> embeddableTemplates = new ArrayList<>(templateManager.getStandartEmbeddableTemplates());
- Collections.sort(embeddableTemplates);
- embeddableTemplates.addAll(customTemplates);
-
- List<String> embeddableSuperTemplates = new ArrayList<>(templateManager.getStandartEmbeddableSuperclassTemplates());
- Collections.sort(embeddableSuperTemplates);
- embeddableSuperTemplates.addAll(customTemplates);
-
- 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(new String[0])));
this.view.getSuperclassTemplate().getComboBox().setModel(new DefaultComboBoxModel<>(superTemplates.toArray(new String[0])));
-
- this.view.getEmbeddableTemplate().getComboBox().setModel(new DefaultComboBoxModel<>(embeddableTemplates.toArray(new String[0])));
- this.view.getEmbeddableSuperTemplate().getComboBox().setModel(new DefaultComboBoxModel<>(embeddableSuperTemplates.toArray(new String[0])));
-
- this.view.getDataMapTemplate().getComboBox().setModel(new DefaultComboBoxModel<>(dataMapTemplates.toArray(new String[0])));
- this.view.getDataMapSuperTemplate().getComboBox().setModel(new DefaultComboBoxModel<>(dataMapSuperTemplates.toArray(new String[0])));
}
public Component getView() {
@@ -129,21 +85,14 @@ public class CustomModeController extends GeneratorController {
}
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
protected ClassGenerationAction newGenerator() {
ClassGenerationAction action = new ClassGenerationAction();
- action.setDefaults();
getApplication().getInjector().injectMembers(action);
return action;
}
@@ -168,19 +117,25 @@ public class CustomModeController extends GeneratorController {
classGenerationAction.setUsePkgPath(view.getUsePackagePath().isSelected());
getParentController().getProjectController().setDirty(true);
});
+
+ view.getPkProperties().addActionListener(val -> {
+ classGenerationAction.setCreatePKProperties(view.getPkProperties().isSelected());
+ getParentController().getProjectController().setDirty(true);
+ });
}
public void initForm(ClassGenerationAction classGenerationAction){
- this.classGenerationAction = classGenerationAction;
- view.getOutputFolder().setText(classGenerationAction.getDir());
- view.setDataMapName(classGenerationAction.getDataMap().getName());
+ super.initForm(classGenerationAction);
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());
+ view.getPkProperties().setSelected(classGenerationAction.isCreatePKProperties());
+ if(classGenerationAction.getArtifactsGenerationMode().equalsIgnoreCase("all")) {
+ ((CodeGeneratorControllerBase)parent).setCurrentClass(classGenerationAction.getDataMap());
+ ((CodeGeneratorControllerBase)parent).setSelected(true);
+ }
updateComboBoxes();
}
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/6a43436a/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 9213a86..a8c0183 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
@@ -29,48 +29,24 @@ import org.apache.cayenne.swing.components.JCayenneCheckBox;
import org.apache.cayenne.swing.control.ActionLink;
import org.apache.cayenne.validation.ValidationException;
-import javax.swing.JCheckBox;
-import javax.swing.JComboBox;
-import javax.swing.JLabel;
-import javax.swing.JPanel;
-import javax.swing.JTextField;
-import java.awt.BorderLayout;
-import java.awt.FlowLayout;
+import javax.swing.*;
+import java.awt.*;
public class CustomModePanel extends GeneratorControllerPanel {
- private ComboBoxAdapter<String> generationMode;
private ComboBoxAdapter<String> subclassTemplate;
private ComboBoxAdapter<String> superclassTemplate;
- private ComboBoxAdapter<String> embeddableTemplate;
- private ComboBoxAdapter<String> embeddableSuperTemplate;
- private ComboBoxAdapter<String> dataMapTemplate;
- private ComboBoxAdapter<String> dataMapSuperTemplate;
private JCheckBox pairs;
private JCheckBox overwrite;
private JCheckBox usePackagePath;
private TextAdapter outputPattern;
private JCheckBox createPropertyNames;
- private TextAdapter superclassPackage;
-
- private TextAdapter encoding;
-
- private JLabel dataMapName;
+ private JCheckBox pkProperties;
private ActionLink manageTemplatesLink;
CustomModePanel(ProjectController projectController) {
super(projectController);
-
- JComboBox<String> modeField = new JComboBox<>();
- this.generationMode = new ComboBoxAdapter<String>(modeField) {
- @Override
- protected void updateModel(String item) throws ValidationException {
- getCgenByDataMap().setArtifactsGenerationMode(CustomModeController.modesByLabel.get(item));
- projectController.setDirty(true);
- }
- };
-
JComboBox<String> superclassField = new JComboBox<>();
this.superclassTemplate = new ComboBoxAdapter<String>(superclassField) {
@Override
@@ -89,24 +65,6 @@ public class CustomModePanel extends GeneratorControllerPanel {
}
};
- JComboBox<String> dataMapField = new JComboBox<>();
- this.dataMapTemplate = new ComboBoxAdapter<String>(dataMapField) {
- @Override
- protected void updateModel(String item) throws ValidationException {
- getCgenByDataMap().setQueryTemplate(Application.getInstance().getCodeTemplateManager().getTemplatePath(String.valueOf(item)));
- projectController.setDirty(true);
- }
- };
-
- JComboBox<String> dataMapSuperField = new JComboBox<>();
- this.dataMapSuperTemplate = new ComboBoxAdapter<String>(dataMapSuperField) {
- @Override
- protected void updateModel(String 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();
@@ -114,52 +72,15 @@ public class CustomModePanel extends GeneratorControllerPanel {
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.pkProperties = new JCayenneCheckBox();
this.manageTemplatesLink = new ActionLink("Customize Templates...");
this.manageTemplatesLink.setFont(manageTemplatesLink.getFont().deriveFont(10f));
- 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<String> embeddableField = new JComboBox<>();
- this.embeddableTemplate = new ComboBoxAdapter<String>(embeddableField) {
- @Override
- protected void updateModel(String item) throws ValidationException {
- getCgenByDataMap().setEmbeddableTemplate(Application.getInstance().getCodeTemplateManager().getTemplatePath(String.valueOf(item)));
- projectController.setDirty(true);
- }
- };
-
- JComboBox<String> embeddableSuperclassField = new JComboBox<>();
- this.embeddableSuperTemplate = new ComboBoxAdapter<String>(embeddableSuperclassField) {
- @Override
- protected void updateModel(String 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 -> {
setDisableSuperComboBoxes(pairs.isSelected());
overwrite.setEnabled(!pairs.isSelected());
@@ -167,40 +88,22 @@ public class CustomModePanel extends GeneratorControllerPanel {
// assemble
FormLayout layout = new FormLayout(
- "right:100dlu, 3dlu, fill:100:grow, 6dlu, fill:50dlu, 3dlu", "");
+ "right:79dlu, 1dlu, fill:300:grow, 1dlu, left:100dlu, 100dlu", "");
DefaultFormBuilder builder = new DefaultFormBuilder(layout);
builder.setDefaultDialogBorder();
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("DataMap Superclass Template", dataMapSuperTemplate.getComboBox());
- builder.nextLine();
-
builder.append("Subclass Template:", subclassTemplate.getComboBox());
builder.nextLine();
builder.append("Superclass Template:", superclassTemplate.getComboBox());
builder.nextLine();
- builder.append("Embeddable Template", embeddableTemplate.getComboBox());
- builder.nextLine();
-
- builder.append("Embeddable Super Template", embeddableSuperTemplate.getComboBox());
- builder.nextLine();
-
builder.append("Output Pattern:", outputPattern.getComponent());
builder.nextLine();
- builder.append("Encoding", encoding.getComponent());
- builder.nextLine();
-
builder.append("Make Pairs:", pairs);
builder.nextLine();
@@ -213,11 +116,9 @@ public class CustomModePanel extends GeneratorControllerPanel {
builder.append("Create Property Names:", createPropertyNames);
builder.nextLine();
- builder.append(dataMapName);
+ builder.append("Create PK properties:", pkProperties);
builder.nextLine();
- builder.append("Superclass package", superclassPackage.getComponent());
-
setLayout(new BorderLayout());
add(builder.getPanel(), BorderLayout.CENTER);
@@ -230,12 +131,6 @@ public class CustomModePanel extends GeneratorControllerPanel {
public void setDisableSuperComboBoxes(boolean val){
superclassTemplate.getComboBox().setEnabled(val);
- embeddableSuperTemplate.getComboBox().setEnabled(val);
- dataMapSuperTemplate.getComboBox().setEnabled(val);
- }
-
- public ComboBoxAdapter<String> getGenerationMode() {
- return generationMode;
}
public ActionLink getManageTemplatesLink() {
@@ -244,18 +139,10 @@ public class CustomModePanel extends GeneratorControllerPanel {
public ComboBoxAdapter<String> getSubclassTemplate() { return subclassTemplate; }
- public ComboBoxAdapter<String> getEmbeddableTemplate() { return embeddableTemplate; }
-
- public ComboBoxAdapter<String> getEmbeddableSuperTemplate() { return embeddableSuperTemplate; }
-
public ComboBoxAdapter<String> getSuperclassTemplate() {
return superclassTemplate;
}
- public ComboBoxAdapter<String> getDataMapTemplate() { return dataMapTemplate; }
-
- public ComboBoxAdapter<String> getDataMapSuperTemplate() { return dataMapSuperTemplate; }
-
public JCheckBox getOverwrite() {
return overwrite;
}
@@ -276,13 +163,7 @@ public class CustomModePanel extends GeneratorControllerPanel {
return createPropertyNames;
}
- public TextAdapter getSuperclassPackage() {
- return superclassPackage;
- }
-
- public TextAdapter getEncoding() { return encoding; }
-
- public void setDataMapName(String mapName){
- dataMapName.setText(mapName);
+ public JCheckBox getPkProperties() {
+ return pkProperties;
}
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/6a43436a/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 7a8b5cb..6b8db21 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
@@ -19,19 +19,11 @@
package org.apache.cayenne.modeler.editor.cgen;
-import org.apache.cayenne.CayenneRuntimeException;
import org.apache.cayenne.gen.ArtifactsGenerationMode;
import org.apache.cayenne.gen.ClassGenerationAction;
-import org.apache.cayenne.map.DataMap;
-import org.apache.cayenne.map.Embeddable;
-import org.apache.cayenne.map.EmbeddableAttribute;
-import org.apache.cayenne.map.EmbeddedAttribute;
-import org.apache.cayenne.map.ObjAttribute;
-import org.apache.cayenne.map.ObjEntity;
-import org.apache.cayenne.map.ObjRelationship;
+import org.apache.cayenne.map.*;
import org.apache.cayenne.modeler.Application;
import org.apache.cayenne.modeler.dialog.pref.GeneralPreferences;
-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;
@@ -43,14 +35,15 @@ import org.apache.cayenne.validation.SimpleValidationFailure;
import org.apache.cayenne.validation.ValidationFailure;
import org.apache.cayenne.validation.ValidationResult;
-import javax.swing.JButton;
-import javax.swing.JFileChooser;
-import javax.swing.JOptionPane;
+import javax.swing.*;
import java.io.File;
-import java.util.Map;
-import java.util.Set;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
import java.util.function.Predicate;
import java.util.prefs.Preferences;
+import java.util.stream.Collectors;
/**
* A mode-specific part of the code generation dialog.
@@ -59,30 +52,13 @@ import java.util.prefs.Preferences;
public abstract class GeneratorController extends CayenneController {
protected String mode = ArtifactsGenerationMode.ENTITY.getLabel();
- protected Map<DataMap, DataMapDefaults> mapPreferences;
- private String outputPath;
+ protected ClassGenerationAction classGenerationAction;
public GeneratorController(CodeGeneratorControllerBase parent) {
super(parent);
- }
- public void setOutputPath(String path) {
- String old = this.outputPath;
- this.outputPath = path;
- if (this.outputPath != null && !this.outputPath.equals(old)) {
- updatePreferences(path);
- }
- }
-
- public void updatePreferences(String path) {
- if (mapPreferences == null)
- return;
- Set<DataMap> keys = mapPreferences.keySet();
- for (DataMap key : keys) {
- mapPreferences
- .get(key)
- .setOutputPath(path);
- }
+ createView();
+ initBindings(new BindingBuilder(getApplication().getBindingFactory(), this));
}
protected void initBindings(BindingBuilder bindingBuilder) {
@@ -94,6 +70,8 @@ public abstract class GeneratorController extends CayenneController {
return (CodeGeneratorControllerBase) getParent();
}
+ protected abstract GeneratorControllerPanel createView();
+
/**
* Creates an appropriate subclass of {@link ClassGenerationAction},
* returning it in an unconfigured state. Configuration is performed by
@@ -101,55 +79,64 @@ public abstract class GeneratorController extends CayenneController {
*/
protected abstract ClassGenerationAction newGenerator();
+ protected void initForm(ClassGenerationAction classGenerationAction) {
+ this.classGenerationAction = classGenerationAction;
+ classGenerationAction.setRootPath(Paths.get(initOutputFolder()));
+ ((GeneratorControllerPanel)getView()).getOutputFolder().setText(classGenerationAction.getDir());
+ }
+
/**
* Creates a class generator for provided selections.
*/
public ClassGenerationAction createGenerator() {
DataMap map = getParentController().getProjectController().getCurrentDataMap();
-
ClassGenerationAction generator = getParentController().projectController.getApplication().getMetaData().get(map, ClassGenerationAction.class);
if(generator != null){
- getParentController().addToSelectedEntities(generator.getEntities());
- getParentController().addToSelectedEmbeddables(generator.getEmbeddables());
+ getParentController().addToSelectedEntities(generator.getDataMap(), generator.getEntities());
+ getParentController().addToSelectedEmbeddables(generator.getDataMap(), generator.getEmbeddables());
return generator;
}
try {
generator = newGenerator();
generator.setDataMap(map);
- initOutputFolder();
- File outputDir = new File(outputPath);
+
+ Path basePath = Paths.get(initOutputFolder());
// no destination folder
- if (outputDir == null) {
+ if (basePath == null) {
JOptionPane.showMessageDialog(this.getView(), "Select directory for source files.");
return null;
}
// no such folder
- if (!outputDir.exists() && !outputDir.mkdirs()) {
- JOptionPane.showMessageDialog(this.getView(), "Can't create directory " + outputDir
- + ". Select a different one.");
- return null;
+ if (!Files.exists(basePath)) {
+ Files.createDirectories(basePath);
}
// not a directory
- if (!outputDir.isDirectory()) {
- JOptionPane.showMessageDialog(this.getView(), outputDir + " is not a valid directory.");
+ if (!Files.isDirectory(basePath)) {
+ JOptionPane.showMessageDialog(this.getView(), basePath + " is not a valid directory.");
return null;
}
- generator.setDestDir(outputDir);
-
+ generator.setRootPath(basePath);
Preferences preferences = application.getPreferencesNode(GeneralPreferences.class, "");
-
if (preferences != null) {
generator.setEncoding(preferences.get(GeneralPreferences.ENCODING_PREFERENCE, null));
}
-
+ getParentController().addToSelectedEntities(map, map.getObjEntities()
+ .stream()
+ .map(Entity::getName)
+ .collect(Collectors.toList()));
+ getParentController().addToSelectedEmbeddables(map, map.getEmbeddables()
+ .stream()
+ .map(Embeddable::getClassName)
+ .collect(Collectors.toList()));
getParentController().projectController.getApplication().getMetaData().add(map, generator);
- } catch (CayenneRuntimeException exception) {
- JOptionPane.showMessageDialog(this.getView(), exception.getUnlabeledMessage());
+ } catch (IOException exception) {
+ JOptionPane.showMessageDialog(this.getView(), "Can't create directory. " +
+ ". Select a different one.");
return null;
}
@@ -202,7 +189,7 @@ public abstract class GeneratorController extends CayenneController {
return null;
}
- protected ValidationFailure validateEmbeddable(Embeddable embeddable) {
+ private ValidationFailure validateEmbeddable(Embeddable embeddable) {
String name = embeddable.getClassName();
@@ -258,7 +245,7 @@ public abstract class GeneratorController extends CayenneController {
}
}
- protected ValidationFailure validateEntity(ObjEntity entity) {
+ private ValidationFailure validateEntity(ObjEntity entity) {
String name = entity.getName();
@@ -288,7 +275,7 @@ public abstract class GeneratorController extends CayenneController {
return null;
}
- protected ValidationFailure validateAttribute(ObjAttribute attribute) {
+ private ValidationFailure validateAttribute(ObjAttribute attribute) {
String name = attribute.getEntity().getName();
@@ -319,7 +306,7 @@ public abstract class GeneratorController extends CayenneController {
return null;
}
- protected ValidationFailure validateEmbeddedAttribute(ObjAttribute attribute) {
+ private ValidationFailure validateEmbeddedAttribute(ObjAttribute attribute) {
String name = attribute.getEntity().getName();
@@ -368,7 +355,7 @@ public abstract class GeneratorController extends CayenneController {
return null;
}
- protected ValidationFailure validateRelationship(ObjRelationship relationship, boolean clientValidation) {
+ private ValidationFailure validateRelationship(ObjRelationship relationship, boolean clientValidation) {
String name = relationship.getSourceEntity().getName();
@@ -417,34 +404,17 @@ public abstract class GeneratorController extends CayenneController {
* Returns a predicate for default entity selection in a given mode.
*/
public Predicate getDefaultClassFilter() {
- final ObjEntity selectedEntity = Application.getInstance().getFrameController().getProjectController()
- .getCurrentObjEntity();
-
- final Embeddable selectedEmbeddable = Application.getInstance().getFrameController().getProjectController()
- .getCurrentEmbeddable();
-
- if (selectedEntity != null) {
- // select a single entity
- final boolean hasProblem = getParentController().getProblem(selectedEntity.getName()) != null;
- return object -> !hasProblem && object == selectedEntity;
- } else if (selectedEmbeddable != null) {
- // select a single embeddable
- final boolean hasProblem = getParentController().getProblem(selectedEmbeddable.getClassName()) != null;
- return object -> !hasProblem && object == selectedEmbeddable;
- } else {
- // select all entities
- return object -> {
- if (object instanceof ObjEntity) {
- return getParentController().getProblem(((ObjEntity) object).getName()) == null;
- }
+ return object -> {
+ if (object instanceof ObjEntity) {
+ return getParentController().getProblem(((ObjEntity) object).getName()) == null;
+ }
- if (object instanceof Embeddable) {
- return getParentController().getProblem(((Embeddable) object).getClassName()) == null;
- }
+ if (object instanceof Embeddable) {
+ return getParentController().getProblem(((Embeddable) object).getClassName()) == null;
+ }
- return false;
- };
- }
+ return false;
+ };
}
/**
@@ -452,6 +422,7 @@ public abstract class GeneratorController extends CayenneController {
* generation directory.
*/
public void selectOutputFolderAction() {
+
TextAdapter outputFolder = ((GeneratorControllerPanel) getView()).getOutputFolder();
String currentDir = outputFolder.getComponent().getText();
@@ -479,9 +450,23 @@ public abstract class GeneratorController extends CayenneController {
}
}
- private void initOutputFolder() {
- String pathString = System.getProperty("user.home");
- setOutputPath(pathString);
+ private String initOutputFolder() {
+ String path;
+ if (System.getProperty("cayenne.cgen.destdir") != null) {
+ return System.getProperty("cayenne.cgen.destdir");
+ } else {
+ // init default directory..
+ FSPath lastPath = Application.getInstance().getFrameController().getLastDirectory();
+
+ path = checkDefaultMavenResourceDir(lastPath, "test");
+
+ if (path != null || (path = checkDefaultMavenResourceDir(lastPath, "main")) != null) {
+ return path;
+ } else {
+ File lastDir = lastPath.getExistingDirectory(false);
+ return lastDir != null ? lastDir.getAbsolutePath() : ".";
+ }
+ }
}
private String checkDefaultMavenResourceDir(FSPath lastPath, String dirType) {
http://git-wip-us.apache.org/repos/asf/cayenne/blob/6a43436a/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 281046d..98e7841 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
@@ -23,11 +23,11 @@ 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 org.apache.cayenne.validation.ValidationException;
-import javax.swing.JButton;
-import javax.swing.JPanel;
-import javax.swing.JTextField;
-import java.io.File;
+import javax.swing.*;
+import java.util.ArrayList;
+import java.util.Collection;
/**
* A generic panel that is a superclass of generator panels, defining common fields.
@@ -35,27 +35,24 @@ import java.io.File;
*/
public class GeneratorControllerPanel extends JPanel {
+ protected Collection<StandardPanelComponent> dataMapLines;
protected TextAdapter outputFolder;
protected JButton selectOutputFolder;
-
- ProjectController projectController;
+ protected ProjectController projectController;
public GeneratorControllerPanel(ProjectController projectController) {
+ this.dataMapLines = new ArrayList<>();
this.projectController = projectController;
- JTextField outputFolderField = new JTextField();
- this.outputFolder = new TextAdapter(outputFolderField) {
- protected void updateModel(String text) {
- getCgenByDataMap().setDestDir(new File(text));
+ this.outputFolder = new TextAdapter(new JTextField()) {
+ @Override
+ protected void updateModel(String text) throws ValidationException {
+ getCgenByDataMap().setRelPath(text);
projectController.setDirty(true);
}
};
this.selectOutputFolder = new JButton("Select");
}
- public ClassGenerationAction getCgenByDataMap() {
- DataMap dataMap = projectController.getCurrentDataMap();
- return projectController.getApplication().getMetaData().get(dataMap, ClassGenerationAction.class);
- }
public TextAdapter getOutputFolder() {
return outputFolder;
}
@@ -63,4 +60,9 @@ public class GeneratorControllerPanel extends JPanel {
public JButton getSelectOutputFolder() {
return selectOutputFolder;
}
+
+ public ClassGenerationAction getCgenByDataMap() {
+ DataMap dataMap = projectController.getCurrentDataMap();
+ return projectController.getApplication().getMetaData().get(dataMap, ClassGenerationAction.class);
+ }
}