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:32 UTC
[01/32] cayenne git commit: cgen. create ui
Repository: cayenne
Updated Branches:
refs/heads/master 1edb4ee4c -> b580bdad3
http://git-wip-us.apache.org/repos/asf/cayenne/blob/8119ffaa/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabController.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabController.java
new file mode 100644
index 0000000..c3fff72
--- /dev/null
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabController.java
@@ -0,0 +1,71 @@
+/*****************************************************************
+ * 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.map.DataMap;
+import org.apache.cayenne.modeler.util.CayenneController;
+import org.apache.cayenne.pref.PreferenceDetail;
+
+import java.awt.*;
+import java.util.Collection;
+
+/**
+ */
+public class GeneratorTabController extends CayenneController {
+
+ public static final String GENERATOR_PROPERTY = "generator";
+
+ protected GeneratorTabPanel view;
+ protected PreferenceDetail preferences;
+
+ protected CustomModeController customModeController;
+
+ public GeneratorTabController(CodeGeneratorControllerBase parent) {
+ super(parent);
+ customModeController = new CustomModeController(parent);
+ this.view = new GeneratorTabPanel(customModeController.getView());
+ }
+
+ public void startup(DataMap dataMap){
+ customModeController.startup(dataMap);
+ }
+
+ public Component getView() {
+ return view;
+ }
+
+ protected CodeGeneratorControllerBase getParentController() {
+ return (CodeGeneratorControllerBase) getParent();
+ }
+
+ public PreferenceDetail getPreferences() {
+ return preferences;
+ }
+
+ public GeneratorController getGeneratorController() {
+ return customModeController;
+ }
+
+ public Collection<ClassGenerationAction> getGenerator() {
+ GeneratorController modeController = getGeneratorController();
+ return (modeController != null) ? modeController.createGenerator() : null;
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cayenne/blob/8119ffaa/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabPanel.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabPanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabPanel.java
new file mode 100644
index 0000000..40249f4
--- /dev/null
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabPanel.java
@@ -0,0 +1,33 @@
+/*****************************************************************
+ * 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 javax.swing.*;
+import java.awt.*;
+
+/**
+ */
+public class GeneratorTabPanel extends JPanel {
+
+ public GeneratorTabPanel(Component modePanels) {
+ setLayout(new BorderLayout());
+ add(modePanels, BorderLayout.CENTER);
+ }
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/8119ffaa/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/StandardPanelComponent.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/StandardPanelComponent.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/StandardPanelComponent.java
new file mode 100644
index 0000000..71d95e4
--- /dev/null
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/StandardPanelComponent.java
@@ -0,0 +1,79 @@
+/*****************************************************************
+ * 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 com.jgoodies.forms.builder.DefaultFormBuilder;
+import com.jgoodies.forms.layout.FormLayout;
+import org.apache.cayenne.map.DataMap;
+import org.apache.cayenne.modeler.pref.DataMapDefaults;
+
+import javax.swing.*;
+import java.awt.*;
+
+public class StandardPanelComponent extends JComponent {
+
+ private DataMap dataMap;
+ private DataMapDefaults preferences;
+ private JLabel dataMapName;
+ private JTextField superclassPackage;
+ private DefaultFormBuilder builder;
+
+ public StandardPanelComponent() {
+ super();
+ dataMapName = new JLabel();
+ dataMapName.setFont(dataMapName.getFont().deriveFont(1));
+ superclassPackage = new JTextField();
+
+ FormLayout layout = new FormLayout(
+ "right:77dlu, 3dlu, fill:200:grow, 3dlu", "");
+ builder = new DefaultFormBuilder(layout);
+ builder.append(dataMapName);
+ builder.nextLine();
+ builder.append("Superclass Package:", superclassPackage);
+
+ setLayout(new BorderLayout());
+ add(builder.getPanel(), BorderLayout.CENTER);
+ }
+
+ public DataMap getDataMap() {
+ return dataMap;
+ }
+
+ public void setDataMap(DataMap dataMap) {
+ this.dataMap = dataMap;
+ }
+
+ public DataMapDefaults getPreferences() {
+ return preferences;
+ }
+
+ public void setPreferences(DataMapDefaults preferences) {
+ this.preferences = preferences;
+ }
+
+ public JLabel getDataMapName() {
+ return dataMapName;
+ }
+
+ public JTextField getSuperclassPackage() {
+ return superclassPackage;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/8119ffaa/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/init/CayenneModelerModule.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/init/CayenneModelerModule.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/init/CayenneModelerModule.java
index 716c3ee..705b7e9 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/init/CayenneModelerModule.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/init/CayenneModelerModule.java
@@ -25,6 +25,7 @@ import org.apache.cayenne.configuration.xml.XMLReaderProvider;
import org.apache.cayenne.dbsync.xml.DbImportExtension;
import org.apache.cayenne.di.Binder;
import org.apache.cayenne.di.Module;
+import org.apache.cayenne.gen.xml.CgenExtension;
import org.apache.cayenne.modeler.Application;
import org.apache.cayenne.modeler.action.ActionManager;
import org.apache.cayenne.modeler.action.DefaultActionManager;
@@ -56,6 +57,7 @@ public class CayenneModelerModule implements Module {
ProjectModule.contributeExtensions(binder)
.add(InfoExtension.class)
.add(GraphExtension.class)
- .add(DbImportExtension.class);
+ .add(DbImportExtension.class)
+ .add(CgenExtension.class);
}
}
[15/32] cayenne git commit: Cgen tab, cgen configuration,
cgen in maven, ant, gradle.
Posted by nt...@apache.org.
http://git-wip-us.apache.org/repos/asf/cayenne/blob/52ea45b5/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomPreferencesUpdater.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomPreferencesUpdater.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomPreferencesUpdater.java
index 1d8d4f9..a9816e0 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomPreferencesUpdater.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomPreferencesUpdater.java
@@ -1,209 +1,209 @@
-/*****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- ****************************************************************/
-
-package org.apache.cayenne.modeler.dialog.codegen;
-
-import org.apache.cayenne.map.DataMap;
-import org.apache.cayenne.modeler.pref.DataMapDefaults;
-
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Set;
-
-public class CustomPreferencesUpdater {
-
- enum Property {
- SUBCLASS_TEMPLATE,
- SUPERCLASS_TEMPLATE,
- OVERWRITE,
- PAIRS,
- USE_PACKAGE_PATH,
- MODE,
- OUTPUT_PATTERN,
- CREATE_PROPERTY_NAMES,
- CREATE_PK_PROPERTIES
- }
-
- private static final String OVERWRITE = "overwrite";
- private static final String PAIRS = "pairs";
- private static final String USE_PACKAGE_PATH = "usePackagePath";
- private static final String MODE = "mode";
- private static final String OUTPUT_PATTERN = "outputPattern";
- private static final String CREATE_PROPERTY_NAMES = "createPropertyNames";
- private static final String CREATE_PK_PROPERTIES = "createPKProperties";
-
- private Map<DataMap, DataMapDefaults> mapPreferences;
-
-
- public CustomPreferencesUpdater(Map<DataMap, DataMapDefaults> mapPreferences) {
- this.mapPreferences = mapPreferences;
- }
-
- public String getMode() {
- return (String) getProperty(Property.MODE);
- }
-
- public void setMode(String mode) {
- updatePreferences(Property.MODE, mode);
- }
-
- public String getSubclassTemplate() {
- return (String) getProperty(Property.SUBCLASS_TEMPLATE);
- }
-
- public void setSubclassTemplate(String subclassTemplate) {
- updatePreferences(Property.SUBCLASS_TEMPLATE, subclassTemplate);
- }
-
- public String getSuperclassTemplate() {
- return (String) getProperty(Property.SUPERCLASS_TEMPLATE);
- }
-
- public void setSuperclassTemplate(String superclassTemplate) {
- updatePreferences(Property.SUPERCLASS_TEMPLATE, superclassTemplate);
- }
-
- public Boolean getOverwrite() {
- return (Boolean) getProperty(Property.OVERWRITE);
- }
-
- public void setOverwrite(Boolean overwrite) {
- updatePreferences(Property.OVERWRITE, overwrite);
- }
-
- public Boolean getPairs() {
- return (Boolean) getProperty(Property.PAIRS);
- }
-
- public void setPairs(Boolean pairs) {
- updatePreferences(Property.PAIRS, pairs);
- }
-
- public Boolean getUsePackagePath() {
- return (Boolean) getProperty(Property.USE_PACKAGE_PATH);
- }
-
- public void setUsePackagePath(Boolean usePackagePath) {
- updatePreferences(Property.USE_PACKAGE_PATH, usePackagePath);
- }
-
- public String getOutputPattern() {
- return (String) getProperty(Property.OUTPUT_PATTERN);
- }
-
- public void setOutputPattern(String outputPattern) {
- updatePreferences(Property.OUTPUT_PATTERN, outputPattern);
- }
-
- public Boolean getCreatePropertyNames() {
- return (Boolean) getProperty(Property.CREATE_PROPERTY_NAMES);
- }
-
- public void setCreatePropertyNames(Boolean createPropertyNames) {
- updatePreferences(Property.CREATE_PROPERTY_NAMES, createPropertyNames);
- }
-
- public Boolean getCreatePKProperties() {
- return (Boolean) getProperty(Property.CREATE_PK_PROPERTIES);
- }
-
- public void setCreatePKProperties(Boolean createPKProperties) {
- updatePreferences(Property.CREATE_PK_PROPERTIES, createPKProperties);
- }
-
- private Object getProperty(Property property) {
- Object obj = null;
-
- Set<Entry<DataMap, DataMapDefaults>> entities = mapPreferences.entrySet();
- for (Entry<DataMap, DataMapDefaults> entry : entities) {
-
- switch (property) {
- case MODE:
- obj = entry.getValue().getProperty(MODE);
- break;
- case OUTPUT_PATTERN:
- obj = entry.getValue().getProperty(OUTPUT_PATTERN);
- break;
- case SUBCLASS_TEMPLATE:
- obj = entry.getValue().getSubclassTemplate();
- break;
- case SUPERCLASS_TEMPLATE:
- obj = entry.getValue().getSuperclassTemplate();
- break;
- case OVERWRITE:
- obj = entry.getValue().getBooleanProperty(OVERWRITE);
- break;
- case PAIRS:
- obj = entry.getValue().getBooleanProperty(PAIRS);
- break;
- case USE_PACKAGE_PATH:
- obj = entry.getValue().getBooleanProperty(USE_PACKAGE_PATH);
- break;
- case CREATE_PROPERTY_NAMES:
- obj = entry.getValue().getBooleanProperty(CREATE_PROPERTY_NAMES);
- break;
- case CREATE_PK_PROPERTIES:
- obj = entry.getValue().getBooleanProperty(CREATE_PK_PROPERTIES);
- break;
- default:
- throw new IllegalArgumentException("Bad type property: " + property);
- }
-
- }
- return obj;
- }
-
- private void updatePreferences(Property property, Object value) {
- Set<Entry<DataMap, DataMapDefaults>> entities = mapPreferences.entrySet();
- for (Entry<DataMap, DataMapDefaults> entry : entities) {
-
- switch (property) {
- case MODE:
- entry.getValue().setProperty(MODE, (String) value);
- break;
- case OUTPUT_PATTERN:
- entry.getValue().setProperty(OUTPUT_PATTERN, (String) value);
- break;
- case SUBCLASS_TEMPLATE:
- entry.getValue().setSubclassTemplate((String) value);
- break;
- case SUPERCLASS_TEMPLATE:
- entry.getValue().setSuperclassTemplate((String) value);
- break;
- case OVERWRITE:
- entry.getValue().setBooleanProperty(OVERWRITE, (Boolean) value);
- break;
- case PAIRS:
- entry.getValue().setBooleanProperty(PAIRS, (Boolean) value);
- break;
- case USE_PACKAGE_PATH:
- entry.getValue().setBooleanProperty(USE_PACKAGE_PATH, (Boolean) value);
- break;
- case CREATE_PROPERTY_NAMES:
- entry.getValue().setBooleanProperty(CREATE_PROPERTY_NAMES, (Boolean) value);
- break;
- case CREATE_PK_PROPERTIES:
- entry.getValue().setBooleanProperty(CREATE_PK_PROPERTIES, (Boolean) value);
- break;
- default:
- throw new IllegalArgumentException("Bad type property: " + property);
- }
- }
- }
-}
\ No newline at end of file
+///*****************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one
+// * or more contributor license agreements. See the NOTICE file
+// * distributed with this work for additional information
+// * regarding copyright ownership. The ASF licenses this file
+// * to you under the Apache License, Version 2.0 (the
+// * "License"); you may not use this file except in compliance
+// * with the License. You may obtain a copy of the License at
+// *
+// * http://www.apache.org/licenses/LICENSE-2.0
+// *
+// * Unless required by applicable law or agreed to in writing,
+// * software distributed under the License is distributed on an
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// * KIND, either express or implied. See the License for the
+// * specific language governing permissions and limitations
+// * under the License.
+// ****************************************************************/
+//
+//package org.apache.cayenne.modeler.dialog.codegen;
+//
+//import org.apache.cayenne.map.DataMap;
+//import org.apache.cayenne.modeler.pref.DataMapDefaults;
+//
+//import java.util.Map;
+//import java.util.Map.Entry;
+//import java.util.Set;
+//
+//public class CustomPreferencesUpdater {
+//
+// enum Property {
+// SUBCLASS_TEMPLATE,
+// SUPERCLASS_TEMPLATE,
+// OVERWRITE,
+// PAIRS,
+// USE_PACKAGE_PATH,
+// MODE,
+// OUTPUT_PATTERN,
+// CREATE_PROPERTY_NAMES,
+// CREATE_PK_PROPERTIES
+// }
+//
+// private static final String OVERWRITE = "overwrite";
+// private static final String PAIRS = "pairs";
+// private static final String USE_PACKAGE_PATH = "usePackagePath";
+// private static final String MODE = "mode";
+// private static final String OUTPUT_PATTERN = "outputPattern";
+// private static final String CREATE_PROPERTY_NAMES = "createPropertyNames";
+// private static final String CREATE_PK_PROPERTIES = "createPKProperties";
+//
+// private Map<DataMap, DataMapDefaults> mapPreferences;
+//
+//
+// public CustomPreferencesUpdater(Map<DataMap, DataMapDefaults> mapPreferences) {
+// this.mapPreferences = mapPreferences;
+// }
+//
+// public String getMode() {
+// return (String) getProperty(Property.MODE);
+// }
+//
+// public void setMode(String mode) {
+// updatePreferences(Property.MODE, mode);
+// }
+//
+// public String getSubclassTemplate() {
+// return (String) getProperty(Property.SUBCLASS_TEMPLATE);
+// }
+//
+// public void setSubclassTemplate(String subclassTemplate) {
+// updatePreferences(Property.SUBCLASS_TEMPLATE, subclassTemplate);
+// }
+//
+// public String getSuperclassTemplate() {
+// return (String) getProperty(Property.SUPERCLASS_TEMPLATE);
+// }
+//
+// public void setSuperclassTemplate(String superclassTemplate) {
+// updatePreferences(Property.SUPERCLASS_TEMPLATE, superclassTemplate);
+// }
+//
+// public Boolean getOverwrite() {
+// return (Boolean) getProperty(Property.OVERWRITE);
+// }
+//
+// public void setOverwrite(Boolean overwrite) {
+// updatePreferences(Property.OVERWRITE, overwrite);
+// }
+//
+// public Boolean getPairs() {
+// return (Boolean) getProperty(Property.PAIRS);
+// }
+//
+// public void setPairs(Boolean pairs) {
+// updatePreferences(Property.PAIRS, pairs);
+// }
+//
+// public Boolean getUsePackagePath() {
+// return (Boolean) getProperty(Property.USE_PACKAGE_PATH);
+// }
+//
+// public void setUsePackagePath(Boolean usePackagePath) {
+// updatePreferences(Property.USE_PACKAGE_PATH, usePackagePath);
+// }
+//
+// public String getOutputPattern() {
+// return (String) getProperty(Property.OUTPUT_PATTERN);
+// }
+//
+// public void setOutputPattern(String outputPattern) {
+// updatePreferences(Property.OUTPUT_PATTERN, outputPattern);
+// }
+//
+// public Boolean getCreatePropertyNames() {
+// return (Boolean) getProperty(Property.CREATE_PROPERTY_NAMES);
+// }
+//
+// public void setCreatePropertyNames(Boolean createPropertyNames) {
+// updatePreferences(Property.CREATE_PROPERTY_NAMES, createPropertyNames);
+// }
+//
+// public Boolean getCreatePKProperties() {
+// return (Boolean) getProperty(Property.CREATE_PK_PROPERTIES);
+// }
+//
+// public void setCreatePKProperties(Boolean createPKProperties) {
+// updatePreferences(Property.CREATE_PK_PROPERTIES, createPKProperties);
+// }
+//
+// private Object getProperty(Property property) {
+// Object obj = null;
+//
+// Set<Entry<DataMap, DataMapDefaults>> entities = mapPreferences.entrySet();
+// for (Entry<DataMap, DataMapDefaults> entry : entities) {
+//
+// switch (property) {
+// case MODE:
+// obj = entry.getValue().getProperty(MODE);
+// break;
+// case OUTPUT_PATTERN:
+// obj = entry.getValue().getProperty(OUTPUT_PATTERN);
+// break;
+// case SUBCLASS_TEMPLATE:
+// obj = entry.getValue().getSubclassTemplate();
+// break;
+// case SUPERCLASS_TEMPLATE:
+// obj = entry.getValue().getSuperclassTemplate();
+// break;
+// case OVERWRITE:
+// obj = entry.getValue().getBooleanProperty(OVERWRITE);
+// break;
+// case PAIRS:
+// obj = entry.getValue().getBooleanProperty(PAIRS);
+// break;
+// case USE_PACKAGE_PATH:
+// obj = entry.getValue().getBooleanProperty(USE_PACKAGE_PATH);
+// break;
+// case CREATE_PROPERTY_NAMES:
+// obj = entry.getValue().getBooleanProperty(CREATE_PROPERTY_NAMES);
+// break;
+// case CREATE_PK_PROPERTIES:
+// obj = entry.getValue().getBooleanProperty(CREATE_PK_PROPERTIES);
+// break;
+// default:
+// throw new IllegalArgumentException("Bad type property: " + property);
+// }
+//
+// }
+// return obj;
+// }
+//
+// private void updatePreferences(Property property, Object value) {
+// Set<Entry<DataMap, DataMapDefaults>> entities = mapPreferences.entrySet();
+// for (Entry<DataMap, DataMapDefaults> entry : entities) {
+//
+// switch (property) {
+// case MODE:
+// entry.getValue().setProperty(MODE, (String) value);
+// break;
+// case OUTPUT_PATTERN:
+// entry.getValue().setProperty(OUTPUT_PATTERN, (String) value);
+// break;
+// case SUBCLASS_TEMPLATE:
+// entry.getValue().setSubclassTemplate((String) value);
+// break;
+// case SUPERCLASS_TEMPLATE:
+// entry.getValue().setSuperclassTemplate((String) value);
+// break;
+// case OVERWRITE:
+// entry.getValue().setBooleanProperty(OVERWRITE, (Boolean) value);
+// break;
+// case PAIRS:
+// entry.getValue().setBooleanProperty(PAIRS, (Boolean) value);
+// break;
+// case USE_PACKAGE_PATH:
+// entry.getValue().setBooleanProperty(USE_PACKAGE_PATH, (Boolean) value);
+// break;
+// case CREATE_PROPERTY_NAMES:
+// entry.getValue().setBooleanProperty(CREATE_PROPERTY_NAMES, (Boolean) value);
+// break;
+// case CREATE_PK_PROPERTIES:
+// entry.getValue().setBooleanProperty(CREATE_PK_PROPERTIES, (Boolean) value);
+// break;
+// default:
+// throw new IllegalArgumentException("Bad type property: " + property);
+// }
+// }
+// }
+//}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cayenne/blob/52ea45b5/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorController.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorController.java
index db8c872..4a5b5f6 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorController.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorController.java
@@ -1,562 +1,561 @@
-/*****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- ****************************************************************/
-
-package org.apache.cayenne.modeler.dialog.codegen;
-
-import org.apache.cayenne.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.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;
-import org.apache.cayenne.swing.BindingBuilder;
-import org.apache.cayenne.util.Util;
-import org.apache.cayenne.validation.BeanValidationFailure;
-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.JTextField;
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.LinkedList;
-import java.util.Map;
-import java.util.Set;
-import java.util.function.Predicate;
-import java.util.prefs.Preferences;
-
-/**
- * A mode-specific part of the code generation dialog.
- *
- */
-public abstract class GeneratorController extends CayenneController {
-
- protected String mode = ArtifactsGenerationMode.ALL.getLabel();
- protected Map<DataMap, DataMapDefaults> mapPreferences;
- private String outputPath;
-
- public GeneratorController(CodeGeneratorControllerBase parent) {
- super(parent);
-
- createDefaults();
- createView();
- initBindings(new BindingBuilder(getApplication().getBindingFactory(), this));
- }
-
- public String getOutputPath() {
- return outputPath;
- }
-
- 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);
- }
- }
-
- public void setMapPreferences(Map<DataMap, DataMapDefaults> mapPreferences) {
- this.mapPreferences = mapPreferences;
- }
-
- public Map<DataMap, DataMapDefaults> getMapPreferences() {
- return this.mapPreferences;
- }
-
- protected void initBindings(BindingBuilder bindingBuilder) {
-
- initOutputFolder();
-
- JTextField outputFolder = ((GeneratorControllerPanel) getView()).getOutputFolder();
- JButton outputSelect = ((GeneratorControllerPanel) getView()).getSelectOutputFolder();
-
- outputFolder.setText(getOutputPath());
- bindingBuilder.bindToAction(outputSelect, "selectOutputFolderAction()");
- bindingBuilder.bindToTextField(outputFolder, "outputPath");
- }
-
- protected CodeGeneratorControllerBase getParentController() {
- return (CodeGeneratorControllerBase) getParent();
- }
-
- protected abstract GeneratorControllerPanel createView();
-
- protected abstract void createDefaults();
-
- /**
- * Creates an appropriate subclass of {@link ClassGenerationAction},
- * returning it in an unconfigured state. Configuration is performed by
- * {@link #createGenerator()} method.
- */
- protected abstract ClassGenerationAction newGenerator();
-
- /**
- * Creates a class generator for provided selections.
- */
- public Collection<ClassGenerationAction> createGenerator() {
-
- File outputDir = getOutputDir();
-
- // no destination folder
- if (outputDir == 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;
- }
-
- // not a directory
- if (!outputDir.isDirectory()) {
- JOptionPane.showMessageDialog(this.getView(), outputDir + " is not a valid directory.");
- return null;
- }
-
- // remove generic entities...
- Collection<ObjEntity> selectedEntities = new ArrayList<>(getParentController().getSelectedEntities());
- selectedEntities.removeIf(ObjEntity::isGeneric);
-
- Collection<ClassGenerationAction> generators = new ArrayList<>();
- for (DataMap map : getParentController().getDataMaps()) {
- try {
- ClassGenerationAction generator = newGenerator();
-
- if(getParentController().getSelectedDataMaps().contains(map)) {
- mode = ArtifactsGenerationMode.ALL.getLabel();
- } else {
- mode = ArtifactsGenerationMode.ENTITY.getLabel();
- }
-
- generator.setArtifactsGenerationMode(mode);
- generator.setDataMap(map);
-
- LinkedList<ObjEntity> objEntities = new LinkedList<>(map.getObjEntities());
- objEntities.retainAll(selectedEntities);
- generator.addEntities(objEntities);
-
- LinkedList<Embeddable> embeddables = new LinkedList<>(map.getEmbeddables());
- embeddables.retainAll(getParentController().getSelectedEmbeddables());
- generator.addEmbeddables(embeddables);
-
- generator.addQueries(map.getQueryDescriptors());
-
- Preferences preferences = application.getPreferencesNode(GeneralPreferences.class, "");
-
- if (preferences != null) {
- generator.setEncoding(preferences.get(GeneralPreferences.ENCODING_PREFERENCE, null));
-
- }
-
-// generator.setDestDir(outputDir);
- generator.setMakePairs(true);
- generator.setForce(true);
-
- generators.add(generator);
- } catch (CayenneRuntimeException exception) {
- JOptionPane.showMessageDialog(this.getView(), exception.getUnlabeledMessage());
- return null;
- }
- }
-
- return generators;
- }
-
- public void validateEmbeddable(ValidationResult validationBuffer, Embeddable embeddable) {
- ValidationFailure embeddableFailure = validateEmbeddable(embeddable);
- if (embeddableFailure != null) {
- validationBuffer.addFailure(embeddableFailure);
- return;
- }
-
- for (EmbeddableAttribute attribute : embeddable.getAttributes()) {
- ValidationFailure failure = validateEmbeddableAttribute(attribute);
- if (failure != null) {
- validationBuffer.addFailure(failure);
- return;
- }
- }
- }
-
- private ValidationFailure validateEmbeddableAttribute(EmbeddableAttribute attribute) {
- String name = attribute.getEmbeddable().getClassName();
-
- ValidationFailure emptyName = BeanValidationFailure.validateNotEmpty(name, "attribute.name",
- attribute.getName());
- if (emptyName != null) {
- return emptyName;
- }
-
- ValidationFailure badName = CodeValidationUtil.validateJavaIdentifier(name, "attribute.name",
- attribute.getName());
- if (badName != null) {
- return badName;
- }
-
- ValidationFailure emptyType = BeanValidationFailure.validateNotEmpty(name, "attribute.type",
- attribute.getType());
- if (emptyType != null) {
- return emptyType;
- }
-
- ValidationFailure badType = BeanValidationFailure.validateJavaClassName(name, "attribute.type",
- attribute.getType());
- if (badType != null) {
- return badType;
- }
-
- return null;
- }
-
- private ValidationFailure validateEmbeddable(Embeddable embeddable) {
-
- String name = embeddable.getClassName();
-
- ValidationFailure emptyClass = BeanValidationFailure.validateNotEmpty(name, "className",
- embeddable.getClassName());
- if (emptyClass != null) {
- return emptyClass;
- }
-
- ValidationFailure badClass = BeanValidationFailure.validateJavaClassName(name, "className",
- embeddable.getClassName());
- if (badClass != null) {
- return badClass;
- }
-
- return null;
- }
-
- public void validateEntity(ValidationResult validationBuffer, ObjEntity entity, boolean clientValidation) {
-
- ValidationFailure entityFailure = validateEntity(clientValidation ? entity.getClientEntity() : entity);
- if (entityFailure != null) {
- validationBuffer.addFailure(entityFailure);
- return;
- }
-
- for (ObjAttribute attribute : entity.getAttributes()) {
- if (attribute instanceof EmbeddedAttribute) {
- EmbeddedAttribute embeddedAttribute = (EmbeddedAttribute) attribute;
- for (ObjAttribute subAttribute : embeddedAttribute.getAttributes()) {
- ValidationFailure failure = validateEmbeddedAttribute(subAttribute);
- if (failure != null) {
- validationBuffer.addFailure(failure);
- return;
- }
- }
- } else {
-
- ValidationFailure failure = validateAttribute(attribute);
- if (failure != null) {
- validationBuffer.addFailure(failure);
- return;
- }
- }
- }
-
- for (ObjRelationship rel : entity.getRelationships()) {
- ValidationFailure failure = validateRelationship(rel, clientValidation);
- if (failure != null) {
- validationBuffer.addFailure(failure);
- return;
- }
- }
- }
-
- private ValidationFailure validateEntity(ObjEntity entity) {
-
- String name = entity.getName();
-
- if (entity.isGeneric()) {
- return new SimpleValidationFailure(name, "Generic class");
- }
-
- ValidationFailure emptyClass = BeanValidationFailure.validateNotEmpty(name, "className", entity.getClassName());
- if (emptyClass != null) {
- return emptyClass;
- }
-
- ValidationFailure badClass = BeanValidationFailure.validateJavaClassName(name, "className",
- entity.getClassName());
- if (badClass != null) {
- return badClass;
- }
-
- if (entity.getSuperClassName() != null) {
- ValidationFailure badSuperClass = BeanValidationFailure.validateJavaClassName(name, "superClassName",
- entity.getSuperClassName());
- if (badSuperClass != null) {
- return badSuperClass;
- }
- }
-
- return null;
- }
-
- private ValidationFailure validateAttribute(ObjAttribute attribute) {
-
- String name = attribute.getEntity().getName();
-
- ValidationFailure emptyName = BeanValidationFailure.validateNotEmpty(name, "attribute.name",
- attribute.getName());
- if (emptyName != null) {
- return emptyName;
- }
-
- ValidationFailure badName = CodeValidationUtil.validateJavaIdentifier(name, "attribute.name",
- attribute.getName());
- if (badName != null) {
- return badName;
- }
-
- ValidationFailure emptyType = BeanValidationFailure.validateNotEmpty(name, "attribute.type",
- attribute.getType());
- if (emptyType != null) {
- return emptyType;
- }
-
- ValidationFailure badType = BeanValidationFailure.validateJavaClassName(name, "attribute.type",
- attribute.getType());
- if (badType != null) {
- return badType;
- }
-
- return null;
- }
-
- private ValidationFailure validateEmbeddedAttribute(ObjAttribute attribute) {
-
- String name = attribute.getEntity().getName();
-
- // validate embeddedAttribute and attribute names
- // embeddedAttribute returned attibute as
- // [name_embeddedAttribute].[name_attribute]
- String[] attributes = attribute.getName().split("\\.");
- String nameEmbeddedAttribute = attributes[0];
- int beginIndex = attributes[0].length();
- String attr = attribute.getName().substring(beginIndex + 1);
-
- ValidationFailure emptyEmbeddedName = BeanValidationFailure.validateNotEmpty(name, "attribute.name",
- nameEmbeddedAttribute);
- if (emptyEmbeddedName != null) {
- return emptyEmbeddedName;
- }
-
- ValidationFailure badEmbeddedName = CodeValidationUtil.validateJavaIdentifier(name, "attribute.name",
- nameEmbeddedAttribute);
- if (badEmbeddedName != null) {
- return badEmbeddedName;
- }
-
- ValidationFailure emptyName = BeanValidationFailure.validateNotEmpty(name, "attribute.name", attr);
- if (emptyName != null) {
- return emptyName;
- }
-
- ValidationFailure badName = CodeValidationUtil.validateJavaIdentifier(name, "attribute.name", attr);
- if (badName != null) {
- return badName;
- }
-
- ValidationFailure emptyType = BeanValidationFailure.validateNotEmpty(name, "attribute.type",
- attribute.getType());
- if (emptyType != null) {
- return emptyType;
- }
-
- ValidationFailure badType = BeanValidationFailure.validateJavaClassName(name, "attribute.type",
- attribute.getType());
- if (badType != null) {
- return badType;
- }
-
- return null;
- }
-
- private ValidationFailure validateRelationship(ObjRelationship relationship, boolean clientValidation) {
-
- String name = relationship.getSourceEntity().getName();
-
- ValidationFailure emptyName = BeanValidationFailure.validateNotEmpty(name, "relationship.name",
- relationship.getName());
- if (emptyName != null) {
- return emptyName;
- }
-
- ValidationFailure badName = CodeValidationUtil.validateJavaIdentifier(name, "relationship.name",
- relationship.getName());
- if (badName != null) {
- return badName;
- }
-
- if (!relationship.isToMany()) {
-
- ObjEntity targetEntity = relationship.getTargetEntity();
-
- if (clientValidation && targetEntity != null) {
- targetEntity = targetEntity.getClientEntity();
- }
-
- if (targetEntity == null) {
-
- return new BeanValidationFailure(name, "relationship.targetEntity", "No target entity");
- } else if (!targetEntity.isGeneric()) {
- ValidationFailure emptyClass = BeanValidationFailure.validateNotEmpty(name,
- "relationship.targetEntity.className", targetEntity.getClassName());
- if (emptyClass != null) {
- return emptyClass;
- }
-
- ValidationFailure badClass = BeanValidationFailure.validateJavaClassName(name,
- "relationship.targetEntity.className", targetEntity.getClassName());
- if (badClass != null) {
- return badClass;
- }
- }
- }
-
- return null;
- }
-
- /**
- * Returns a predicate for default entity selection in a given mode.
- */
- public Predicate getDefaultClassFilter() {
- return object -> {
- if (object instanceof ObjEntity) {
- return getParentController().getProblem(((ObjEntity) object).getName()) == null;
- }
-
- if (object instanceof Embeddable) {
- return getParentController().getProblem(((Embeddable) object).getClassName()) == null;
- }
-
- return false;
- };
- }
-
- private File getOutputDir() {
- String dir = ((GeneratorControllerPanel) getView()).getOutputFolder().getText();
- return dir != null ? new File(dir) : new File(System.getProperty("user.dir"));
- }
-
- /**
- * An action method that pops up a file chooser dialog to pick the
- * generation directory.
- */
- public void selectOutputFolderAction() {
-
- JTextField outputFolder = ((GeneratorControllerPanel) getView()).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();
- outputFolder.setText(path);
- setOutputPath(path);
- }
- }
-
- private void initOutputFolder() {
- String path;
- if (getOutputPath() == null) {
- if (System.getProperty("cayenne.cgen.destdir") != null) {
- setOutputPath(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) {
- setOutputPath(path);
- } else {
- File lastDir = (lastPath != null) ? lastPath.getExistingDirectory(false) : null;
- setOutputPath(lastDir != null ? lastDir.getAbsolutePath() : null);
- }
- }
- }
- }
-
- private String checkDefaultMavenResourceDir(FSPath lastPath, String dirType) {
- String path = lastPath.getPath();
- String resourcePath = buildFilePath("src", dirType, "resources");
- int idx = path.indexOf(resourcePath);
- if (idx < 0) {
- return null;
- }
- return path.substring(0, idx) + buildFilePath("src", dirType, "java");
- }
-
- private static String buildFilePath(String... pathElements) {
- if (pathElements.length == 0) {
- return "";
- }
- StringBuilder path = new StringBuilder(pathElements[0]);
- for (int i = 1; i < pathElements.length; i++) {
- path.append(File.separator).append(pathElements[i]);
- }
- return path.toString();
- }
-}
\ No newline at end of file
+///*****************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one
+// * or more contributor license agreements. See the NOTICE file
+// * distributed with this work for additional information
+// * regarding copyright ownership. The ASF licenses this file
+// * to you under the Apache License, Version 2.0 (the
+// * "License"); you may not use this file except in compliance
+// * with the License. You may obtain a copy of the License at
+// *
+// * http://www.apache.org/licenses/LICENSE-2.0
+// *
+// * Unless required by applicable law or agreed to in writing,
+// * software distributed under the License is distributed on an
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// * KIND, either express or implied. See the License for the
+// * specific language governing permissions and limitations
+// * under the License.
+// ****************************************************************/
+//
+//package org.apache.cayenne.modeler.dialog.codegen;
+//
+//import org.apache.cayenne.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.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;
+//import org.apache.cayenne.swing.BindingBuilder;
+//import org.apache.cayenne.util.Util;
+//import org.apache.cayenne.validation.BeanValidationFailure;
+//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.JTextField;
+//import java.io.File;
+//import java.util.ArrayList;
+//import java.util.Collection;
+//import java.util.LinkedList;
+//import java.util.Map;
+//import java.util.Set;
+//import java.util.function.Predicate;
+//import java.util.prefs.Preferences;
+//
+///**
+// * A mode-specific part of the code generation dialog.
+// *
+// */
+//public abstract class GeneratorController extends CayenneController {
+//
+// protected String mode = ArtifactsGenerationMode.ALL.getLabel();
+// protected Map<DataMap, DataMapDefaults> mapPreferences;
+// private String outputPath;
+//
+// public GeneratorController(CodeGeneratorControllerBase parent) {
+// super(parent);
+//
+// createDefaults();
+// createView();
+// initBindings(new BindingBuilder(getApplication().getBindingFactory(), this));
+// }
+//
+// public String getOutputPath() {
+// return outputPath;
+// }
+//
+// 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);
+// }
+// }
+//
+// public void setMapPreferences(Map<DataMap, DataMapDefaults> mapPreferences) {
+// this.mapPreferences = mapPreferences;
+// }
+//
+// public Map<DataMap, DataMapDefaults> getMapPreferences() {
+// return this.mapPreferences;
+// }
+//
+// protected void initBindings(BindingBuilder bindingBuilder) {
+//
+// initOutputFolder();
+//
+// JTextField outputFolder = ((GeneratorControllerPanel) getView()).getOutputFolder();
+// JButton outputSelect = ((GeneratorControllerPanel) getView()).getSelectOutputFolder();
+//
+// outputFolder.setText(getOutputPath());
+// bindingBuilder.bindToAction(outputSelect, "selectOutputFolderAction()");
+// bindingBuilder.bindToTextField(outputFolder, "outputPath");
+// }
+//
+// protected CodeGeneratorControllerBase getParentController() {
+// return (CodeGeneratorControllerBase) getParent();
+// }
+//
+// protected abstract GeneratorControllerPanel createView();
+//
+// protected abstract void createDefaults();
+//
+// /**
+// * Creates an appropriate subclass of {@link ClassGenerationAction},
+// * returning it in an unconfigured state. Configuration is performed by
+// * {@link #createConfiguration()} method.
+// */
+// protected abstract ClassGenerationAction newGenerator();
+//
+// /**
+// * Creates a class generator for provided selections.
+// */
+// public Collection<ClassGenerationAction> createConfiguration() {
+//
+// File outputDir = getOutputDir();
+//
+// // no destination folder
+// if (outputDir == 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;
+// }
+//
+// // not a directory
+// if (!outputDir.isDirectory()) {
+// JOptionPane.showMessageDialog(this.getView(), outputDir + " is not a valid directory.");
+// return null;
+// }
+//
+// // remove generic entities...
+// Collection<ObjEntity> selectedEntities = new ArrayList<>(getParentController().getSelectedEntities());
+// selectedEntities.removeIf(ObjEntity::isGeneric);
+//
+// Collection<ClassGenerationAction> generators = new ArrayList<>();
+// for (DataMap map : getParentController().getDataMaps()) {
+// try {
+// ClassGenerationAction generator = newGenerator();
+//
+// if(getParentController().getSelectedDataMaps().contains(map)) {
+// mode = ArtifactsGenerationMode.ALL.getLabel();
+// } else {
+// mode = ArtifactsGenerationMode.ENTITY.getLabel();
+// }
+//
+// generator.setArtifactsGenerationMode(mode);
+// generator.setDataMap(map);
+//
+// LinkedList<ObjEntity> objEntities = new LinkedList<>(map.getObjEntities());
+// objEntities.retainAll(selectedEntities);
+// generator.addEntities(objEntities);
+//
+// LinkedList<Embeddable> embeddables = new LinkedList<>(map.getEmbeddables());
+// embeddables.retainAll(getParentController().getSelectedEmbeddables());
+// generator.addEmbeddables(embeddables);
+//
+// generator.addQueries(map.getQueryDescriptors());
+//
+// Preferences preferences = application.getPreferencesNode(GeneralPreferences.class, "");
+//
+// if (preferences != null) {
+// generator.setEncoding(preferences.get(GeneralPreferences.ENCODING_PREFERENCE, null));
+//
+// }
+//
+// generator.setMakePairs(true);
+// generator.setForce(true);
+//
+// generators.add(generator);
+// } catch (CayenneRuntimeException exception) {
+// JOptionPane.showMessageDialog(this.getView(), exception.getUnlabeledMessage());
+// return null;
+// }
+// }
+//
+// return generators;
+// }
+//
+// public void validateEmbeddable(ValidationResult validationBuffer, Embeddable embeddable) {
+// ValidationFailure embeddableFailure = validateEmbeddable(embeddable);
+// if (embeddableFailure != null) {
+// validationBuffer.addFailure(embeddableFailure);
+// return;
+// }
+//
+// for (EmbeddableAttribute attribute : embeddable.getAttributes()) {
+// ValidationFailure failure = validateEmbeddableAttribute(attribute);
+// if (failure != null) {
+// validationBuffer.addFailure(failure);
+// return;
+// }
+// }
+// }
+//
+// private ValidationFailure validateEmbeddableAttribute(EmbeddableAttribute attribute) {
+// String name = attribute.getEmbeddable().getClassName();
+//
+// ValidationFailure emptyName = BeanValidationFailure.validateNotEmpty(name, "attribute.name",
+// attribute.getName());
+// if (emptyName != null) {
+// return emptyName;
+// }
+//
+// ValidationFailure badName = CodeValidationUtil.validateJavaIdentifier(name, "attribute.name",
+// attribute.getName());
+// if (badName != null) {
+// return badName;
+// }
+//
+// ValidationFailure emptyType = BeanValidationFailure.validateNotEmpty(name, "attribute.type",
+// attribute.getType());
+// if (emptyType != null) {
+// return emptyType;
+// }
+//
+// ValidationFailure badType = BeanValidationFailure.validateJavaClassName(name, "attribute.type",
+// attribute.getType());
+// if (badType != null) {
+// return badType;
+// }
+//
+// return null;
+// }
+//
+// private ValidationFailure validateEmbeddable(Embeddable embeddable) {
+//
+// String name = embeddable.getClassName();
+//
+// ValidationFailure emptyClass = BeanValidationFailure.validateNotEmpty(name, "className",
+// embeddable.getClassName());
+// if (emptyClass != null) {
+// return emptyClass;
+// }
+//
+// ValidationFailure badClass = BeanValidationFailure.validateJavaClassName(name, "className",
+// embeddable.getClassName());
+// if (badClass != null) {
+// return badClass;
+// }
+//
+// return null;
+// }
+//
+// public void validateEntity(ValidationResult validationBuffer, ObjEntity entity, boolean clientValidation) {
+//
+// ValidationFailure entityFailure = validateEntity(clientValidation ? entity.getClientEntity() : entity);
+// if (entityFailure != null) {
+// validationBuffer.addFailure(entityFailure);
+// return;
+// }
+//
+// for (ObjAttribute attribute : entity.getAttributes()) {
+// if (attribute instanceof EmbeddedAttribute) {
+// EmbeddedAttribute embeddedAttribute = (EmbeddedAttribute) attribute;
+// for (ObjAttribute subAttribute : embeddedAttribute.getAttributes()) {
+// ValidationFailure failure = validateEmbeddedAttribute(subAttribute);
+// if (failure != null) {
+// validationBuffer.addFailure(failure);
+// return;
+// }
+// }
+// } else {
+//
+// ValidationFailure failure = validateAttribute(attribute);
+// if (failure != null) {
+// validationBuffer.addFailure(failure);
+// return;
+// }
+// }
+// }
+//
+// for (ObjRelationship rel : entity.getRelationships()) {
+// ValidationFailure failure = validateRelationship(rel, clientValidation);
+// if (failure != null) {
+// validationBuffer.addFailure(failure);
+// return;
+// }
+// }
+// }
+//
+// private ValidationFailure validateEntity(ObjEntity entity) {
+//
+// String name = entity.getName();
+//
+// if (entity.isGeneric()) {
+// return new SimpleValidationFailure(name, "Generic class");
+// }
+//
+// ValidationFailure emptyClass = BeanValidationFailure.validateNotEmpty(name, "className", entity.getClassName());
+// if (emptyClass != null) {
+// return emptyClass;
+// }
+//
+// ValidationFailure badClass = BeanValidationFailure.validateJavaClassName(name, "className",
+// entity.getClassName());
+// if (badClass != null) {
+// return badClass;
+// }
+//
+// if (entity.getSuperClassName() != null) {
+// ValidationFailure badSuperClass = BeanValidationFailure.validateJavaClassName(name, "superClassName",
+// entity.getSuperClassName());
+// if (badSuperClass != null) {
+// return badSuperClass;
+// }
+// }
+//
+// return null;
+// }
+//
+// private ValidationFailure validateAttribute(ObjAttribute attribute) {
+//
+// String name = attribute.getEntity().getName();
+//
+// ValidationFailure emptyName = BeanValidationFailure.validateNotEmpty(name, "attribute.name",
+// attribute.getName());
+// if (emptyName != null) {
+// return emptyName;
+// }
+//
+// ValidationFailure badName = CodeValidationUtil.validateJavaIdentifier(name, "attribute.name",
+// attribute.getName());
+// if (badName != null) {
+// return badName;
+// }
+//
+// ValidationFailure emptyType = BeanValidationFailure.validateNotEmpty(name, "attribute.type",
+// attribute.getType());
+// if (emptyType != null) {
+// return emptyType;
+// }
+//
+// ValidationFailure badType = BeanValidationFailure.validateJavaClassName(name, "attribute.type",
+// attribute.getType());
+// if (badType != null) {
+// return badType;
+// }
+//
+// return null;
+// }
+//
+// private ValidationFailure validateEmbeddedAttribute(ObjAttribute attribute) {
+//
+// String name = attribute.getEntity().getName();
+//
+// // validate embeddedAttribute and attribute names
+// // embeddedAttribute returned attibute as
+// // [name_embeddedAttribute].[name_attribute]
+// String[] attributes = attribute.getName().split("\\.");
+// String nameEmbeddedAttribute = attributes[0];
+// int beginIndex = attributes[0].length();
+// String attr = attribute.getName().substring(beginIndex + 1);
+//
+// ValidationFailure emptyEmbeddedName = BeanValidationFailure.validateNotEmpty(name, "attribute.name",
+// nameEmbeddedAttribute);
+// if (emptyEmbeddedName != null) {
+// return emptyEmbeddedName;
+// }
+//
+// ValidationFailure badEmbeddedName = CodeValidationUtil.validateJavaIdentifier(name, "attribute.name",
+// nameEmbeddedAttribute);
+// if (badEmbeddedName != null) {
+// return badEmbeddedName;
+// }
+//
+// ValidationFailure emptyName = BeanValidationFailure.validateNotEmpty(name, "attribute.name", attr);
+// if (emptyName != null) {
+// return emptyName;
+// }
+//
+// ValidationFailure badName = CodeValidationUtil.validateJavaIdentifier(name, "attribute.name", attr);
+// if (badName != null) {
+// return badName;
+// }
+//
+// ValidationFailure emptyType = BeanValidationFailure.validateNotEmpty(name, "attribute.type",
+// attribute.getType());
+// if (emptyType != null) {
+// return emptyType;
+// }
+//
+// ValidationFailure badType = BeanValidationFailure.validateJavaClassName(name, "attribute.type",
+// attribute.getType());
+// if (badType != null) {
+// return badType;
+// }
+//
+// return null;
+// }
+//
+// private ValidationFailure validateRelationship(ObjRelationship relationship, boolean clientValidation) {
+//
+// String name = relationship.getSourceEntity().getName();
+//
+// ValidationFailure emptyName = BeanValidationFailure.validateNotEmpty(name, "relationship.name",
+// relationship.getName());
+// if (emptyName != null) {
+// return emptyName;
+// }
+//
+// ValidationFailure badName = CodeValidationUtil.validateJavaIdentifier(name, "relationship.name",
+// relationship.getName());
+// if (badName != null) {
+// return badName;
+// }
+//
+// if (!relationship.isToMany()) {
+//
+// ObjEntity targetEntity = relationship.getTargetEntity();
+//
+// if (clientValidation && targetEntity != null) {
+// targetEntity = targetEntity.getClientEntity();
+// }
+//
+// if (targetEntity == null) {
+//
+// return new BeanValidationFailure(name, "relationship.targetEntity", "No target entity");
+// } else if (!targetEntity.isGeneric()) {
+// ValidationFailure emptyClass = BeanValidationFailure.validateNotEmpty(name,
+// "relationship.targetEntity.className", targetEntity.getClassName());
+// if (emptyClass != null) {
+// return emptyClass;
+// }
+//
+// ValidationFailure badClass = BeanValidationFailure.validateJavaClassName(name,
+// "relationship.targetEntity.className", targetEntity.getClassName());
+// if (badClass != null) {
+// return badClass;
+// }
+// }
+// }
+//
+// return null;
+// }
+//
+// /**
+// * Returns a predicate for default entity selection in a given mode.
+// */
+// public Predicate getDefaultClassFilter() {
+// return object -> {
+// if (object instanceof ObjEntity) {
+// return getParentController().getProblem(((ObjEntity) object).getName()) == null;
+// }
+//
+// if (object instanceof Embeddable) {
+// return getParentController().getProblem(((Embeddable) object).getClassName()) == null;
+// }
+//
+// return false;
+// };
+// }
+//
+// private File getOutputDir() {
+// String dir = ((GeneratorControllerPanel) getView()).getOutputFolder().getText();
+// return dir != null ? new File(dir) : new File(System.getProperty("user.dir"));
+// }
+//
+// /**
+// * An action method that pops up a file chooser dialog to pick the
+// * generation directory.
+// */
+// public void selectOutputFolderAction() {
+//
+// JTextField outputFolder = ((GeneratorControllerPanel) getView()).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();
+// outputFolder.setText(path);
+// setOutputPath(path);
+// }
+// }
+//
+// private void initOutputFolder() {
+// String path;
+// if (getOutputPath() == null) {
+// if (System.getProperty("cayenne.cgen.destdir") != null) {
+// setOutputPath(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) {
+// setOutputPath(path);
+// } else {
+// File lastDir = (lastPath != null) ? lastPath.getExistingDirectory(false) : null;
+// setOutputPath(lastDir != null ? lastDir.getAbsolutePath() : null);
+// }
+// }
+// }
+// }
+//
+// private String checkDefaultMavenResourceDir(FSPath lastPath, String dirType) {
+// String path = lastPath.getPath();
+// String resourcePath = buildFilePath("src", dirType, "resources");
+// int idx = path.indexOf(resourcePath);
+// if (idx < 0) {
+// return null;
+// }
+// return path.substring(0, idx) + buildFilePath("src", dirType, "java");
+// }
+//
+// private static String buildFilePath(String... pathElements) {
+// if (pathElements.length == 0) {
+// return "";
+// }
+// StringBuilder path = new StringBuilder(pathElements[0]);
+// for (int i = 1; i < pathElements.length; i++) {
+// path.append(File.separator).append(pathElements[i]);
+// }
+// return path.toString();
+// }
+//}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cayenne/blob/52ea45b5/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorControllerPanel.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorControllerPanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorControllerPanel.java
index 49cbc4b..276284f 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorControllerPanel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorControllerPanel.java
@@ -1,55 +1,55 @@
-/*****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- ****************************************************************/
-
-package org.apache.cayenne.modeler.dialog.codegen;
-
-import javax.swing.JButton;
-import javax.swing.JPanel;
-import javax.swing.JTextField;
-import java.util.ArrayList;
-import java.util.Collection;
-
-/**
- * A generic panel that is a superclass of generator panels, defining common fields.
- *
- */
-public class GeneratorControllerPanel extends JPanel {
-
- protected Collection<StandardPanelComponent> dataMapLines;
- protected JTextField outputFolder;
- protected JButton selectOutputFolder;
-
- public GeneratorControllerPanel() {
- this.dataMapLines = new ArrayList<>();
- this.outputFolder = new JTextField();
- this.selectOutputFolder = new JButton("Select");
- }
-
- public JTextField getOutputFolder() {
- return outputFolder;
- }
-
- public JButton getSelectOutputFolder() {
- return selectOutputFolder;
- }
-
- public Collection<StandardPanelComponent> getDataMapLines() {
- return dataMapLines;
- }
-}
\ No newline at end of file
+///*****************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one
+// * or more contributor license agreements. See the NOTICE file
+// * distributed with this work for additional information
+// * regarding copyright ownership. The ASF licenses this file
+// * to you under the Apache License, Version 2.0 (the
+// * "License"); you may not use this file except in compliance
+// * with the License. You may obtain a copy of the License at
+// *
+// * http://www.apache.org/licenses/LICENSE-2.0
+// *
+// * Unless required by applicable law or agreed to in writing,
+// * software distributed under the License is distributed on an
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// * KIND, either express or implied. See the License for the
+// * specific language governing permissions and limitations
+// * under the License.
+// ****************************************************************/
+//
+//package org.apache.cayenne.modeler.dialog.codegen;
+//
+//import javax.swing.JButton;
+//import javax.swing.JPanel;
+//import javax.swing.JTextField;
+//import java.util.ArrayList;
+//import java.util.Collection;
+//
+///**
+// * A generic panel that is a superclass of generator panels, defining common fields.
+// *
+// */
+//public class GeneratorControllerPanel extends JPanel {
+//
+// protected Collection<StandardPanelComponent> dataMapLines;
+// protected JTextField outputFolder;
+// protected JButton selectOutputFolder;
+//
+// public GeneratorControllerPanel() {
+// this.dataMapLines = new ArrayList<>();
+// this.outputFolder = new JTextField();
+// this.selectOutputFolder = new JButton("Select");
+// }
+//
+// public JTextField getOutputFolder() {
+// return outputFolder;
+// }
+//
+// public JButton getSelectOutputFolder() {
+// return selectOutputFolder;
+// }
+//
+// public Collection<StandardPanelComponent> getDataMapLines() {
+// return dataMapLines;
+// }
+//}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cayenne/blob/52ea45b5/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorTabController.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorTabController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorTabController.java
index 5d7594f..8b915fe 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorTabController.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorTabController.java
@@ -1,115 +1,115 @@
-/*****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- ****************************************************************/
-
-package org.apache.cayenne.modeler.dialog.codegen;
-
-import org.apache.cayenne.gen.ClassGenerationAction;
-import org.apache.cayenne.modeler.util.CayenneController;
-import org.apache.cayenne.pref.CayenneProjectPreferences;
-import org.apache.cayenne.pref.PreferenceDetail;
-import org.apache.cayenne.swing.BindingBuilder;
-import org.apache.cayenne.util.Util;
-
-import java.awt.Component;
-import java.awt.Dimension;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- */
-public class GeneratorTabController extends CayenneController {
-
- private static final String STANDARD_OBJECTS_MODE = "Standard Persistent Objects";
- private static final String CLIENT_OBJECTS_MODE = "Client Persistent Objects";
- private static final String ADVANCED_MODE = "Advanced";
-
- public static final String GENERATOR_PROPERTY = "generator";
-
- private static final String[] GENERATION_MODES = new String[] {
- STANDARD_OBJECTS_MODE, CLIENT_OBJECTS_MODE, ADVANCED_MODE
- };
-
- protected GeneratorTabPanel view;
- protected Map controllers;
- protected PreferenceDetail preferences;
-
- public GeneratorTabController(CodeGeneratorControllerBase parent) {
- super(parent);
-
- this.controllers = new HashMap(5);
- controllers.put(STANDARD_OBJECTS_MODE, new StandardModeController(parent));
- controllers.put(CLIENT_OBJECTS_MODE, new ClientModeController(parent));
- controllers.put(ADVANCED_MODE, new CustomModeController(parent));
-
- Component[] modePanels = new Component[GENERATION_MODES.length];
- for (int i = 0; i < GENERATION_MODES.length; i++) {
- modePanels[i] = ((GeneratorController) controllers.get(GENERATION_MODES[i]))
- .getView();
- }
-
- this.view = new GeneratorTabPanel(GENERATION_MODES, modePanels);
- initBindings();
- view.setPreferredSize(new Dimension(600, 480));
- }
-
- public Component getView() {
- return view;
- }
-
- protected CodeGeneratorControllerBase getParentController() {
- return (CodeGeneratorControllerBase) getParent();
- }
-
- protected void initBindings() {
-
- // bind actions
- BindingBuilder builder = new BindingBuilder(
- getApplication().getBindingFactory(),
- this);
-
- CayenneProjectPreferences cayPrPref = application.getCayenneProjectPreferences();
-
- this.preferences = (PreferenceDetail) cayPrPref.getProjectDetailObject(
- PreferenceDetail.class,
- getViewPreferences().node("controller"));
-
- if (Util.isEmptyString(preferences.getProperty("mode"))) {
- preferences.setProperty("mode", STANDARD_OBJECTS_MODE);
- }
-
- builder.bindToComboSelection(
- view.getGenerationMode(),
- "preferences.property['mode']").updateView();
- }
-
- public PreferenceDetail getPreferences() {
- return preferences;
- }
-
- public GeneratorController getGeneratorController() {
- Object name = view.getGenerationMode().getSelectedItem();
- return (GeneratorController) controllers.get(name);
- }
-
- public Collection<ClassGenerationAction> getGenerator() {
- GeneratorController modeController = getGeneratorController();
- return (modeController != null) ? modeController.createGenerator() : null;
- }
-}
\ No newline at end of file
+///*****************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one
+// * or more contributor license agreements. See the NOTICE file
+// * distributed with this work for additional information
+// * regarding copyright ownership. The ASF licenses this file
+// * to you under the Apache License, Version 2.0 (the
+// * "License"); you may not use this file except in compliance
+// * with the License. You may obtain a copy of the License at
+// *
+// * http://www.apache.org/licenses/LICENSE-2.0
+// *
+// * Unless required by applicable law or agreed to in writing,
+// * software distributed under the License is distributed on an
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// * KIND, either express or implied. See the License for the
+// * specific language governing permissions and limitations
+// * under the License.
+// ****************************************************************/
+//
+//package org.apache.cayenne.modeler.dialog.codegen;
+//
+//import org.apache.cayenne.gen.ClassGenerationAction;
+//import org.apache.cayenne.modeler.util.CayenneController;
+//import org.apache.cayenne.pref.CayenneProjectPreferences;
+//import org.apache.cayenne.pref.PreferenceDetail;
+//import org.apache.cayenne.swing.BindingBuilder;
+//import org.apache.cayenne.util.Util;
+//
+//import java.awt.Component;
+//import java.awt.Dimension;
+//import java.util.Collection;
+//import java.util.HashMap;
+//import java.util.Map;
+//
+///**
+// */
+//public class GeneratorTabController extends CayenneController {
+//
+// private static final String STANDARD_OBJECTS_MODE = "Standard Persistent Objects";
+// private static final String CLIENT_OBJECTS_MODE = "Client Persistent Objects";
+// private static final String ADVANCED_MODE = "Advanced";
+//
+// public static final String GENERATOR_PROPERTY = "generator";
+//
+// private static final String[] GENERATION_MODES = new String[] {
+// STANDARD_OBJECTS_MODE, CLIENT_OBJECTS_MODE, ADVANCED_MODE
+// };
+//
+// protected GeneratorTabPanel view;
+// protected Map controllers;
+// protected PreferenceDetail preferences;
+//
+// public GeneratorTabController(CodeGeneratorControllerBase parent) {
+// super(parent);
+//
+// this.controllers = new HashMap(5);
+// controllers.put(STANDARD_OBJECTS_MODE, new StandardModeController(parent));
+// controllers.put(CLIENT_OBJECTS_MODE, new ClientModeController(parent));
+// controllers.put(ADVANCED_MODE, new CustomModeController(parent));
+//
+// Component[] modePanels = new Component[GENERATION_MODES.length];
+// for (int i = 0; i < GENERATION_MODES.length; i++) {
+// modePanels[i] = ((GeneratorController) controllers.get(GENERATION_MODES[i]))
+// .getView();
+// }
+//
+// this.view = new GeneratorTabPanel(GENERATION_MODES, modePanels);
+// initBindings();
+// view.setPreferredSize(new Dimension(600, 480));
+// }
+//
+// public Component getView() {
+// return view;
+// }
+//
+// protected CodeGeneratorControllerBase getParentController() {
+// return (CodeGeneratorControllerBase) getParent();
+// }
+//
+// protected void initBindings() {
+//
+// // bind actions
+// BindingBuilder builder = new BindingBuilder(
+// getApplication().getBindingFactory(),
+// this);
+//
+// CayenneProjectPreferences cayPrPref = application.getCayenneProjectPreferences();
+//
+// this.preferences = (PreferenceDetail) cayPrPref.getProjectDetailObject(
+// PreferenceDetail.class,
+// getViewPreferences().node("controller"));
+//
+// if (Util.isEmptyString(preferences.getProperty("mode"))) {
+// preferences.setProperty("mode", STANDARD_OBJECTS_MODE);
+// }
+//
+// builder.bindToComboSelection(
+// view.getGenerationMode(),
+// "preferences.property['mode']").updateView();
+// }
+//
+// public PreferenceDetail getPreferences() {
+// return preferences;
+// }
+//
+// public GeneratorController getGeneratorController() {
+// Object name = view.getGenerationMode().getSelectedItem();
+// return (GeneratorController) controllers.get(name);
+// }
+//
+// public Collection<ClassGenerationAction> getConfiguration() {
+// GeneratorController modeController = getGeneratorController();
+// return (modeController != null) ? modeController.createConfiguration() : null;
+// }
+//}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cayenne/blob/52ea45b5/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorTabPanel.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorTabPanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorTabPanel.java
index 854e2d6..c6095ad 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorTabPanel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorTabPanel.java
@@ -1,65 +1,65 @@
-/*****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- ****************************************************************/
-
-package org.apache.cayenne.modeler.dialog.codegen;
-
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-import com.jgoodies.forms.layout.FormLayout;
-
-import javax.swing.JComboBox;
-import javax.swing.JPanel;
-import java.awt.BorderLayout;
-import java.awt.CardLayout;
-import java.awt.Component;
-
-/**
- */
-public class GeneratorTabPanel extends JPanel {
-
- protected JComboBox generationMode;
- protected CardLayout modeLayout;
- protected JPanel modesPanel;
-
- public GeneratorTabPanel(String[] modeNames, Component[] modePanels) {
- this.generationMode = new JComboBox(modeNames);
- this.modeLayout = new CardLayout();
- this.modesPanel = new JPanel(modeLayout);
-
- generationMode.addItemListener(e -> modeLayout.show(modesPanel, generationMode.getSelectedItem().toString()));
-
- // assemble
- FormLayout layout = new FormLayout("right:70dlu, 3dlu, fill:300, fill:100dlu:grow", "");
- DefaultFormBuilder builder = new DefaultFormBuilder(layout);
- builder.setDefaultDialogBorder();
- builder.append("Type:", generationMode, 1);
- builder.appendSeparator();
-
- for (int i = 0; i < modeNames.length; i++) {
- modesPanel.add(modePanels[i], modeNames[i]);
- }
-
- setLayout(new BorderLayout());
- add(builder.getPanel(), BorderLayout.NORTH);
- add(modesPanel, BorderLayout.CENTER);
- }
-
- public JComboBox getGenerationMode() {
- return generationMode;
- }
-}
\ No newline at end of file
+///*****************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one
+// * or more contributor license agreements. See the NOTICE file
+// * distributed with this work for additional information
+// * regarding copyright ownership. The ASF licenses this file
+// * to you under the Apache License, Version 2.0 (the
+// * "License"); you may not use this file except in compliance
+// * with the License. You may obtain a copy of the License at
+// *
+// * http://www.apache.org/licenses/LICENSE-2.0
+// *
+// * Unless required by applicable law or agreed to in writing,
+// * software distributed under the License is distributed on an
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// * KIND, either express or implied. See the License for the
+// * specific language governing permissions and limitations
+// * under the License.
+// ****************************************************************/
+//
+//package org.apache.cayenne.modeler.dialog.codegen;
+//
+//import com.jgoodies.forms.builder.DefaultFormBuilder;
+//import com.jgoodies.forms.layout.FormLayout;
+//
+//import javax.swing.JComboBox;
+//import javax.swing.JPanel;
+//import java.awt.BorderLayout;
+//import java.awt.CardLayout;
+//import java.awt.Component;
+//
+///**
+// */
+//public class GeneratorTabPanel extends JPanel {
+//
+// protected JComboBox generationMode;
+// protected CardLayout modeLayout;
+// protected JPanel modesPanel;
+//
+// public GeneratorTabPanel(String[] modeNames, Component[] modePanels) {
+// this.generationMode = new JComboBox(modeNames);
+// this.modeLayout = new CardLayout();
+// this.modesPanel = new JPanel(modeLayout);
+//
+// generationMode.addItemListener(e -> modeLayout.show(modesPanel, generationMode.getSelectedItem().toString()));
+//
+// // assemble
+// FormLayout layout = new FormLayout("right:70dlu, 3dlu, fill:300, fill:100dlu:grow", "");
+// DefaultFormBuilder builder = new DefaultFormBuilder(layout);
+// builder.setDefaultDialogBorder();
+// builder.append("Type:", generationMode, 1);
+// builder.appendSeparator();
+//
+// for (int i = 0; i < modeNames.length; i++) {
+// modesPanel.add(modePanels[i], modeNames[i]);
+// }
+//
+// setLayout(new BorderLayout());
+// add(builder.getPanel(), BorderLayout.NORTH);
+// add(modesPanel, BorderLayout.CENTER);
+// }
+//
+// public JComboBox getGenerationMode() {
+// return generationMode;
+// }
+//}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cayenne/blob/52ea45b5/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/StandardModeController.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/StandardModeController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/StandardModeController.java
index b0650d8..547f408 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/StandardModeController.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/StandardModeController.java
@@ -1,82 +1,82 @@
-/*****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- ****************************************************************/
-
-package org.apache.cayenne.modeler.dialog.codegen;
-
-import org.apache.cayenne.gen.ClassGenerationAction;
-import org.apache.cayenne.map.DataMap;
-import org.apache.cayenne.modeler.pref.DataMapDefaults;
-
-import java.awt.Component;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.TreeMap;
-
-public class StandardModeController extends GeneratorController {
-
- protected StandardModePanel view;
- protected DataMapDefaults preferences;
-
- public StandardModeController(CodeGeneratorControllerBase parent) {
- super(parent);
- }
-
- protected void createDefaults() {
- TreeMap<DataMap, DataMapDefaults> treeMap = new TreeMap<>();
- ArrayList<DataMap> dataMaps = (ArrayList<DataMap>) getParentController().getDataMaps();
-
- for (DataMap dataMap : dataMaps) {
- DataMapDefaults preferences = getApplication()
- .getFrameController()
- .getProjectController()
- .getDataMapPreferences(dataMap);
-
- preferences.setSuperclassPackage("");
- preferences.updateSuperclassPackage(dataMap, false);
-
- treeMap.put(dataMap, preferences);
- if (getOutputPath() == null) {
- setOutputPath(preferences.getOutputPath());
- }
- }
-
- setMapPreferences(treeMap);
- }
-
- protected GeneratorControllerPanel createView() {
- this.view = new StandardModePanel();
- return view;
- }
-
- public Component getView() {
- return view;
- }
-
- @Override
- protected ClassGenerationAction newGenerator() {
- ClassGenerationAction action = new ClassGenerationAction();
- getApplication().getInjector().injectMembers(action);
- return action;
- }
-
- @Override
- public Collection<ClassGenerationAction> createGenerator() {
- return super.createGenerator();
- }
-}
\ No newline at end of file
+///*****************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one
+// * or more contributor license agreements. See the NOTICE file
+// * distributed with this work for additional information
+// * regarding copyright ownership. The ASF licenses this file
+// * to you under the Apache License, Version 2.0 (the
+// * "License"); you may not use this file except in compliance
+// * with the License. You may obtain a copy of the License at
+// *
+// * http://www.apache.org/licenses/LICENSE-2.0
+// *
+// * Unless required by applicable law or agreed to in writing,
+// * software distributed under the License is distributed on an
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// * KIND, either express or implied. See the License for the
+// * specific language governing permissions and limitations
+// * under the License.
+// ****************************************************************/
+//
+//package org.apache.cayenne.modeler.dialog.codegen;
+//
+//import org.apache.cayenne.gen.ClassGenerationAction;
+//import org.apache.cayenne.map.DataMap;
+//import org.apache.cayenne.modeler.pref.DataMapDefaults;
+//
+//import java.awt.Component;
+//import java.util.ArrayList;
+//import java.util.Collection;
+//import java.util.TreeMap;
+//
+//public class StandardModeController extends GeneratorController {
+//
+// protected StandardModePanel view;
+// protected DataMapDefaults preferences;
+//
+// public StandardModeController(CodeGeneratorControllerBase parent) {
+// super(parent);
+// }
+//
+// protected void createDefaults() {
+// TreeMap<DataMap, DataMapDefaults> treeMap = new TreeMap<>();
+// ArrayList<DataMap> dataMaps = (ArrayList<DataMap>) getParentController().getDataMaps();
+//
+// for (DataMap dataMap : dataMaps) {
+// DataMapDefaults preferences = getApplication()
+// .getFrameController()
+// .getProjectController()
+// .getDataMapPreferences(dataMap);
+//
+// preferences.setSuperclassPackage("");
+// preferences.updateSuperclassPackage(dataMap, false);
+//
+// treeMap.put(dataMap, preferences);
+// if (getOutputPath() == null) {
+// setOutputPath(preferences.getOutputPath());
+// }
+// }
+//
+// setMapPreferences(treeMap);
+// }
+//
+// protected GeneratorControllerPanel createView() {
+// this.view = new StandardModePanel();
+// return view;
+// }
+//
+// public Component getView() {
+// return view;
+// }
+//
+// @Override
+// protected ClassGenerationAction newGenerator() {
+// ClassGenerationAction action = new ClassGenerationAction();
+// getApplication().getInjector().injectMembers(action);
+// return action;
+// }
+//
+// @Override
+// public Collection<ClassGenerationAction> createConfiguration() {
+// return super.createConfiguration();
+// }
+//}
\ No newline at end of file
[07/32] cayenne git commit: Add merge pom config with dataMap config
Posted by nt...@apache.org.
Add merge pom config with dataMap config
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/b10cd803
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/b10cd803
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/b10cd803
Branch: refs/heads/master
Commit: b10cd803a005065ed55f07ba57eb9dce3b5addbf
Parents: e41f1e4
Author: Arseni Bulatski <an...@gmail.com>
Authored: Tue Jun 26 13:45:41 2018 +0300
Committer: Arseni Bulatski <an...@gmail.com>
Committed: Wed Oct 24 13:42:16 2018 +0300
----------------------------------------------------------------------
.../java/org/apache/cayenne/gen/CgenModule.java | 13 ++++
.../cayenne/gen/ClassGenerationAction.java | 46 ++++++++-----
.../cayenne/tools/CayenneGeneratorMojo.java | 69 +++++++++++---------
.../editor/cgen/CustomModeController.java | 1 +
4 files changed, 82 insertions(+), 47 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b10cd803/cayenne-cgen/src/main/java/org/apache/cayenne/gen/CgenModule.java
----------------------------------------------------------------------
diff --git a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/CgenModule.java b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/CgenModule.java
new file mode 100644
index 0000000..79e411e
--- /dev/null
+++ b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/CgenModule.java
@@ -0,0 +1,13 @@
+package org.apache.cayenne.gen;
+
+import org.apache.cayenne.di.Binder;
+import org.apache.cayenne.di.Module;
+import org.apache.cayenne.gen.xml.CgenExtension;
+import org.apache.cayenne.project.ProjectModule;
+
+public class CgenModule implements Module{
+ @Override
+ public void configure(Binder binder) {
+ ProjectModule.contributeExtensions(binder).add(CgenExtension.class);
+ }
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b10cd803/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 5b10a07..afd58e0 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
@@ -91,29 +91,39 @@ public class ClassGenerationAction implements Serializable, XMLSerializable {
protected VelocityContext context;
protected Map<String, Template> templateCache;
+
public ClassGenerationAction() {
- this.outputPattern = "*.java";
- this.timestamp = 0L;
- this.usePkgPath = true;
- this.makePairs = true;
- this.context = new VelocityContext();
- this.templateCache = new HashMap<>(5);
+ this.outputPattern = "*.java";
+ this.timestamp = 0L;
+ this.usePkgPath = true;
+ this.makePairs = true;
+ this.context = new VelocityContext();
+ this.templateCache = new HashMap<>(5);
- this.template = SUBCLASS_TEMPLATE;
- this.superTemplate = SUPERCLASS_TEMPLATE;
+ this.artifacts = new ArrayList<>();
+ this.entityArtifacts = new ArrayList<>();
+ this.embeddableArtifacts = new ArrayList<>();
+ }
- this.embeddableTemplate = EMBEDDABLE_SUBCLASS_TEMPLATE;
- this.embeddableSuperTemplate = EMBEDDABLE_SUPERCLASS_TEMPLATE;
+ public void setDefaults() {
+ this.outputPattern = "*.java";
+ this.timestamp = 0L;
+ this.usePkgPath = true;
+ this.makePairs = true;
+ this.context = new VelocityContext();
+ this.templateCache = new HashMap<>(5);
- this.queryTemplate = DATAMAP_SUBCLASS_TEMPLATE;
- this.querySuperTemplate = DATAMAP_SUPERCLASS_TEMPLATE;
+ this.template = SUBCLASS_TEMPLATE;
+ this.superTemplate = SUPERCLASS_TEMPLATE;
- this.artifactsGenerationMode = ArtifactsGenerationMode.ENTITY;
+ this.embeddableTemplate = EMBEDDABLE_SUBCLASS_TEMPLATE;
+ this.embeddableSuperTemplate = EMBEDDABLE_SUPERCLASS_TEMPLATE;
- this.artifacts = new ArrayList<>();
- this.entityArtifacts = new ArrayList<>();
- this.embeddableArtifacts = new ArrayList<>();
- }
+ this.queryTemplate = DATAMAP_SUBCLASS_TEMPLATE;
+ this.querySuperTemplate = DATAMAP_SUPERCLASS_TEMPLATE;
+
+ this.artifactsGenerationMode = ArtifactsGenerationMode.ENTITY;
+ }
protected String defaultTemplateName(TemplateType type) {
switch (type) {
@@ -704,6 +714,8 @@ public class ClassGenerationAction implements Serializable, XMLSerializable {
return destDir.getAbsolutePath();
}
+ public File getDestDir() { return destDir; }
+
public String getTemplate() {
return template;
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b10cd803/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 d043c30..42a2e8d 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
@@ -19,10 +19,12 @@
package org.apache.cayenne.tools;
+import org.apache.cayenne.configuration.xml.DataChannelMetaData;
import org.apache.cayenne.dbsync.filter.NamePatternMatcher;
import org.apache.cayenne.dbsync.reverse.configuration.ToolsModule;
import org.apache.cayenne.di.DIBootstrap;
import org.apache.cayenne.di.Injector;
+import org.apache.cayenne.gen.CgenModule;
import org.apache.cayenne.gen.ClassGenerationAction;
import org.apache.cayenne.gen.ClientClassGenerationAction;
import org.apache.cayenne.map.DataMap;
@@ -96,8 +98,8 @@ public class CayenneGeneratorMojo extends AbstractMojo {
* with all generated code included in superclass (default is
* <code>true</code>).
*/
- @Parameter(defaultValue = "true")
- private boolean makePairs;
+ @Parameter
+ private String makePairs;
/**
* DataMap XML file to use as a base for class generation.
@@ -117,15 +119,15 @@ public class CayenneGeneratorMojo extends AbstractMojo {
/**
* Name of file for generated output. (Default is "*.java")
*/
- @Parameter(defaultValue = "*.java")
+ @Parameter
private String outputPattern;
/**
* If set to <code>true</code>, will overwrite older versions of generated
* classes. Ignored unless makepairs is set to <code>false</code>.
*/
- @Parameter(defaultValue = "false")
- private boolean overwrite;
+ @Parameter
+ private String overwrite;
/**
* Java package name of generated superclasses. Ignored unless
@@ -174,15 +176,15 @@ public class CayenneGeneratorMojo extends AbstractMojo {
* <code>false</code>, classes will be generated in "destDir"
* ignoring their package.
*/
- @Parameter(defaultValue = "true")
- private boolean usePkgPath;
+ @Parameter
+ private String usePkgPath;
/**
* If set to <code>true</code>, will generate String Property names.
* Default is <code>false</code>.
*/
- @Parameter(defaultValue = "false")
- private boolean createPropertyNames;
+ @Parameter
+ private String createPropertyNames;
/**
* If set to <code>true</code>, will skip file modification time validation and regenerate all.
@@ -203,6 +205,8 @@ public class CayenneGeneratorMojo extends AbstractMojo {
private transient Injector injector;
+ private static final Logger logger = LoggerFactory.getLogger(CayenneGeneratorMojo.class);
+
public void execute() throws MojoExecutionException, MojoFailureException {
// Create the destination directory if necessary.
// TODO: (KJM 11/2/06) The destDir really should be added as a
@@ -211,7 +215,7 @@ public class CayenneGeneratorMojo extends AbstractMojo {
destDir.mkdirs();
}
- injector = DIBootstrap.createInjector(new ToolsModule(LoggerFactory.getLogger(CayenneGeneratorMojo.class)));
+ injector = DIBootstrap.createInjector(new CgenModule(), new ToolsModule(LoggerFactory.getLogger(CayenneGeneratorMojo.class)));
Logger logger = new MavenLogger(this);
CayenneGeneratorMapLoaderAction loaderAction = new CayenneGeneratorMapLoaderAction(injector);
@@ -226,7 +230,7 @@ public class CayenneGeneratorMojo extends AbstractMojo {
DataMap dataMap = loaderAction.getMainDataMap();
- ClassGenerationAction generator = createGenerator();
+ ClassGenerationAction generator = createGenerator(dataMap);
generator.setLogger(logger);
if(force) {
// will (re-)generate all files
@@ -234,9 +238,13 @@ public class CayenneGeneratorMojo extends AbstractMojo {
}
generator.setTimestamp(map.lastModified());
generator.setDataMap(dataMap);
- generator.addEntities(filterAction.getFilteredEntities(dataMap));
- generator.addEmbeddables(dataMap.getEmbeddables());
- generator.addQueries(dataMap.getQueryDescriptors());
+ if(!generator.getEntities().isEmpty() || !generator.getEmbeddables().isEmpty()){
+ generator.prepareArtifacts();
+ } else {
+ generator.addEntities(filterAction.getFilteredEntities(dataMap));
+ generator.addEmbeddables(dataMap.getEmbeddables());
+ generator.addQueries(dataMap.getQueryDescriptors());
+ }
generator.execute();
} catch (Exception e) {
throw new MojoExecutionException("Error generating classes: ", e);
@@ -265,32 +273,33 @@ public class CayenneGeneratorMojo extends AbstractMojo {
* Factory method to create internal class generator. Called from
* constructor.
*/
- protected ClassGenerationAction createGenerator() {
+ protected ClassGenerationAction createGenerator(DataMap dataMap) {
+
+ ClassGenerationAction action = injector.getInstance(DataChannelMetaData.class).get(dataMap, ClassGenerationAction.class);
- ClassGenerationAction action;
if (client) {
action = new ClientClassGenerationAction();
} else {
- action = new ClassGenerationAction();
+ if(action == null) {
+ action = new ClassGenerationAction();
+ }
}
injector.injectMembers(action);
action.setDestDir(destDir);
- action.setEncoding(encoding);
- action.setMakePairs(makePairs);
+ action.setEncoding(encoding != null ? encoding : action.getEncoding());
+ action.setMakePairs(makePairs != null ? Boolean.valueOf(makePairs) : action.isMakePairs());
action.setArtifactsGenerationMode(mode);
- action.setOutputPattern(outputPattern);
- action.setOverwrite(overwrite);
- action.setSuperPkg(superPkg);
- action.setSuperTemplate(superTemplate);
- action.setTemplate(template);
- action.setEmbeddableSuperTemplate(embeddableSuperTemplate);
- action.setEmbeddableTemplate(embeddableTemplate);
- action.setUsePkgPath(usePkgPath);
- action.setCreatePropertyNames(createPropertyNames);
- action.setCreatePKProperties(createPKProperties);
-
+ action.setOutputPattern(outputPattern != null ? outputPattern : action.getOutputPattern());
+ action.setOverwrite(overwrite != null ? Boolean.valueOf(overwrite) : action.isOverwrite());
+ action.setSuperPkg(superPkg != null ? superPkg : action.getSuperPkg());
+ action.setSuperTemplate(superTemplate != null ? superTemplate : action.getSuperclassTemplate());
+ action.setTemplate(template != null ? template : action.getTemplate());
+ action.setEmbeddableSuperTemplate(embeddableSuperTemplate != null ? embeddableSuperTemplate : action.getEmbeddableSuperTemplate());
+ action.setEmbeddableTemplate(embeddableTemplate != null ? embeddableTemplate : action.getEmbeddableTemplate());
+ action.setUsePkgPath(usePkgPath != null ? Boolean.valueOf(usePkgPath) : action.isUsePkgPath());
+ action.setCreatePropertyNames(createPropertyNames != null ? Boolean.valueOf(createPropertyNames) : action.isCreatePropertyNames());
return action;
}
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b10cd803/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 2559657..5666355 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
@@ -143,6 +143,7 @@ public class CustomModeController extends GeneratorController {
@Override
protected ClassGenerationAction newGenerator() {
ClassGenerationAction action = new ClassGenerationAction();
+ action.setDefaults();
getApplication().getInjector().injectMembers(action);
return action;
}
[08/32] cayenne git commit: Add loading cgen config loading from
datamap to maven, ant and gradle plugins
Posted by nt...@apache.org.
Add loading cgen config loading from datamap to maven, ant and gradle plugins
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/d9db6e31
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/d9db6e31
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/d9db6e31
Branch: refs/heads/master
Commit: d9db6e3123eae9e2863058c88d455837a244821c
Parents: b10cd80
Author: Arseni Bulatski <an...@gmail.com>
Authored: Thu Jun 28 15:00:26 2018 +0300
Committer: Arseni Bulatski <an...@gmail.com>
Committed: Wed Oct 24 13:44:24 2018 +0300
----------------------------------------------------------------------
.../cayenne/tools/CayenneGeneratorTask.java | 73 ++++++++-------
.../java/org/apache/cayenne/gen/CgenModule.java | 21 +++++
.../cayenne/gen/ClassGenerationAction.java | 55 ++++++-----
.../java/org/apache/cayenne/tools/CgenTask.java | 99 +++++++++++++-------
.../org/apache/cayenne/tools/CgenTaskTest.java | 9 +-
.../cayenne/tools/CayenneGeneratorMojo.java | 44 +++++----
.../cayenne/modeler/CayenneModelerFrame.java | 80 +++++++++++++++-
.../cayenne/modeler/action/CgenAction.java | 24 -----
.../modeler/dialog/codegen/cgen/CgenDialog.java | 36 ++++++-
.../codegen/cgen/CgenGlobalController.java | 25 ++++-
.../dialog/codegen/cgen/CgenGlobalPanel.java | 77 +++++++++------
.../codegen/cgen/CgenGlobalPanelController.java | 43 ++++++---
.../modeler/editor/DataMapTabbedView.java | 3 +-
.../editor/cgen/ClassesTabController.java | 4 +-
.../modeler/editor/cgen/ClassesTabPanel.java | 19 +++-
.../editor/cgen/CodeGeneratorController.java | 4 +-
.../modeler/editor/cgen/CodeGeneratorPane.java | 13 ++-
.../editor/cgen/CustomModeController.java | 16 ++--
.../modeler/editor/cgen/CustomModePanel.java | 79 ++++++++--------
.../editor/cgen/GeneratorController.java | 15 ++-
.../editor/cgen/GeneratorControllerPanel.java | 4 +-
.../editor/cgen/GeneratorTabController.java | 2 +-
.../modeler/editor/cgen/GeneratorTabPanel.java | 5 +-
.../cayenne/modeler/util/ComboBoxAdapter.java | 14 +--
24 files changed, 511 insertions(+), 253 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cayenne/blob/d9db6e31/cayenne-ant/src/main/java/org/apache/cayenne/tools/CayenneGeneratorTask.java
----------------------------------------------------------------------
diff --git a/cayenne-ant/src/main/java/org/apache/cayenne/tools/CayenneGeneratorTask.java b/cayenne-ant/src/main/java/org/apache/cayenne/tools/CayenneGeneratorTask.java
index 3d600b1..a82931e 100644
--- a/cayenne-ant/src/main/java/org/apache/cayenne/tools/CayenneGeneratorTask.java
+++ b/cayenne-ant/src/main/java/org/apache/cayenne/tools/CayenneGeneratorTask.java
@@ -19,11 +19,12 @@
package org.apache.cayenne.tools;
import foundrylogic.vpp.VPPConfig;
+import org.apache.cayenne.configuration.xml.DataChannelMetaData;
import org.apache.cayenne.dbsync.filter.NamePatternMatcher;
import org.apache.cayenne.dbsync.reverse.configuration.ToolsModule;
import org.apache.cayenne.di.DIBootstrap;
import org.apache.cayenne.di.Injector;
-import org.apache.cayenne.gen.ArtifactsGenerationMode;
+import org.apache.cayenne.gen.CgenModule;
import org.apache.cayenne.gen.ClassGenerationAction;
import org.apache.cayenne.gen.ClientClassGenerationAction;
import org.apache.cayenne.map.DataMap;
@@ -50,10 +51,10 @@ public class CayenneGeneratorTask extends CayenneTask {
protected boolean client;
protected File destDir;
protected String encoding;
- protected boolean makepairs;
+ protected Boolean makepairs;
protected String mode;
protected String outputPattern;
- protected boolean overwrite;
+ protected Boolean overwrite;
protected String superpkg;
protected String supertemplate;
protected String template;
@@ -61,8 +62,10 @@ public class CayenneGeneratorTask extends CayenneTask {
protected String embeddablesupertemplate;
protected String querytemplate;
protected String querysupertemplate;
- protected boolean usepkgpath;
- protected boolean createpropertynames;
+ protected Boolean usepkgpath;
+ protected Boolean createpropertynames;
+
+ private transient Injector injector;
/**
* Create PK attributes as Properties
@@ -72,10 +75,6 @@ public class CayenneGeneratorTask extends CayenneTask {
protected boolean createpkproperties;
public CayenneGeneratorTask() {
- this.makepairs = true;
- this.mode = ArtifactsGenerationMode.ENTITY.getLabel();
- this.outputPattern = "*.java";
- this.usepkgpath = true;
}
protected VelocityContext getVppContext() {
@@ -83,27 +82,33 @@ public class CayenneGeneratorTask extends CayenneTask {
return vppConfig.getVelocityContext();
}
- protected ClassGenerationAction createGeneratorAction() {
- ClassGenerationAction action = client ? new ClientClassGenerationAction() : new ClassGenerationAction();
+ protected ClassGenerationAction createGeneratorAction(DataMap dataMap) {
+ ClassGenerationAction action = injector.getInstance(DataChannelMetaData.class).get(dataMap, ClassGenerationAction.class);
+
+ if (client) {
+ action = new ClientClassGenerationAction();
+ } else {
+ if(action == null) {
+ action = new ClassGenerationAction();
+ }
+ }
action.setContext(getVppContext());
action.setDestDir(destDir);
- action.setEncoding(encoding);
- action.setMakePairs(makepairs);
- action.setArtifactsGenerationMode(mode);
- action.setOutputPattern(outputPattern);
- action.setOverwrite(overwrite);
- action.setSuperPkg(superpkg);
- action.setSuperTemplate(supertemplate);
- action.setTemplate(template);
- action.setEmbeddableSuperTemplate(embeddablesupertemplate);
- action.setEmbeddableTemplate(embeddabletemplate);
- action.setQueryTemplate(querytemplate);
- action.setQuerySuperTemplate(querysupertemplate);
- action.setUsePkgPath(usepkgpath);
- action.setCreatePropertyNames(createpropertynames);
- action.setCreatePKProperties(createpkproperties);
-
+ action.setEncoding(encoding != null ? encoding : action.getEncoding());
+ action.setMakePairs(makepairs != null ? makepairs : action.isMakePairs());
+ action.setArtifactsGenerationMode(mode != null ? mode : action.getArtifactsGenerationMode());
+ action.setOutputPattern(outputPattern != null ? outputPattern : action.getOutputPattern());
+ action.setOverwrite(overwrite != null ? overwrite : action.isOverwrite());
+ action.setSuperPkg(superpkg != null ? superpkg : action.getSuperPkg());
+ action.setSuperTemplate(supertemplate != null ? supertemplate : action.getSuperclassTemplate());
+ action.setTemplate(template != null ? template : action.getTemplate());
+ action.setEmbeddableSuperTemplate(embeddablesupertemplate != null ? embeddablesupertemplate : action.getEmbeddableSuperTemplate());
+ action.setEmbeddableTemplate(embeddabletemplate != null ? embeddabletemplate : action.getEmbeddableTemplate());
+ action.setUsePkgPath(usepkgpath != null ? usepkgpath : action.isUsePkgPath());
+ action.setCreatePropertyNames(createpropertynames != null ? createpropertynames : action.isCreatePropertyNames());
+ action.setQueryTemplate(querytemplate != null ? querytemplate : action.getQueryTemplate());
+ action.setQuerySuperTemplate(querysupertemplate != null ? querysupertemplate : action.getQuerySuperTemplate());
return action;
}
@@ -114,7 +119,7 @@ public class CayenneGeneratorTask extends CayenneTask {
public void execute() throws BuildException {
validateAttributes();
- Injector injector = DIBootstrap.createInjector(new ToolsModule(LoggerFactory.getLogger(CayenneGeneratorTask.class)));
+ injector = DIBootstrap.createInjector(new CgenModule(), new ToolsModule(LoggerFactory.getLogger(CayenneGeneratorTask.class)));
AntLogger logger = new AntLogger(this);
CayenneGeneratorMapLoaderAction loadAction = new CayenneGeneratorMapLoaderAction(injector);
@@ -130,13 +135,17 @@ public class CayenneGeneratorTask extends CayenneTask {
DataMap dataMap = loadAction.getMainDataMap();
- ClassGenerationAction generatorAction = createGeneratorAction();
+ ClassGenerationAction generatorAction = createGeneratorAction(dataMap);
generatorAction.setLogger(logger);
generatorAction.setTimestamp(map.lastModified());
generatorAction.setDataMap(dataMap);
- generatorAction.addEntities(filterAction.getFilteredEntities(dataMap));
- generatorAction.addEmbeddables(filterAction.getFilteredEmbeddables(dataMap));
- generatorAction.addQueries(dataMap.getQueryDescriptors());
+ if(!generatorAction.getEntities().isEmpty() || !generatorAction.getEmbeddables().isEmpty()){
+ generatorAction.prepareArtifacts();
+ } else {
+ generatorAction.addEntities(filterAction.getFilteredEntities(dataMap));
+ generatorAction.addEmbeddables(filterAction.getFilteredEmbeddables(dataMap));
+ generatorAction.addQueries(dataMap.getQueryDescriptors());
+ }
generatorAction.execute();
}
catch (Exception e) {
http://git-wip-us.apache.org/repos/asf/cayenne/blob/d9db6e31/cayenne-cgen/src/main/java/org/apache/cayenne/gen/CgenModule.java
----------------------------------------------------------------------
diff --git a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/CgenModule.java b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/CgenModule.java
index 79e411e..44b6cd7 100644
--- a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/CgenModule.java
+++ b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/CgenModule.java
@@ -1,3 +1,21 @@
+/*****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ ****************************************************************/
package org.apache.cayenne.gen;
import org.apache.cayenne.di.Binder;
@@ -5,6 +23,9 @@ import org.apache.cayenne.di.Module;
import org.apache.cayenne.gen.xml.CgenExtension;
import org.apache.cayenne.project.ProjectModule;
+/**
+ * @since 4.1
+ */
public class CgenModule implements Module{
@Override
public void configure(Binder binder) {
http://git-wip-us.apache.org/repos/asf/cayenne/blob/d9db6e31/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 afd58e0..f74ca21 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
@@ -33,8 +33,16 @@ import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.VelocityEngine;
import org.slf4j.Logger;
-import java.io.*;
-import java.util.*;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.OutputStreamWriter;
+import java.io.Serializable;
+import java.io.Writer;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
public class ClassGenerationAction implements Serializable, XMLSerializable {
static final String TEMPLATES_DIR_NAME = "templates/v4_1/";
@@ -56,8 +64,8 @@ public class ClassGenerationAction implements Serializable, XMLSerializable {
protected Collection<Artifact> artifacts;
- protected Collection<String> entityArtifacts;
- protected Collection<String> embeddableArtifacts;
+ private Collection<String> entityArtifacts;
+ private Collection<String> embeddableArtifacts;
protected String superPkg;
protected DataMap dataMap;
@@ -103,16 +111,12 @@ public class ClassGenerationAction implements Serializable, XMLSerializable {
this.artifacts = new ArrayList<>();
this.entityArtifacts = new ArrayList<>();
this.embeddableArtifacts = new ArrayList<>();
+ this.artifactsGenerationMode = ArtifactsGenerationMode.ENTITY;
+
+ this.overwrite = false;
}
public void setDefaults() {
- this.outputPattern = "*.java";
- this.timestamp = 0L;
- this.usePkgPath = true;
- this.makePairs = true;
- this.context = new VelocityContext();
- this.templateCache = new HashMap<>(5);
-
this.template = SUBCLASS_TEMPLATE;
this.superTemplate = SUPERCLASS_TEMPLATE;
@@ -121,8 +125,6 @@ public class ClassGenerationAction implements Serializable, XMLSerializable {
this.queryTemplate = DATAMAP_SUBCLASS_TEMPLATE;
this.querySuperTemplate = DATAMAP_SUPERCLASS_TEMPLATE;
-
- this.artifactsGenerationMode = ArtifactsGenerationMode.ENTITY;
}
protected String defaultTemplateName(TemplateType type) {
@@ -150,7 +152,7 @@ public class ClassGenerationAction implements Serializable, XMLSerializable {
}
}
- protected String customTemplateName(TemplateType type) {
+ private String customTemplateName(TemplateType type) {
switch (type) {
case ENTITY_SINGLE_CLASS:
return template;
@@ -575,7 +577,10 @@ public class ClassGenerationAction implements Serializable, XMLSerializable {
// TODO: andrus 10.12.2010 - why not also check for empty query list??
// Or create a better API for enabling DataMapArtifact
if (queries != null) {
- artifacts.add(new DataMapArtifact(dataMap, queries));
+ Artifact artifact = new DataMapArtifact(dataMap, queries);
+ if(!artifacts.contains(artifact)) {
+ artifacts.add(new DataMapArtifact(dataMap, queries));
+ }
}
}
}
@@ -583,16 +588,24 @@ public class ClassGenerationAction implements Serializable, XMLSerializable {
private void addAllEntities() {
if(artifactsGenerationMode == ArtifactsGenerationMode.ENTITY
|| artifactsGenerationMode == ArtifactsGenerationMode.ALL) {
- entityArtifacts.forEach(val ->
- artifacts.add(new EntityArtifact(dataMap.getObjEntity(val))));
+ entityArtifacts.forEach(val -> {
+ Artifact artifact = new EntityArtifact(dataMap.getObjEntity(val));
+ if(!artifacts.contains(artifact)) {
+ artifacts.add(artifact);
+ }
+ });
}
}
private void addAllEmbeddables() {
if(artifactsGenerationMode == ArtifactsGenerationMode.ENTITY
|| artifactsGenerationMode == ArtifactsGenerationMode.ALL) {
- embeddableArtifacts.forEach(val ->
- artifacts.add(new EmbeddableArtifact(dataMap.getEmbeddable(val))));
+ embeddableArtifacts.forEach(val -> {
+ Artifact artifact = new EmbeddableArtifact(dataMap.getEmbeddable(val));
+ if(!artifacts.contains(artifact)) {
+ artifacts.add(artifact);
+ }
+ });
}
}
@@ -711,7 +724,7 @@ public class ClassGenerationAction implements Serializable, XMLSerializable {
}
public String getDir(){
- return destDir.getAbsolutePath();
+ return destDir != null ? destDir.getAbsolutePath() : null;
}
public File getDestDir() { return destDir; }
@@ -779,7 +792,7 @@ public class ClassGenerationAction implements Serializable, XMLSerializable {
.attribute("xmlns", CgenExtension.NAMESPACE)
.nested(this.getEntityArtifacts(), delegate)
.nested(this.getEmbeddableArtifacts(), delegate)
- .simpleTag("outputDirectory", this.destDir.getAbsolutePath())
+ .simpleTag("outputDirectory", this.destDir != null ? this.destDir.getAbsolutePath() : null)
.simpleTag("generationMode", this.artifactsGenerationMode.getLabel())
.simpleTag("dataMapTemplate", this.queryTemplate)
.simpleTag("dataMapSuperclassTemplate", this.querySuperTemplate)
http://git-wip-us.apache.org/repos/asf/cayenne/blob/d9db6e31/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/CgenTask.java
----------------------------------------------------------------------
diff --git a/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/CgenTask.java b/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/CgenTask.java
index eae85b8..384d366 100644
--- a/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/CgenTask.java
+++ b/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/CgenTask.java
@@ -22,11 +22,14 @@ package org.apache.cayenne.tools;
import java.io.File;
import java.util.Set;
+import com.sun.org.apache.xpath.internal.operations.Bool;
import groovy.lang.Reference;
+import org.apache.cayenne.configuration.xml.DataChannelMetaData;
import org.apache.cayenne.dbsync.filter.NamePatternMatcher;
import org.apache.cayenne.dbsync.reverse.configuration.ToolsModule;
import org.apache.cayenne.di.DIBootstrap;
import org.apache.cayenne.di.Injector;
+import org.apache.cayenne.gen.CgenModule;
import org.apache.cayenne.gen.ClassGenerationAction;
import org.apache.cayenne.gen.ClientClassGenerationAction;
import org.apache.cayenne.map.DataMap;
@@ -70,16 +73,20 @@ public class CgenTask extends BaseCayenneTask {
private String includeEntities;
@Input
- private boolean makePairs = true;
+ @Optional
+ private String makePairs;
@Input
- private String mode = "entity";
+ @Optional
+ private String mode;
@Input
- private String outputPattern = "*.java";
+ @Optional
+ private String outputPattern;
@Input
- private boolean overwrite;
+ @Optional
+ private String overwrite;
@Input
@Optional
@@ -102,10 +109,12 @@ public class CgenTask extends BaseCayenneTask {
private String embeddableTemplate;
@Input
- private boolean usePkgPath = true;
+ @Optional
+ private String usePkgPath;
@Input
- private boolean createPropertyNames;
+ @Optional
+ private String createPropertyNames;
/**
* Force run (skip check for files modification time)
@@ -114,6 +123,14 @@ public class CgenTask extends BaseCayenneTask {
@Input
private boolean force;
+ @Input
+ @Optional
+ private String queryTemplate;
+
+ @Input
+ @Optional
+ private String querySuperTemplate;
+
/**
* If set to <code>true</code>, will generate PK attributes as Properties.
* Default is <code>false</code>.
@@ -123,11 +140,14 @@ public class CgenTask extends BaseCayenneTask {
private String destDirName;
+ private DataChannelMetaData metaData;
+
@TaskAction
public void generate() {
File dataMapFile = getDataMapFile();
- Injector injector = DIBootstrap.createInjector(new ToolsModule(LoggerFactory.getLogger(CgenTask.class)));
+ final Injector injector = DIBootstrap.createInjector(new CgenModule(), new ToolsModule(LoggerFactory.getLogger(CgenTask.class)));
+ metaData = injector.getInstance(DataChannelMetaData.class);
CayenneGeneratorMapLoaderAction loaderAction = new CayenneGeneratorMapLoaderAction(injector);
loaderAction.setMainDataMapFile(dataMapFile);
@@ -139,8 +159,8 @@ public class CgenTask extends BaseCayenneTask {
try {
loaderAction.setAdditionalDataMapFiles(convertAdditionalDataMaps());
- ClassGenerationAction generator = this.createGenerator();
DataMap dataMap = loaderAction.getMainDataMap();
+ ClassGenerationAction generator = this.createGenerator(dataMap);
generator.setLogger(getLogger());
@@ -149,9 +169,13 @@ public class CgenTask extends BaseCayenneTask {
}
generator.setTimestamp(dataMapFile.lastModified());
generator.setDataMap(dataMap);
- generator.addEntities(filterAction.getFilteredEntities(dataMap));
- generator.addEmbeddables(dataMap.getEmbeddables());
- generator.addQueries(dataMap.getQueryDescriptors());
+ if(generator.getEntities().isEmpty() && generator.getEmbeddables().isEmpty()) {
+ generator.addEntities(filterAction.getFilteredEntities(dataMap));
+ generator.addEmbeddables(dataMap.getEmbeddables());
+ generator.addQueries(dataMap.getQueryDescriptors());
+ } else {
+ generator.prepareArtifacts();
+ }
generator.execute();
} catch (Exception exception) {
throw new GradleException("Error generating classes: ", exception);
@@ -176,27 +200,32 @@ public class CgenTask extends BaseCayenneTask {
return client ? new ClientClassGenerationAction() : new ClassGenerationAction();
}
- ClassGenerationAction createGenerator() {
- ClassGenerationAction action = newGeneratorInstance();
+ ClassGenerationAction createGenerator(DataMap dataMap) {
+ ClassGenerationAction action = this.newGeneratorInstance();
- action.setDestDir(getDestDirFile());
- action.setEncoding(encoding);
- action.setMakePairs(makePairs);
- action.setArtifactsGenerationMode(mode);
- action.setOutputPattern(outputPattern);
- action.setOverwrite(overwrite);
- action.setSuperPkg(superPkg);
- action.setSuperTemplate(superTemplate);
- action.setTemplate(template);
- action.setEmbeddableSuperTemplate(embeddableSuperTemplate);
- action.setEmbeddableTemplate(embeddableTemplate);
- action.setUsePkgPath(usePkgPath);
- action.setCreatePropertyNames(createPropertyNames);
- action.setCreatePKProperties(createPKProperties);
+ if(metaData != null && metaData.get(dataMap, ClassGenerationAction.class) != null){
+ action = metaData.get(dataMap, ClassGenerationAction.class);
+ }
+ action.setDestDir(getDestDirFile());
+ action.setEncoding(encoding != null ? encoding : action.getEncoding());
+ action.setMakePairs(makePairs != null ? Boolean.valueOf(makePairs) : action.isMakePairs());
+ action.setArtifactsGenerationMode(mode != null ? mode : action.getArtifactsGenerationMode());
+ action.setOutputPattern(outputPattern != null ? outputPattern : action.getOutputPattern());
+ action.setOverwrite(overwrite != null ? Boolean.valueOf(overwrite) : action.isOverwrite());
+ action.setSuperPkg(superPkg != null ? superPkg : action.getSuperPkg());
+ action.setSuperTemplate(superTemplate != null ? superTemplate : action.getSuperclassTemplate());
+ action.setTemplate(template != null ? template : action.getTemplate());
+ action.setEmbeddableSuperTemplate(embeddableSuperTemplate != null ? embeddableSuperTemplate : action.getEmbeddableSuperTemplate());
+ action.setEmbeddableTemplate(embeddableTemplate != null ? embeddableTemplate : action.getEmbeddableTemplate());
+ action.setUsePkgPath(usePkgPath != null ? Boolean.valueOf(usePkgPath) : action.isUsePkgPath());
+ action.setCreatePropertyNames(createPropertyNames != null ? Boolean.valueOf(createPropertyNames) : action.isCreatePropertyNames());
+ action.setQueryTemplate(queryTemplate != null ? queryTemplate : action.getQueryTemplate());
+ action.setQuerySuperTemplate(querySuperTemplate != null ? querySuperTemplate : action.getQuerySuperTemplate());
return action;
}
+
@OutputDirectory
protected File getDestDirFile() {
final Reference<File> javaSourceDir = new Reference<>(null);
@@ -330,11 +359,11 @@ public class CgenTask extends BaseCayenneTask {
}
public boolean isMakePairs() {
- return makePairs;
+ return Boolean.valueOf(makePairs);
}
public void setMakePairs(boolean makePairs) {
- this.makePairs = makePairs;
+ this.makePairs = String.valueOf(makePairs);
}
public void makePairs(boolean makePairs) {
@@ -366,11 +395,11 @@ public class CgenTask extends BaseCayenneTask {
}
public boolean isOverwrite() {
- return overwrite;
+ return Boolean.valueOf(overwrite);
}
public void setOverwrite(boolean overwrite) {
- this.overwrite = overwrite;
+ this.overwrite = String.valueOf(overwrite);
}
public void overwrite(boolean overwrite) {
@@ -438,11 +467,11 @@ public class CgenTask extends BaseCayenneTask {
}
public boolean isUsePkgPath() {
- return usePkgPath;
+ return Boolean.valueOf(usePkgPath);
}
public void setUsePkgPath(boolean usePkgPath) {
- this.usePkgPath = usePkgPath;
+ this.usePkgPath = String.valueOf(usePkgPath);
}
public void usePkgPath(boolean usePkgPath) {
@@ -450,11 +479,11 @@ public class CgenTask extends BaseCayenneTask {
}
public boolean isCreatePropertyNames() {
- return createPropertyNames;
+ return Boolean.valueOf(createPropertyNames);
}
public void setCreatePropertyNames(boolean createPropertyNames) {
- this.createPropertyNames = createPropertyNames;
+ this.createPropertyNames = String.valueOf(createPropertyNames);
}
public void createPropertyNames(boolean createPropertyNames) {
http://git-wip-us.apache.org/repos/asf/cayenne/blob/d9db6e31/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/CgenTaskTest.java
----------------------------------------------------------------------
diff --git a/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/CgenTaskTest.java b/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/CgenTaskTest.java
index 8259d21..478ac5c 100644
--- a/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/CgenTaskTest.java
+++ b/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/CgenTaskTest.java
@@ -20,13 +20,14 @@
package org.apache.cayenne.tools;
import org.apache.cayenne.gen.ClassGenerationAction;
+import org.apache.cayenne.map.DataMap;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
import java.io.File;
-import static org.junit.Assert.*;
+import static junit.framework.TestCase.assertSame;
import static org.mockito.Mockito.*;
/**
@@ -37,6 +38,8 @@ public class CgenTaskTest {
@Rule
public TemporaryFolder temp = new TemporaryFolder();
+ DataMap dataMap = new DataMap();
+
private CgenTask createCgenTaskMock(ClassGenerationAction action) {
CgenTask mock = mock(CgenTask.class);
@@ -57,7 +60,7 @@ public class CgenTaskTest {
doCallRealMethod().when(mock).setUsePkgPath(anyBoolean());
doCallRealMethod().when(mock).setTemplate(anyString());
when(mock.newGeneratorInstance()).thenReturn(action);
- when(mock.createGenerator()).thenCallRealMethod();
+ when(mock.createGenerator(dataMap)).thenCallRealMethod();
return mock;
}
@@ -82,7 +85,7 @@ public class CgenTaskTest {
task.setOverwrite(true);
task.setUsePkgPath(true);
- ClassGenerationAction createdAction = task.createGenerator();
+ ClassGenerationAction createdAction = task.createGenerator(dataMap);
assertSame(action, createdAction);
verify(action).setCreatePropertyNames(true);
http://git-wip-us.apache.org/repos/asf/cayenne/blob/d9db6e31/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 42a2e8d..e57d306 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
@@ -99,7 +99,7 @@ public class CayenneGeneratorMojo extends AbstractMojo {
* <code>true</code>).
*/
@Parameter
- private String makePairs;
+ private Boolean makePairs;
/**
* DataMap XML file to use as a base for class generation.
@@ -113,7 +113,7 @@ public class CayenneGeneratorMojo extends AbstractMojo {
* iteration per datamap (This is always one iteration since cgen currently
* supports specifying one-and-only-one datamap). (Default is "entity")
*/
- @Parameter(defaultValue = "entity")
+ @Parameter
private String mode;
/**
@@ -127,7 +127,7 @@ public class CayenneGeneratorMojo extends AbstractMojo {
* classes. Ignored unless makepairs is set to <code>false</code>.
*/
@Parameter
- private String overwrite;
+ private Boolean overwrite;
/**
* Java package name of generated superclasses. Ignored unless
@@ -177,14 +177,14 @@ public class CayenneGeneratorMojo extends AbstractMojo {
* ignoring their package.
*/
@Parameter
- private String usePkgPath;
+ private Boolean usePkgPath;
/**
* If set to <code>true</code>, will generate String Property names.
* Default is <code>false</code>.
*/
@Parameter
- private String createPropertyNames;
+ private Boolean createPropertyNames;
/**
* If set to <code>true</code>, will skip file modification time validation and regenerate all.
@@ -195,15 +195,21 @@ public class CayenneGeneratorMojo extends AbstractMojo {
@Parameter(defaultValue = "false", property = "force")
private boolean force;
- /**
- * If set to <code>true</code>, will generate PK attributes as Properties.
- * Default is <code>false</code>.
- * @since 4.1
- */
- @Parameter(defaultValue = "false")
- private boolean createPKProperties;
+ @Parameter
+ private String queryTemplate;
+
+ @Parameter
+ private String querySuperTemplate;
+
+ /**
+ * If set to <code>true</code>, will generate PK attributes as Properties.
+ * Default is <code>false</code>.
+ * @since 4.1
+ */
+ @Parameter(defaultValue = "false")
+ private boolean createPKProperties;
- private transient Injector injector;
+ private transient Injector injector;
private static final Logger logger = LoggerFactory.getLogger(CayenneGeneratorMojo.class);
@@ -289,17 +295,19 @@ public class CayenneGeneratorMojo extends AbstractMojo {
action.setDestDir(destDir);
action.setEncoding(encoding != null ? encoding : action.getEncoding());
- action.setMakePairs(makePairs != null ? Boolean.valueOf(makePairs) : action.isMakePairs());
- action.setArtifactsGenerationMode(mode);
+ action.setMakePairs(makePairs != null ? makePairs : action.isMakePairs());
+ action.setArtifactsGenerationMode(mode != null ? mode : action.getArtifactsGenerationMode());
action.setOutputPattern(outputPattern != null ? outputPattern : action.getOutputPattern());
- action.setOverwrite(overwrite != null ? Boolean.valueOf(overwrite) : action.isOverwrite());
+ action.setOverwrite(overwrite != null ? overwrite : action.isOverwrite());
action.setSuperPkg(superPkg != null ? superPkg : action.getSuperPkg());
action.setSuperTemplate(superTemplate != null ? superTemplate : action.getSuperclassTemplate());
action.setTemplate(template != null ? template : action.getTemplate());
action.setEmbeddableSuperTemplate(embeddableSuperTemplate != null ? embeddableSuperTemplate : action.getEmbeddableSuperTemplate());
action.setEmbeddableTemplate(embeddableTemplate != null ? embeddableTemplate : action.getEmbeddableTemplate());
- action.setUsePkgPath(usePkgPath != null ? Boolean.valueOf(usePkgPath) : action.isUsePkgPath());
- action.setCreatePropertyNames(createPropertyNames != null ? Boolean.valueOf(createPropertyNames) : action.isCreatePropertyNames());
+ action.setUsePkgPath(usePkgPath != null ? usePkgPath : action.isUsePkgPath());
+ action.setCreatePropertyNames(createPropertyNames != null ? createPropertyNames : action.isCreatePropertyNames());
+ action.setQueryTemplate(queryTemplate != null ? queryTemplate : action.getQueryTemplate());
+ action.setQuerySuperTemplate(querySuperTemplate != null ? querySuperTemplate : action.getQuerySuperTemplate());
return action;
}
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/d9db6e31/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerFrame.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerFrame.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerFrame.java
index 0b12dcd..97772de 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerFrame.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerFrame.java
@@ -19,12 +19,64 @@
package org.apache.cayenne.modeler;
-import org.apache.cayenne.modeler.action.*;
+import org.apache.cayenne.modeler.action.AboutAction;
+import org.apache.cayenne.modeler.action.ActionManager;
+import org.apache.cayenne.modeler.action.CgenAction;
+import org.apache.cayenne.modeler.action.ConfigurePreferencesAction;
+import org.apache.cayenne.modeler.action.CopyAction;
+import org.apache.cayenne.modeler.action.CreateDataMapAction;
+import org.apache.cayenne.modeler.action.CreateDbEntityAction;
+import org.apache.cayenne.modeler.action.CreateEmbeddableAction;
+import org.apache.cayenne.modeler.action.CreateNodeAction;
+import org.apache.cayenne.modeler.action.CreateObjEntityAction;
+import org.apache.cayenne.modeler.action.CreateProcedureAction;
+import org.apache.cayenne.modeler.action.CreateQueryAction;
+import org.apache.cayenne.modeler.action.CutAction;
+import org.apache.cayenne.modeler.action.DbEntitySyncAction;
+import org.apache.cayenne.modeler.action.DocumentationAction;
+import org.apache.cayenne.modeler.action.ExitAction;
+import org.apache.cayenne.modeler.action.FindAction;
+import org.apache.cayenne.modeler.action.GenerateCodeAction;
+import org.apache.cayenne.modeler.action.GenerateDBAction;
+import org.apache.cayenne.modeler.action.ImportDataMapAction;
+import org.apache.cayenne.modeler.action.ImportEOModelAction;
+import org.apache.cayenne.modeler.action.InferRelationshipsAction;
+import org.apache.cayenne.modeler.action.MigrateAction;
+import org.apache.cayenne.modeler.action.NavigateBackwardAction;
+import org.apache.cayenne.modeler.action.NavigateForwardAction;
+import org.apache.cayenne.modeler.action.NewProjectAction;
+import org.apache.cayenne.modeler.action.ObjEntitySyncAction;
+import org.apache.cayenne.modeler.action.OpenProjectAction;
+import org.apache.cayenne.modeler.action.PasteAction;
+import org.apache.cayenne.modeler.action.ProjectAction;
+import org.apache.cayenne.modeler.action.RedoAction;
+import org.apache.cayenne.modeler.action.RemoveAction;
+import org.apache.cayenne.modeler.action.RevertAction;
+import org.apache.cayenne.modeler.action.SaveAction;
+import org.apache.cayenne.modeler.action.SaveAsAction;
+import org.apache.cayenne.modeler.action.ShowLogConsoleAction;
+import org.apache.cayenne.modeler.action.UndoAction;
+import org.apache.cayenne.modeler.action.ValidateAction;
import org.apache.cayenne.modeler.action.dbimport.ReverseEngineeringToolMenuAction;
import org.apache.cayenne.modeler.dialog.LogConsole;
import org.apache.cayenne.modeler.dialog.welcome.WelcomeScreen;
import org.apache.cayenne.modeler.editor.EditorView;
-import org.apache.cayenne.modeler.event.*;
+import org.apache.cayenne.modeler.event.DataMapDisplayEvent;
+import org.apache.cayenne.modeler.event.DataMapDisplayListener;
+import org.apache.cayenne.modeler.event.DataNodeDisplayEvent;
+import org.apache.cayenne.modeler.event.DataNodeDisplayListener;
+import org.apache.cayenne.modeler.event.DbEntityDisplayListener;
+import org.apache.cayenne.modeler.event.EmbeddableDisplayEvent;
+import org.apache.cayenne.modeler.event.EmbeddableDisplayListener;
+import org.apache.cayenne.modeler.event.EntityDisplayEvent;
+import org.apache.cayenne.modeler.event.MultipleObjectsDisplayEvent;
+import org.apache.cayenne.modeler.event.MultipleObjectsDisplayListener;
+import org.apache.cayenne.modeler.event.ObjEntityDisplayListener;
+import org.apache.cayenne.modeler.event.ProcedureDisplayEvent;
+import org.apache.cayenne.modeler.event.ProcedureDisplayListener;
+import org.apache.cayenne.modeler.event.QueryDisplayEvent;
+import org.apache.cayenne.modeler.event.QueryDisplayListener;
+import org.apache.cayenne.modeler.event.RecentFileListListener;
import org.apache.cayenne.modeler.pref.ComponentGeometry;
import org.apache.cayenne.modeler.util.ModelerUtil;
import org.apache.cayenne.modeler.util.RecentFileMenu;
@@ -32,8 +84,28 @@ import org.apache.cayenne.swing.components.MainToolBar;
import org.apache.cayenne.swing.components.TopBorder;
import org.slf4j.LoggerFactory;
-import javax.swing.*;
-import java.awt.*;
+import javax.swing.Action;
+import javax.swing.BorderFactory;
+import javax.swing.Box;
+import javax.swing.BoxLayout;
+import javax.swing.JButton;
+import javax.swing.JCheckBoxMenuItem;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JMenu;
+import javax.swing.JMenuBar;
+import javax.swing.JPanel;
+import javax.swing.JSplitPane;
+import javax.swing.JTextField;
+import javax.swing.JToolBar;
+import java.awt.AWTEvent;
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.Font;
+import java.awt.Toolkit;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.awt.event.KeyEvent;
http://git-wip-us.apache.org/repos/asf/cayenne/blob/d9db6e31/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 b197991..9dbd71d 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
@@ -22,30 +22,6 @@ public class CgenAction extends CayenneAction{
@Override
public void performAction(ActionEvent e) {
-
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/d9db6e31/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
index 9db205b..b81cc73 100644
--- 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
@@ -1,17 +1,47 @@
+/*****************************************************************
+ * 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.Application;
import org.apache.cayenne.swing.components.TopBorder;
-import javax.swing.*;
-import java.awt.*;
+import javax.swing.Box;
+import javax.swing.JButton;
+import javax.swing.JDialog;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.ScrollPaneConstants;
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.Container;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+/**
+ * @since 4.1
+ */
public class CgenDialog extends JDialog {
protected JPanel panel;
protected JButton cancelButton;
- public CgenDialog(Component generatorPanel) {
+ CgenDialog(Component generatorPanel) {
super(Application.getFrame());
this.panel = new JPanel();
http://git-wip-us.apache.org/repos/asf/cayenne/blob/d9db6e31/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
index 4b88697..9242f21 100644
--- 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
@@ -1,15 +1,36 @@
+/*****************************************************************
+ * 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.*;
+import java.awt.Component;
+/**
+ * @since 4.1
+ */
public class CgenGlobalController extends CayenneController{
protected CgenDialog view;
- protected CgenGlobalPanelController globalPanelController;
+ private CgenGlobalPanelController globalPanelController;
public CgenGlobalController(CayenneController parent){
super(parent);
http://git-wip-us.apache.org/repos/asf/cayenne/blob/d9db6e31/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
index 3c9b68a..c234d70 100644
--- 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
@@ -1,25 +1,50 @@
+/*****************************************************************
+ * 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.*;
-import java.awt.*;
+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 generationMode;
- private JComboBox subclassTemplate;
- private JComboBox superclassTemplate;
- private JComboBox embeddableTemplate;
- private JComboBox embeddableSuperTemplate;
- private JComboBox dataMapTemplate;
- private JComboBox dataMapSuperTemplate;
+ 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;
@@ -44,21 +69,17 @@ public class CgenGlobalPanel extends JPanel {
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.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();
@@ -156,31 +177,29 @@ public class CgenGlobalPanel extends JPanel {
return selectOutputFolder;
}
- public JComboBox getGenerationMode() {
- return generationMode;
- }
+ public JComboBox<String> getGenerationMode() { return generationMode; }
- public JComboBox getSubclassTemplate() {
+ public JComboBox<String> getSubclassTemplate() {
return subclassTemplate;
}
- public JComboBox getSuperclassTemplate() {
+ public JComboBox<String> getSuperclassTemplate() {
return superclassTemplate;
}
- public JComboBox getEmbeddableTemplate() {
+ public JComboBox<String> getEmbeddableTemplate() {
return embeddableTemplate;
}
- public JComboBox getEmbeddableSuperTemplate() {
+ public JComboBox<String> getEmbeddableSuperTemplate() {
return embeddableSuperTemplate;
}
- public JComboBox getDataMapTemplate() {
+ public JComboBox<String> getDataMapTemplate() {
return dataMapTemplate;
}
- public JComboBox getDataMapSuperTemplate() {
+ public JComboBox<String> getDataMapSuperTemplate() {
return dataMapSuperTemplate;
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/d9db6e31/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
index b07bdd2..f694b73 100644
--- 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
@@ -1,3 +1,21 @@
+/*****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ ****************************************************************/
package org.apache.cayenne.modeler.dialog.codegen.cgen;
import org.apache.cayenne.configuration.DataChannelDescriptor;
@@ -21,10 +39,13 @@ import java.io.File;
import java.util.*;
import java.util.List;
+/**
+ * @since 4.1
+ */
public class CgenGlobalPanelController extends CayenneController{
- static final String ALL_MODE_LABEL = "Generate all";
- static final Map<String, String> modesByLabel = new HashMap<>();
+ 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";
@@ -48,7 +69,7 @@ public class CgenGlobalPanelController extends CayenneController{
private Collection<ClassGenerationAction> generators;
- public CgenGlobalPanelController(CayenneController parent) {
+ CgenGlobalPanelController(CayenneController parent) {
super(parent);
this.projectController = Application.getInstance().getFrameController().getProjectController();
@@ -61,8 +82,8 @@ public class CgenGlobalPanelController extends CayenneController{
}
private void updateTemplates() {
- Object[] modeChoices = new Object[]{ENTITY_MODE_LABEL, DATA_MAP_MODE_LABEL, ALL_MODE_LABEL};
- view.getGenerationMode().setModel(new DefaultComboBoxModel(modeChoices));
+ String[] modeChoices = new String[]{ENTITY_MODE_LABEL, DATA_MAP_MODE_LABEL, ALL_MODE_LABEL};
+ view.getGenerationMode().setModel(new DefaultComboBoxModel<>(modeChoices));
CodeTemplateManager templateManager = getApplication().getCodeTemplateManager();
@@ -93,14 +114,14 @@ public class CgenGlobalPanelController extends CayenneController{
Collections.sort(dataMapSuperTemplates);
dataMapSuperTemplates.addAll(customTemplates);
- this.view.getSubclassTemplate().setModel(new DefaultComboBoxModel(subTemplates.toArray()));
- this.view.getSuperclassTemplate().setModel(new DefaultComboBoxModel(superTemplates.toArray()));
+ 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()));
- this.view.getEmbeddableSuperTemplate().setModel(new DefaultComboBoxModel(embeddableSuperTemplates.toArray()));
+ 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()));
- this.view.getDataMapSuperTemplate().setModel(new DefaultComboBoxModel(dataMapSuperTemplates.toArray()));
+ 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);
http://git-wip-us.apache.org/repos/asf/cayenne/blob/d9db6e31/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 bd9afc5..770c713 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,7 +23,8 @@ 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.*;
+import javax.swing.JScrollPane;
+import javax.swing.JTabbedPane;
/**
http://git-wip-us.apache.org/repos/asf/cayenne/blob/d9db6e31/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 704e851..a83ef3d 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,8 +25,8 @@ import org.apache.cayenne.swing.ImageRendererColumn;
import org.apache.cayenne.swing.ObjectBinding;
import org.apache.cayenne.swing.TableBindingBuilder;
-import javax.swing.*;
-import java.awt.*;
+import javax.swing.JLabel;
+import java.awt.Component;
public class ClassesTabController extends CayenneController {
http://git-wip-us.apache.org/repos/asf/cayenne/blob/d9db6e31/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 f6cad0b..7b5776c 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,18 +19,27 @@
package org.apache.cayenne.modeler.editor.cgen;
-import javax.swing.*;
-import java.awt.*;
+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;
/**
+ * @since 4.1
*/
public class ClassesTabPanel extends JPanel {
protected JTable table;
- protected JCheckBox checkAll;
- protected JLabel checkAllLabel;
+ private JCheckBox checkAll;
+ private JLabel checkAllLabel;
- public ClassesTabPanel() {
+ ClassesTabPanel() {
this.table = new JTable();
this.table.setRowHeight(22);
http://git-wip-us.apache.org/repos/asf/cayenne/blob/d9db6e31/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 2ee1034..35aa8d6 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
@@ -27,8 +27,8 @@ import org.apache.cayenne.swing.BindingBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import javax.swing.*;
-import java.awt.*;
+import javax.swing.JOptionPane;
+import java.awt.Component;
import java.util.function.Predicate;
/**
http://git-wip-us.apache.org/repos/asf/cayenne/blob/d9db6e31/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 334931a..cac063c 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
@@ -21,8 +21,17 @@ package org.apache.cayenne.modeler.editor.cgen;
import org.apache.cayenne.swing.components.TopBorder;
-import javax.swing.*;
-import java.awt.*;
+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;
/**
*/
http://git-wip-us.apache.org/repos/asf/cayenne/blob/d9db6e31/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 5666355..029f92e 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
@@ -76,8 +76,8 @@ public class CustomModeController extends GeneratorController {
}
protected void updateTemplates() {
- Object[] modeChoices = new Object[]{ENTITY_MODE_LABEL, DATA_MAP_MODE_LABEL, ALL_MODE_LABEL};
- view.getGenerationMode().getComboBox().setModel(new DefaultComboBoxModel(modeChoices));
+ 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();
@@ -108,14 +108,14 @@ public class CustomModeController extends GeneratorController {
Collections.sort(dataMapSuperTemplates);
dataMapSuperTemplates.addAll(customTemplates);
- this.view.getSubclassTemplate().getComboBox().setModel(new DefaultComboBoxModel(subTemplates.toArray()));
- this.view.getSuperclassTemplate().getComboBox().setModel(new DefaultComboBoxModel(superTemplates.toArray()));
+ this.view.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()));
- this.view.getEmbeddableSuperTemplate().getComboBox().setModel(new DefaultComboBoxModel(embeddableSuperTemplates.toArray()));
+ 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()));
- this.view.getDataMapSuperTemplate().getComboBox().setModel(new DefaultComboBoxModel(dataMapSuperTemplates.toArray()));
+ 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() {
http://git-wip-us.apache.org/repos/asf/cayenne/blob/d9db6e31/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 ca4b50f..9213a86 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,18 +29,23 @@ import org.apache.cayenne.swing.components.JCayenneCheckBox;
import org.apache.cayenne.swing.control.ActionLink;
import org.apache.cayenne.validation.ValidationException;
-import javax.swing.*;
-import java.awt.*;
+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;
public class CustomModePanel extends GeneratorControllerPanel {
- private ComboBoxAdapter generationMode;
- private ComboBoxAdapter subclassTemplate;
- private ComboBoxAdapter superclassTemplate;
- private ComboBoxAdapter embeddableTemplate;
- private ComboBoxAdapter embeddableSuperTemplate;
- private ComboBoxAdapter dataMapTemplate;
- private ComboBoxAdapter dataMapSuperTemplate;
+ 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;
@@ -57,46 +62,46 @@ public class CustomModePanel extends GeneratorControllerPanel {
CustomModePanel(ProjectController projectController) {
super(projectController);
- JComboBox modeField = new JComboBox();
- this.generationMode = new ComboBoxAdapter(modeField) {
+ JComboBox<String> modeField = new JComboBox<>();
+ this.generationMode = new ComboBoxAdapter<String>(modeField) {
@Override
- protected void updateModel(Object item) throws ValidationException {
+ protected void updateModel(String item) throws ValidationException {
getCgenByDataMap().setArtifactsGenerationMode(CustomModeController.modesByLabel.get(item));
projectController.setDirty(true);
}
};
- JComboBox superclassField = new JComboBox();
- this.superclassTemplate = new ComboBoxAdapter(superclassField) {
+ JComboBox<String> superclassField = new JComboBox<>();
+ this.superclassTemplate = new ComboBoxAdapter<String>(superclassField) {
@Override
- protected void updateModel(Object item) throws ValidationException {
+ protected void updateModel(String item) throws ValidationException {
getCgenByDataMap().setSuperTemplate(Application.getInstance().getCodeTemplateManager().getTemplatePath(String.valueOf(item)));
projectController.setDirty(true);
}
};
- JComboBox subclassField = new JComboBox();
- this.subclassTemplate = new ComboBoxAdapter(subclassField) {
+ JComboBox<String> subclassField = new JComboBox<>();
+ this.subclassTemplate = new ComboBoxAdapter<String>(subclassField) {
@Override
- protected void updateModel(Object item) throws ValidationException {
+ protected void updateModel(String item) throws ValidationException {
getCgenByDataMap().setTemplate(Application.getInstance().getCodeTemplateManager().getTemplatePath(String.valueOf(item)));
projectController.setDirty(true);
}
};
- JComboBox dataMapField = new JComboBox();
- this.dataMapTemplate = new ComboBoxAdapter(dataMapField) {
+ JComboBox<String> dataMapField = new JComboBox<>();
+ this.dataMapTemplate = new ComboBoxAdapter<String>(dataMapField) {
@Override
- protected void updateModel(Object item) throws ValidationException {
+ protected void updateModel(String item) throws ValidationException {
getCgenByDataMap().setQueryTemplate(Application.getInstance().getCodeTemplateManager().getTemplatePath(String.valueOf(item)));
projectController.setDirty(true);
}
};
- JComboBox dataMapSuperField = new JComboBox();
- this.dataMapSuperTemplate = new ComboBoxAdapter(dataMapSuperField) {
+ JComboBox<String> dataMapSuperField = new JComboBox<>();
+ this.dataMapSuperTemplate = new ComboBoxAdapter<String>(dataMapSuperField) {
@Override
- protected void updateModel(Object item) throws ValidationException {
+ protected void updateModel(String item) throws ValidationException {
getCgenByDataMap().setQuerySuperTemplate(Application.getInstance().getCodeTemplateManager().getTemplatePath(String.valueOf(item)));
projectController.setDirty(true);
}
@@ -134,19 +139,19 @@ public class CustomModePanel extends GeneratorControllerPanel {
}
};
- JComboBox embeddableField = new JComboBox();
- this.embeddableTemplate = new ComboBoxAdapter(embeddableField) {
+ JComboBox<String> embeddableField = new JComboBox<>();
+ this.embeddableTemplate = new ComboBoxAdapter<String>(embeddableField) {
@Override
- protected void updateModel(Object item) throws ValidationException {
+ protected void updateModel(String item) throws ValidationException {
getCgenByDataMap().setEmbeddableTemplate(Application.getInstance().getCodeTemplateManager().getTemplatePath(String.valueOf(item)));
projectController.setDirty(true);
}
};
- JComboBox embeddableSuperclassField = new JComboBox();
- this.embeddableSuperTemplate = new ComboBoxAdapter(embeddableSuperclassField) {
+ JComboBox<String> embeddableSuperclassField = new JComboBox<>();
+ this.embeddableSuperTemplate = new ComboBoxAdapter<String>(embeddableSuperclassField) {
@Override
- protected void updateModel(Object item) throws ValidationException {
+ protected void updateModel(String item) throws ValidationException {
getCgenByDataMap().setEmbeddableSuperTemplate(Application.getInstance().getCodeTemplateManager().getTemplatePath(String.valueOf(item)));
projectController.setDirty(true);
}
@@ -229,7 +234,7 @@ public class CustomModePanel extends GeneratorControllerPanel {
dataMapSuperTemplate.getComboBox().setEnabled(val);
}
- public ComboBoxAdapter getGenerationMode() {
+ public ComboBoxAdapter<String> getGenerationMode() {
return generationMode;
}
@@ -237,19 +242,19 @@ public class CustomModePanel extends GeneratorControllerPanel {
return manageTemplatesLink;
}
- public ComboBoxAdapter getSubclassTemplate() { return subclassTemplate; }
+ public ComboBoxAdapter<String> getSubclassTemplate() { return subclassTemplate; }
- public ComboBoxAdapter getEmbeddableTemplate() { return embeddableTemplate; }
+ public ComboBoxAdapter<String> getEmbeddableTemplate() { return embeddableTemplate; }
- public ComboBoxAdapter getEmbeddableSuperTemplate() { return embeddableSuperTemplate; }
+ public ComboBoxAdapter<String> getEmbeddableSuperTemplate() { return embeddableSuperTemplate; }
- public ComboBoxAdapter getSuperclassTemplate() {
+ public ComboBoxAdapter<String> getSuperclassTemplate() {
return superclassTemplate;
}
- public ComboBoxAdapter getDataMapTemplate() { return dataMapTemplate; }
+ public ComboBoxAdapter<String> getDataMapTemplate() { return dataMapTemplate; }
- public ComboBoxAdapter getDataMapSuperTemplate() { return dataMapSuperTemplate; }
+ public ComboBoxAdapter<String> getDataMapSuperTemplate() { return dataMapSuperTemplate; }
public JCheckBox getOverwrite() {
return overwrite;
http://git-wip-us.apache.org/repos/asf/cayenne/blob/d9db6e31/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 7e8087f..7a8b5cb 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
@@ -22,7 +22,13 @@ 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.*;
+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.modeler.Application;
import org.apache.cayenne.modeler.dialog.pref.GeneralPreferences;
import org.apache.cayenne.modeler.pref.DataMapDefaults;
@@ -37,9 +43,12 @@ import org.apache.cayenne.validation.SimpleValidationFailure;
import org.apache.cayenne.validation.ValidationFailure;
import org.apache.cayenne.validation.ValidationResult;
-import javax.swing.*;
+import javax.swing.JButton;
+import javax.swing.JFileChooser;
+import javax.swing.JOptionPane;
import java.io.File;
-import java.util.*;
+import java.util.Map;
+import java.util.Set;
import java.util.function.Predicate;
import java.util.prefs.Preferences;
http://git-wip-us.apache.org/repos/asf/cayenne/blob/d9db6e31/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 7536a01..281046d 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
@@ -24,7 +24,9 @@ import org.apache.cayenne.map.DataMap;
import org.apache.cayenne.modeler.ProjectController;
import org.apache.cayenne.modeler.util.TextAdapter;
-import javax.swing.*;
+import javax.swing.JButton;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
import java.io.File;
/**
http://git-wip-us.apache.org/repos/asf/cayenne/blob/d9db6e31/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabController.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabController.java
index 53000da..2824685 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabController.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabController.java
@@ -23,7 +23,7 @@ import org.apache.cayenne.gen.ClassGenerationAction;
import org.apache.cayenne.modeler.util.CayenneController;
import org.apache.cayenne.pref.PreferenceDetail;
-import java.awt.*;
+import java.awt.Component;
/**
*/
http://git-wip-us.apache.org/repos/asf/cayenne/blob/d9db6e31/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabPanel.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabPanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabPanel.java
index 4082f36..ab25218 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabPanel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabPanel.java
@@ -19,8 +19,9 @@
package org.apache.cayenne.modeler.editor.cgen;
-import javax.swing.*;
-import java.awt.*;
+import javax.swing.JPanel;
+import java.awt.BorderLayout;
+import java.awt.Component;
/**
* @since 4.1
http://git-wip-us.apache.org/repos/asf/cayenne/blob/d9db6e31/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/ComboBoxAdapter.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/ComboBoxAdapter.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/ComboBoxAdapter.java
index 2a7fd79..8d4eaeb 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/ComboBoxAdapter.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/ComboBoxAdapter.java
@@ -21,20 +21,20 @@ package org.apache.cayenne.modeler.util;
import org.apache.cayenne.modeler.undo.JComboBoxUndoListener;
import org.apache.cayenne.validation.ValidationException;
-import javax.swing.*;
+import javax.swing.JComboBox;
import java.awt.event.ActionListener;
/**
* @since 4.1
*/
-public abstract class ComboBoxAdapter {
+public abstract class ComboBoxAdapter<T> {
- private JComboBox comboBox;
+ private JComboBox<T> comboBox;
private ActionListener listener;
private JComboBoxUndoListener undoListener;
- protected ComboBoxAdapter(JComboBox comboBox) {
+ protected ComboBoxAdapter(JComboBox<T> comboBox) {
this.comboBox = comboBox;
listener = e -> updateModel();
@@ -57,16 +57,16 @@ public abstract class ComboBoxAdapter {
}
}
- public JComboBox getComboBox() {
+ public JComboBox<T> getComboBox() {
return comboBox;
}
/**
* Updates bound model with document text.
*/
- protected abstract void updateModel(Object item) throws ValidationException;
+ protected abstract void updateModel(T item) throws ValidationException;
public void updateModel() {
- updateModel(comboBox.getSelectedItem());
+ updateModel((T)comboBox.getSelectedItem());
}
}
[25/32] cayenne git commit: Add saver of advance mode. Relativize
custom template's path
Posted by nt...@apache.org.
Add saver of advance mode. Relativize custom template's path
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/c813e767
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/c813e767
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/c813e767
Branch: refs/heads/master
Commit: c813e7679de1b4d1f65758dee2faa2b52eaaf583
Parents: ac6819f
Author: Arseni Bulatski <an...@gmail.com>
Authored: Mon Nov 12 17:41:56 2018 +0300
Committer: Arseni Bulatski <an...@gmail.com>
Committed: Mon Nov 12 17:41:56 2018 +0300
----------------------------------------------------------------------
.../cayenne/gen/xml/CgenConfigHandler.java | 2 +-
.../cayenne/modeler/CodeTemplateManager.java | 9 +++++++--
.../editor/cgen/CodeGeneratorController.java | 12 ++++++++++-
.../editor/cgen/CustomModeController.java | 16 +++++++++++----
.../modeler/editor/cgen/CustomModePanel.java | 21 ++++++++++++--------
.../editor/cgen/GeneratorTabController.java | 4 ++++
6 files changed, 48 insertions(+), 16 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cayenne/blob/c813e767/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenConfigHandler.java
----------------------------------------------------------------------
diff --git a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenConfigHandler.java b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenConfigHandler.java
index 2384f10..c73e24b 100644
--- a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenConfigHandler.java
+++ b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenConfigHandler.java
@@ -40,7 +40,7 @@ public class CgenConfigHandler extends NamespaceAwareNestedTagHandler{
private static final String OUTPUT_DIRECTORY_TAG = "destDir";
private static final String GENERATION_MODE_TAG = "mode";
private static final String SUBCLASS_TEMPLATE_TAG = "template";
- private static final String SUPERCLASS_TEMPLATE_TAG = "superclassTemplate";
+ private static final String SUPERCLASS_TEMPLATE_TAG = "superTemplate";
private static final String OUTPUT_PATTERN_TAG = "outputPattern";
private static final String MAKE_PAIRS_TAG = "makePairs";
private static final String USE_PKG_PATH_TAG = "usePkgPath";
http://git-wip-us.apache.org/repos/asf/cayenne/blob/c813e767/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CodeTemplateManager.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CodeTemplateManager.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CodeTemplateManager.java
index 98f0dc9..ccb4980 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CodeTemplateManager.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CodeTemplateManager.java
@@ -56,6 +56,7 @@ public class CodeTemplateManager {
private List<String> standardSubclassTemplates;
private List<String> standardSuperclassTemplates;
private Map<String, String> customTemplates;
+ private Map<String, String> reverseCustomTemplate;
private Map<String, String> standardTemplates;
private List<String> standartEmbeddableTemplates;
@@ -98,6 +99,10 @@ public class CodeTemplateManager {
standartDataMapSuperclassTemplates.add(STANDART_DATAMAP_SUPERCLASS);
updateCustomTemplates(getTemplatePreferences(application));
+ reverseCustomTemplate = new HashMap<>();
+ for(Map.Entry<String, String> entry : customTemplates.entrySet()){
+ reverseCustomTemplate.put(entry.getValue(), entry.getKey());
+ }
standardTemplates = new HashMap<>();
standardTemplates.put(STANDARD_SERVER_SUPERCLASS, ClassGenerationAction.SUPERCLASS_TEMPLATE);
@@ -161,8 +166,8 @@ public class CodeTemplateManager {
}
public String getNameByPath(String name) {
- if(customTemplates.containsKey(name)){
- return customTemplates.get(name).toString();
+ if(reverseCustomTemplate.containsKey(name)){
+ return reverseCustomTemplate.get(name);
} else {
Object value = reverseStandartTemplates.get(name);
return value != null ? value.toString() : null;
http://git-wip-us.apache.org/repos/asf/cayenne/blob/c813e767/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 1244178..0785820 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
@@ -68,13 +68,23 @@ public class CodeGeneratorController extends CodeGeneratorControllerBase {
classesSelectedAction();
CgenConfiguration cgenConfiguration = createConfiguration();
GeneratorController modeController = prevGeneratorController.get(dataMap) != null ? prevGeneratorController.get(dataMap) : cgenConfiguration.isClient() ?
- generatorSelector.getClientGeneratorController() : generatorSelector.getStandartController();
+ generatorSelector.getClientGeneratorController() : isDefaultConfig(cgenConfiguration) ?
+ generatorSelector.getStandartController() : generatorSelector.getCustomModeController();
prevGeneratorController.put(dataMap, modeController);
generatorSelector.setSelectedController(modeController);
classesSelector.startup();
initFromModel = false;
}
+ private boolean isDefaultConfig(CgenConfiguration cgenConfiguration) {
+ return cgenConfiguration.isMakePairs() && cgenConfiguration.isUsePkgPath() && !cgenConfiguration.isOverwrite() &&
+ !cgenConfiguration.isCreatePKProperties() && !cgenConfiguration.isCreatePropertyNames() &&
+ cgenConfiguration.getOutputPattern().equals("*.java") &&
+ cgenConfiguration.getTemplate().equals(ClassGenerationAction.SUBCLASS_TEMPLATE) &&
+ cgenConfiguration.getSuperTemplate().equals(ClassGenerationAction.SUPERCLASS_TEMPLATE);
+
+ }
+
private void initListeners(){
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())));
http://git-wip-us.apache.org/repos/asf/cayenne/blob/c813e767/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 4a23e6b..c591584 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
@@ -25,8 +25,10 @@ import org.apache.cayenne.modeler.CodeTemplateManager;
import org.apache.cayenne.modeler.dialog.pref.PreferenceDialog;
import org.apache.cayenne.swing.BindingBuilder;
-import javax.swing.DefaultComboBoxModel;
-import java.awt.Component;
+import javax.swing.*;
+import java.awt.*;
+import java.nio.file.Path;
+import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@@ -87,11 +89,17 @@ public class CustomModeController extends GeneratorController {
}
private void updateComboBoxes() {
- view.getSubclassTemplate().setItem(getApplication().getCodeTemplateManager().getNameByPath(cgenConfiguration.getTemplate()));
- view.getSuperclassTemplate().setItem(getApplication().getCodeTemplateManager().getNameByPath(cgenConfiguration.getSuperTemplate()));
+ view.getSubclassTemplate().setItem(getApplication().getCodeTemplateManager().getNameByPath(
+ getAbsoluteTemplatePath(cgenConfiguration.getTemplate(), cgenConfiguration.getRootPath())));
+ view.getSuperclassTemplate().setItem(getApplication().getCodeTemplateManager().getNameByPath(
+ getAbsoluteTemplatePath(cgenConfiguration.getSuperTemplate(), cgenConfiguration.getRootPath())));
view.setDisableSuperComboBoxes(view.getPairs().isSelected());
}
+ private String getAbsoluteTemplatePath(String relTemplatePath, Path rootPath) {
+ return rootPath.resolve(Paths.get(relTemplatePath)).toString();
+ }
+
private void initListeners(){
view.getPairs().addActionListener(val -> {
cgenConfiguration.setMakePairs(view.getPairs().isSelected());
http://git-wip-us.apache.org/repos/asf/cayenne/blob/c813e767/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 8b1d2a3..16c8edf 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CustomModePanel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CustomModePanel.java
@@ -21,6 +21,7 @@ package org.apache.cayenne.modeler.editor.cgen;
import com.jgoodies.forms.builder.DefaultFormBuilder;
import com.jgoodies.forms.layout.FormLayout;
+import org.apache.cayenne.gen.CgenConfiguration;
import org.apache.cayenne.modeler.Application;
import org.apache.cayenne.modeler.ProjectController;
import org.apache.cayenne.modeler.util.ComboBoxAdapter;
@@ -29,12 +30,10 @@ 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.JPanel;
-import javax.swing.JTextField;
-import java.awt.BorderLayout;
-import java.awt.FlowLayout;
+import javax.swing.*;
+import java.awt.*;
+import java.nio.file.Path;
+import java.nio.file.Paths;
/**
* @since 4.1
@@ -58,7 +57,8 @@ public class CustomModePanel extends GeneratorControllerPanel {
this.superclassTemplate = new ComboBoxAdapter<String>(superclassField) {
@Override
protected void updateModel(String item) throws ValidationException {
- getCgenByDataMap().setSuperTemplate(Application.getInstance().getCodeTemplateManager().getTemplatePath(String.valueOf(item)));
+ CgenConfiguration cgenConfiguration = getCgenByDataMap();
+ cgenConfiguration.setSuperTemplate(getTemplatePath(cgenConfiguration.getRootPath(), item));
if(!codeGeneratorControllerBase.isInitFromModel()) {
projectController.setDirty(true);
}
@@ -69,7 +69,8 @@ public class CustomModePanel extends GeneratorControllerPanel {
this.subclassTemplate = new ComboBoxAdapter<String>(subclassField) {
@Override
protected void updateModel(String item) throws ValidationException {
- getCgenByDataMap().setTemplate(Application.getInstance().getCodeTemplateManager().getTemplatePath(String.valueOf(item)));
+ CgenConfiguration cgenConfiguration = getCgenByDataMap();
+ cgenConfiguration.setTemplate(getTemplatePath(cgenConfiguration.getRootPath(), item));
if(!codeGeneratorControllerBase.isInitFromModel()) {
projectController.setDirty(true);
}
@@ -143,6 +144,10 @@ public class CustomModePanel extends GeneratorControllerPanel {
add(builder.getPanel(), BorderLayout.CENTER);
}
+ private String getTemplatePath(Path rootPath, String templatePath) {
+ return rootPath.relativize(Paths.get(Application.getInstance().getCodeTemplateManager().getTemplatePath(String.valueOf(templatePath)))).toString();
+ }
+
public void setDisableSuperComboBoxes(boolean val){
superclassTemplate.getComboBox().setEnabled(val);
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/c813e767/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabController.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabController.java
index 77a71b8..0956cc3 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabController.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabController.java
@@ -103,6 +103,10 @@ public class GeneratorTabController extends CayenneController {
return controllers.get(STANDARD_OBJECTS_MODE);
}
+ GeneratorController getCustomModeController() {
+ return controllers.get(ADVANCED_MODE);
+ }
+
GeneratorController getClientGeneratorController() {
return controllers.get(CLIENT_OBJECTS_MODE);
}
[03/32] cayenne git commit: Cgen. Create saver and loader for
dataMaps.
Posted by nt...@apache.org.
Cgen. Create saver and loader for dataMaps.
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/d489f2a5
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/d489f2a5
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/d489f2a5
Branch: refs/heads/master
Commit: d489f2a5b45be473ffd7a07a6a18bc971940e1bc
Parents: 8119ffa
Author: Arseni Bulatski <an...@gmail.com>
Authored: Mon Jun 18 15:04:56 2018 +0300
Committer: Arseni Bulatski <an...@gmail.com>
Committed: Wed Oct 24 13:40:16 2018 +0300
----------------------------------------------------------------------
.../cayenne/gen/ClassGenerationAction.java | 178 ++++++++++++++--
.../org/apache/cayenne/gen/DataMapArtifact.java | 1 +
.../apache/cayenne/gen/EmbeddableArtifact.java | 12 +-
.../org/apache/cayenne/gen/EntityArtifact.java | 11 +-
.../cayenne/gen/xml/CgenConfigHandler.java | 206 +++++++++++++++++-
.../apache/cayenne/gen/xml/CgenExtension.java | 5 +-
.../cayenne/gen/xml/CgenLoaderDelegate.java | 6 +-
.../cayenne/gen/xml/CgenSaverDelegate.java | 6 +-
.../cayenne/gen/xml/EmbeddableHandler.java | 49 +++++
.../cayenne/gen/xml/ObjEntityHandler.java | 48 +++++
.../cayenne/modeler/CodeTemplateManager.java | 19 ++
.../editor/cgen/ClassesTabController.java | 22 +-
.../editor/cgen/CodeGeneratorController.java | 15 +-
.../cgen/CodeGeneratorControllerBase.java | 70 +++++--
.../editor/cgen/CustomModeController.java | 209 ++++++++++---------
.../modeler/editor/cgen/CustomModePanel.java | 64 ++++--
.../editor/cgen/GeneratorController.java | 110 ++++------
.../editor/cgen/GeneratorControllerPanel.java | 13 +-
.../editor/cgen/GeneratorTabController.java | 3 +-
.../editor/cgen/StandardPanelComponent.java | 79 -------
20 files changed, 782 insertions(+), 344 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cayenne/blob/d489f2a5/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 0eaf66b..423fb92 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
@@ -20,26 +20,20 @@
package org.apache.cayenne.gen;
import org.apache.cayenne.CayenneRuntimeException;
-import org.apache.cayenne.map.DataMap;
-import org.apache.cayenne.map.Embeddable;
-import org.apache.cayenne.map.ObjEntity;
-import org.apache.cayenne.map.QueryDescriptor;
+import org.apache.cayenne.configuration.ConfigurationNodeVisitor;
+import org.apache.cayenne.gen.xml.CgenExtension;
+import org.apache.cayenne.map.*;
+import org.apache.cayenne.util.XMLEncoder;
+import org.apache.cayenne.util.XMLSerializable;
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.VelocityEngine;
import org.slf4j.Logger;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.OutputStreamWriter;
-import java.io.Writer;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Properties;
-
-public class ClassGenerationAction {
+import java.io.*;
+import java.util.*;
+
+public class ClassGenerationAction implements Serializable, XMLSerializable {
static final String TEMPLATES_DIR_NAME = "templates/v4_1/";
public static final String SINGLE_CLASS_TEMPLATE = TEMPLATES_DIR_NAME + "singleclass.vm";
@@ -59,6 +53,9 @@ public class ClassGenerationAction {
protected Collection<Artifact> artifacts;
+ protected Collection<String> entityArtifacts;
+ protected Collection<String> embeddableArtifacts;
+
protected String superPkg;
protected DataMap dataMap;
@@ -92,6 +89,7 @@ public class ClassGenerationAction {
protected Map<String, Template> templateCache;
public ClassGenerationAction() {
+// this.destDir = new File(System.getProperty("user.dir"));
this.outputPattern = "*.java";
this.timestamp = 0L;
this.usePkgPath = true;
@@ -99,7 +97,13 @@ public class ClassGenerationAction {
this.context = new VelocityContext();
this.templateCache = new HashMap<>(5);
+ this.template = SUBCLASS_TEMPLATE;
+ this.superTemplate = SUPERCLASS_TEMPLATE;
+ this.artifactsGenerationMode = ArtifactsGenerationMode.ENTITY;
+
this.artifacts = new ArrayList<>();
+ this.entityArtifacts = new ArrayList<>();
+ this.embeddableArtifacts = new ArrayList<>();
}
protected String defaultTemplateName(TemplateType type) {
@@ -156,14 +160,14 @@ public class ClassGenerationAction {
* Returns a String used to prefix class name to create a generated
* superclass. Default value is "_".
*/
- protected String getSuperclassPrefix() {
+ private String getSuperclassPrefix() {
return ClassGenerationAction.SUPERCLASS_PREFIX;
}
/**
* VelocityContext initialization method called once per artifact.
*/
- protected void resetContextForArtifact(Artifact artifact) {
+ private void resetContextForArtifact(Artifact artifact) {
StringUtils stringUtils = StringUtils.getInstance();
String qualifiedClassName = artifact.getQualifiedClassName();
@@ -201,7 +205,7 @@ public class ClassGenerationAction {
* VelocityContext initialization method called once per each artifact and
* template type combination.
*/
- protected void resetContextForArtifactTemplate(Artifact artifact, TemplateType templateType) {
+ void resetContextForArtifactTemplate(Artifact artifact, TemplateType templateType) {
context.put(Artifact.IMPORT_UTILS_KEY, new ImportUtils());
artifact.postInitContext(context);
}
@@ -248,7 +252,26 @@ public class ClassGenerationAction {
}
}
- protected Template getTemplate(TemplateType type) {
+ public void prepareArtifacts(){
+ if(!entityArtifacts.isEmpty()) {
+ for(String name : entityArtifacts) {
+ ObjEntity objEntity = dataMap.getObjEntity(name);
+ if(objEntity != null) {
+ artifacts.add(new EntityArtifact(objEntity));
+ }
+ }
+ }
+ if(!embeddableArtifacts.isEmpty()) {
+ for(String name : embeddableArtifacts) {
+ Embeddable embeddable = dataMap.getEmbeddable(name);
+ if(embeddable != null) {
+ artifacts.add(new EmbeddableArtifact(embeddable));
+ }
+ }
+ }
+ }
+
+ private Template getTemplate(TemplateType type) {
String templateName = customTemplateName(type);
if (templateName == null) {
@@ -284,7 +307,7 @@ public class ClassGenerationAction {
* Throws CayenneRuntimeException if it is in an inconsistent state.
* Called internally from "execute".
*/
- protected void validateAttributes() {
+ private void validateAttributes() {
if (destDir == null) {
throw new CayenneRuntimeException("'destDir' attribute is missing.");
}
@@ -391,7 +414,7 @@ public class ClassGenerationAction {
* Returns a target file where a generated superclass must be saved. If null
* is returned, class shouldn't be generated.
*/
- protected File fileForSuperclass() throws Exception {
+ private File fileForSuperclass() throws Exception {
String packageName = (String) context.get(Artifact.SUPER_PACKAGE_KEY);
String className = (String) context.get(Artifact.SUPER_CLASS_KEY);
@@ -410,7 +433,7 @@ public class ClassGenerationAction {
* Returns a target file where a generated class must be saved. If null is
* returned, class shouldn't be generated.
*/
- protected File fileForClass() throws Exception {
+ private File fileForClass() throws Exception {
String packageName = (String) context.get(Artifact.SUB_PACKAGE_KEY);
String className = (String) context.get(Artifact.SUB_CLASS_KEY);
@@ -470,7 +493,7 @@ public class ClassGenerationAction {
* belong to <code>pkgName</code> package should reside. Creates any missing
* diectories below <code>dest</code>.
*/
- protected File mkpath(File dest, String pkgName) throws Exception {
+ private File mkpath(File dest, String pkgName) throws Exception {
if (!usePkgPath || pkgName == null) {
return dest;
@@ -550,6 +573,20 @@ public class ClassGenerationAction {
}
}
+ public void loadEntity(String name) {
+ if (artifactsGenerationMode == ArtifactsGenerationMode.ENTITY
+ || artifactsGenerationMode == ArtifactsGenerationMode.ALL) {
+ entityArtifacts.add(name);
+ }
+ }
+
+ public void loadEmbeddable(String name) {
+ if (artifactsGenerationMode == ArtifactsGenerationMode.ENTITY
+ || artifactsGenerationMode == ArtifactsGenerationMode.ALL) {
+ embeddableArtifacts.add(name);
+ }
+ }
+
/**
* Sets an optional shared VelocityContext. Useful with tools like VPP that
* can set custom values in the context, not known to Cayenne.
@@ -584,6 +621,10 @@ public class ClassGenerationAction {
}
}
+ public String getArtifactsGenerationMode(){
+ return artifactsGenerationMode.getLabel();
+ }
+
public boolean isForce() {
return force;
}
@@ -605,4 +646,95 @@ public class ClassGenerationAction {
public void setCreatePKProperties(boolean createPKProperties) {
this.createPKProperties = createPKProperties;
}
+
+ public Collection<EntityArtifact> getEntityArtifacts() {
+ Collection<EntityArtifact> entityArtifacts = new ArrayList<>();
+ for(Artifact artifact : artifacts){
+ if(artifact instanceof EntityArtifact){
+ entityArtifacts.add((EntityArtifact) artifact);
+ }
+ }
+ return entityArtifacts;
+ }
+
+ public Collection<EmbeddableArtifact> getEmbeddableArtifacts() {
+ Collection<EmbeddableArtifact> embeddableArtifacts = new ArrayList<>();
+ for(Artifact artifact : artifacts){
+ if(artifact instanceof EmbeddableArtifact){
+ embeddableArtifacts.add((EmbeddableArtifact) artifact);
+ }
+ }
+ return embeddableArtifacts;
+ }
+
+ public boolean isMakePairs() {
+ return makePairs;
+ }
+
+ public boolean isOverwrite() {
+ return overwrite;
+ }
+
+ public boolean isUsePkgPath() {
+ return usePkgPath;
+ }
+
+ public boolean isCreatePropertyNames() {
+ return createPropertyNames;
+ }
+
+ public String getOutputPattern() {
+ return outputPattern;
+ }
+
+ public String getSuperclassTemplate(){
+ return superTemplate;
+ }
+
+ public DataMap getDataMap() {
+ return dataMap;
+ }
+
+ public String getDir(){
+ return destDir.getAbsolutePath();
+ }
+
+ public String getTemplate() {
+ return template;
+ }
+
+ public String getSuperPkg(){
+ return superPkg;
+ }
+
+ public void resetArtifacts(){
+ this.artifacts = new ArrayList<>();
+ }
+
+ public Collection<String> getEntities() {
+ return entityArtifacts;
+ }
+
+ public Collection<String> getEmbeddables() {
+ return embeddableArtifacts;
+ }
+
+ @Override
+ public void encodeAsXML(XMLEncoder encoder, ConfigurationNodeVisitor delegate) {
+ encoder.start("cgen")
+ .attribute("xmlns", CgenExtension.NAMESPACE)
+ .nested(this.getEntityArtifacts(), delegate)
+ .nested(this.getEmbeddableArtifacts(), delegate)
+ .simpleTag("outputDirectory", this.destDir.getAbsolutePath())
+ .simpleTag("generationMode", this.artifactsGenerationMode.getLabel())
+ .simpleTag("subclassTemplate", this.template)
+ .simpleTag("superclassTemplate", this.superTemplate)
+ .simpleTag("outputPattern", this.outputPattern)
+ .simpleTag("makePairs", Boolean.toString(this.makePairs))
+ .simpleTag("usePkgPath", Boolean.toString(this.usePkgPath))
+ .simpleTag("overwriteSubclasses", Boolean.toString(this.overwrite))
+ .simpleTag("createPropertyNames", Boolean.toString(this.createPropertyNames))
+ .simpleTag("superPkg", this.superPkg)
+ .end();
+ }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/d489f2a5/cayenne-cgen/src/main/java/org/apache/cayenne/gen/DataMapArtifact.java
----------------------------------------------------------------------
diff --git a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/DataMapArtifact.java b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/DataMapArtifact.java
index 937f451..54a7426 100644
--- a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/DataMapArtifact.java
+++ b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/DataMapArtifact.java
@@ -137,4 +137,5 @@ public class DataMapArtifact implements Artifact {
public DataMap getDataMap() {
return dataMap;
}
+
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/d489f2a5/cayenne-cgen/src/main/java/org/apache/cayenne/gen/EmbeddableArtifact.java
----------------------------------------------------------------------
diff --git a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/EmbeddableArtifact.java b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/EmbeddableArtifact.java
index 8e6ea43..fec8dae 100644
--- a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/EmbeddableArtifact.java
+++ b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/EmbeddableArtifact.java
@@ -18,7 +18,10 @@
****************************************************************/
package org.apache.cayenne.gen;
+import org.apache.cayenne.configuration.ConfigurationNodeVisitor;
import org.apache.cayenne.map.Embeddable;
+import org.apache.cayenne.util.XMLEncoder;
+import org.apache.cayenne.util.XMLSerializable;
import org.apache.velocity.VelocityContext;
/**
@@ -26,7 +29,7 @@ import org.apache.velocity.VelocityContext;
*
* @since 3.0
*/
-public class EmbeddableArtifact implements Artifact {
+public class EmbeddableArtifact implements Artifact, XMLSerializable {
protected Embeddable embeddable;
@@ -65,4 +68,11 @@ public class EmbeddableArtifact implements Artifact {
public void postInitContext(VelocityContext context) {
// noop - no special keys...
}
+
+ @Override
+ public void encodeAsXML(XMLEncoder encoder, ConfigurationNodeVisitor delegate) {
+ encoder.start("embeddable")
+ .simpleTag("name", embeddable.getClassName())
+ .end();
+ }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/d489f2a5/cayenne-cgen/src/main/java/org/apache/cayenne/gen/EntityArtifact.java
----------------------------------------------------------------------
diff --git a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/EntityArtifact.java b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/EntityArtifact.java
index 930b131..b53ee46 100644
--- a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/EntityArtifact.java
+++ b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/EntityArtifact.java
@@ -19,7 +19,10 @@
package org.apache.cayenne.gen;
import org.apache.cayenne.BaseDataObject;
+import org.apache.cayenne.configuration.ConfigurationNodeVisitor;
import org.apache.cayenne.map.ObjEntity;
+import org.apache.cayenne.util.XMLEncoder;
+import org.apache.cayenne.util.XMLSerializable;
import org.apache.velocity.VelocityContext;
/**
@@ -27,7 +30,7 @@ import org.apache.velocity.VelocityContext;
*
* @since 3.0
*/
-public class EntityArtifact implements Artifact {
+public class EntityArtifact implements Artifact, XMLSerializable {
public static String ENTITY_UTILS_KEY = "entityUtils";
@@ -95,4 +98,10 @@ public class EntityArtifact implements Artifact {
context.put(ENTITY_UTILS_KEY, metadata);
}
+ @Override
+ public void encodeAsXML(XMLEncoder encoder, ConfigurationNodeVisitor delegate) {
+ encoder.start("objEntity")
+ .simpleTag("name", entity.getName())
+ .end();
+ }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/d489f2a5/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenConfigHandler.java
----------------------------------------------------------------------
diff --git a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenConfigHandler.java b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenConfigHandler.java
index 23f0ff3..fa89bf5 100644
--- a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenConfigHandler.java
+++ b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenConfigHandler.java
@@ -2,22 +2,224 @@ package org.apache.cayenne.gen.xml;
import org.apache.cayenne.configuration.xml.DataChannelMetaData;
import org.apache.cayenne.configuration.xml.NamespaceAwareNestedTagHandler;
-import org.apache.cayenne.dbsync.xml.DbImportExtension;
+import org.apache.cayenne.gen.ClassGenerationAction;
import org.xml.sax.Attributes;
+import org.xml.sax.ContentHandler;
import org.xml.sax.SAXException;
+import java.io.File;
+
public class CgenConfigHandler extends NamespaceAwareNestedTagHandler{
+ public static final String CONFIG_TAG = "cgen";
+
+ private static final String OUTPUT_DIRECTORY_TAG = "outputDirectory";
+ private static final String GENERATION_MODE_TAG = "generationMode";
+ private static final String SUBCLASS_TEMPLATE_TAG = "subclassTemplate";
+ private static final String SUPERCLASS_TEMPLATE_TAG = "superclassTemplate";
+ private static final String OUTPUT_PATTERN_TAG = "outputPattern";
+ private static final String MAKE_PAIRS_TAG = "makePairs";
+ private static final String USE_PKG_PATH_TAG = "usePkgPath";
+ private static final String OVERWRITE_SUBCLASSES_TAG = "overwriteSubclasses";
+ private static final String CREATE_PROPERTY_NAMES_TAG = "createPropertyNames";
+ private static final String SUPER_PKG_TAG = "superPkg";
+ private static final String OBJENTITY_TAG = "objEntity";
+ private static final String EMBEDDABLE_TAG = "embeddable";
+
+ public static final String TRUE = "true";
+
private DataChannelMetaData metaData;
+ private ClassGenerationAction configuration;
CgenConfigHandler(NamespaceAwareNestedTagHandler parentHandler, DataChannelMetaData metaData) {
super(parentHandler);
this.metaData = metaData;
- this.targetNamespace = DbImportExtension.NAMESPACE;
+ this.targetNamespace = CgenExtension.NAMESPACE;
}
@Override
protected boolean processElement(String namespaceURI, String localName, Attributes attributes) throws SAXException {
+ switch (localName) {
+ case CONFIG_TAG:
+ createConfig();
+ return true;
+ }
return false;
}
+
+ @Override
+ protected ContentHandler createChildTagHandler(String namespaceURI, String localName,
+ String qName, Attributes attributes) {
+
+ if (namespaceURI.equals(targetNamespace)) {
+ switch (localName) {
+ case OBJENTITY_TAG:
+ return new ObjEntityHandler(this, configuration);
+ case EMBEDDABLE_TAG:
+ return new EmbeddableHandler(this, configuration);
+ }
+ }
+
+ return super.createChildTagHandler(namespaceURI, localName, qName, attributes);
+ }
+
+ @Override
+ protected void processCharData(String localName, String data) {
+ switch (localName) {
+ case OUTPUT_DIRECTORY_TAG:
+ createOutputDir(data);
+ break;
+ case GENERATION_MODE_TAG:
+ createGenerationMode(data);
+ break;
+ case SUBCLASS_TEMPLATE_TAG:
+ createSubclassTemplate(data);
+ break;
+ case SUPERCLASS_TEMPLATE_TAG:
+ createSuperclassTemplate(data);
+ break;
+ case OUTPUT_PATTERN_TAG:
+ createOutputPattern(data);
+ break;
+ case MAKE_PAIRS_TAG:
+ createMakePairs(data);
+ break;
+ case USE_PKG_PATH_TAG:
+ createUsePkgPath(data);
+ break;
+ case OVERWRITE_SUBCLASSES_TAG:
+ createOverwriteSubclasses(data);
+ break;
+ case CREATE_PROPERTY_NAMES_TAG:
+ createPropertyNamesTag(data);
+ break;
+ case SUPER_PKG_TAG:
+ createSuperPkg(data);
+ break;
+ }
+ }
+
+ private void createOutputDir(String path) {
+ if(path.trim().length() == 0) {
+ return;
+ }
+
+ if(configuration != null) {
+ configuration.setDestDir(new File(path));
+ }
+ }
+
+ private void createGenerationMode(String mode) {
+ if(mode.trim().length() == 0) {
+ return;
+ }
+
+ if(configuration != null) {
+ configuration.setArtifactsGenerationMode(mode);
+ }
+ }
+
+ private void createSubclassTemplate(String template) {
+ if(template.trim().length() == 0) {
+ return;
+ }
+
+ if(configuration != null) {
+ configuration.setTemplate(template);
+ }
+ }
+
+ private void createSuperclassTemplate(String template) {
+ if(template.trim().length() == 0) {
+ return;
+ }
+
+ if(configuration != null) {
+ configuration.setSuperTemplate(template);
+ }
+ }
+
+ private void createOutputPattern(String pattern) {
+ if(pattern.trim().length() == 0) {
+ return;
+ }
+
+ if(configuration != null) {
+ configuration.setOutputPattern(pattern);
+ }
+ }
+
+ private void createMakePairs(String makePairs) {
+ if (makePairs.trim().length() == 0) {
+ return;
+ }
+
+ if (configuration != null) {
+ if (makePairs.equals(TRUE)) {
+ configuration.setMakePairs(true);
+ } else {
+ configuration.setMakePairs(false);
+ }
+ }
+ }
+
+ private void createUsePkgPath(String data) {
+ if(data.trim().length() == 0) {
+ return;
+ }
+
+ if(configuration != null) {
+ if(data.equals(TRUE)) {
+ configuration.setUsePkgPath(true);
+ } else {
+ configuration.setUsePkgPath(false);
+ }
+ }
+ }
+
+ private void createOverwriteSubclasses(String data) {
+ if(data.trim().length() == 0) {
+ return;
+ }
+
+ if(configuration != null) {
+ if(data.equals(TRUE)) {
+ configuration.setOverwrite(true);
+ } else {
+ configuration.setOverwrite(false);
+ }
+ }
+ }
+
+ private void createPropertyNamesTag(String data) {
+ if(data.trim().length() == 0) {
+ return;
+ }
+
+ if(configuration != null) {
+ if(data.equals(TRUE)) {
+ configuration.setCreatePropertyNames(true);
+ } else {
+ configuration.setCreatePropertyNames(false);
+ }
+ }
+ }
+
+ private void createSuperPkg(String data) {
+ if(data.trim().length() == 0) {
+ return;
+ }
+
+ if(configuration != null) {
+ configuration.setSuperPkg(data);
+ }
+ }
+
+ private void createConfig() {
+ configuration = new ClassGenerationAction();
+ loaderContext.addDataMapListener(dataMap -> {
+ CgenConfigHandler.this.metaData.add(dataMap, configuration);
+ configuration.setDataMap(dataMap);
+ });
+ }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/d489f2a5/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenExtension.java
----------------------------------------------------------------------
diff --git a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenExtension.java b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenExtension.java
index 619bffc..e98eca9 100644
--- a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenExtension.java
+++ b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenExtension.java
@@ -4,6 +4,7 @@ import org.apache.cayenne.configuration.ConfigurationNodeVisitor;
import org.apache.cayenne.configuration.xml.DataChannelMetaData;
import org.apache.cayenne.di.Inject;
import org.apache.cayenne.project.Project;
+import org.apache.cayenne.project.extension.BaseNamingDelegate;
import org.apache.cayenne.project.extension.LoaderDelegate;
import org.apache.cayenne.project.extension.ProjectExtension;
import org.apache.cayenne.project.extension.SaverDelegate;
@@ -17,7 +18,7 @@ public class CgenExtension implements ProjectExtension {
@Override
public LoaderDelegate createLoaderDelegate() {
- return null;
+ return new CgenLoaderDelegate(metaData);
}
@Override
@@ -27,6 +28,6 @@ public class CgenExtension implements ProjectExtension {
@Override
public ConfigurationNodeVisitor<String> createNamingDelegate() {
- return null;
+ return new BaseNamingDelegate();
}
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/d489f2a5/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenLoaderDelegate.java
----------------------------------------------------------------------
diff --git a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenLoaderDelegate.java b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenLoaderDelegate.java
index 44438e3..8b3728f 100644
--- a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenLoaderDelegate.java
+++ b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenLoaderDelegate.java
@@ -20,9 +20,9 @@ public class CgenLoaderDelegate implements LoaderDelegate {
@Override
public NamespaceAwareNestedTagHandler createHandler(NamespaceAwareNestedTagHandler parent, String tag) {
-// if(CgenConfigHandler.CONFIG_TAG.equals(tag)) {
-// return new CgenConfigHandler(parent, metaData);
-// }
+ if(CgenConfigHandler.CONFIG_TAG.equals(tag)) {
+ return new CgenConfigHandler(parent, metaData);
+ }
return null;
}
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/d489f2a5/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenSaverDelegate.java
----------------------------------------------------------------------
diff --git a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenSaverDelegate.java b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenSaverDelegate.java
index f9c7173..d4d4b8f 100644
--- a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenSaverDelegate.java
+++ b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenSaverDelegate.java
@@ -1,6 +1,7 @@
package org.apache.cayenne.gen.xml;
import org.apache.cayenne.configuration.xml.DataChannelMetaData;
+import org.apache.cayenne.gen.ClassGenerationAction;
import org.apache.cayenne.map.DataMap;
import org.apache.cayenne.project.extension.BaseSaverDelegate;
@@ -14,7 +15,10 @@ public class CgenSaverDelegate extends BaseSaverDelegate{
@Override
public Void visitDataMap(DataMap dataMap) {
-
+ ClassGenerationAction cgen = metaData.get(dataMap, ClassGenerationAction.class);
+ if(cgen != null){
+ encoder.nested(cgen, getParentDelegate());
+ }
return null;
}
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/d489f2a5/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/EmbeddableHandler.java
----------------------------------------------------------------------
diff --git a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/EmbeddableHandler.java b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/EmbeddableHandler.java
new file mode 100644
index 0000000..4e11a6f
--- /dev/null
+++ b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/EmbeddableHandler.java
@@ -0,0 +1,49 @@
+package org.apache.cayenne.gen.xml;
+
+import org.apache.cayenne.configuration.xml.NamespaceAwareNestedTagHandler;
+import org.apache.cayenne.gen.ClassGenerationAction;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+
+public class EmbeddableHandler extends NamespaceAwareNestedTagHandler {
+
+ private static final String EMBEDDABLE_TAG = "embeddable";
+ private static final String EMBEDDABLE_NAME_TAG = "name";
+
+ private ClassGenerationAction configuration;
+
+ EmbeddableHandler(NamespaceAwareNestedTagHandler parentHandler, ClassGenerationAction configuration) {
+ super(parentHandler);
+ this.configuration = configuration;
+ }
+
+ @Override
+ protected boolean processElement(String namespaceURI, String localName, Attributes attributes) throws SAXException {
+ switch (localName) {
+ case EMBEDDABLE_TAG:
+ return true;
+ }
+
+ return false;
+ }
+
+ @Override
+ protected void processCharData(String localName, String data) {
+ switch (localName) {
+ case EMBEDDABLE_NAME_TAG:
+ createEmbeddableEntity(data);
+ break;
+ }
+ }
+
+ private void createEmbeddableEntity(String data) {
+ if(data.trim().length() == 0) {
+ return;
+ }
+
+ if(configuration != null) {
+ configuration.loadEmbeddable(data);
+ }
+ }
+}
+
http://git-wip-us.apache.org/repos/asf/cayenne/blob/d489f2a5/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/ObjEntityHandler.java
----------------------------------------------------------------------
diff --git a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/ObjEntityHandler.java b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/ObjEntityHandler.java
new file mode 100644
index 0000000..f4ebc48
--- /dev/null
+++ b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/ObjEntityHandler.java
@@ -0,0 +1,48 @@
+package org.apache.cayenne.gen.xml;
+
+import org.apache.cayenne.configuration.xml.NamespaceAwareNestedTagHandler;
+import org.apache.cayenne.gen.ClassGenerationAction;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+
+public class ObjEntityHandler extends NamespaceAwareNestedTagHandler {
+
+ private static final String OBJENTITY_TAG = "objEntity";
+ private static final String OBJENTITY_NAME_TAG = "name";
+
+ private ClassGenerationAction configuration;
+
+ ObjEntityHandler(NamespaceAwareNestedTagHandler parentHandler, ClassGenerationAction configuration) {
+ super(parentHandler);
+ this.configuration = configuration;
+ }
+
+ @Override
+ protected boolean processElement(String namespaceURI, String localName, Attributes attributes) throws SAXException {
+ switch (localName) {
+ case OBJENTITY_TAG:
+ return true;
+ }
+
+ return false;
+ }
+
+ @Override
+ protected void processCharData(String localName, String data) {
+ switch (localName) {
+ case OBJENTITY_NAME_TAG:
+ createObjEntity(data);
+ break;
+ }
+ }
+
+ private void createObjEntity(String data) {
+ if(data.trim().length() == 0) {
+ return;
+ }
+
+ if(configuration != null) {
+ configuration.loadEntity(data);
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/d489f2a5/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CodeTemplateManager.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CodeTemplateManager.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CodeTemplateManager.java
index c72934d..1d51503 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CodeTemplateManager.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CodeTemplateManager.java
@@ -50,6 +50,8 @@ public class CodeTemplateManager {
protected Map<String, String> customTemplates;
protected Map<String, String> standardTemplates;
+ private Map<String, String> reverseStandartTemplates;
+
private static Logger logger = LoggerFactory.getLogger(CodeTemplateManager.class);
public Preferences getTemplatePreferences(Application application) {
@@ -75,6 +77,14 @@ public class CodeTemplateManager {
standardTemplates.put(STANDARD_SERVER_SUBCLASS, ClassGenerationAction.SUBCLASS_TEMPLATE);
standardTemplates.put(STANDARD_CLIENT_SUBCLASS, ClientClassGenerationAction.SUBCLASS_TEMPLATE);
standardTemplates.put(SINGLE_SERVER_CLASS, ClassGenerationAction.SINGLE_CLASS_TEMPLATE);
+
+ reverseStandartTemplates = new HashMap<>();
+ reverseStandartTemplates.put(ClassGenerationAction.SUBCLASS_TEMPLATE, STANDARD_SERVER_SUBCLASS);
+ reverseStandartTemplates.put(ClientClassGenerationAction.SUBCLASS_TEMPLATE, STANDARD_CLIENT_SUBCLASS);
+ reverseStandartTemplates.put(ClassGenerationAction.SINGLE_CLASS_TEMPLATE, SINGLE_SERVER_CLASS);
+ reverseStandartTemplates.put(ClientClassGenerationAction.SUPERCLASS_TEMPLATE, STANDARD_CLIENT_SUPERCLASS);
+ reverseStandartTemplates.put(ClassGenerationAction.SUPERCLASS_TEMPLATE, STANDARD_SERVER_SUPERCLASS);
+
}
/**
@@ -107,6 +117,15 @@ public class CodeTemplateManager {
return value != null ? value.toString() : null;
}
+ public String getNameByPath(String name) {
+ if(customTemplates.containsKey(name)){
+ return customTemplates.get(name).toString();
+ } else {
+ Object value = reverseStandartTemplates.get(name);
+ return value != null ? value.toString() : null;
+ }
+ }
+
public Map<String, String> getCustomTemplates() {
return customTemplates;
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/d489f2a5/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 2b478ac..3a63297 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
@@ -19,7 +19,6 @@
package org.apache.cayenne.modeler.editor.cgen;
-import org.apache.cayenne.map.DataMap;
import org.apache.cayenne.modeler.util.CayenneController;
import org.apache.cayenne.swing.BindingBuilder;
import org.apache.cayenne.swing.ImageRendererColumn;
@@ -36,13 +35,18 @@ public class ClassesTabController extends CayenneController {
protected ClassesTabPanel view;
protected ObjectBinding tableBinding;
+ private BindingBuilder builder;
+
public ClassesTabController(CodeGeneratorControllerBase parent) {
super(parent);
this.view = new ClassesTabPanel();
+ builder = new BindingBuilder(getApplication().getBindingFactory(), this);
+
+ builder.bindToAction(view.getCheckAll(), "checkAllAction()");
}
- public void startup(DataMap dataMap){
+ public void startup(){
initBindings();
}
@@ -55,13 +59,6 @@ public class ClassesTabController extends CayenneController {
}
protected void initBindings() {
-
- BindingBuilder builder = new BindingBuilder(
- getApplication().getBindingFactory(),
- this);
-
- builder.bindToAction(view.getCheckAll(), "checkAllAction()");
-
TableBindingBuilder tableBuilder = new TableBindingBuilder(builder);
tableBuilder.addColumn(
@@ -109,6 +106,7 @@ public class ClassesTabController extends CayenneController {
else if (selectedCount == getParentController().getClasses().size()) {
view.getCheckAll().setSelected(true);
}
+ updateEntities();
}
/**
@@ -118,6 +116,12 @@ public class ClassesTabController extends CayenneController {
public void checkAllAction() {
if (getParentController().updateSelection(view.getCheckAll().isSelected() ? o -> true : o -> false)) {
tableBinding.updateView();
+ updateEntities();
}
}
+
+ private void updateEntities(){
+ getParentController().updateEntities();
+ getParentController().getProjectController().setDirty(true);
+ }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/d489f2a5/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 8163acb..45d3e51 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
@@ -29,7 +29,6 @@ import org.slf4j.LoggerFactory;
import javax.swing.*;
import java.awt.*;
-import java.util.Collection;
import java.util.function.Predicate;
/**
@@ -58,8 +57,11 @@ public class CodeGeneratorController extends CodeGeneratorControllerBase {
private void initListeners(){
projectController.addDataMapDisplayListener(e -> {
super.startup(e.getDataMap());
- classesSelector.startup(e.getDataMap());
+ classesSelector.startup();
generatorSelector.startup(e.getDataMap());
+ GeneratorController modeController = generatorSelector.getGeneratorController();
+ ClassGenerationAction classGenerationAction = modeController.createGenerator();
+ ((CustomModeController)modeController).initForm(classGenerationAction);
});
}
@@ -125,13 +127,10 @@ public class CodeGeneratorController extends CodeGeneratorControllerBase {
}
public void generateAction() {
- Collection<ClassGenerationAction> generators = generatorSelector.getGenerator();
-
- if (generators != null) {
+ ClassGenerationAction generator = generatorSelector.getGenerator();
+ if (generator != null) {
try {
- for (ClassGenerationAction generator : generators) {
- generator.execute();
- }
+ generator.execute();
JOptionPane.showMessageDialog(
getView(),
"Class generation finished");
http://git-wip-us.apache.org/repos/asf/cayenne/blob/d489f2a5/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 17196fa..d99e708 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
@@ -19,6 +19,7 @@
package org.apache.cayenne.modeler.editor.cgen;
+import org.apache.cayenne.gen.ClassGenerationAction;
import org.apache.cayenne.map.DataMap;
import org.apache.cayenne.map.Embeddable;
import org.apache.cayenne.map.ObjEntity;
@@ -171,14 +172,6 @@ public abstract class CodeGeneratorControllerBase extends CayenneController {
return selected;
}
- public int getSelectedEntitiesSize() {
- return selectedEntities.size();
- }
-
- public int getSelectedEmbeddablesSize() {
- return selectedEmbeddables.size();
- }
-
/**
* Returns the first encountered validation problem for an antity matching the name or
* null if the entity is valid or the entity is not present.
@@ -250,18 +243,6 @@ public abstract class CodeGeneratorControllerBase extends CayenneController {
}
}
- public Object getCurrentClass() {
- return currentClass;
- }
-
- public void setCurrentClass(Object currentClass) {
- this.currentClass = currentClass;
- }
-
- public Collection<DataMap> getDataMaps() {
- return dataMaps;
- }
-
public JLabel getItemName(Object obj) {
String className;
Icon icon;
@@ -279,6 +260,43 @@ public abstract class CodeGeneratorControllerBase extends CayenneController {
return labelIcon;
}
+ public void updateEntities(){
+ DataMap map = getProjectController().getCurrentDataMap();
+ ClassGenerationAction generator = projectController.getApplication().getMetaData().get(map, ClassGenerationAction.class);
+ if(generator != null) {
+ generator.resetArtifacts();
+ LinkedList<ObjEntity> objEntities = new LinkedList<>(map.getObjEntities());
+
+ Collection<ObjEntity> selected = new ArrayList<>(getSelectedEntities());
+ selected.removeIf(ObjEntity::isGeneric);
+
+ objEntities.retainAll(selected);
+ generator.addEntities(objEntities);
+
+ LinkedList<Embeddable> embeddables = new LinkedList<>(map.getEmbeddables());
+ embeddables.retainAll(getSelectedEmbeddables());
+ generator.addEmbeddables(embeddables);
+
+ generator.addQueries(map.getQueryDescriptors());
+ }
+ }
+
+ public void addToSelectedEntities(Collection<String> entities) {
+ selectedEntities.addAll(entities);
+ }
+
+ public void addToSelectedEmbeddables(Collection<String> embeddables) {
+ selectedEmbeddables.addAll(embeddables);
+ }
+
+ public int getSelectedEntitiesSize() {
+ return selectedEntities.size();
+ }
+
+ public int getSelectedEmbeddablesSize() {
+ return selectedEmbeddables.size();
+ }
+
public DataMap getDataMap() {
return dataMap;
}
@@ -286,4 +304,16 @@ public abstract class CodeGeneratorControllerBase extends CayenneController {
public ProjectController getProjectController() {
return projectController;
}
+
+ public Object getCurrentClass() {
+ return currentClass;
+ }
+
+ public void setCurrentClass(Object currentClass) {
+ this.currentClass = currentClass;
+ }
+
+// public Collection<DataMap> getDataMaps() {
+// return dataMaps;
+// }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/d489f2a5/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 8f4dac9..3d07c60 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,9 +26,10 @@ import org.apache.cayenne.modeler.dialog.pref.PreferenceDialog;
import org.apache.cayenne.modeler.pref.DataMapDefaults;
import org.apache.cayenne.swing.BindingBuilder;
import org.apache.cayenne.swing.ObjectBinding;
-import org.apache.cayenne.util.Util;
import javax.swing.*;
+import javax.swing.event.DocumentEvent;
+import javax.swing.event.DocumentListener;
import java.awt.*;
import java.util.*;
import java.util.List;
@@ -49,14 +50,19 @@ public class CustomModeController extends GeneratorController {
static final Map<String, String> modesByLabel = new HashMap<>();
+ 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;
- protected CodeTemplateManager templateManager;
+ private CodeTemplateManager templateManager;
protected ObjectBinding superTemplate;
protected ObjectBinding subTemplate;
@@ -65,6 +71,8 @@ public class CustomModeController extends GeneratorController {
private CustomPreferencesUpdater preferencesUpdater;
+ private ClassGenerationAction classGenerationAction;
+
public CustomPreferencesUpdater getCustomPreferencesUpdater() {
return preferencesUpdater;
}
@@ -72,6 +80,7 @@ public class CustomModeController extends GeneratorController {
public CustomModeController(CodeGeneratorControllerBase parent) {
super(parent);
this.view = new CustomModePanel();
+ initListeners();
bind();
}
@@ -80,64 +89,11 @@ public class CustomModeController extends GeneratorController {
builder = new BindingBuilder(getApplication().getBindingFactory(), this);
builder.bindToAction(view.getManageTemplatesLink(), "popPreferencesAction()");
- Object[] modeChoices = new Object[]{ENTITY_MODE_LABEL, DATA_MAP_MODE_LABEL, ALL_MODE_LABEL};
- view.getGenerationMode().setModel(new DefaultComboBoxModel(modeChoices));
+ updateTemplates();
}
public void startup(DataMap dataMap) {
- super.startup(dataMap);
-
- // bind preferences and init defaults...
- DataMapDefaults dataMapDefaults = getMapPreferences().get(getParentController().getDataMap());
-
- if (Util.isEmptyString(dataMapDefaults.getSuperclassTemplate())) {
- dataMapDefaults.setSuperclassTemplate(CodeTemplateManager.STANDARD_SERVER_SUPERCLASS);
- }
-
- if (Util.isEmptyString(dataMapDefaults.getSubclassTemplate())) {
- dataMapDefaults.setSubclassTemplate(CodeTemplateManager.STANDARD_SERVER_SUBCLASS);
- }
-
- if (Util.isEmptyString(dataMapDefaults.getProperty("mode"))) {
- dataMapDefaults.setProperty("mode", MODE_ENTITY);
- }
-
- if (Util.isEmptyString(dataMapDefaults.getProperty("overwrite"))) {
- dataMapDefaults.setBooleanProperty("overwrite", false);
- }
-
- if (Util.isEmptyString(dataMapDefaults.getProperty("pairs"))) {
- dataMapDefaults.setBooleanProperty("pairs", true);
- }
-
- if (Util.isEmptyString(dataMapDefaults.getProperty("usePackagePath"))) {
- dataMapDefaults.setBooleanProperty("usePackagePath", true);
- }
-
- if (Util.isEmptyString(dataMapDefaults.getProperty("outputPattern"))) {
- dataMapDefaults.setProperty("outputPattern", "*.java");
- }
-
- builder.bindToComboSelection(view.getGenerationMode(), "customPreferencesUpdater.mode").updateView();
-
- builder.bindToStateChange(view.getOverwrite(), "customPreferencesUpdater.overwrite").updateView();
-
- builder.bindToStateChange(view.getPairs(), "customPreferencesUpdater.pairs").updateView();
-
- builder.bindToStateChange(view.getUsePackagePath(), "customPreferencesUpdater.usePackagePath").updateView();
-
- subTemplate = builder.bindToComboSelection(view.getSubclassTemplate(),
- "customPreferencesUpdater.subclassTemplate");
-
- superTemplate = builder.bindToComboSelection(view.getSuperclassTemplate(),
- "customPreferencesUpdater.superclassTemplate");
-
- builder.bindToTextField(view.getOutputPattern(), "customPreferencesUpdater.outputPattern").updateView();
-
- builder.bindToStateChange(view.getCreatePropertyNames(), "customPreferencesUpdater.createPropertyNames")
- .updateView();
-
- updateTemplates();
+ createDefaults();
}
protected void createDefaults() {
@@ -159,19 +115,10 @@ public class CustomModeController extends GeneratorController {
preferencesUpdater = new CustomPreferencesUpdater(map);
}
- protected GeneratorControllerPanel createView() {
- if (getParentController().getDataMap() != view.getStandardPanelComponent().getDataMap()) {
- DataMapDefaults dataMapDefaults = getMapPreferences().get(getParentController().getDataMap());
- view.getStandardPanelComponent().setDataMap(getParentController().getDataMap());
- view.getStandardPanelComponent().setPreferences(dataMapDefaults);
- view.getStandardPanelComponent().getDataMapName().setText(view.getStandardPanelComponent().getDataMap().getName());
- BindingBuilder builder = new BindingBuilder(getApplication().getBindingFactory(), view.getStandardPanelComponent());
- builder.bindToTextField(view.getStandardPanelComponent().getSuperclassPackage(), "preferences.superclassPackage").updateView();
- }
- return view;
- }
-
protected void updateTemplates() {
+ Object[] modeChoices = new Object[]{ENTITY_MODE_LABEL, DATA_MAP_MODE_LABEL, ALL_MODE_LABEL};
+ view.getGenerationMode().setModel(new DefaultComboBoxModel(modeChoices));
+
this.templateManager = getApplication().getCodeTemplateManager();
List<String> customTemplates = new ArrayList<>(templateManager.getCustomTemplates().keySet());
@@ -187,43 +134,12 @@ public class CustomModeController extends GeneratorController {
this.view.getSubclassTemplate().setModel(new DefaultComboBoxModel(subTemplates.toArray()));
this.view.getSuperclassTemplate().setModel(new DefaultComboBoxModel(superTemplates.toArray()));
-
- superTemplate.updateView();
- subTemplate.updateView();
}
public Component getView() {
return view;
}
- public Collection<ClassGenerationAction> createGenerator() {
-
- mode = modesByLabel.get(view.getGenerationMode().getSelectedItem()).toString();
-
- Collection<ClassGenerationAction> generators = super.createGenerator();
-
- String superKey = view.getSuperclassTemplate().getSelectedItem().toString();
- String superTemplate = templateManager.getTemplatePath(superKey);
-
- String subKey = view.getSubclassTemplate().getSelectedItem().toString();
- String subTemplate = templateManager.getTemplatePath(subKey);
-
- for (ClassGenerationAction generator : generators) {
- generator.setSuperTemplate(superTemplate);
- generator.setTemplate(subTemplate);
- generator.setOverwrite(view.getOverwrite().isSelected());
- generator.setUsePkgPath(view.getUsePackagePath().isSelected());
- generator.setMakePairs(view.getPairs().isSelected());
- generator.setCreatePropertyNames(view.getCreatePropertyNames().isSelected());
-
- if (!Util.isEmptyString(view.getOutputPattern().getText())) {
- generator.setOutputPattern(view.getOutputPattern().getText());
- }
- }
-
- return generators;
- }
-
public void popPreferencesAction() {
new PreferenceDialog(getApplication().getFrameController()).startupAction(PreferenceDialog.TEMPLATES_KEY);
updateTemplates();
@@ -235,4 +151,97 @@ public class CustomModeController extends GeneratorController {
getApplication().getInjector().injectMembers(action);
return action;
}
+
+ private void initListeners(){
+ view.getOutputFolder().getDocument().addDocumentListener(new DocumentListener() {
+ @Override
+ public void insertUpdate(DocumentEvent e) {
+ classGenerationAction.setDestDir(view.getOutputDir());
+ getParentController().getProjectController().setDirty(true);
+ }
+ @Override
+ public void removeUpdate(DocumentEvent e) {}
+
+ @Override
+ public void changedUpdate(DocumentEvent e) {}
+ });
+
+ view.getPairs().addActionListener(val -> {
+ classGenerationAction.setMakePairs(view.getPairs().isSelected());
+ getParentController().getProjectController().setDirty(true);
+ });
+
+ view.getOverwrite().addActionListener(val -> {
+ classGenerationAction.setOverwrite(view.getOverwrite().isSelected());
+ getParentController().getProjectController().setDirty(true);
+ });
+
+ view.getCreatePropertyNames().addActionListener(val -> {
+ classGenerationAction.setCreatePropertyNames(view.getCreatePropertyNames().isSelected());
+ getParentController().getProjectController().setDirty(true);
+ });
+
+ view.getUsePackagePath().addActionListener(val -> {
+ classGenerationAction.setUsePkgPath(view.getUsePackagePath().isSelected());
+ getParentController().getProjectController().setDirty(true);
+ });
+
+ view.getSubclassTemplate().addActionListener(val -> {
+ classGenerationAction.setTemplate(getApplication().getCodeTemplateManager().getTemplatePath(String.valueOf(view.getSubclassTemplate().getSelectedItem())));
+ getParentController().getProjectController().setDirty(true);
+ });
+
+ view.getSuperclassTemplate().addActionListener(val -> {
+ classGenerationAction.setSuperTemplate(getApplication().getCodeTemplateManager().getTemplatePath(String.valueOf(view.getSuperclassTemplate().getSelectedItem())));
+ getParentController().getProjectController().setDirty(true);
+ });
+
+ view.getGenerationMode().addActionListener(val -> {
+ classGenerationAction.setArtifactsGenerationMode(modesByLabel.get(view.getGenerationMode().getSelectedItem()));
+ getParentController().getProjectController().setDirty(true);
+ });
+
+ view.getOutputPattern().getDocument().addDocumentListener(new DocumentListener() {
+ @Override
+ public void insertUpdate(DocumentEvent e) {
+ classGenerationAction.setOutputPattern(view.getOutputPattern().getText());
+ getParentController().getProjectController().setDirty(true);
+ }
+
+ @Override
+ public void removeUpdate(DocumentEvent e) {}
+
+ @Override
+ public void changedUpdate(DocumentEvent e) {}
+ });
+
+ view.getSuperclassPackage().getDocument().addDocumentListener(new DocumentListener() {
+ @Override
+ public void insertUpdate(DocumentEvent e) {
+ classGenerationAction.setSuperPkg(view.getSuperclassPackage().getText());
+ getParentController().getProjectController().setDirty(true);
+ }
+
+ @Override
+ public void removeUpdate(DocumentEvent e) {}
+
+ @Override
+ public void changedUpdate(DocumentEvent e) {}
+ });
+ }
+
+ public void initForm(ClassGenerationAction classGenerationAction){
+ this.classGenerationAction = classGenerationAction;
+ view.setOutputFolder(classGenerationAction.getDir());
+ view.setGenerationMode(labelByMode.get(classGenerationAction.getArtifactsGenerationMode()));
+ view.setTemplate(getApplication().getCodeTemplateManager().getNameByPath(classGenerationAction.getTemplate()));
+ view.setSuperclassTemplate(getApplication().getCodeTemplateManager().getNameByPath(classGenerationAction.getSuperclassTemplate()));
+ view.setDataMapName(classGenerationAction.getDataMap().getName());
+ view.setOutputPattern(classGenerationAction.getOutputPattern());
+ view.setPairs(classGenerationAction.isMakePairs());
+ view.setUsePackagePath(classGenerationAction.isUsePkgPath());
+ view.setOverwrite(classGenerationAction.isOverwrite());
+ view.setCreatePropertyNames(classGenerationAction.isCreatePropertyNames());
+ view.setSuperclassPackage(classGenerationAction.getSuperPkg());
+ }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/d489f2a5/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 538ff64..720c521 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
@@ -36,6 +36,7 @@ public class CustomModePanel extends GeneratorControllerPanel {
protected JCheckBox usePackagePath;
protected JTextField outputPattern;
protected JCheckBox createPropertyNames;
+ private JTextField superclassPackage;
private JTextField additionalMaps;
private JButton selectAdditionalMaps;
@@ -49,8 +50,6 @@ public class CustomModePanel extends GeneratorControllerPanel {
protected ActionLink manageTemplatesLink;
- private StandardPanelComponent standardPanelComponent;
-
public CustomModePanel() {
this.generationMode = new JComboBox();
@@ -62,9 +61,8 @@ public class CustomModePanel extends GeneratorControllerPanel {
this.outputPattern = new JTextField();
this.createPropertyNames = new JCheckBox();
this.manageTemplatesLink = new ActionLink("Customize Templates...");
- manageTemplatesLink.setFont(manageTemplatesLink.getFont().deriveFont(10f));
-
- this.standardPanelComponent = new StandardPanelComponent();
+ this.manageTemplatesLink.setFont(manageTemplatesLink.getFont().deriveFont(10f));
+ this.superclassPackage = new JTextField();
this.additionalMaps = new JTextField();
this.selectAdditionalMaps = new JButton("Select");
@@ -129,7 +127,10 @@ public class CustomModePanel extends GeneratorControllerPanel {
builder.append("Client", client);
builder.nextLine();
- builder.append(standardPanelComponent, 4);
+ builder.append(dataMapName);
+ builder.nextLine();
+
+ builder.append("Superclass package", superclassPackage);
setLayout(new BorderLayout());
add(builder.getPanel(), BorderLayout.CENTER);
@@ -141,12 +142,6 @@ public class CustomModePanel extends GeneratorControllerPanel {
add(builder.getPanel(), BorderLayout.CENTER);
}
- public void addDataMapLine(StandardPanelComponent dataMapLine) {
- dataMapLines.add(dataMapLine);
- builder.append(dataMapLine, 4);
- builder.nextLine();
- }
-
public JComboBox getGenerationMode() {
return generationMode;
}
@@ -183,7 +178,48 @@ public class CustomModePanel extends GeneratorControllerPanel {
return createPropertyNames;
}
- public StandardPanelComponent getStandardPanelComponent() {
- return standardPanelComponent;
+
+ public JTextField getSuperclassPackage() {
+ return superclassPackage;
+ }
+
+ public void setDataMapName(String mapName){
+ dataMapName.setText(mapName);
+ }
+
+ public void setSuperclassPackage(String pack) {
+ superclassPackage.setText(pack);
+ }
+
+ public void setPairs(boolean val){
+ pairs.setSelected(val);
+ }
+
+ public void setOverwrite(boolean val){
+ overwrite.setSelected(val);
+ }
+
+ public void setUsePackagePath(boolean val) {
+ usePackagePath.setSelected(val);
+ }
+
+ public void setCreatePropertyNames(boolean val) {
+ createPropertyNames.setSelected(val);
+ }
+
+ public void setOutputPattern(String pattern){
+ outputPattern.setText(pattern);
+ }
+
+ public void setSuperclassTemplate(String template){
+ superclassTemplate.setSelectedItem(template);
+ }
+
+ public void setTemplate(String template) {
+ subclassTemplate.setSelectedItem(template);
+ }
+
+ public void setGenerationMode(String mode) {
+ generationMode.setSelectedItem(mode);
}
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/d489f2a5/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 9370e3b..a1ccf8f 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
@@ -48,7 +48,7 @@ import java.util.prefs.Preferences;
*/
public abstract class GeneratorController extends CayenneController {
- protected String mode = ArtifactsGenerationMode.ALL.getLabel();
+ protected String mode = ArtifactsGenerationMode.ENTITY.getLabel();
protected Map<DataMap, DataMapDefaults> mapPreferences;
private String outputPath;
@@ -56,12 +56,6 @@ public abstract class GeneratorController extends CayenneController {
super(parent);
}
- public void startup(DataMap dataMap){
- createDefaults();
- createView();
-// initBindings(new BindingBuilder(getApplication().getBindingFactory(), this));
- }
-
public String getOutputPath() {
return outputPath;
}
@@ -94,25 +88,14 @@ public abstract class GeneratorController extends CayenneController {
}
protected void initBindings(BindingBuilder bindingBuilder) {
-
- initOutputFolder();
-
- JTextField outputFolder = ((GeneratorControllerPanel) getView()).getOutputFolder();
JButton outputSelect = ((GeneratorControllerPanel) getView()).getSelectOutputFolder();
-
- outputFolder.setText(getOutputPath());
bindingBuilder.bindToAction(outputSelect, "selectOutputFolderAction()");
- bindingBuilder.bindToTextField(outputFolder, "outputPath");
}
protected CodeGeneratorControllerBase getParentController() {
return (CodeGeneratorControllerBase) getParent();
}
- protected abstract GeneratorControllerPanel createView();
-
- protected abstract void createDefaults();
-
/**
* Creates an appropriate subclass of {@link ClassGenerationAction},
* returning it in an unconfigured state. Configuration is performed by
@@ -123,76 +106,57 @@ public abstract class GeneratorController extends CayenneController {
/**
* Creates a class generator for provided selections.
*/
- public Collection<ClassGenerationAction> createGenerator() {
-
- File outputDir = getOutputDir();
+ public ClassGenerationAction createGenerator() {
+ DataMap map = getParentController().getProjectController().getCurrentDataMap();
- // no destination folder
- if (outputDir == null) {
- JOptionPane.showMessageDialog(this.getView(), "Select directory for source files.");
- return null;
+ ClassGenerationAction generator = getParentController().projectController.getApplication().getMetaData().get(map, ClassGenerationAction.class);
+ if(generator != null){
+ generator.prepareArtifacts();
+ getParentController().addToSelectedEntities(generator.getEntities());
+ getParentController().addToSelectedEmbeddables(generator.getEmbeddables());
+ return generator;
}
- // no such folder
- if (!outputDir.exists() && !outputDir.mkdirs()) {
- JOptionPane.showMessageDialog(this.getView(), "Can't create directory " + outputDir
- + ". Select a different one.");
- return null;
- }
-
- // not a directory
- if (!outputDir.isDirectory()) {
- JOptionPane.showMessageDialog(this.getView(), outputDir + " is not a valid directory.");
- return null;
- }
-
- // remove generic entities...
- Collection<ObjEntity> selectedEntities = new ArrayList<>(getParentController().getSelectedEntities());
- selectedEntities.removeIf(ObjEntity::isGeneric);
-
- Collection<ClassGenerationAction> generators = new ArrayList<>();
- Collection<StandardPanelComponent> dataMapLines = ((GeneratorControllerPanel) getView()).getDataMapLines();
- DataMap map = getParentController().getDataMap();
try {
- ClassGenerationAction generator = newGenerator();
- generator.setArtifactsGenerationMode(mode);
+ generator = newGenerator();
generator.setDataMap(map);
+ initOutputFolder();
+ File outputDir = new File(outputPath);
- LinkedList<ObjEntity> objEntities = new LinkedList<>(map.getObjEntities());
- objEntities.retainAll(selectedEntities);
- generator.addEntities(objEntities);
-
- LinkedList<Embeddable> embeddables = new LinkedList<>(map.getEmbeddables());
- embeddables.retainAll(getParentController().getSelectedEmbeddables());
- generator.addEmbeddables(embeddables);
-
- generator.addQueries(map.getQueryDescriptors());
+ // no destination folder
+ if (outputDir == null) {
+ JOptionPane.showMessageDialog(this.getView(), "Select directory for source files.");
+ return null;
+ }
- Preferences preferences = application.getPreferencesNode(GeneralPreferences.class, "");
+ // no such folder
+ if (!outputDir.exists() && !outputDir.mkdirs()) {
+ JOptionPane.showMessageDialog(this.getView(), "Can't create directory " + outputDir
+ + ". Select a different one.");
+ return null;
+ }
- if (preferences != null) {
- generator.setEncoding(preferences.get(GeneralPreferences.ENCODING_PREFERENCE, null));
+ // not a directory
+ if (!outputDir.isDirectory()) {
+ JOptionPane.showMessageDialog(this.getView(), outputDir + " is not a valid directory.");
+ return null;
}
generator.setDestDir(outputDir);
- generator.setMakePairs(true);
- generator.setForce(true);
- for (StandardPanelComponent dataMapLine : dataMapLines) {
- if (dataMapLine.getDataMap() == map && !Util.isEmptyString(dataMapLine.getSuperclassPackage().getText())) {
- generator.setSuperPkg(dataMapLine.getSuperclassPackage().getText());
- break;
- }
- }
+ Preferences preferences = application.getPreferencesNode(GeneralPreferences.class, "");
- generators.add(generator);
- } catch (CayenneRuntimeException exception) {
- JOptionPane.showMessageDialog(this.getView(), exception.getUnlabeledMessage());
- return null;
+ if (preferences != null) {
+ generator.setEncoding(preferences.get(GeneralPreferences.ENCODING_PREFERENCE, null));
}
+ getParentController().projectController.getApplication().getMetaData().add(map, generator);
+ } catch (CayenneRuntimeException exception) {
+ JOptionPane.showMessageDialog(this.getView(), exception.getUnlabeledMessage());
+ return null;
+ }
- return generators;
+ return generator;
}
public void validateEmbeddable(ValidationResult validationBuffer, Embeddable embeddable) {
@@ -520,7 +484,7 @@ public abstract class GeneratorController extends CayenneController {
// update model
String path = selected.getAbsolutePath();
outputFolder.setText(path);
- setOutputPath(path);
+// setOutputPath(path);
}
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/d489f2a5/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 9b836bd..7f1f689 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
@@ -20,8 +20,7 @@
package org.apache.cayenne.modeler.editor.cgen;
import javax.swing.*;
-import java.util.ArrayList;
-import java.util.Collection;
+import java.io.File;
/**
* A generic panel that is a superclass of generator panels, defining common fields.
@@ -29,12 +28,10 @@ import java.util.Collection;
*/
public class GeneratorControllerPanel extends JPanel {
- protected Collection<StandardPanelComponent> dataMapLines;
protected JTextField outputFolder;
protected JButton selectOutputFolder;
public GeneratorControllerPanel() {
- this.dataMapLines = new ArrayList<>();
this.outputFolder = new JTextField();
this.selectOutputFolder = new JButton("Select");
}
@@ -43,11 +40,15 @@ public class GeneratorControllerPanel extends JPanel {
return outputFolder;
}
+ public File getOutputDir(){
+ return new File(outputFolder.getText());
+ }
+
public JButton getSelectOutputFolder() {
return selectOutputFolder;
}
- public Collection<StandardPanelComponent> getDataMapLines() {
- return dataMapLines;
+ public void setOutputFolder(String folder) {
+ this.outputFolder.setText(folder);
}
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/d489f2a5/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabController.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabController.java
index c3fff72..1e338eb 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabController.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabController.java
@@ -25,7 +25,6 @@ import org.apache.cayenne.modeler.util.CayenneController;
import org.apache.cayenne.pref.PreferenceDetail;
import java.awt.*;
-import java.util.Collection;
/**
*/
@@ -64,7 +63,7 @@ public class GeneratorTabController extends CayenneController {
return customModeController;
}
- public Collection<ClassGenerationAction> getGenerator() {
+ public ClassGenerationAction getGenerator() {
GeneratorController modeController = getGeneratorController();
return (modeController != null) ? modeController.createGenerator() : null;
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/d489f2a5/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/StandardPanelComponent.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/StandardPanelComponent.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/StandardPanelComponent.java
deleted file mode 100644
index 71d95e4..0000000
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/StandardPanelComponent.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- ****************************************************************/
-
-package org.apache.cayenne.modeler.editor.cgen;
-
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-import com.jgoodies.forms.layout.FormLayout;
-import org.apache.cayenne.map.DataMap;
-import org.apache.cayenne.modeler.pref.DataMapDefaults;
-
-import javax.swing.*;
-import java.awt.*;
-
-public class StandardPanelComponent extends JComponent {
-
- private DataMap dataMap;
- private DataMapDefaults preferences;
- private JLabel dataMapName;
- private JTextField superclassPackage;
- private DefaultFormBuilder builder;
-
- public StandardPanelComponent() {
- super();
- dataMapName = new JLabel();
- dataMapName.setFont(dataMapName.getFont().deriveFont(1));
- superclassPackage = new JTextField();
-
- FormLayout layout = new FormLayout(
- "right:77dlu, 3dlu, fill:200:grow, 3dlu", "");
- builder = new DefaultFormBuilder(layout);
- builder.append(dataMapName);
- builder.nextLine();
- builder.append("Superclass Package:", superclassPackage);
-
- setLayout(new BorderLayout());
- add(builder.getPanel(), BorderLayout.CENTER);
- }
-
- public DataMap getDataMap() {
- return dataMap;
- }
-
- public void setDataMap(DataMap dataMap) {
- this.dataMap = dataMap;
- }
-
- public DataMapDefaults getPreferences() {
- return preferences;
- }
-
- public void setPreferences(DataMapDefaults preferences) {
- this.preferences = preferences;
- }
-
- public JLabel getDataMapName() {
- return dataMapName;
- }
-
- public JTextField getSuperclassPackage() {
- return superclassPackage;
- }
-
-}
[19/32] cayenne git commit: Cgen
Posted by nt...@apache.org.
Cgen
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/a5c2ceb9
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/a5c2ceb9
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/a5c2ceb9
Branch: refs/heads/master
Commit: a5c2ceb9a010c9376e81d7d13352127fcf301315
Parents: 8f6cfd7 52ea45b
Author: Arseni Bulatski <an...@gmail.com>
Authored: Thu Nov 8 17:26:08 2018 +0300
Committer: Arseni Bulatski <an...@gmail.com>
Committed: Thu Nov 8 17:26:08 2018 +0300
----------------------------------------------------------------------
.../cayenne/tools/CayenneGeneratorTask.java | 154 ++-
.../cayenne/tools/CgenWithConfigTest.java | 124 ++
cayenne-ant/src/test/resources/cgenTest.map.xml | 22 +
.../cayenne/gen/ArtifactsGenerationMode.java | 2 +-
.../apache/cayenne/gen/CgenConfiguration.java | 363 ++++++
.../java/org/apache/cayenne/gen/CgenModule.java | 34 +
.../cayenne/gen/ClassGenerationAction.java | 490 +++-----
.../gen/ClientClassGenerationAction.java | 44 +-
.../apache/cayenne/gen/EmbeddableArtifact.java | 12 +-
.../org/apache/cayenne/gen/EntityArtifact.java | 11 +-
.../cayenne/gen/xml/CgenConfigHandler.java | 279 +++++
.../apache/cayenne/gen/xml/CgenExtension.java | 54 +
.../cayenne/gen/xml/CgenLoaderDelegate.java | 49 +
.../cayenne/gen/xml/CgenSaverDelegate.java | 70 ++
.../CayenneGeneratorEmbeddableFilterAction.java | 29 +
.../CayenneGeneratorEntityFilterAction.java | 22 +-
.../cayenne/gen/ClassGenerationActionTest.java | 37 +-
.../java/org/apache/cayenne/tools/CgenTask.java | 182 ++-
.../org/apache/cayenne/tools/CgenTaskIT.java | 60 +-
.../org/apache/cayenne/tools/CgenTaskTest.java | 50 +-
.../org/apache/cayenne/tools/cgenConfig.map.xml | 22 +
.../org/apache/cayenne/tools/cgenMap.map.xml | 22 +
.../cayenne/tools/cgen_with_config.gradle | 27 +
.../cayenne/tools/cgen_with_configs.gradle | 32 +
.../cayenne/project/CompoundSaverDelegate.java | 28 +-
.../cayenne/project/FileProjectSaver.java | 2 +
.../project/extension/BaseSaverDelegate.java | 13 +
.../project/extension/SaverDelegate.java | 4 +
.../main/java/org/apache/cayenne/util/Util.java | 33 +-
.../cayenne/tools/CayenneGeneratorMojo.java | 187 ++-
.../cayenne/tools/CayenneGeneratorMojoTest.java | 48 +
.../resources/cgen/project-to-test/cgen-pom.xml | 46 +
.../cgen/project-to-test/datamap-and-pom.xml | 54 +
.../src/test/resources/cgen/testCgen.map.xml | 22 +
.../src/test/resources/cgen/testCgenMap.map.xml | 22 +
.../cayenne/modeler/CayenneModelerFrame.java | 95 +-
.../cayenne/modeler/CodeTemplateManager.java | 82 +-
.../modeler/action/GenerateCodeAction.java | 12 +-
.../dialog/codegen/ClassesTabController.java | 406 +++----
.../modeler/dialog/codegen/ClassesTabPanel.java | 282 ++---
.../dialog/codegen/ClientModeController.java | 162 +--
.../dialog/codegen/CodeGeneratorController.java | 338 +++---
.../codegen/CodeGeneratorControllerBase.java | 760 ++++++------
.../dialog/codegen/CodeGeneratorDialog.java | 198 +--
.../dialog/codegen/CustomModeController.java | 470 ++++----
.../modeler/dialog/codegen/CustomModePanel.java | 274 ++---
.../codegen/CustomPreferencesUpdater.java | 418 +++----
.../dialog/codegen/GeneratorController.java | 1124 +++++++++---------
.../codegen/GeneratorControllerPanel.java | 110 +-
.../dialog/codegen/GeneratorTabController.java | 230 ++--
.../dialog/codegen/GeneratorTabPanel.java | 130 +-
.../dialog/codegen/StandardModeController.java | 164 +--
.../dialog/codegen/StandardModePanel.java | 84 +-
.../dialog/codegen/StandardPanelComponent.java | 162 +--
.../modeler/editor/DataDomainTabbedView.java | 183 +--
.../modeler/editor/DataMapTabbedView.java | 38 +-
.../cayenne/modeler/editor/EditorView.java | 3 +-
.../editor/cgen/ClassesTabController.java | 123 ++
.../modeler/editor/cgen/ClassesTabPanel.java | 80 ++
.../editor/cgen/ClientModeController.java | 44 +
.../editor/cgen/CodeGeneratorController.java | 176 +++
.../cgen/CodeGeneratorControllerBase.java | 366 ++++++
.../modeler/editor/cgen/CodeGeneratorPane.java | 46 +
.../editor/cgen/CustomModeController.java | 155 +++
.../modeler/editor/cgen/CustomModePanel.java | 169 +++
.../editor/cgen/GeneratorController.java | 448 +++++++
.../editor/cgen/GeneratorControllerPanel.java | 68 ++
.../editor/cgen/GeneratorTabController.java | 112 ++
.../modeler/editor/cgen/GeneratorTabPanel.java | 95 ++
.../editor/cgen/StandardModeController.java | 60 +
.../modeler/editor/cgen/StandardModePanel.java | 42 +
.../editor/cgen/StandardPanelComponent.java | 63 +
.../modeler/editor/cgen/domain/CgenPanel.java | 59 +
.../modeler/editor/cgen/domain/CgenTab.java | 89 ++
.../editor/cgen/domain/CgenTabController.java | 197 +++
.../modeler/init/CayenneModelerModule.java | 4 +-
.../cayenne/modeler/util/ComboBoxAdapter.java | 72 ++
.../cayenne/modeler/util/ModelerUtil.java | 43 +
78 files changed, 7454 insertions(+), 3432 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cayenne/blob/a5c2ceb9/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/DataMapTabbedView.java
----------------------------------------------------------------------
diff --cc modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/DataMapTabbedView.java
index e137df5,76cf573..9c8fcab
--- 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
@@@ -18,21 -18,25 +18,26 @@@
****************************************************************/
package org.apache.cayenne.modeler.editor;
- import javax.swing.JScrollPane;
- import javax.swing.JTabbedPane;
-
+ import org.apache.cayenne.modeler.Application;
import org.apache.cayenne.modeler.ProjectController;
+ import org.apache.cayenne.modeler.editor.cgen.CodeGeneratorController;
+ import org.apache.cayenne.modeler.editor.cgen.domain.CgenTab;
import org.apache.cayenne.modeler.editor.dbimport.DbImportView;
+ import javax.swing.*;
+
-
/**
* Data map editing tabs container
*
*/
- public class DataMapTabbedView extends JTabbedPane {
+ public class DataMapTabbedView extends JTabbedPane{
ProjectController mediator;
+ private int lastSelectionIndex;
+ private DbImportView dbImportView1;
+
+ private CodeGeneratorController codeGeneratorController;
+ JScrollPane cgenView;
+
-
/**
* constructor
*
@@@ -54,23 -57,30 +58,47 @@@
// add panels to tabs
// note that those panels that have no internal scrollable tables
// must be wrapped in a scroll pane
+ JScrollPane dataMapScrollPane = new JScrollPane(new DataMapView(mediator));
+ dbImportView1 = new DbImportView(mediator);
+ JScrollPane dbImportScrollPane = new JScrollPane(dbImportView1);
+ addTab("DataMap", dataMapScrollPane);
+ addTab("DB Import", dbImportScrollPane);
+ addChangeListener(e -> {
+ lastSelectionIndex = getSelectedIndex();
+ updateTabs();
+ });
+ }
+
+ private void updateTabs() {
+ switch (lastSelectionIndex) {
+ case 1:
+ dbImportView1.initFromModel();
+ break;
+ }
+ JScrollPane dataMapView = new JScrollPane(new DataMapView(mediator));
+ JScrollPane dbImportView = new JScrollPane(new DbImportView(mediator));
+ this.codeGeneratorController = new CodeGeneratorController(Application.getInstance().getFrameController(), mediator);
+ cgenView = new JScrollPane(codeGeneratorController.getView());
+ addTab("DataMap", dataMapView);
+ addTab("DbImport", dbImportView);
+ addTab("Class Generation", cgenView);
+
+ addChangeListener(tab -> {
+ if(isCgenTabActive()) {
+ codeGeneratorController.startup(mediator.getCurrentDataMap());
+ }
+ });
+ mediator.addDataMapDisplayListener(e -> {
+ if(isCgenTabActive()) {
+ fireStateChanged();
+ } else if(e.getSource() instanceof CgenTab){
+ setSelectedComponent(cgenView);
+ }
+ });
+ }
+
+ private boolean isCgenTabActive() {
+ return getSelectedComponent() == cgenView;
}
}
[30/32] cayenne git commit: Rel path for template bug fix
Posted by nt...@apache.org.
Rel path for template bug fix
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/51803e43
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/51803e43
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/51803e43
Branch: refs/heads/master
Commit: 51803e43be67029f97c47a0d03ae395795ed0d07
Parents: 5128e66
Author: Arseni Bulatski <an...@gmail.com>
Authored: Wed Nov 14 16:52:10 2018 +0300
Committer: Arseni Bulatski <an...@gmail.com>
Committed: Wed Nov 14 16:52:10 2018 +0300
----------------------------------------------------------------------
.../java/org/apache/cayenne/gen/xml/CgenSaverDelegate.java | 8 ++++++++
.../java/org/apache/cayenne/modeler/CodeTemplateManager.java | 8 ++++++--
.../apache/cayenne/modeler/editor/cgen/CustomModePanel.java | 6 ++++--
3 files changed, 18 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cayenne/blob/51803e43/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenSaverDelegate.java
----------------------------------------------------------------------
diff --git a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenSaverDelegate.java b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenSaverDelegate.java
index 92453c7..5f381ea 100644
--- a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenSaverDelegate.java
+++ b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenSaverDelegate.java
@@ -64,6 +64,14 @@ public class CgenSaverDelegate extends BaseSaverDelegate{
if(prevPath != null) {
Path relPath = resourcePath.relativize(prevPath).normalize();
cgenConfiguration.setRelPath(relPath);
+ Path templatePath = Paths.get(cgenConfiguration.getTemplate());
+ if(templatePath.isAbsolute()) {
+ cgenConfiguration.setTemplate(resourcePath.relativize(templatePath).normalize().toString());
+ }
+ Path superTemplatePath = Paths.get(cgenConfiguration.getSuperTemplate());
+ if(superTemplatePath.isAbsolute()) {
+ cgenConfiguration.setSuperTemplate(resourcePath.relativize(superTemplatePath).normalize().toString());
+ }
}
}
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/51803e43/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CodeTemplateManager.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CodeTemplateManager.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CodeTemplateManager.java
index a5d2fb6..76dd2b2 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CodeTemplateManager.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CodeTemplateManager.java
@@ -22,6 +22,7 @@ package org.apache.cayenne.modeler;
import org.apache.cayenne.gen.ClassGenerationAction;
import org.apache.cayenne.gen.ClientClassGenerationAction;
import org.apache.cayenne.modeler.pref.FSPath;
+import org.apache.cayenne.resource.Resource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -157,10 +158,13 @@ public class CodeTemplateManager {
// TODO: andrus, 12/5/2007 - this should also take a "pairs" parameter to
// correctly
// assign standard templates
- public String getTemplatePath(String name, Path rootPath) {
+ public String getTemplatePath(String name, Resource rootPath) {
Object value = customTemplates.get(name);
if (value != null) {
- value = rootPath.relativize(Paths.get((String)value));
+ if(rootPath != null) {
+ Path path = Paths.get(rootPath.getURL().getPath()).getParent();
+ value = path.relativize(Paths.get((String) value));
+ }
return value.toString();
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/51803e43/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 ea5f1ce..18a1929 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
@@ -55,7 +55,8 @@ public class CustomModePanel extends GeneratorControllerPanel {
@Override
protected void updateModel(String item) throws ValidationException {
CgenConfiguration cgenConfiguration = getCgenByDataMap();
- cgenConfiguration.setSuperTemplate(Application.getInstance().getCodeTemplateManager().getTemplatePath(item, cgenConfiguration.getRootPath()));
+ cgenConfiguration.setSuperTemplate(Application.getInstance().getCodeTemplateManager().getTemplatePath(item,
+ cgenConfiguration.getDataMap().getConfigurationSource()));
if(!codeGeneratorControllerBase.isInitFromModel()) {
projectController.setDirty(true);
}
@@ -67,7 +68,8 @@ public class CustomModePanel extends GeneratorControllerPanel {
@Override
protected void updateModel(String item) throws ValidationException {
CgenConfiguration cgenConfiguration = getCgenByDataMap();
- cgenConfiguration.setTemplate(Application.getInstance().getCodeTemplateManager().getTemplatePath(item, cgenConfiguration.getRootPath()));
+ cgenConfiguration.setTemplate(Application.getInstance().getCodeTemplateManager().getTemplatePath(item,
+ cgenConfiguration.getDataMap().getConfigurationSource()));
if(!codeGeneratorControllerBase.isInitFromModel()) {
projectController.setDirty(true);
}
[21/32] cayenne git commit: Cgen task refactoring
Posted by nt...@apache.org.
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b30e5eb5/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorController.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorController.java
deleted file mode 100644
index a5ac549..0000000
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorController.java
+++ /dev/null
@@ -1,169 +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;
-//
-//import org.apache.cayenne.gen.ClassGenerationAction;
-//import org.apache.cayenne.map.DataMap;
-//import org.apache.cayenne.modeler.dialog.ErrorDebugDialog;
-//import org.apache.cayenne.modeler.util.CayenneController;
-//import org.apache.cayenne.swing.BindingBuilder;
-//import org.slf4j.Logger;
-//import org.slf4j.LoggerFactory;
-//
-//import javax.swing.JOptionPane;
-//import java.awt.Component;
-//import java.util.Collection;
-//import java.util.function.Predicate;
-//
-///**
-// * A controller for the class generator dialog.
-// */
-//public class CodeGeneratorController extends CodeGeneratorControllerBase {
-// /**
-// * Logger to print stack traces
-// */
-// private static Logger logObj = LoggerFactory.getLogger(ErrorDebugDialog.class);
-//
-// protected CodeGeneratorDialog view;
-//
-// protected ClassesTabController classesSelector;
-// protected GeneratorTabController generatorSelector;
-//
-// public CodeGeneratorController(CayenneController parent, Collection<DataMap> dataMaps) {
-// super(parent, dataMaps);
-//
-// this.classesSelector = new ClassesTabController(this, dataMaps);
-// this.generatorSelector = new GeneratorTabController(this);
-// }
-//
-// @Override
-// public Component getView() {
-// return view;
-// }
-//
-// public void startup() {
-// // show dialog even on empty DataMap, as custom generation may still take
-// // advantage of it
-//
-// view = new CodeGeneratorDialog(generatorSelector.getView(), classesSelector.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()");
-// builder.bindToAction(view.getGenerateButton(), "generateAction()");
-// builder.bindToAction(this, "classesSelectedAction()", SELECTED_PROPERTY);
-// builder.bindToAction(generatorSelector, "generatorSelectedAction()",
-// GeneratorTabController.GENERATOR_PROPERTY);
-//
-// generatorSelectedAction();
-// }
-//
-// public void generatorSelectedAction() {
-// GeneratorController controller = generatorSelector.getGeneratorController();
-// validate(controller);
-//
-// Predicate<Object> predicate = controller != null
-// ? controller.getDefaultClassFilter()
-// : o -> false;
-//
-// updateSelection(predicate);
-// classesSelector.classSelectedAction();
-// }
-//
-// public void classesSelectedAction() {
-// int size = getSelectedEntitiesSize();
-// String label;
-//
-// if (size == 0) {
-// label = "No entities selected";
-// }
-// else if (size == 1) {
-// label = "One entity selected";
-// }
-// else {
-// label = size + " entities selected";
-// }
-//
-// label = label.concat("; ");
-//
-// int sizeEmb = getSelectedEmbeddablesSize();
-//
-// if (sizeEmb == 0) {
-// label = label + "No embeddables selected";
-// }
-// else if (sizeEmb == 1) {
-// label = label + "One embeddable selected";
-// }
-// else {
-// label = label + sizeEmb + " embeddables selected";
-// }
-//
-// label = label.concat("; ");
-//
-// int sizeDataMap = getSelectedDataMapsSize();
-//
-// if(sizeDataMap == 0) {
-// label = label + "No datamaps selected";
-// } else if(sizeDataMap == 1) {
-// label = label + "One datamap selected";
-// } else {
-// label = label + sizeDataMap + " datamaps selected";
-// }
-//
-// view.getClassesCount().setText(label);
-// }
-//
-// public void cancelAction() {
-// view.dispose();
-// }
-//
-// public void generateAction() {
-// Collection<ClassGenerationAction> generators = generatorSelector.getConfiguration();
-//
-// if (generators != null) {
-// try {
-// for (ClassGenerationAction generator : generators) {
-// generator.execute();
-// }
-// JOptionPane.showMessageDialog(
-// this.getView(),
-// "Class generation finished");
-// } catch (Exception e) {
-// logObj.error("Error generating classes", e);
-// JOptionPane.showMessageDialog(
-// this.getView(),
-// "Error generating classes - " + e.getMessage());
-// }
-// }
-//
-// view.dispose();
-// }
-//}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b30e5eb5/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorControllerBase.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorControllerBase.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorControllerBase.java
deleted file mode 100644
index 3848126..0000000
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorControllerBase.java
+++ /dev/null
@@ -1,380 +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;
-//
-//import org.apache.cayenne.map.DataMap;
-//import org.apache.cayenne.map.Embeddable;
-//import org.apache.cayenne.map.ObjEntity;
-//import org.apache.cayenne.modeler.util.CayenneController;
-//import org.apache.cayenne.modeler.util.CellRenderers;
-//import org.apache.cayenne.validation.ValidationFailure;
-//import org.apache.cayenne.validation.ValidationResult;
-//
-//import javax.swing.Icon;
-//import javax.swing.JLabel;
-//import java.awt.Component;
-//import java.util.ArrayList;
-//import java.util.Collection;
-//import java.util.HashSet;
-//import java.util.List;
-//import java.util.Set;
-//import java.util.function.Predicate;
-//
-///**
-// * A base superclass of a top controller for the code generator. Defines all common model
-// * parts used in class generation.
-// *
-// */
-//public abstract class CodeGeneratorControllerBase extends CayenneController {
-//
-// public static final String SELECTED_PROPERTY = "selected";
-//
-// protected Collection<DataMap> dataMaps;
-//
-// protected ValidationResult validation;
-//
-// protected List<Object> classes;
-//
-// private Set<String> selectedEntities;
-// private Set<String> selectedEmbeddables;
-// private Set<String> selectedDataMaps;
-//
-// private transient Object currentClass;
-//
-// public CodeGeneratorControllerBase(CayenneController parent, Collection<DataMap> dataMaps) {
-// super(parent);
-//
-// this.dataMaps = dataMaps;
-// this.classes = new ArrayList<>();
-//
-// for(DataMap dataMap:dataMaps){
-// this.classes.addAll(dataMap.getObjEntities());
-// this.classes.addAll(dataMap.getEmbeddables());
-// this.classes.add(dataMap);
-// }
-// this.selectedEntities = new HashSet<>();
-// this.selectedEmbeddables = new HashSet<>();
-// this.selectedDataMaps = new HashSet<>();
-// }
-//
-// public List<Object> getClasses() {
-// return classes;
-// }
-//
-// public abstract Component getView();
-//
-// public void validate(GeneratorController validator) {
-//
-// ValidationResult validationBuffer = new ValidationResult();
-//
-// if (validator != null) {
-// for (Object classObj : classes) {
-// if (classObj instanceof ObjEntity) {
-// validator.validateEntity(
-// validationBuffer,
-// (ObjEntity) classObj,
-// false);
-// }
-// else if (classObj instanceof Embeddable) {
-// validator.validateEmbeddable(validationBuffer, (Embeddable) classObj);
-// }
-// }
-//
-// }
-//
-// this.validation = validationBuffer;
-// }
-//
-// public boolean updateSelection(Predicate<Object> predicate) {
-//
-// boolean modified = false;
-//
-// for (Object classObj : classes) {
-// boolean select = predicate.test(classObj);
-// if (classObj instanceof ObjEntity) {
-//
-// if (select) {
-// if (selectedEntities.add(((ObjEntity) classObj).getName())) {
-// modified = true;
-// }
-// }
-// else {
-// if (selectedEntities.remove(((ObjEntity) classObj).getName())) {
-// modified = true;
-// }
-// }
-// }
-// else if (classObj instanceof Embeddable) {
-// if (select) {
-// if (selectedEmbeddables.add(((Embeddable) classObj).getClassName())) {
-// modified = true;
-// }
-// }
-// else {
-// if (selectedEmbeddables
-// .remove(((Embeddable) classObj).getClassName())) {
-// modified = true;
-// }
-// }
-// } else if(classObj instanceof DataMap) {
-// if(select) {
-// if(selectedDataMaps.add(((DataMap) classObj).getName())) {
-// modified = true;
-// }
-// } else {
-// if(selectedDataMaps.remove(((DataMap) classObj).getName())) {
-// modified = true;
-// }
-// }
-// }
-//
-// }
-//
-// if (modified) {
-// firePropertyChange(SELECTED_PROPERTY, null, null);
-// }
-//
-// return modified;
-// }
-//
-// public boolean updateDataMapSelection(Predicate<Object> predicate, DataMap dataMap) {
-//
-// boolean modified = false;
-//
-// for (Object classObj : classes) {
-// boolean select = predicate.test(classObj);
-// if (classObj instanceof ObjEntity) {
-// if(dataMap.getObjEntities().contains(classObj)) {
-// if (select) {
-// if (selectedEntities.add(((ObjEntity) classObj).getName())) {
-// modified = true;
-// }
-// } else {
-// if (selectedEntities.remove(((ObjEntity) classObj).getName())) {
-// modified = true;
-// }
-// }
-// }
-// }
-// else if (classObj instanceof Embeddable) {
-// if(dataMap.getEmbeddables().contains(classObj)) {
-// if (select) {
-// if (selectedEmbeddables.add(((Embeddable) classObj).getClassName())) {
-// modified = true;
-// }
-// } else {
-// if (selectedEmbeddables
-// .remove(((Embeddable) classObj).getClassName())) {
-// modified = true;
-// }
-// }
-// }
-// } else {
-// if(dataMap == classObj) {
-// if (select) {
-// if (selectedDataMaps.add(((DataMap) classObj).getName())) {
-// modified = true;
-// }
-// } else {
-// if (selectedDataMaps.remove(((DataMap) classObj).getName())) {
-// modified = true;
-// }
-// }
-// }
-// }
-//
-// }
-//
-// if (modified) {
-// firePropertyChange(SELECTED_PROPERTY, null, null);
-// }
-//
-// return modified;
-// }
-//
-// public List<Embeddable> getSelectedEmbeddables() {
-//
-// List<Embeddable> selected = new ArrayList<>(selectedEmbeddables.size());
-//
-// for (Object classObj : classes) {
-// if (classObj instanceof Embeddable
-// && selectedEmbeddables.contains(((Embeddable) classObj)
-// .getClassName())) {
-// selected.add((Embeddable) classObj);
-// }
-// }
-//
-// return selected;
-// }
-//
-// public List<ObjEntity> getSelectedEntities() {
-// List<ObjEntity> selected = new ArrayList<>(selectedEntities.size());
-// for (Object classObj : classes) {
-// if (classObj instanceof ObjEntity
-// && selectedEntities.contains(((ObjEntity) classObj).getName())) {
-// selected.add(((ObjEntity) classObj));
-// }
-// }
-//
-// return selected;
-// }
-//
-// public List<DataMap> getSelectedDataMaps() {
-// List<DataMap> selected = new ArrayList<>(selectedDataMaps.size());
-// for(Object classObj : classes) {
-// if(classObj instanceof DataMap
-// && selectedDataMaps.contains(((DataMap) classObj).getName())) {
-// selected.add((DataMap) classObj);
-// }
-// }
-// return selected;
-// }
-//
-// public int getSelectedEntitiesSize() {
-// return selectedEntities.size();
-// }
-//
-// public int getSelectedEmbeddablesSize() {
-// return selectedEmbeddables.size();
-// }
-//
-// public int getSelectedDataMapsSize() {
-// return selectedDataMaps.size();
-// }
-//
-// /**
-// * Returns the first encountered validation problem for an antity matching the name or
-// * null if the entity is valid or the entity is not present.
-// */
-// public String getProblem(Object obj) {
-//
-// String name = null;
-//
-// if (obj instanceof ObjEntity) {
-// name = ((ObjEntity) obj).getName();
-// }
-// else if (obj instanceof Embeddable) {
-// name = ((Embeddable) obj).getClassName();
-// }
-//
-// if (validation == null) {
-// return null;
-// }
-//
-// List failures = validation.getFailures(name);
-// if (failures.isEmpty()) {
-// return null;
-// }
-//
-// return ((ValidationFailure) failures.get(0)).getDescription();
-// }
-//
-// public boolean isSelected() {
-// if (currentClass instanceof ObjEntity) {
-// return selectedEntities
-// .contains(((ObjEntity) currentClass).getName());
-// }
-// if (currentClass instanceof Embeddable) {
-// return selectedEmbeddables
-// .contains(((Embeddable) currentClass).getClassName());
-// }
-// if(currentClass instanceof DataMap) {
-// return selectedDataMaps
-// .contains(((DataMap) currentClass).getName());
-// }
-// return false;
-//
-// }
-//
-// public void setSelected(boolean selectedFlag) {
-// if (currentClass == null) {
-// return;
-// }
-// if (currentClass instanceof ObjEntity) {
-// if (selectedFlag) {
-// if (selectedEntities.add(((ObjEntity) currentClass).getName())) {
-// firePropertyChange(SELECTED_PROPERTY, null, null);
-// }
-// }
-// else {
-// if (selectedEntities.remove(((ObjEntity) currentClass).getName())) {
-// firePropertyChange(SELECTED_PROPERTY, null, null);
-// }
-// }
-// }
-// if (currentClass instanceof Embeddable) {
-// if (selectedFlag) {
-// if (selectedEmbeddables.add(((Embeddable) currentClass).getClassName())) {
-// firePropertyChange(SELECTED_PROPERTY, null, null);
-// }
-// }
-// else {
-// if (selectedEmbeddables
-// .remove(((Embeddable) currentClass).getClassName())) {
-// firePropertyChange(SELECTED_PROPERTY, null, null);
-// }
-// }
-// }
-// if(currentClass instanceof DataMap) {
-// if(selectedFlag) {
-// if(selectedDataMaps.add(((DataMap) currentClass).getName())) {
-// firePropertyChange(SELECTED_PROPERTY, null, null);
-// }
-// } else {
-// if(selectedDataMaps.remove(((DataMap) currentClass).getName())) {
-// firePropertyChange(SELECTED_PROPERTY, null, null);
-// }
-// }
-// }
-// }
-//
-// public Object getCurrentClass() {
-// return currentClass;
-// }
-//
-// public void setCurrentClass(Object currentClass) {
-// this.currentClass = currentClass;
-// }
-//
-// public Collection<DataMap> getDataMaps() {
-// return dataMaps;
-// }
-//
-// public JLabel getItemName(Object obj) {
-// String className;
-// Icon icon;
-// if (obj instanceof Embeddable) {
-// className = ((Embeddable) obj).getClassName();
-// icon = CellRenderers.iconForObject(new Embeddable());
-// } 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);
-// labelIcon.setVisible(true);
-// labelIcon.setText(className);
-// return labelIcon;
-// }
-//
-//}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b30e5eb5/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorDialog.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorDialog.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorDialog.java
deleted file mode 100644
index c4f4bd1..0000000
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorDialog.java
+++ /dev/null
@@ -1,99 +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;
-//
-//import org.apache.cayenne.modeler.Application;
-//import org.apache.cayenne.swing.components.TopBorder;
-//
-//import javax.swing.Box;
-//import javax.swing.JButton;
-//import javax.swing.JDialog;
-//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.Container;
-//import java.awt.Dimension;
-//import java.awt.FlowLayout;
-//
-///**
-// */
-//public class CodeGeneratorDialog extends JDialog {
-//
-// private JButton generateButton;
-// protected JButton cancelButton;
-// private JLabel classesCount;
-//
-// CodeGeneratorDialog(Component generatorPanel, Component entitySelectorPanel) {
-// super(Application.getFrame());
-//
-// JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
-// splitPane.setFocusable(false);
-//
-// this.generateButton = new JButton("Generate");
-// getRootPane().setDefaultButton(generateButton);
-//
-// this.cancelButton = new JButton("Cancel");
-// this.classesCount = new JLabel("No classes selected");
-// classesCount.setFont(classesCount.getFont().deriveFont(10f));
-//
-//
-// JScrollPane scrollPane = new JScrollPane(
-// generatorPanel,
-// ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
-// ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
-// scrollPane.setPreferredSize(new Dimension(630, 500));
-//
-// splitPane.setLeftComponent(entitySelectorPanel);
-// splitPane.setRightComponent(scrollPane);
-//
-// 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(cancelButton);
-// buttons.add(generateButton);
-//
-// Container contentPane = getContentPane();
-// contentPane.setLayout(new BorderLayout());
-// contentPane.add(splitPane, BorderLayout.CENTER);
-// contentPane.add(buttons, BorderLayout.SOUTH);
-//
-// setTitle("Code Generation");
-// }
-//
-// public JButton getCancelButton() {
-// return cancelButton;
-// }
-//
-// public JButton getGenerateButton() {
-// return generateButton;
-// }
-//
-// public JLabel getClassesCount() {
-// return classesCount;
-// }
-//}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b30e5eb5/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomModeController.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomModeController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomModeController.java
deleted file mode 100644
index 344bd72..0000000
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomModeController.java
+++ /dev/null
@@ -1,235 +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;
-//
-//import org.apache.cayenne.gen.ClassGenerationAction;
-//import org.apache.cayenne.map.DataMap;
-//import org.apache.cayenne.modeler.CodeTemplateManager;
-//import org.apache.cayenne.modeler.dialog.pref.PreferenceDialog;
-//import org.apache.cayenne.modeler.pref.DataMapDefaults;
-//import org.apache.cayenne.swing.BindingBuilder;
-//import org.apache.cayenne.swing.ObjectBinding;
-//import org.apache.cayenne.util.Util;
-//
-//import javax.swing.DefaultComboBoxModel;
-//import javax.swing.JCheckBox;
-//import javax.swing.JComboBox;
-//import java.awt.Component;
-//import java.util.List;
-//import java.util.ArrayList;
-//import java.util.Collection;
-//import java.util.Collections;
-//import java.util.Map.Entry;
-//import java.util.Objects;
-//import java.util.Set;
-//import java.util.TreeMap;
-//
-//import static org.apache.cayenne.modeler.CodeTemplateManager.SINGLE_SERVER_CLASS;
-//import static org.apache.cayenne.modeler.CodeTemplateManager.STANDARD_SERVER_SUBCLASS;
-//import static org.apache.cayenne.modeler.CodeTemplateManager.STANDARD_SERVER_SUPERCLASS;
-//import static org.apache.cayenne.modeler.dialog.pref.PreferenceDialog.TEMPLATES_KEY;
-//
-///**
-// * A controller for the custom generation mode.
-// */
-//public class CustomModeController extends GeneratorController {
-//
-// // correspond to non-public constants on MapClassGenerator.
-// private static final String MODE_ENTITY = "entity";
-//
-// protected CustomModePanel view;
-// private CodeTemplateManager templateManager;
-//
-// private ObjectBinding superTemplate;
-// private ObjectBinding subTemplate;
-//
-// private CustomPreferencesUpdater preferencesUpdater;
-//
-// public CustomPreferencesUpdater getCustomPreferencesUpdater() {
-// return preferencesUpdater;
-// }
-//
-// public CustomModeController(CodeGeneratorControllerBase parent) {
-// super(parent);
-//
-// // bind preferences and init defaults...
-//
-// Set<Entry<DataMap, DataMapDefaults>> entities = getMapPreferences().entrySet();
-//
-// for (Entry<DataMap, DataMapDefaults> entry : entities) {
-//
-// if (Util.isEmptyString(entry.getValue().getSuperclassTemplate())) {
-// entry.getValue().setSuperclassTemplate(STANDARD_SERVER_SUPERCLASS);
-// }
-//
-// if (Util.isEmptyString(entry.getValue().getSubclassTemplate())) {
-// entry.getValue().setSubclassTemplate(STANDARD_SERVER_SUBCLASS);
-// }
-//
-// if (Util.isEmptyString(entry.getValue().getProperty("mode"))) {
-// entry.getValue().setProperty("mode", MODE_ENTITY);
-// }
-//
-// if (Util.isEmptyString(entry.getValue().getProperty("overwrite"))) {
-// entry.getValue().setBooleanProperty("overwrite", false);
-// }
-//
-// if (Util.isEmptyString(entry.getValue().getProperty("pairs"))) {
-// entry.getValue().setBooleanProperty("pairs", true);
-// }
-//
-// if (Util.isEmptyString(entry.getValue().getProperty("usePackagePath"))) {
-// entry.getValue().setBooleanProperty("usePackagePath", true);
-// }
-//
-// if (Util.isEmptyString(entry.getValue().getProperty("outputPattern"))) {
-// entry.getValue().setProperty("outputPattern", "*.java");
-// }
-// }
-//
-// BindingBuilder builder = new BindingBuilder(getApplication().getBindingFactory(), this);
-//
-// builder.bindToAction(view.getManageTemplatesLink(), "popPreferencesAction()");
-//
-// builder.bindToStateChange(view.getOverwrite(), "customPreferencesUpdater.overwrite").updateView();
-//
-// builder.bindToStateChange(view.getPairs(), "customPreferencesUpdater.pairs").updateView();
-//
-// builder.bindToStateChange(view.getUsePackagePath(), "customPreferencesUpdater.usePackagePath").updateView();
-//
-// subTemplate = builder.bindToComboSelection(view.getSubclassTemplate(),
-// "customPreferencesUpdater.subclassTemplate");
-//
-// superTemplate = builder.bindToComboSelection(view.getSuperclassTemplate(),
-// "customPreferencesUpdater.superclassTemplate");
-//
-// builder.bindToTextField(view.getOutputPattern(), "customPreferencesUpdater.outputPattern").updateView();
-//
-// builder.bindToStateChange(view.getCreatePropertyNames(), "customPreferencesUpdater.createPropertyNames")
-// .updateView();
-//
-// builder.bindToStateChange(view.getCreatePKProperties(), "customPreferencesUpdater.createPKProperties")
-// .updateView();
-//
-// updateTemplates();
-// }
-//
-// protected void createDefaults() {
-// TreeMap<DataMap, DataMapDefaults> map = new TreeMap<DataMap, DataMapDefaults>();
-// Collection<DataMap> dataMaps = getParentController().getDataMaps();
-// for (DataMap dataMap : dataMaps) {
-// DataMapDefaults preferences;
-// preferences = getApplication().getFrameController().getProjectController()
-// .getDataMapPreferences(this.getClass().getName().replace(".", "/"), dataMap);
-// preferences.setSuperclassPackage("");
-// preferences.updateSuperclassPackage(dataMap, false);
-//
-// map.put(dataMap, preferences);
-//
-// if (getOutputPath() == null) {
-// setOutputPath(preferences.getOutputPath());
-// }
-// }
-//
-// setMapPreferences(map);
-// preferencesUpdater = new CustomPreferencesUpdater(map);
-// }
-//
-// protected GeneratorControllerPanel createView() {
-// this.view = new CustomModePanel();
-// return view;
-// }
-//
-// private void updateTemplates() {
-// this.templateManager = getApplication().getCodeTemplateManager();
-//
-// List<String> customTemplates = new ArrayList<>(templateManager.getCustomTemplates().keySet());
-// Collections.sort(customTemplates);
-//
-// List<String> superTemplates = new ArrayList<>(templateManager.getStandardSuperclassTemplates());
-// Collections.sort(superTemplates);
-// superTemplates.addAll(customTemplates);
-//
-// List<String> subTemplates = new ArrayList<>(templateManager.getStandardSubclassTemplates());
-// Collections.sort(subTemplates);
-// subTemplates.addAll(customTemplates);
-//
-// this.view.getSubclassTemplate().setModel(new DefaultComboBoxModel<>(subTemplates.toArray(new String[0])));
-// this.view.getSuperclassTemplate().setModel(new DefaultComboBoxModel<>(superTemplates.toArray(new String[0])));
-//
-// JCheckBox pairs = this.view.getPairs();
-// updateView();
-// pairs.addItemListener(e -> updateView());
-//
-// superTemplate.updateView();
-// subTemplate.updateView();
-// }
-//
-// private void updateView() {
-// boolean selected = view.getPairs().isSelected();
-// JComboBox<String> subclassTemplate = view.getSubclassTemplate();
-// subclassTemplate.setSelectedItem(selected ? STANDARD_SERVER_SUBCLASS : SINGLE_SERVER_CLASS);
-// view.getSuperclassTemplate().setEnabled(selected);
-// view.getOverwrite().setEnabled(!selected);
-// }
-//
-// public Component getView() {
-// return view;
-// }
-//
-// public Collection<ClassGenerationAction> createConfiguration() {
-//
-// Collection<ClassGenerationAction> generators = super.createConfiguration();
-//
-// String superKey = Objects.requireNonNull(view.getSuperclassTemplate().getSelectedItem()).toString();
-// String superTemplate = templateManager.getTemplatePath(superKey);
-//
-// String subKey = Objects.requireNonNull(view.getSubclassTemplate().getSelectedItem()).toString();
-// String subTemplate = templateManager.getTemplatePath(subKey);
-//
-// for (ClassGenerationAction generator : generators) {
-// generator.setSuperTemplate(superTemplate);
-// generator.setTemplate(subTemplate);
-// generator.setOverwrite(view.getOverwrite().isSelected());
-// generator.setUsePkgPath(view.getUsePackagePath().isSelected());
-// generator.setMakePairs(view.getPairs().isSelected());
-// generator.setCreatePropertyNames(view.getCreatePropertyNames().isSelected());
-// generator.setCreatePKProperties(view.getCreatePKProperties().isSelected());
-//
-// if (!Util.isEmptyString(view.getOutputPattern().getText())) {
-// generator.setOutputPattern(view.getOutputPattern().getText());
-// }
-// }
-//
-// return generators;
-// }
-//
-// public void popPreferencesAction() {
-// new PreferenceDialog(getApplication().getFrameController()).startupAction(TEMPLATES_KEY);
-// updateTemplates();
-// }
-//
-// @Override
-// protected ClassGenerationAction newGenerator() {
-// ClassGenerationAction action = new ClassGenerationAction();
-// getApplication().getInjector().injectMembers(action);
-// return action;
-// }
-//}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b30e5eb5/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomModePanel.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomModePanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomModePanel.java
deleted file mode 100644
index 6396abd..0000000
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomModePanel.java
+++ /dev/null
@@ -1,137 +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;
-//
-//import com.jgoodies.forms.builder.DefaultFormBuilder;
-//import com.jgoodies.forms.layout.FormLayout;
-//import org.apache.cayenne.swing.control.ActionLink;
-//
-//import javax.swing.JCheckBox;
-//import javax.swing.JComboBox;
-//import javax.swing.JPanel;
-//import javax.swing.JTextField;
-//import java.awt.BorderLayout;
-//import java.awt.FlowLayout;
-//
-//public class CustomModePanel extends GeneratorControllerPanel {
-//
-// private JComboBox<String> subclassTemplate;
-// private JComboBox<String> superclassTemplate;
-// protected JCheckBox pairs;
-// private JCheckBox overwrite;
-// private JCheckBox usePackagePath;
-// private JTextField outputPattern;
-// private JCheckBox createPropertyNames;
-// private JCheckBox createPKProperties;
-//
-// private ActionLink manageTemplatesLink;
-//
-// CustomModePanel() {
-//
-// this.superclassTemplate = new JComboBox<>();
-// this.subclassTemplate = new JComboBox<>();
-// this.pairs = new JCheckBox();
-// this.overwrite = new JCheckBox();
-// this.usePackagePath = new JCheckBox();
-// this.outputPattern = new JTextField();
-// this.createPropertyNames = new JCheckBox();
-// this.createPKProperties = new JCheckBox();
-// this.manageTemplatesLink = new ActionLink("Customize Templates...");
-// manageTemplatesLink.setFont(manageTemplatesLink.getFont().deriveFont(10f));
-//
-// // assemble
-// FormLayout layout = new FormLayout(
-// "right:77dlu, 1dlu, fill:100:grow, 1dlu, left:80dlu, 1dlu", "");
-// DefaultFormBuilder builder = new DefaultFormBuilder(layout);
-// builder.setDefaultDialogBorder();
-//
-// builder.append("Output Directory:", outputFolder, selectOutputFolder);
-// builder.nextLine();
-//
-// builder.append("Subclass Template:", subclassTemplate);
-// builder.nextLine();
-//
-// builder.append("Superclass Template:", superclassTemplate);
-// builder.nextLine();
-//
-// builder.append("Output Pattern:", outputPattern);
-// builder.nextLine();
-//
-// builder.append("Make Pairs:", pairs);
-// builder.nextLine();
-//
-// builder.append("Use Package Path:", usePackagePath);
-// builder.nextLine();
-//
-// builder.append("Overwrite Subclasses:", overwrite);
-// builder.nextLine();
-//
-// builder.append("Create Property Names:", createPropertyNames);
-// builder.nextLine();
-//
-// builder.append("Create PK Properties:", createPKProperties);
-// builder.nextLine();
-//
-// setLayout(new BorderLayout());
-// add(builder.getPanel(), BorderLayout.CENTER);
-//
-// JPanel links = new JPanel(new FlowLayout(FlowLayout.RIGHT));
-// links.add(manageTemplatesLink);
-// add(links, BorderLayout.SOUTH);
-//
-// add(builder.getPanel(), BorderLayout.CENTER);
-// }
-//
-// public ActionLink getManageTemplatesLink() {
-// return manageTemplatesLink;
-// }
-//
-// public JComboBox<String> getSubclassTemplate() {
-// return subclassTemplate;
-// }
-//
-// public JComboBox<String> getSuperclassTemplate() {
-// return superclassTemplate;
-// }
-//
-// public JCheckBox getOverwrite() {
-// return overwrite;
-// }
-//
-// public JCheckBox getPairs() {
-// return pairs;
-// }
-//
-// public JCheckBox getUsePackagePath() {
-// return usePackagePath;
-// }
-//
-// public JTextField getOutputPattern() {
-// return outputPattern;
-// }
-//
-// public JCheckBox getCreatePropertyNames() {
-// return createPropertyNames;
-// }
-//
-// public JCheckBox getCreatePKProperties() {
-// return createPKProperties;
-// }
-//}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b30e5eb5/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomPreferencesUpdater.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomPreferencesUpdater.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomPreferencesUpdater.java
deleted file mode 100644
index a9816e0..0000000
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomPreferencesUpdater.java
+++ /dev/null
@@ -1,209 +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;
-//
-//import org.apache.cayenne.map.DataMap;
-//import org.apache.cayenne.modeler.pref.DataMapDefaults;
-//
-//import java.util.Map;
-//import java.util.Map.Entry;
-//import java.util.Set;
-//
-//public class CustomPreferencesUpdater {
-//
-// enum Property {
-// SUBCLASS_TEMPLATE,
-// SUPERCLASS_TEMPLATE,
-// OVERWRITE,
-// PAIRS,
-// USE_PACKAGE_PATH,
-// MODE,
-// OUTPUT_PATTERN,
-// CREATE_PROPERTY_NAMES,
-// CREATE_PK_PROPERTIES
-// }
-//
-// private static final String OVERWRITE = "overwrite";
-// private static final String PAIRS = "pairs";
-// private static final String USE_PACKAGE_PATH = "usePackagePath";
-// private static final String MODE = "mode";
-// private static final String OUTPUT_PATTERN = "outputPattern";
-// private static final String CREATE_PROPERTY_NAMES = "createPropertyNames";
-// private static final String CREATE_PK_PROPERTIES = "createPKProperties";
-//
-// private Map<DataMap, DataMapDefaults> mapPreferences;
-//
-//
-// public CustomPreferencesUpdater(Map<DataMap, DataMapDefaults> mapPreferences) {
-// this.mapPreferences = mapPreferences;
-// }
-//
-// public String getMode() {
-// return (String) getProperty(Property.MODE);
-// }
-//
-// public void setMode(String mode) {
-// updatePreferences(Property.MODE, mode);
-// }
-//
-// public String getSubclassTemplate() {
-// return (String) getProperty(Property.SUBCLASS_TEMPLATE);
-// }
-//
-// public void setSubclassTemplate(String subclassTemplate) {
-// updatePreferences(Property.SUBCLASS_TEMPLATE, subclassTemplate);
-// }
-//
-// public String getSuperclassTemplate() {
-// return (String) getProperty(Property.SUPERCLASS_TEMPLATE);
-// }
-//
-// public void setSuperclassTemplate(String superclassTemplate) {
-// updatePreferences(Property.SUPERCLASS_TEMPLATE, superclassTemplate);
-// }
-//
-// public Boolean getOverwrite() {
-// return (Boolean) getProperty(Property.OVERWRITE);
-// }
-//
-// public void setOverwrite(Boolean overwrite) {
-// updatePreferences(Property.OVERWRITE, overwrite);
-// }
-//
-// public Boolean getPairs() {
-// return (Boolean) getProperty(Property.PAIRS);
-// }
-//
-// public void setPairs(Boolean pairs) {
-// updatePreferences(Property.PAIRS, pairs);
-// }
-//
-// public Boolean getUsePackagePath() {
-// return (Boolean) getProperty(Property.USE_PACKAGE_PATH);
-// }
-//
-// public void setUsePackagePath(Boolean usePackagePath) {
-// updatePreferences(Property.USE_PACKAGE_PATH, usePackagePath);
-// }
-//
-// public String getOutputPattern() {
-// return (String) getProperty(Property.OUTPUT_PATTERN);
-// }
-//
-// public void setOutputPattern(String outputPattern) {
-// updatePreferences(Property.OUTPUT_PATTERN, outputPattern);
-// }
-//
-// public Boolean getCreatePropertyNames() {
-// return (Boolean) getProperty(Property.CREATE_PROPERTY_NAMES);
-// }
-//
-// public void setCreatePropertyNames(Boolean createPropertyNames) {
-// updatePreferences(Property.CREATE_PROPERTY_NAMES, createPropertyNames);
-// }
-//
-// public Boolean getCreatePKProperties() {
-// return (Boolean) getProperty(Property.CREATE_PK_PROPERTIES);
-// }
-//
-// public void setCreatePKProperties(Boolean createPKProperties) {
-// updatePreferences(Property.CREATE_PK_PROPERTIES, createPKProperties);
-// }
-//
-// private Object getProperty(Property property) {
-// Object obj = null;
-//
-// Set<Entry<DataMap, DataMapDefaults>> entities = mapPreferences.entrySet();
-// for (Entry<DataMap, DataMapDefaults> entry : entities) {
-//
-// switch (property) {
-// case MODE:
-// obj = entry.getValue().getProperty(MODE);
-// break;
-// case OUTPUT_PATTERN:
-// obj = entry.getValue().getProperty(OUTPUT_PATTERN);
-// break;
-// case SUBCLASS_TEMPLATE:
-// obj = entry.getValue().getSubclassTemplate();
-// break;
-// case SUPERCLASS_TEMPLATE:
-// obj = entry.getValue().getSuperclassTemplate();
-// break;
-// case OVERWRITE:
-// obj = entry.getValue().getBooleanProperty(OVERWRITE);
-// break;
-// case PAIRS:
-// obj = entry.getValue().getBooleanProperty(PAIRS);
-// break;
-// case USE_PACKAGE_PATH:
-// obj = entry.getValue().getBooleanProperty(USE_PACKAGE_PATH);
-// break;
-// case CREATE_PROPERTY_NAMES:
-// obj = entry.getValue().getBooleanProperty(CREATE_PROPERTY_NAMES);
-// break;
-// case CREATE_PK_PROPERTIES:
-// obj = entry.getValue().getBooleanProperty(CREATE_PK_PROPERTIES);
-// break;
-// default:
-// throw new IllegalArgumentException("Bad type property: " + property);
-// }
-//
-// }
-// return obj;
-// }
-//
-// private void updatePreferences(Property property, Object value) {
-// Set<Entry<DataMap, DataMapDefaults>> entities = mapPreferences.entrySet();
-// for (Entry<DataMap, DataMapDefaults> entry : entities) {
-//
-// switch (property) {
-// case MODE:
-// entry.getValue().setProperty(MODE, (String) value);
-// break;
-// case OUTPUT_PATTERN:
-// entry.getValue().setProperty(OUTPUT_PATTERN, (String) value);
-// break;
-// case SUBCLASS_TEMPLATE:
-// entry.getValue().setSubclassTemplate((String) value);
-// break;
-// case SUPERCLASS_TEMPLATE:
-// entry.getValue().setSuperclassTemplate((String) value);
-// break;
-// case OVERWRITE:
-// entry.getValue().setBooleanProperty(OVERWRITE, (Boolean) value);
-// break;
-// case PAIRS:
-// entry.getValue().setBooleanProperty(PAIRS, (Boolean) value);
-// break;
-// case USE_PACKAGE_PATH:
-// entry.getValue().setBooleanProperty(USE_PACKAGE_PATH, (Boolean) value);
-// break;
-// case CREATE_PROPERTY_NAMES:
-// entry.getValue().setBooleanProperty(CREATE_PROPERTY_NAMES, (Boolean) value);
-// break;
-// case CREATE_PK_PROPERTIES:
-// entry.getValue().setBooleanProperty(CREATE_PK_PROPERTIES, (Boolean) value);
-// break;
-// default:
-// throw new IllegalArgumentException("Bad type property: " + property);
-// }
-// }
-// }
-//}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b30e5eb5/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorController.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorController.java
deleted file mode 100644
index 4a5b5f6..0000000
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorController.java
+++ /dev/null
@@ -1,561 +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;
-//
-//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.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;
-//import org.apache.cayenne.swing.BindingBuilder;
-//import org.apache.cayenne.util.Util;
-//import org.apache.cayenne.validation.BeanValidationFailure;
-//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.JTextField;
-//import java.io.File;
-//import java.util.ArrayList;
-//import java.util.Collection;
-//import java.util.LinkedList;
-//import java.util.Map;
-//import java.util.Set;
-//import java.util.function.Predicate;
-//import java.util.prefs.Preferences;
-//
-///**
-// * A mode-specific part of the code generation dialog.
-// *
-// */
-//public abstract class GeneratorController extends CayenneController {
-//
-// protected String mode = ArtifactsGenerationMode.ALL.getLabel();
-// protected Map<DataMap, DataMapDefaults> mapPreferences;
-// private String outputPath;
-//
-// public GeneratorController(CodeGeneratorControllerBase parent) {
-// super(parent);
-//
-// createDefaults();
-// createView();
-// initBindings(new BindingBuilder(getApplication().getBindingFactory(), this));
-// }
-//
-// public String getOutputPath() {
-// return outputPath;
-// }
-//
-// 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);
-// }
-// }
-//
-// public void setMapPreferences(Map<DataMap, DataMapDefaults> mapPreferences) {
-// this.mapPreferences = mapPreferences;
-// }
-//
-// public Map<DataMap, DataMapDefaults> getMapPreferences() {
-// return this.mapPreferences;
-// }
-//
-// protected void initBindings(BindingBuilder bindingBuilder) {
-//
-// initOutputFolder();
-//
-// JTextField outputFolder = ((GeneratorControllerPanel) getView()).getOutputFolder();
-// JButton outputSelect = ((GeneratorControllerPanel) getView()).getSelectOutputFolder();
-//
-// outputFolder.setText(getOutputPath());
-// bindingBuilder.bindToAction(outputSelect, "selectOutputFolderAction()");
-// bindingBuilder.bindToTextField(outputFolder, "outputPath");
-// }
-//
-// protected CodeGeneratorControllerBase getParentController() {
-// return (CodeGeneratorControllerBase) getParent();
-// }
-//
-// protected abstract GeneratorControllerPanel createView();
-//
-// protected abstract void createDefaults();
-//
-// /**
-// * Creates an appropriate subclass of {@link ClassGenerationAction},
-// * returning it in an unconfigured state. Configuration is performed by
-// * {@link #createConfiguration()} method.
-// */
-// protected abstract ClassGenerationAction newGenerator();
-//
-// /**
-// * Creates a class generator for provided selections.
-// */
-// public Collection<ClassGenerationAction> createConfiguration() {
-//
-// File outputDir = getOutputDir();
-//
-// // no destination folder
-// if (outputDir == 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;
-// }
-//
-// // not a directory
-// if (!outputDir.isDirectory()) {
-// JOptionPane.showMessageDialog(this.getView(), outputDir + " is not a valid directory.");
-// return null;
-// }
-//
-// // remove generic entities...
-// Collection<ObjEntity> selectedEntities = new ArrayList<>(getParentController().getSelectedEntities());
-// selectedEntities.removeIf(ObjEntity::isGeneric);
-//
-// Collection<ClassGenerationAction> generators = new ArrayList<>();
-// for (DataMap map : getParentController().getDataMaps()) {
-// try {
-// ClassGenerationAction generator = newGenerator();
-//
-// if(getParentController().getSelectedDataMaps().contains(map)) {
-// mode = ArtifactsGenerationMode.ALL.getLabel();
-// } else {
-// mode = ArtifactsGenerationMode.ENTITY.getLabel();
-// }
-//
-// generator.setArtifactsGenerationMode(mode);
-// generator.setDataMap(map);
-//
-// LinkedList<ObjEntity> objEntities = new LinkedList<>(map.getObjEntities());
-// objEntities.retainAll(selectedEntities);
-// generator.addEntities(objEntities);
-//
-// LinkedList<Embeddable> embeddables = new LinkedList<>(map.getEmbeddables());
-// embeddables.retainAll(getParentController().getSelectedEmbeddables());
-// generator.addEmbeddables(embeddables);
-//
-// generator.addQueries(map.getQueryDescriptors());
-//
-// Preferences preferences = application.getPreferencesNode(GeneralPreferences.class, "");
-//
-// if (preferences != null) {
-// generator.setEncoding(preferences.get(GeneralPreferences.ENCODING_PREFERENCE, null));
-//
-// }
-//
-// generator.setMakePairs(true);
-// generator.setForce(true);
-//
-// generators.add(generator);
-// } catch (CayenneRuntimeException exception) {
-// JOptionPane.showMessageDialog(this.getView(), exception.getUnlabeledMessage());
-// return null;
-// }
-// }
-//
-// return generators;
-// }
-//
-// public void validateEmbeddable(ValidationResult validationBuffer, Embeddable embeddable) {
-// ValidationFailure embeddableFailure = validateEmbeddable(embeddable);
-// if (embeddableFailure != null) {
-// validationBuffer.addFailure(embeddableFailure);
-// return;
-// }
-//
-// for (EmbeddableAttribute attribute : embeddable.getAttributes()) {
-// ValidationFailure failure = validateEmbeddableAttribute(attribute);
-// if (failure != null) {
-// validationBuffer.addFailure(failure);
-// return;
-// }
-// }
-// }
-//
-// private ValidationFailure validateEmbeddableAttribute(EmbeddableAttribute attribute) {
-// String name = attribute.getEmbeddable().getClassName();
-//
-// ValidationFailure emptyName = BeanValidationFailure.validateNotEmpty(name, "attribute.name",
-// attribute.getName());
-// if (emptyName != null) {
-// return emptyName;
-// }
-//
-// ValidationFailure badName = CodeValidationUtil.validateJavaIdentifier(name, "attribute.name",
-// attribute.getName());
-// if (badName != null) {
-// return badName;
-// }
-//
-// ValidationFailure emptyType = BeanValidationFailure.validateNotEmpty(name, "attribute.type",
-// attribute.getType());
-// if (emptyType != null) {
-// return emptyType;
-// }
-//
-// ValidationFailure badType = BeanValidationFailure.validateJavaClassName(name, "attribute.type",
-// attribute.getType());
-// if (badType != null) {
-// return badType;
-// }
-//
-// return null;
-// }
-//
-// private ValidationFailure validateEmbeddable(Embeddable embeddable) {
-//
-// String name = embeddable.getClassName();
-//
-// ValidationFailure emptyClass = BeanValidationFailure.validateNotEmpty(name, "className",
-// embeddable.getClassName());
-// if (emptyClass != null) {
-// return emptyClass;
-// }
-//
-// ValidationFailure badClass = BeanValidationFailure.validateJavaClassName(name, "className",
-// embeddable.getClassName());
-// if (badClass != null) {
-// return badClass;
-// }
-//
-// return null;
-// }
-//
-// public void validateEntity(ValidationResult validationBuffer, ObjEntity entity, boolean clientValidation) {
-//
-// ValidationFailure entityFailure = validateEntity(clientValidation ? entity.getClientEntity() : entity);
-// if (entityFailure != null) {
-// validationBuffer.addFailure(entityFailure);
-// return;
-// }
-//
-// for (ObjAttribute attribute : entity.getAttributes()) {
-// if (attribute instanceof EmbeddedAttribute) {
-// EmbeddedAttribute embeddedAttribute = (EmbeddedAttribute) attribute;
-// for (ObjAttribute subAttribute : embeddedAttribute.getAttributes()) {
-// ValidationFailure failure = validateEmbeddedAttribute(subAttribute);
-// if (failure != null) {
-// validationBuffer.addFailure(failure);
-// return;
-// }
-// }
-// } else {
-//
-// ValidationFailure failure = validateAttribute(attribute);
-// if (failure != null) {
-// validationBuffer.addFailure(failure);
-// return;
-// }
-// }
-// }
-//
-// for (ObjRelationship rel : entity.getRelationships()) {
-// ValidationFailure failure = validateRelationship(rel, clientValidation);
-// if (failure != null) {
-// validationBuffer.addFailure(failure);
-// return;
-// }
-// }
-// }
-//
-// private ValidationFailure validateEntity(ObjEntity entity) {
-//
-// String name = entity.getName();
-//
-// if (entity.isGeneric()) {
-// return new SimpleValidationFailure(name, "Generic class");
-// }
-//
-// ValidationFailure emptyClass = BeanValidationFailure.validateNotEmpty(name, "className", entity.getClassName());
-// if (emptyClass != null) {
-// return emptyClass;
-// }
-//
-// ValidationFailure badClass = BeanValidationFailure.validateJavaClassName(name, "className",
-// entity.getClassName());
-// if (badClass != null) {
-// return badClass;
-// }
-//
-// if (entity.getSuperClassName() != null) {
-// ValidationFailure badSuperClass = BeanValidationFailure.validateJavaClassName(name, "superClassName",
-// entity.getSuperClassName());
-// if (badSuperClass != null) {
-// return badSuperClass;
-// }
-// }
-//
-// return null;
-// }
-//
-// private ValidationFailure validateAttribute(ObjAttribute attribute) {
-//
-// String name = attribute.getEntity().getName();
-//
-// ValidationFailure emptyName = BeanValidationFailure.validateNotEmpty(name, "attribute.name",
-// attribute.getName());
-// if (emptyName != null) {
-// return emptyName;
-// }
-//
-// ValidationFailure badName = CodeValidationUtil.validateJavaIdentifier(name, "attribute.name",
-// attribute.getName());
-// if (badName != null) {
-// return badName;
-// }
-//
-// ValidationFailure emptyType = BeanValidationFailure.validateNotEmpty(name, "attribute.type",
-// attribute.getType());
-// if (emptyType != null) {
-// return emptyType;
-// }
-//
-// ValidationFailure badType = BeanValidationFailure.validateJavaClassName(name, "attribute.type",
-// attribute.getType());
-// if (badType != null) {
-// return badType;
-// }
-//
-// return null;
-// }
-//
-// private ValidationFailure validateEmbeddedAttribute(ObjAttribute attribute) {
-//
-// String name = attribute.getEntity().getName();
-//
-// // validate embeddedAttribute and attribute names
-// // embeddedAttribute returned attibute as
-// // [name_embeddedAttribute].[name_attribute]
-// String[] attributes = attribute.getName().split("\\.");
-// String nameEmbeddedAttribute = attributes[0];
-// int beginIndex = attributes[0].length();
-// String attr = attribute.getName().substring(beginIndex + 1);
-//
-// ValidationFailure emptyEmbeddedName = BeanValidationFailure.validateNotEmpty(name, "attribute.name",
-// nameEmbeddedAttribute);
-// if (emptyEmbeddedName != null) {
-// return emptyEmbeddedName;
-// }
-//
-// ValidationFailure badEmbeddedName = CodeValidationUtil.validateJavaIdentifier(name, "attribute.name",
-// nameEmbeddedAttribute);
-// if (badEmbeddedName != null) {
-// return badEmbeddedName;
-// }
-//
-// ValidationFailure emptyName = BeanValidationFailure.validateNotEmpty(name, "attribute.name", attr);
-// if (emptyName != null) {
-// return emptyName;
-// }
-//
-// ValidationFailure badName = CodeValidationUtil.validateJavaIdentifier(name, "attribute.name", attr);
-// if (badName != null) {
-// return badName;
-// }
-//
-// ValidationFailure emptyType = BeanValidationFailure.validateNotEmpty(name, "attribute.type",
-// attribute.getType());
-// if (emptyType != null) {
-// return emptyType;
-// }
-//
-// ValidationFailure badType = BeanValidationFailure.validateJavaClassName(name, "attribute.type",
-// attribute.getType());
-// if (badType != null) {
-// return badType;
-// }
-//
-// return null;
-// }
-//
-// private ValidationFailure validateRelationship(ObjRelationship relationship, boolean clientValidation) {
-//
-// String name = relationship.getSourceEntity().getName();
-//
-// ValidationFailure emptyName = BeanValidationFailure.validateNotEmpty(name, "relationship.name",
-// relationship.getName());
-// if (emptyName != null) {
-// return emptyName;
-// }
-//
-// ValidationFailure badName = CodeValidationUtil.validateJavaIdentifier(name, "relationship.name",
-// relationship.getName());
-// if (badName != null) {
-// return badName;
-// }
-//
-// if (!relationship.isToMany()) {
-//
-// ObjEntity targetEntity = relationship.getTargetEntity();
-//
-// if (clientValidation && targetEntity != null) {
-// targetEntity = targetEntity.getClientEntity();
-// }
-//
-// if (targetEntity == null) {
-//
-// return new BeanValidationFailure(name, "relationship.targetEntity", "No target entity");
-// } else if (!targetEntity.isGeneric()) {
-// ValidationFailure emptyClass = BeanValidationFailure.validateNotEmpty(name,
-// "relationship.targetEntity.className", targetEntity.getClassName());
-// if (emptyClass != null) {
-// return emptyClass;
-// }
-//
-// ValidationFailure badClass = BeanValidationFailure.validateJavaClassName(name,
-// "relationship.targetEntity.className", targetEntity.getClassName());
-// if (badClass != null) {
-// return badClass;
-// }
-// }
-// }
-//
-// return null;
-// }
-//
-// /**
-// * Returns a predicate for default entity selection in a given mode.
-// */
-// public Predicate getDefaultClassFilter() {
-// return object -> {
-// if (object instanceof ObjEntity) {
-// return getParentController().getProblem(((ObjEntity) object).getName()) == null;
-// }
-//
-// if (object instanceof Embeddable) {
-// return getParentController().getProblem(((Embeddable) object).getClassName()) == null;
-// }
-//
-// return false;
-// };
-// }
-//
-// private File getOutputDir() {
-// String dir = ((GeneratorControllerPanel) getView()).getOutputFolder().getText();
-// return dir != null ? new File(dir) : new File(System.getProperty("user.dir"));
-// }
-//
-// /**
-// * An action method that pops up a file chooser dialog to pick the
-// * generation directory.
-// */
-// public void selectOutputFolderAction() {
-//
-// JTextField outputFolder = ((GeneratorControllerPanel) getView()).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();
-// outputFolder.setText(path);
-// setOutputPath(path);
-// }
-// }
-//
-// private void initOutputFolder() {
-// String path;
-// if (getOutputPath() == null) {
-// if (System.getProperty("cayenne.cgen.destdir") != null) {
-// setOutputPath(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) {
-// setOutputPath(path);
-// } else {
-// File lastDir = (lastPath != null) ? lastPath.getExistingDirectory(false) : null;
-// setOutputPath(lastDir != null ? lastDir.getAbsolutePath() : null);
-// }
-// }
-// }
-// }
-//
-// private String checkDefaultMavenResourceDir(FSPath lastPath, String dirType) {
-// String path = lastPath.getPath();
-// String resourcePath = buildFilePath("src", dirType, "resources");
-// int idx = path.indexOf(resourcePath);
-// if (idx < 0) {
-// return null;
-// }
-// return path.substring(0, idx) + buildFilePath("src", dirType, "java");
-// }
-//
-// private static String buildFilePath(String... pathElements) {
-// if (pathElements.length == 0) {
-// return "";
-// }
-// StringBuilder path = new StringBuilder(pathElements[0]);
-// for (int i = 1; i < pathElements.length; i++) {
-// path.append(File.separator).append(pathElements[i]);
-// }
-// return path.toString();
-// }
-//}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b30e5eb5/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorControllerPanel.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorControllerPanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorControllerPanel.java
deleted file mode 100644
index 276284f..0000000
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorControllerPanel.java
+++ /dev/null
@@ -1,55 +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;
-//
-//import javax.swing.JButton;
-//import javax.swing.JPanel;
-//import javax.swing.JTextField;
-//import java.util.ArrayList;
-//import java.util.Collection;
-//
-///**
-// * A generic panel that is a superclass of generator panels, defining common fields.
-// *
-// */
-//public class GeneratorControllerPanel extends JPanel {
-//
-// protected Collection<StandardPanelComponent> dataMapLines;
-// protected JTextField outputFolder;
-// protected JButton selectOutputFolder;
-//
-// public GeneratorControllerPanel() {
-// this.dataMapLines = new ArrayList<>();
-// this.outputFolder = new JTextField();
-// this.selectOutputFolder = new JButton("Select");
-// }
-//
-// public JTextField getOutputFolder() {
-// return outputFolder;
-// }
-//
-// public JButton getSelectOutputFolder() {
-// return selectOutputFolder;
-// }
-//
-// public Collection<StandardPanelComponent> getDataMapLines() {
-// return dataMapLines;
-// }
-//}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b30e5eb5/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorTabController.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorTabController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorTabController.java
deleted file mode 100644
index 8b915fe..0000000
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorTabController.java
+++ /dev/null
@@ -1,115 +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;
-//
-//import org.apache.cayenne.gen.ClassGenerationAction;
-//import org.apache.cayenne.modeler.util.CayenneController;
-//import org.apache.cayenne.pref.CayenneProjectPreferences;
-//import org.apache.cayenne.pref.PreferenceDetail;
-//import org.apache.cayenne.swing.BindingBuilder;
-//import org.apache.cayenne.util.Util;
-//
-//import java.awt.Component;
-//import java.awt.Dimension;
-//import java.util.Collection;
-//import java.util.HashMap;
-//import java.util.Map;
-//
-///**
-// */
-//public class GeneratorTabController extends CayenneController {
-//
-// private static final String STANDARD_OBJECTS_MODE = "Standard Persistent Objects";
-// private static final String CLIENT_OBJECTS_MODE = "Client Persistent Objects";
-// private static final String ADVANCED_MODE = "Advanced";
-//
-// public static final String GENERATOR_PROPERTY = "generator";
-//
-// private static final String[] GENERATION_MODES = new String[] {
-// STANDARD_OBJECTS_MODE, CLIENT_OBJECTS_MODE, ADVANCED_MODE
-// };
-//
-// protected GeneratorTabPanel view;
-// protected Map controllers;
-// protected PreferenceDetail preferences;
-//
-// public GeneratorTabController(CodeGeneratorControllerBase parent) {
-// super(parent);
-//
-// this.controllers = new HashMap(5);
-// controllers.put(STANDARD_OBJECTS_MODE, new StandardModeController(parent));
-// controllers.put(CLIENT_OBJECTS_MODE, new ClientModeController(parent));
-// controllers.put(ADVANCED_MODE, new CustomModeController(parent));
-//
-// Component[] modePanels = new Component[GENERATION_MODES.length];
-// for (int i = 0; i < GENERATION_MODES.length; i++) {
-// modePanels[i] = ((GeneratorController) controllers.get(GENERATION_MODES[i]))
-// .getView();
-// }
-//
-// this.view = new GeneratorTabPanel(GENERATION_MODES, modePanels);
-// initBindings();
-// view.setPreferredSize(new Dimension(600, 480));
-// }
-//
-// public Component getView() {
-// return view;
-// }
-//
-// protected CodeGeneratorControllerBase getParentController() {
-// return (CodeGeneratorControllerBase) getParent();
-// }
-//
-// protected void initBindings() {
-//
-// // bind actions
-// BindingBuilder builder = new BindingBuilder(
-// getApplication().getBindingFactory(),
-// this);
-//
-// CayenneProjectPreferences cayPrPref = application.getCayenneProjectPreferences();
-//
-// this.preferences = (PreferenceDetail) cayPrPref.getProjectDetailObject(
-// PreferenceDetail.class,
-// getViewPreferences().node("controller"));
-//
-// if (Util.isEmptyString(preferences.getProperty("mode"))) {
-// preferences.setProperty("mode", STANDARD_OBJECTS_MODE);
-// }
-//
-// builder.bindToComboSelection(
-// view.getGenerationMode(),
-// "preferences.property['mode']").updateView();
-// }
-//
-// public PreferenceDetail getPreferences() {
-// return preferences;
-// }
-//
-// public GeneratorController getGeneratorController() {
-// Object name = view.getGenerationMode().getSelectedItem();
-// return (GeneratorController) controllers.get(name);
-// }
-//
-// public Collection<ClassGenerationAction> getConfiguration() {
-// GeneratorController modeController = getGeneratorController();
-// return (modeController != null) ? modeController.createConfiguration() : null;
-// }
-//}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b30e5eb5/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorTabPanel.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorTabPanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorTabPanel.java
deleted file mode 100644
index c6095ad..0000000
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorTabPanel.java
+++ /dev/null
@@ -1,65 +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;
-//
-//import com.jgoodies.forms.builder.DefaultFormBuilder;
-//import com.jgoodies.forms.layout.FormLayout;
-//
-//import javax.swing.JComboBox;
-//import javax.swing.JPanel;
-//import java.awt.BorderLayout;
-//import java.awt.CardLayout;
-//import java.awt.Component;
-//
-///**
-// */
-//public class GeneratorTabPanel extends JPanel {
-//
-// protected JComboBox generationMode;
-// protected CardLayout modeLayout;
-// protected JPanel modesPanel;
-//
-// public GeneratorTabPanel(String[] modeNames, Component[] modePanels) {
-// this.generationMode = new JComboBox(modeNames);
-// this.modeLayout = new CardLayout();
-// this.modesPanel = new JPanel(modeLayout);
-//
-// generationMode.addItemListener(e -> modeLayout.show(modesPanel, generationMode.getSelectedItem().toString()));
-//
-// // assemble
-// FormLayout layout = new FormLayout("right:70dlu, 3dlu, fill:300, fill:100dlu:grow", "");
-// DefaultFormBuilder builder = new DefaultFormBuilder(layout);
-// builder.setDefaultDialogBorder();
-// builder.append("Type:", generationMode, 1);
-// builder.appendSeparator();
-//
-// for (int i = 0; i < modeNames.length; i++) {
-// modesPanel.add(modePanels[i], modeNames[i]);
-// }
-//
-// setLayout(new BorderLayout());
-// add(builder.getPanel(), BorderLayout.NORTH);
-// add(modesPanel, BorderLayout.CENTER);
-// }
-//
-// public JComboBox getGenerationMode() {
-// return generationMode;
-// }
-//}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b30e5eb5/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/StandardModeController.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/StandardModeController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/StandardModeController.java
deleted file mode 100644
index 547f408..0000000
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/StandardModeController.java
+++ /dev/null
@@ -1,82 +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;
-//
-//import org.apache.cayenne.gen.ClassGenerationAction;
-//import org.apache.cayenne.map.DataMap;
-//import org.apache.cayenne.modeler.pref.DataMapDefaults;
-//
-//import java.awt.Component;
-//import java.util.ArrayList;
-//import java.util.Collection;
-//import java.util.TreeMap;
-//
-//public class StandardModeController extends GeneratorController {
-//
-// protected StandardModePanel view;
-// protected DataMapDefaults preferences;
-//
-// public StandardModeController(CodeGeneratorControllerBase parent) {
-// super(parent);
-// }
-//
-// protected void createDefaults() {
-// TreeMap<DataMap, DataMapDefaults> treeMap = new TreeMap<>();
-// ArrayList<DataMap> dataMaps = (ArrayList<DataMap>) getParentController().getDataMaps();
-//
-// for (DataMap dataMap : dataMaps) {
-// DataMapDefaults preferences = getApplication()
-// .getFrameController()
-// .getProjectController()
-// .getDataMapPreferences(dataMap);
-//
-// preferences.setSuperclassPackage("");
-// preferences.updateSuperclassPackage(dataMap, false);
-//
-// treeMap.put(dataMap, preferences);
-// if (getOutputPath() == null) {
-// setOutputPath(preferences.getOutputPath());
-// }
-// }
-//
-// setMapPreferences(treeMap);
-// }
-//
-// protected GeneratorControllerPanel createView() {
-// this.view = new StandardModePanel();
-// return view;
-// }
-//
-// public Component getView() {
-// return view;
-// }
-//
-// @Override
-// protected ClassGenerationAction newGenerator() {
-// ClassGenerationAction action = new ClassGenerationAction();
-// getApplication().getInjector().injectMembers(action);
-// return action;
-// }
-//
-// @Override
-// public Collection<ClassGenerationAction> createConfiguration() {
-// return super.createConfiguration();
-// }
-//}
\ No newline at end of file
[28/32] cayenne git commit: Relativize problem fix
Posted by nt...@apache.org.
Relativize problem fix
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/c19f2358
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/c19f2358
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/c19f2358
Branch: refs/heads/master
Commit: c19f235874d345f440e254e789c53cf0cd6aaed1
Parents: 3225c39
Author: Arseni Bulatski <an...@gmail.com>
Authored: Tue Nov 13 17:57:32 2018 +0300
Committer: Arseni Bulatski <an...@gmail.com>
Committed: Tue Nov 13 17:57:32 2018 +0300
----------------------------------------------------------------------
.../main/java/org/apache/cayenne/gen/xml/CgenSaverDelegate.java | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cayenne/blob/c19f2358/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenSaverDelegate.java
----------------------------------------------------------------------
diff --git a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenSaverDelegate.java b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenSaverDelegate.java
index b31a8b0..92453c7 100644
--- a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenSaverDelegate.java
+++ b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenSaverDelegate.java
@@ -61,8 +61,8 @@ public class CgenSaverDelegate extends BaseSaverDelegate{
resourcePath = resourcePath.getParent();
}
cgenConfiguration.setRootPath(resourcePath);
- if(prevPath != null && resourcePath.compareTo(prevPath) != 0) {
- Path relPath = resourcePath.relativize(prevPath);
+ if(prevPath != null) {
+ Path relPath = resourcePath.relativize(prevPath).normalize();
cgenConfiguration.setRelPath(relPath);
}
}
[04/32] cayenne git commit: Create global cgen action.
Posted by nt...@apache.org.
Create global cgen action.
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/b85a0900
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/b85a0900
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/b85a0900
Branch: refs/heads/master
Commit: b85a090025c21e1cbe781f47c58737fefb67e892
Parents: d489f2a
Author: Arseni Bulatski <an...@gmail.com>
Authored: Wed Jun 20 10:50:42 2018 +0300
Committer: Arseni Bulatski <an...@gmail.com>
Committed: Wed Oct 24 13:40:57 2018 +0300
----------------------------------------------------------------------
.../cayenne/gen/ClassGenerationAction.java | 45 ++++++---
.../cayenne/gen/xml/CgenConfigHandler.java | 46 +++++++++-
.../cayenne/modeler/CayenneModelerFrame.java | 96 +++-----------------
.../cayenne/modeler/CodeTemplateManager.java | 29 ++++++
.../cayenne/modeler/action/CgenAction.java | 53 +++++++++++
.../modeler/action/DefaultActionManager.java | 5 +-
.../editor/cgen/ClassesTabController.java | 2 +-
.../editor/cgen/CodeGeneratorController.java | 1 +
.../editor/cgen/CustomModeController.java | 82 +++++++++++------
.../modeler/editor/cgen/CustomModePanel.java | 44 ++++-----
.../editor/cgen/GeneratorController.java | 23 +----
.../editor/cgen/GeneratorTabController.java | 2 +-
12 files changed, 258 insertions(+), 170 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b85a0900/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 423fb92..35e34cf 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
@@ -89,7 +89,6 @@ public class ClassGenerationAction implements Serializable, XMLSerializable {
protected Map<String, Template> templateCache;
public ClassGenerationAction() {
-// this.destDir = new File(System.getProperty("user.dir"));
this.outputPattern = "*.java";
this.timestamp = 0L;
this.usePkgPath = true;
@@ -99,6 +98,10 @@ public class ClassGenerationAction implements Serializable, XMLSerializable {
this.template = SUBCLASS_TEMPLATE;
this.superTemplate = SUPERCLASS_TEMPLATE;
+
+ this.embeddableTemplate = EMBEDDABLE_SUBCLASS_TEMPLATE;
+ this.embeddableSuperTemplate = EMBEDDABLE_SUPERCLASS_TEMPLATE;
+
this.artifactsGenerationMode = ArtifactsGenerationMode.ENTITY;
this.artifacts = new ArrayList<>();
@@ -253,6 +256,7 @@ public class ClassGenerationAction implements Serializable, XMLSerializable {
}
public void prepareArtifacts(){
+// resetArtifacts();
if(!entityArtifacts.isEmpty()) {
for(String name : entityArtifacts) {
ObjEntity objEntity = dataMap.getObjEntity(name);
@@ -621,18 +625,6 @@ public class ClassGenerationAction implements Serializable, XMLSerializable {
}
}
- public String getArtifactsGenerationMode(){
- return artifactsGenerationMode.getLabel();
- }
-
- public boolean isForce() {
- return force;
- }
-
- public void setForce(boolean force) {
- this.force = force;
- }
-
/**
* @since 4.1
*/
@@ -719,6 +711,30 @@ public class ClassGenerationAction implements Serializable, XMLSerializable {
return embeddableArtifacts;
}
+ public String getArtifactsGenerationMode(){
+ return artifactsGenerationMode.getLabel();
+ }
+
+ public boolean isForce() {
+ return force;
+ }
+
+ public void setForce(boolean force) {
+ this.force = force;
+ }
+
+ public String getEncoding() {
+ return encoding;
+ }
+
+ public String getEmbeddableTemplate() {
+ return embeddableTemplate;
+ }
+
+ public String getEmbeddableSuperTemplate() {
+ return embeddableSuperTemplate;
+ }
+
@Override
public void encodeAsXML(XMLEncoder encoder, ConfigurationNodeVisitor delegate) {
encoder.start("cgen")
@@ -729,12 +745,15 @@ public class ClassGenerationAction implements Serializable, XMLSerializable {
.simpleTag("generationMode", this.artifactsGenerationMode.getLabel())
.simpleTag("subclassTemplate", this.template)
.simpleTag("superclassTemplate", this.superTemplate)
+ .simpleTag("embeddableTemplate", this.embeddableTemplate)
+ .simpleTag("embeddableSuperclassTemplate", this.embeddableSuperTemplate)
.simpleTag("outputPattern", this.outputPattern)
.simpleTag("makePairs", Boolean.toString(this.makePairs))
.simpleTag("usePkgPath", Boolean.toString(this.usePkgPath))
.simpleTag("overwriteSubclasses", Boolean.toString(this.overwrite))
.simpleTag("createPropertyNames", Boolean.toString(this.createPropertyNames))
.simpleTag("superPkg", this.superPkg)
+ .simpleTag("encoding", this.encoding)
.end();
}
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b85a0900/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenConfigHandler.java
----------------------------------------------------------------------
diff --git a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenConfigHandler.java b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenConfigHandler.java
index fa89bf5..667a4a6 100644
--- a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenConfigHandler.java
+++ b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenConfigHandler.java
@@ -25,6 +25,9 @@ public class CgenConfigHandler extends NamespaceAwareNestedTagHandler{
private static final String SUPER_PKG_TAG = "superPkg";
private static final String OBJENTITY_TAG = "objEntity";
private static final String EMBEDDABLE_TAG = "embeddable";
+ private static final String ENCODING_TAG = "encoding";
+ private static final String EMBEDDABLE_TEMPLATE_TAG = "embeddableTemplate";
+ private static final String EMBEDDABLE_SUPERCLASS_TEMPLATE_TAG = "embeddableSuperclassTemplate";
public static final String TRUE = "true";
@@ -96,6 +99,16 @@ public class CgenConfigHandler extends NamespaceAwareNestedTagHandler{
case SUPER_PKG_TAG:
createSuperPkg(data);
break;
+ case ENCODING_TAG:
+ createEncoding(data);
+ break;
+ case EMBEDDABLE_TEMPLATE_TAG:
+ createEmbeddableTemplate(data);
+ break;
+ case EMBEDDABLE_SUPERCLASS_TEMPLATE_TAG:
+ createEmbeddableSuperclassTemplate(data);
+ break;
+
}
}
@@ -139,6 +152,26 @@ public class CgenConfigHandler extends NamespaceAwareNestedTagHandler{
}
}
+ public void createEmbeddableTemplate(String template) {
+ if(template.trim().length() == 0) {
+ return;
+ }
+
+ if(configuration != null) {
+ configuration.setEmbeddableTemplate(template);
+ }
+ }
+
+ public void createEmbeddableSuperclassTemplate(String template) {
+ if(template.trim().length() == 0) {
+ return;
+ }
+
+ if(configuration != null) {
+ configuration.setEmbeddableSuperTemplate(template);
+ }
+ }
+
private void createOutputPattern(String pattern) {
if(pattern.trim().length() == 0) {
return;
@@ -215,11 +248,22 @@ public class CgenConfigHandler extends NamespaceAwareNestedTagHandler{
}
}
+ private void createEncoding(String data) {
+ if(data.trim().length() == 0) {
+ return;
+ }
+
+ if(configuration != null) {
+ configuration.setEncoding(data);
+ }
+ }
+
private void createConfig() {
configuration = new ClassGenerationAction();
loaderContext.addDataMapListener(dataMap -> {
- CgenConfigHandler.this.metaData.add(dataMap, configuration);
configuration.setDataMap(dataMap);
+ configuration.prepareArtifacts();
+ CgenConfigHandler.this.metaData.add(dataMap, configuration);
});
}
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b85a0900/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerFrame.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerFrame.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerFrame.java
index 507919d..0b12dcd 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerFrame.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerFrame.java
@@ -19,94 +19,12 @@
package org.apache.cayenne.modeler;
-import java.awt.AWTEvent;
-import java.awt.BorderLayout;
-import java.awt.Color;
-import java.awt.Component;
-import java.awt.Dimension;
-import java.awt.FlowLayout;
-import java.awt.Font;
-import java.awt.Toolkit;
-import java.awt.event.ComponentAdapter;
-import java.awt.event.ComponentEvent;
-import java.awt.event.KeyEvent;
-import java.awt.event.KeyListener;
-import java.util.List;
-import java.util.Vector;
-
-import javax.swing.Action;
-import javax.swing.BorderFactory;
-import javax.swing.Box;
-import javax.swing.BoxLayout;
-import javax.swing.JButton;
-import javax.swing.JCheckBoxMenuItem;
-import javax.swing.JFrame;
-import javax.swing.JLabel;
-import javax.swing.JMenu;
-import javax.swing.JMenuBar;
-import javax.swing.JPanel;
-import javax.swing.JSplitPane;
-import javax.swing.JTextField;
-import javax.swing.JToolBar;
-
-import org.apache.cayenne.modeler.action.AboutAction;
-import org.apache.cayenne.modeler.action.ActionManager;
-import org.apache.cayenne.modeler.action.ConfigurePreferencesAction;
-import org.apache.cayenne.modeler.action.CopyAction;
-import org.apache.cayenne.modeler.action.CreateDataMapAction;
-import org.apache.cayenne.modeler.action.CreateDbEntityAction;
-import org.apache.cayenne.modeler.action.CreateEmbeddableAction;
-import org.apache.cayenne.modeler.action.CreateNodeAction;
-import org.apache.cayenne.modeler.action.CreateObjEntityAction;
-import org.apache.cayenne.modeler.action.CreateProcedureAction;
-import org.apache.cayenne.modeler.action.CreateQueryAction;
-import org.apache.cayenne.modeler.action.CutAction;
-import org.apache.cayenne.modeler.action.DbEntitySyncAction;
-import org.apache.cayenne.modeler.action.DocumentationAction;
-import org.apache.cayenne.modeler.action.ExitAction;
-import org.apache.cayenne.modeler.action.FindAction;
-import org.apache.cayenne.modeler.action.GenerateCodeAction;
-import org.apache.cayenne.modeler.action.GenerateDBAction;
-import org.apache.cayenne.modeler.action.ReverseEngineeringAction;
-import org.apache.cayenne.modeler.action.ImportDataMapAction;
-import org.apache.cayenne.modeler.action.ImportEOModelAction;
-import org.apache.cayenne.modeler.action.InferRelationshipsAction;
-import org.apache.cayenne.modeler.action.MigrateAction;
-import org.apache.cayenne.modeler.action.NavigateBackwardAction;
-import org.apache.cayenne.modeler.action.NavigateForwardAction;
-import org.apache.cayenne.modeler.action.NewProjectAction;
-import org.apache.cayenne.modeler.action.ObjEntitySyncAction;
-import org.apache.cayenne.modeler.action.OpenProjectAction;
-import org.apache.cayenne.modeler.action.PasteAction;
-import org.apache.cayenne.modeler.action.ProjectAction;
-import org.apache.cayenne.modeler.action.RedoAction;
-import org.apache.cayenne.modeler.action.RemoveAction;
-import org.apache.cayenne.modeler.action.RevertAction;
-import org.apache.cayenne.modeler.action.SaveAction;
-import org.apache.cayenne.modeler.action.SaveAsAction;
-import org.apache.cayenne.modeler.action.ShowLogConsoleAction;
-import org.apache.cayenne.modeler.action.UndoAction;
-import org.apache.cayenne.modeler.action.ValidateAction;
+import org.apache.cayenne.modeler.action.*;
import org.apache.cayenne.modeler.action.dbimport.ReverseEngineeringToolMenuAction;
import org.apache.cayenne.modeler.dialog.LogConsole;
import org.apache.cayenne.modeler.dialog.welcome.WelcomeScreen;
import org.apache.cayenne.modeler.editor.EditorView;
-import org.apache.cayenne.modeler.event.DataMapDisplayEvent;
-import org.apache.cayenne.modeler.event.DataMapDisplayListener;
-import org.apache.cayenne.modeler.event.DataNodeDisplayEvent;
-import org.apache.cayenne.modeler.event.DataNodeDisplayListener;
-import org.apache.cayenne.modeler.event.DbEntityDisplayListener;
-import org.apache.cayenne.modeler.event.EmbeddableDisplayEvent;
-import org.apache.cayenne.modeler.event.EmbeddableDisplayListener;
-import org.apache.cayenne.modeler.event.EntityDisplayEvent;
-import org.apache.cayenne.modeler.event.MultipleObjectsDisplayEvent;
-import org.apache.cayenne.modeler.event.MultipleObjectsDisplayListener;
-import org.apache.cayenne.modeler.event.ObjEntityDisplayListener;
-import org.apache.cayenne.modeler.event.ProcedureDisplayEvent;
-import org.apache.cayenne.modeler.event.ProcedureDisplayListener;
-import org.apache.cayenne.modeler.event.QueryDisplayEvent;
-import org.apache.cayenne.modeler.event.QueryDisplayListener;
-import org.apache.cayenne.modeler.event.RecentFileListListener;
+import org.apache.cayenne.modeler.event.*;
import org.apache.cayenne.modeler.pref.ComponentGeometry;
import org.apache.cayenne.modeler.util.ModelerUtil;
import org.apache.cayenne.modeler.util.RecentFileMenu;
@@ -114,6 +32,15 @@ import org.apache.cayenne.swing.components.MainToolBar;
import org.apache.cayenne.swing.components.TopBorder;
import org.slf4j.LoggerFactory;
+import javax.swing.*;
+import java.awt.*;
+import java.awt.event.ComponentAdapter;
+import java.awt.event.ComponentEvent;
+import java.awt.event.KeyEvent;
+import java.awt.event.KeyListener;
+import java.util.List;
+import java.util.Vector;
+
/**
* Main frame of CayenneModeler. Responsibilities include coordination of
* enabling/disabling of menu and toolbar.
@@ -237,6 +164,7 @@ public class CayenneModelerFrame extends JFrame implements DataNodeDisplayListen
toolMenu.add(getAction(InferRelationshipsAction.class).buildMenu());
toolMenu.add(getAction(ImportEOModelAction.class).buildMenu());
toolMenu.addSeparator();
+ toolMenu.add(getAction(CgenAction.class).buildMenu());
toolMenu.add(getAction(GenerateCodeAction.class).buildMenu());
toolMenu.add(getAction(GenerateDBAction.class).buildMenu());
toolMenu.add(getAction(MigrateAction.class).buildMenu());
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b85a0900/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CodeTemplateManager.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CodeTemplateManager.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CodeTemplateManager.java
index 1d51503..b56851a 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CodeTemplateManager.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CodeTemplateManager.java
@@ -43,6 +43,10 @@ public class CodeTemplateManager {
static final String STANDARD_CLIENT_SUPERCLASS = "Standard Client Superclass";
static final String STANDARD_CLIENT_SUBCLASS = "Standard Client Subclass";
+ public static final String STANDART_EMBEDDABLE_SUPERCLASS = "Standart Embeddable Superclass";
+ public static final String STANDART_EMBEDDABLE_SUBCLASS = "Standart Embeddable Subclass";
+ public static final String SINGLE_EMBEDDABLE_CLASS = "Single Embeddable class";
+
public static final String NODE_NAME = "codeTemplateManager";
protected List<String> standardSubclassTemplates;
@@ -50,6 +54,9 @@ public class CodeTemplateManager {
protected Map<String, String> customTemplates;
protected Map<String, String> standardTemplates;
+ protected List<String> standartEmbeddableTemplates;
+ protected List<String> standartEmbeddableSuperclassTemplates;
+
private Map<String, String> reverseStandartTemplates;
private static Logger logger = LoggerFactory.getLogger(CodeTemplateManager.class);
@@ -69,6 +76,13 @@ public class CodeTemplateManager {
standardSubclassTemplates.add(STANDARD_CLIENT_SUBCLASS);
standardSubclassTemplates.add(SINGLE_SERVER_CLASS);
+ standartEmbeddableTemplates = new ArrayList<>();
+ standartEmbeddableTemplates.add(SINGLE_EMBEDDABLE_CLASS);
+ standartEmbeddableTemplates.add(STANDART_EMBEDDABLE_SUBCLASS);
+
+ standartEmbeddableSuperclassTemplates = new ArrayList<>();
+ standartEmbeddableSuperclassTemplates.add(STANDART_EMBEDDABLE_SUPERCLASS);
+
updateCustomTemplates(getTemplatePreferences(application));
standardTemplates = new HashMap<>();
@@ -78,6 +92,10 @@ public class CodeTemplateManager {
standardTemplates.put(STANDARD_CLIENT_SUBCLASS, ClientClassGenerationAction.SUBCLASS_TEMPLATE);
standardTemplates.put(SINGLE_SERVER_CLASS, ClassGenerationAction.SINGLE_CLASS_TEMPLATE);
+ standardTemplates.put(STANDART_EMBEDDABLE_SUPERCLASS, ClassGenerationAction.EMBEDDABLE_SUPERCLASS_TEMPLATE);
+ standardTemplates.put(STANDART_EMBEDDABLE_SUBCLASS, ClassGenerationAction.EMBEDDABLE_SUBCLASS_TEMPLATE);
+ standardTemplates.put(SINGLE_EMBEDDABLE_CLASS, ClassGenerationAction.EMBEDDABLE_SINGLE_CLASS_TEMPLATE);
+
reverseStandartTemplates = new HashMap<>();
reverseStandartTemplates.put(ClassGenerationAction.SUBCLASS_TEMPLATE, STANDARD_SERVER_SUBCLASS);
reverseStandartTemplates.put(ClientClassGenerationAction.SUBCLASS_TEMPLATE, STANDARD_CLIENT_SUBCLASS);
@@ -85,6 +103,9 @@ public class CodeTemplateManager {
reverseStandartTemplates.put(ClientClassGenerationAction.SUPERCLASS_TEMPLATE, STANDARD_CLIENT_SUPERCLASS);
reverseStandartTemplates.put(ClassGenerationAction.SUPERCLASS_TEMPLATE, STANDARD_SERVER_SUPERCLASS);
+ reverseStandartTemplates.put(ClassGenerationAction.EMBEDDABLE_SUPERCLASS_TEMPLATE, STANDART_EMBEDDABLE_SUPERCLASS);
+ reverseStandartTemplates.put(ClassGenerationAction.EMBEDDABLE_SUBCLASS_TEMPLATE, STANDART_EMBEDDABLE_SUBCLASS);
+ reverseStandartTemplates.put(ClassGenerationAction.EMBEDDABLE_SINGLE_CLASS_TEMPLATE, SINGLE_EMBEDDABLE_CLASS);
}
/**
@@ -137,4 +158,12 @@ public class CodeTemplateManager {
public List<String> getStandardSuperclassTemplates() {
return standardSuperclassTemplates;
}
+
+ public List<String> getStandartEmbeddableTemplates() {
+ return standartEmbeddableTemplates;
+ }
+
+ public List<String> getStandartEmbeddableSuperclassTemplates() {
+ return standartEmbeddableSuperclassTemplates;
+ }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b85a0900/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
new file mode 100644
index 0000000..2cd3012
--- /dev/null
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CgenAction.java
@@ -0,0 +1,53 @@
+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.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{
+
+ private static Logger logObj = LoggerFactory.getLogger(CgenAction.class);
+
+ public CgenAction(Application application) {
+ super(getActionName(), application);
+ }
+
+ public static String getActionName(){
+ return "Generate All Classes";
+ }
+
+ @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());
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b85a0900/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DefaultActionManager.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DefaultActionManager.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DefaultActionManager.java
index c476fff..d2ad35f 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DefaultActionManager.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DefaultActionManager.java
@@ -167,6 +167,8 @@ public class DefaultActionManager implements ActionManager {
registerAction(new LinkDataMapAction(application));
registerAction(new LinkDataMapsAction(application));
+
+ registerAction(new CgenAction((application)));
}
private void initActions() {
@@ -195,7 +197,8 @@ public class DefaultActionManager implements ActionManager {
GenerateCodeAction.class.getName(),
GenerateDBAction.class.getName(),
PasteAction.class.getName(),
- ReverseEngineeringToolMenuAction.class.getName()));
+ ReverseEngineeringToolMenuAction.class.getName(),
+ CgenAction.class.getName()));
DATA_NODE_ACTIONS = new HashSet<>(DOMAIN_ACTIONS);
DATA_NODE_ACTIONS.addAll(Arrays.asList(
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b85a0900/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 3a63297..586416e 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
@@ -122,6 +122,6 @@ public class ClassesTabController extends CayenneController {
private void updateEntities(){
getParentController().updateEntities();
- getParentController().getProjectController().setDirty(true);
+// getParentController().getProjectController().setDirty(true);
}
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b85a0900/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 45d3e51..ac5e152 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
@@ -59,6 +59,7 @@ public class CodeGeneratorController extends CodeGeneratorControllerBase {
super.startup(e.getDataMap());
classesSelector.startup();
generatorSelector.startup(e.getDataMap());
+
GeneratorController modeController = generatorSelector.getGeneratorController();
ClassGenerationAction classGenerationAction = modeController.createGenerator();
((CustomModeController)modeController).initForm(classGenerationAction);
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b85a0900/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 3d07c60..134381b 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
@@ -20,10 +20,8 @@
package org.apache.cayenne.modeler.editor.cgen;
import org.apache.cayenne.gen.ClassGenerationAction;
-import org.apache.cayenne.map.DataMap;
import org.apache.cayenne.modeler.CodeTemplateManager;
import org.apache.cayenne.modeler.dialog.pref.PreferenceDialog;
-import org.apache.cayenne.modeler.pref.DataMapDefaults;
import org.apache.cayenne.swing.BindingBuilder;
import org.apache.cayenne.swing.ObjectBinding;
@@ -73,10 +71,6 @@ public class CustomModeController extends GeneratorController {
private ClassGenerationAction classGenerationAction;
- public CustomPreferencesUpdater getCustomPreferencesUpdater() {
- return preferencesUpdater;
- }
-
public CustomModeController(CodeGeneratorControllerBase parent) {
super(parent);
this.view = new CustomModePanel();
@@ -92,27 +86,23 @@ public class CustomModeController extends GeneratorController {
updateTemplates();
}
- public void startup(DataMap dataMap) {
- createDefaults();
- }
-
protected void createDefaults() {
- TreeMap<DataMap, DataMapDefaults> map = new TreeMap<>();
- DataMap dataMap = getParentController().getDataMap();
- DataMapDefaults preferences;
- preferences = getApplication().getFrameController().getProjectController()
- .getDataMapPreferences(this.getClass().getName().replace(".", "/"), dataMap);
- preferences.setSuperclassPackage("");
- preferences.updateSuperclassPackage(dataMap, false);
-
- map.put(dataMap, preferences);
-
- if (getOutputPath() == null) {
- setOutputPath(preferences.getOutputPath());
- }
-
- setMapPreferences(map);
- preferencesUpdater = new CustomPreferencesUpdater(map);
+// TreeMap<DataMap, DataMapDefaults> map = new TreeMap<>();
+// DataMap dataMap = getParentController().getDataMap();
+// DataMapDefaults preferences;
+// preferences = getApplication().getFrameController().getProjectController()
+// .getDataMapPreferences(this.getClass().getName().replace(".", "/"), dataMap);
+// preferences.setSuperclassPackage("");
+// preferences.updateSuperclassPackage(dataMap, false);
+//
+// map.put(dataMap, preferences);
+//
+// if (getOutputPath() == null) {
+// setOutputPath(preferences.getOutputPath());
+// }
+//
+// setMapPreferences(map);
+// preferencesUpdater = new CustomPreferencesUpdater(map);
}
protected void updateTemplates() {
@@ -132,8 +122,19 @@ 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);
+
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()));
}
public Component getView() {
@@ -196,6 +197,16 @@ public class CustomModeController extends GeneratorController {
getParentController().getProjectController().setDirty(true);
});
+ view.getEmbeddableTemplate().addActionListener(val -> {
+ classGenerationAction.setEmbeddableTemplate(getApplication().getCodeTemplateManager().getTemplatePath(String.valueOf(view.getEmbeddableTemplate().getSelectedItem())));
+ getParentController().getProjectController().setDirty(true);
+ });
+
+ view.getEmbeddableSuperTemplate().addActionListener(val -> {
+ classGenerationAction.setEmbeddableSuperTemplate(getApplication().getCodeTemplateManager().getTemplatePath(String.valueOf(view.getEmbeddableSuperTemplate().getSelectedItem())));
+ getParentController().getProjectController().setDirty(true);
+ });
+
view.getGenerationMode().addActionListener(val -> {
classGenerationAction.setArtifactsGenerationMode(modesByLabel.get(view.getGenerationMode().getSelectedItem()));
getParentController().getProjectController().setDirty(true);
@@ -228,6 +239,20 @@ public class CustomModeController extends GeneratorController {
@Override
public void changedUpdate(DocumentEvent e) {}
});
+
+ view.getEncoding().getDocument().addDocumentListener(new DocumentListener() {
+ @Override
+ public void insertUpdate(DocumentEvent e) {
+ classGenerationAction.setEncoding(view.getEncoding().getText());
+ getParentController().getProjectController().setDirty(true);
+ }
+
+ @Override
+ public void removeUpdate(DocumentEvent e) {}
+
+ @Override
+ public void changedUpdate(DocumentEvent e) {}
+ });
}
public void initForm(ClassGenerationAction classGenerationAction){
@@ -243,5 +268,10 @@ public class CustomModeController extends GeneratorController {
view.setOverwrite(classGenerationAction.isOverwrite());
view.setCreatePropertyNames(classGenerationAction.isCreatePropertyNames());
view.setSuperclassPackage(classGenerationAction.getSuperPkg());
+ view.setEncoding(classGenerationAction.getEncoding());
+ view.setEmbeddableTemplate(getApplication().getCodeTemplateManager().getNameByPath(classGenerationAction.getEmbeddableTemplate()));
+ view.setEmbeddableSuperTemplate(getApplication().getCodeTemplateManager().getNameByPath(classGenerationAction.getEmbeddableSuperTemplate()));
+
+// getParentController().getProjectController().setDirty(false);
}
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b85a0900/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 720c521..e79ef7a 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
@@ -28,19 +28,16 @@ import java.awt.*;
public class CustomModePanel extends GeneratorControllerPanel {
- protected JComboBox generationMode;
- protected JComboBox subclassTemplate;
- protected JComboBox superclassTemplate;
+ private JComboBox generationMode;
+ private JComboBox subclassTemplate;
+ private JComboBox superclassTemplate;
protected JCheckBox pairs;
- protected JCheckBox overwrite;
- protected JCheckBox usePackagePath;
- protected JTextField outputPattern;
- protected JCheckBox createPropertyNames;
+ private JCheckBox overwrite;
+ private JCheckBox usePackagePath;
+ private JTextField outputPattern;
+ private JCheckBox createPropertyNames;
private JTextField superclassPackage;
- private JTextField additionalMaps;
- private JButton selectAdditionalMaps;
- private JCheckBox client;
private JTextField encoding;
private JComboBox embeddableTemplate;
private JComboBox embeddableSuperTemplate;
@@ -64,9 +61,6 @@ public class CustomModePanel extends GeneratorControllerPanel {
this.manageTemplatesLink.setFont(manageTemplatesLink.getFont().deriveFont(10f));
this.superclassPackage = new JTextField();
- this.additionalMaps = new JTextField();
- this.selectAdditionalMaps = new JButton("Select");
- this.client = new JCheckBox();
this.encoding = new JTextField();
this.embeddableTemplate = new JComboBox();
this.embeddableSuperTemplate = new JComboBox();
@@ -79,7 +73,6 @@ public class CustomModePanel extends GeneratorControllerPanel {
});
// assemble
-
FormLayout layout = new FormLayout(
"right:77dlu, 3dlu, fill:200:grow, 6dlu, fill:50dlu, 3dlu", "");
builder = new DefaultFormBuilder(layout);
@@ -88,9 +81,6 @@ public class CustomModePanel extends GeneratorControllerPanel {
builder.append("Output Directory:", outputFolder, selectOutputFolder);
builder.nextLine();
- builder.append("Additional DataMaps", additionalMaps, selectAdditionalMaps);
- builder.nextLine();
-
builder.append("Generation Mode:", generationMode);
builder.nextLine();
@@ -124,9 +114,6 @@ public class CustomModePanel extends GeneratorControllerPanel {
builder.append("Create Property Names:", createPropertyNames);
builder.nextLine();
- builder.append("Client", client);
- builder.nextLine();
-
builder.append(dataMapName);
builder.nextLine();
@@ -150,9 +137,11 @@ public class CustomModePanel extends GeneratorControllerPanel {
return manageTemplatesLink;
}
- public JComboBox getSubclassTemplate() {
- return subclassTemplate;
- }
+ public JComboBox getSubclassTemplate() { return subclassTemplate; }
+
+ public JComboBox getEmbeddableTemplate() { return embeddableTemplate; }
+
+ public JComboBox getEmbeddableSuperTemplate() { return embeddableSuperTemplate; }
public JComboBox getSuperclassTemplate() {
return superclassTemplate;
@@ -178,11 +167,12 @@ public class CustomModePanel extends GeneratorControllerPanel {
return createPropertyNames;
}
-
public JTextField getSuperclassPackage() {
return superclassPackage;
}
+ public JTextField getEncoding() { return encoding; }
+
public void setDataMapName(String mapName){
dataMapName.setText(mapName);
}
@@ -222,4 +212,10 @@ public class CustomModePanel extends GeneratorControllerPanel {
public void setGenerationMode(String mode) {
generationMode.setSelectedItem(mode);
}
+
+ public void setEncoding(String encoding) { this.encoding.setText(encoding); }
+
+ public void setEmbeddableTemplate(String template) { embeddableTemplate.setSelectedItem(template); }
+
+ public void setEmbeddableSuperTemplate(String template) { embeddableSuperTemplate.setSelectedItem(template); }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b85a0900/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 a1ccf8f..7a62efc 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
@@ -111,9 +111,10 @@ public abstract class GeneratorController extends CayenneController {
ClassGenerationAction generator = getParentController().projectController.getApplication().getMetaData().get(map, ClassGenerationAction.class);
if(generator != null){
- generator.prepareArtifacts();
getParentController().addToSelectedEntities(generator.getEntities());
getParentController().addToSelectedEmbeddables(generator.getEmbeddables());
+ generator.getEntities().clear();
+ generator.getEmbeddables().clear();
return generator;
}
@@ -489,24 +490,8 @@ public abstract class GeneratorController extends CayenneController {
}
private void initOutputFolder() {
- String path;
- if (getOutputPath() == null) {
- if (System.getProperty("cayenne.cgen.destdir") != null) {
- setOutputPath(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) {
- setOutputPath(path);
- } else {
- File lastDir = (lastPath != null) ? lastPath.getExistingDirectory(false) : null;
- setOutputPath(lastDir != null ? lastDir.getAbsolutePath() : null);
- }
- }
- }
+ String pathString = System.getProperty("user.home");
+ setOutputPath(pathString);
}
private String checkDefaultMavenResourceDir(FSPath lastPath, String dirType) {
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b85a0900/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabController.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabController.java
index 1e338eb..fc3f567 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabController.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabController.java
@@ -44,7 +44,7 @@ public class GeneratorTabController extends CayenneController {
}
public void startup(DataMap dataMap){
- customModeController.startup(dataMap);
+// customModeController.startup(dataMap);
}
public Component getView() {
[32/32] cayenne git commit: Merge PR #342
Posted by nt...@apache.org.
Merge PR #342
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/b580bdad
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/b580bdad
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/b580bdad
Branch: refs/heads/master
Commit: b580bdad32875bec793b6d46bed3a75ac661641f
Parents: 1edb4ee d20a03f
Author: Nikita Timofeev <st...@gmail.com>
Authored: Wed Nov 14 17:12:29 2018 +0300
Committer: Nikita Timofeev <st...@gmail.com>
Committed: Wed Nov 14 17:12:29 2018 +0300
----------------------------------------------------------------------
RELEASE-NOTES.txt | 1 +
UPGRADE.txt | 1 +
.../cayenne/tools/CayenneGeneratorTask.java | 174 ++++--
.../cayenne/tools/CgenWithConfigTest.java | 158 ++++++
cayenne-ant/src/test/resources/cgenTest.map.xml | 22 +
.../cayenne/gen/ArtifactsGenerationMode.java | 2 +-
.../apache/cayenne/gen/CgenConfiguration.java | 392 +++++++++++++
.../java/org/apache/cayenne/gen/CgenModule.java | 34 ++
.../cayenne/gen/ClassGenerationAction.java | 480 ++++++----------
.../gen/ClientClassGenerationAction.java | 44 +-
.../org/apache/cayenne/gen/EntityArtifact.java | 1 -
.../cayenne/gen/xml/CgenConfigHandler.java | 257 +++++++++
.../apache/cayenne/gen/xml/CgenExtension.java | 54 ++
.../cayenne/gen/xml/CgenLoaderDelegate.java | 49 ++
.../cayenne/gen/xml/CgenSaverDelegate.java | 78 +++
.../CayenneGeneratorEmbeddableFilterAction.java | 34 ++
.../CayenneGeneratorEntityFilterAction.java | 29 +-
.../cayenne/gen/ClassGenerationActionTest.java | 37 +-
.../java/org/apache/cayenne/tools/CgenTask.java | 207 +++++--
.../org/apache/cayenne/tools/BaseTaskIT.java | 15 +
.../org/apache/cayenne/tools/CgenTaskIT.java | 99 +++-
.../org/apache/cayenne/tools/CgenTaskTest.java | 50 +-
.../apache/cayenne/tools/DbGenerateTaskIT.java | 4 +-
.../apache/cayenne/tools/GradlePluginIT.java | 2 +-
.../org/apache/cayenne/tools/cgenMap.map.xml | 22 +
.../tools/cgen_replaceDatamapMode.gradle | 31 +
.../cayenne/tools/cgen_with_config.gradle | 27 +
.../cayenne/tools/cgen_with_config.map.xml | 22 +
.../cayenne/tools/cgen_with_configs.gradle | 32 ++
.../cayenne/project/CompoundSaverDelegate.java | 15 +-
.../cayenne/project/FileProjectSaver.java | 2 +
.../project/extension/BaseSaverDelegate.java | 13 +
.../project/extension/SaverDelegate.java | 4 +
.../org/apache/cayenne/schema/10/cgen.xsd | 47 ++
.../cayenne/tools/CayenneGeneratorMojo.java | 201 +++++--
.../cayenne/tools/CayenneGeneratorMojoTest.java | 70 +++
.../resources/cgen/project-to-test/cgen-pom.xml | 46 ++
.../cgen/project-to-test/datamap-and-pom.xml | 53 ++
.../project-to-test/replaceDatamapMode-pom.xml | 53 ++
.../src/test/resources/cgen/testCgen.map.xml | 22 +
.../src/test/resources/cgen/testCgenMap.map.xml | 22 +
.../cayenne/modeler/CayenneModelerFrame.java | 60 +-
.../cayenne/modeler/CodeTemplateManager.java | 97 +++-
.../modeler/action/GenerateCodeAction.java | 12 +-
.../modeler/dialog/cgen/TemplateDialog.java | 87 +++
.../modeler/dialog/cgen/TemplateDialogView.java | 136 +++++
.../dialog/codegen/ClassesTabController.java | 203 -------
.../modeler/dialog/codegen/ClassesTabPanel.java | 141 -----
.../dialog/codegen/ClientModeController.java | 81 ---
.../dialog/codegen/CodeGeneratorController.java | 169 ------
.../codegen/CodeGeneratorControllerBase.java | 380 -------------
.../dialog/codegen/CodeGeneratorDialog.java | 99 ----
.../dialog/codegen/CustomModeController.java | 235 --------
.../modeler/dialog/codegen/CustomModePanel.java | 137 -----
.../codegen/CustomPreferencesUpdater.java | 209 -------
.../dialog/codegen/GeneratorController.java | 563 -------------------
.../codegen/GeneratorControllerPanel.java | 55 --
.../dialog/codegen/GeneratorTabController.java | 115 ----
.../dialog/codegen/GeneratorTabPanel.java | 65 ---
.../dialog/codegen/StandardModeController.java | 82 ---
.../dialog/codegen/StandardModePanel.java | 42 --
.../dialog/codegen/StandardPanelComponent.java | 81 ---
.../dialog/db/load/ModelerDbImportAction.java | 3 +
.../modeler/dialog/pref/PreferenceDialog.java | 18 +-
.../dialog/pref/TemplatePreferences.java | 37 +-
.../modeler/editor/DataDomainTabbedView.java | 183 +++---
.../modeler/editor/DataMapTabbedView.java | 55 +-
.../cayenne/modeler/editor/EditorView.java | 3 +-
.../editor/cgen/ClassesTabController.java | 135 +++++
.../modeler/editor/cgen/ClassesTabPanel.java | 85 +++
.../editor/cgen/ClientModeController.java | 42 ++
.../editor/cgen/CodeGeneratorController.java | 255 +++++++++
.../cgen/CodeGeneratorControllerBase.java | 492 ++++++++++++++++
.../modeler/editor/cgen/CodeGeneratorPane.java | 51 ++
.../editor/cgen/CustomModeController.java | 188 +++++++
.../modeler/editor/cgen/CustomModePanel.java | 183 ++++++
.../editor/cgen/GeneratorController.java | 391 +++++++++++++
.../editor/cgen/GeneratorControllerPanel.java | 68 +++
.../editor/cgen/GeneratorTabController.java | 113 ++++
.../modeler/editor/cgen/GeneratorTabPanel.java | 104 ++++
.../editor/cgen/StandardModeController.java | 59 ++
.../modeler/editor/cgen/StandardModePanel.java | 45 ++
.../modeler/editor/cgen/domain/CgenPanel.java | 84 +++
.../modeler/editor/cgen/domain/CgenTab.java | 117 ++++
.../editor/cgen/domain/CgenTabController.java | 210 +++++++
.../modeler/init/CayenneModelerModule.java | 4 +-
.../cayenne/modeler/util/ComboBoxAdapter.java | 72 +++
.../cayenne/modeler/util/ModelerUtil.java | 46 ++
88 files changed, 5616 insertions(+), 3382 deletions(-)
----------------------------------------------------------------------
[23/32] cayenne git commit: Cleanup
Posted by nt...@apache.org.
Cleanup
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/3ae49734
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/3ae49734
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/3ae49734
Branch: refs/heads/master
Commit: 3ae49734b044f611912a0bea5c69b0dd4d2705d4
Parents: b30e5eb
Author: Arseni Bulatski <an...@gmail.com>
Authored: Mon Nov 12 13:28:09 2018 +0300
Committer: Arseni Bulatski <an...@gmail.com>
Committed: Mon Nov 12 13:31:13 2018 +0300
----------------------------------------------------------------------
UPGRADE.txt | 5 +
.../apache/cayenne/gen/CgenConfiguration.java | 6 +-
.../cayenne/gen/xml/CgenConfigHandler.java | 100 ++++++-------------
.../java/org/apache/cayenne/tools/CgenTask.java | 68 ++++++-------
.../modeler/editor/DataMapTabbedView.java | 3 +-
.../editor/cgen/ClassesTabController.java | 11 +-
.../modeler/editor/cgen/ClassesTabPanel.java | 15 ++-
.../editor/cgen/ClientModeController.java | 3 +
.../editor/cgen/CodeGeneratorController.java | 5 +-
.../cgen/CodeGeneratorControllerBase.java | 37 +++++--
.../modeler/editor/cgen/CodeGeneratorPane.java | 9 +-
.../editor/cgen/CustomModeController.java | 5 +-
.../modeler/editor/cgen/CustomModePanel.java | 13 ++-
.../editor/cgen/GeneratorController.java | 12 ++-
.../editor/cgen/GeneratorControllerPanel.java | 6 +-
.../editor/cgen/GeneratorTabController.java | 4 +-
.../modeler/editor/cgen/GeneratorTabPanel.java | 12 ++-
.../editor/cgen/StandardModeController.java | 5 +-
.../modeler/editor/cgen/StandardModePanel.java | 5 +-
.../modeler/editor/cgen/domain/CgenPanel.java | 10 +-
.../modeler/editor/cgen/domain/CgenTab.java | 13 ++-
.../editor/cgen/domain/CgenTabController.java | 5 +-
22 files changed, 205 insertions(+), 147 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cayenne/blob/3ae49734/UPGRADE.txt
----------------------------------------------------------------------
diff --git a/UPGRADE.txt b/UPGRADE.txt
index 2dfbd9b..83bcc5a 100644
--- a/UPGRADE.txt
+++ b/UPGRADE.txt
@@ -4,6 +4,11 @@ Apache Cayenne Upgrade Information
IMPORTANT: be sure to read all notes for the intermediate releases between your
current release and the release you are upgrading to.
-------------------------------------------------------------------------------
+UPGRADING TO 4.1.M3
+
+* Per CAY-2493 'datamap' generation mode in cgen replaced with 'all' generation mode with
+ <excludeEntities>*</excludeEntities> and <excludeEmbeddables>*</excludeEmbeddables> patterns.
+
UPGRADING TO 4.1.M2
* Per CAY-2438 DataChannelFilter filter was deprecated and two new independent filters are introduced:
http://git-wip-us.apache.org/repos/asf/cayenne/blob/3ae49734/cayenne-cgen/src/main/java/org/apache/cayenne/gen/CgenConfiguration.java
----------------------------------------------------------------------
diff --git a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/CgenConfiguration.java b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/CgenConfiguration.java
index 15bc435..1277baa 100644
--- a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/CgenConfiguration.java
+++ b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/CgenConfiguration.java
@@ -328,7 +328,7 @@ public class CgenConfiguration implements Serializable, XMLSerializable {
.filter(entity -> !entityArtifacts.contains(entity.getName()))
.map(ObjEntity::getName)
.collect(Collectors.toList());
- return org.apache.commons.lang3.StringUtils.join(excludeEntities, ",");
+ return String.join(",", excludeEntities);
}
public void loadEmbeddables(String embeddables) {
@@ -341,7 +341,7 @@ public class CgenConfiguration implements Serializable, XMLSerializable {
.filter(embeddable -> !embeddableArtifacts.contains(embeddable.getClassName()))
.map(Embeddable::getClassName)
.collect(Collectors.toList());
- return org.apache.commons.lang3.StringUtils.join(excludeEmbeddable, ",");
+ return String.join(",", excludeEmbeddable);
}
public void resolveExcludeEntities() {
@@ -365,7 +365,7 @@ public class CgenConfiguration implements Serializable, XMLSerializable {
encoder.start("cgen")
.attribute("xmlns", CgenExtension.NAMESPACE)
.simpleTag("excludeEntities", getExcludeEntites())
- .simpleTag("excludeEmbeddables",getExcludeEmbeddables())
+ .simpleTag("excludeEmbeddables", getExcludeEmbeddables())
.simpleTag("destDir", buildRelPath())
.simpleTag("mode", this.artifactsGenerationMode.getLabel())
.simpleTag("template", this.template)
http://git-wip-us.apache.org/repos/asf/cayenne/blob/3ae49734/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenConfigHandler.java
----------------------------------------------------------------------
diff --git a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenConfigHandler.java b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenConfigHandler.java
index 754aac6..2384f10 100644
--- a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenConfigHandler.java
+++ b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenConfigHandler.java
@@ -60,6 +60,7 @@ public class CgenConfigHandler extends NamespaceAwareNestedTagHandler{
super(parentHandler);
this.metaData = metaData;
this.targetNamespace = CgenExtension.NAMESPACE;
+ this.configuration = new CgenConfiguration();
}
@Override
@@ -121,70 +122,49 @@ public class CgenConfigHandler extends NamespaceAwareNestedTagHandler{
if(path.trim().length() == 0) {
return;
}
-
- if(configuration != null) {
- configuration.setRelPath(Paths.get(path));
- }
+ configuration.setRelPath(Paths.get(path));
}
private void createGenerationMode(String mode) {
if(mode.trim().length() == 0) {
return;
}
-
- if(configuration != null) {
- configuration.setArtifactsGenerationMode(mode);
- }
+ configuration.setArtifactsGenerationMode(mode);
}
private void createExcludeEntities(String entities) {
if(entities.trim().length() == 0) {
return;
}
-
- if(configuration != null) {
- configuration.loadEntities(entities);
- }
+ configuration.loadEntities(entities);
}
private void createExcludeEmbeddables(String embeddables) {
if(embeddables.trim().length() == 0) {
return;
}
-
- if(configuration != null) {
- configuration.loadEmbeddables(embeddables);
- }
+ configuration.loadEmbeddables(embeddables);
}
private void createSubclassTemplate(String template) {
if(template.trim().length() == 0) {
return;
}
-
- if(configuration != null) {
- configuration.setTemplate(template);
- }
+ configuration.setTemplate(template);
}
private void createSuperclassTemplate(String template) {
if(template.trim().length() == 0) {
return;
}
-
- if(configuration != null) {
- configuration.setSuperTemplate(template);
- }
+ configuration.setSuperTemplate(template);
}
private void createOutputPattern(String pattern) {
if(pattern.trim().length() == 0) {
return;
}
-
- if(configuration != null) {
- configuration.setOutputPattern(pattern);
- }
+ configuration.setOutputPattern(pattern);
}
private void createMakePairs(String makePairs) {
@@ -192,12 +172,10 @@ public class CgenConfigHandler extends NamespaceAwareNestedTagHandler{
return;
}
- if (configuration != null) {
- if (makePairs.equals(TRUE)) {
- configuration.setMakePairs(true);
- } else {
- configuration.setMakePairs(false);
- }
+ if (makePairs.equals(TRUE)) {
+ configuration.setMakePairs(true);
+ } else {
+ configuration.setMakePairs(false);
}
}
@@ -205,13 +183,10 @@ public class CgenConfigHandler extends NamespaceAwareNestedTagHandler{
if(data.trim().length() == 0) {
return;
}
-
- if(configuration != null) {
- if(data.equals(TRUE)) {
- configuration.setUsePkgPath(true);
- } else {
- configuration.setUsePkgPath(false);
- }
+ if(data.equals(TRUE)) {
+ configuration.setUsePkgPath(true);
+ } else {
+ configuration.setUsePkgPath(false);
}
}
@@ -220,12 +195,10 @@ public class CgenConfigHandler extends NamespaceAwareNestedTagHandler{
return;
}
- if(configuration != null) {
- if(data.equals(TRUE)) {
- configuration.setOverwrite(true);
- } else {
- configuration.setOverwrite(false);
- }
+ if(data.equals(TRUE)) {
+ configuration.setOverwrite(true);
+ } else {
+ configuration.setOverwrite(false);
}
}
@@ -233,13 +206,10 @@ public class CgenConfigHandler extends NamespaceAwareNestedTagHandler{
if(data.trim().length() == 0) {
return;
}
-
- if(configuration != null) {
- if(data.equals(TRUE)) {
- configuration.setCreatePropertyNames(true);
- } else {
- configuration.setCreatePropertyNames(false);
- }
+ if(data.equals(TRUE)) {
+ configuration.setCreatePropertyNames(true);
+ } else {
+ configuration.setCreatePropertyNames(false);
}
}
@@ -248,12 +218,10 @@ public class CgenConfigHandler extends NamespaceAwareNestedTagHandler{
return;
}
- if(configuration != null) {
- if(data.equals(TRUE)) {
- configuration.setCreatePKProperties(true);
- } else {
- configuration.setCreatePKProperties(false);
- }
+ if(data.equals(TRUE)) {
+ configuration.setCreatePKProperties(true);
+ } else {
+ configuration.setCreatePKProperties(false);
}
}
@@ -261,18 +229,14 @@ public class CgenConfigHandler extends NamespaceAwareNestedTagHandler{
if(data.trim().length() == 0) {
return;
}
-
- if(configuration != null) {
- if(data.equals(TRUE)) {
- configuration.setClient(true);
- } else {
- configuration.setClient(false);
- }
+ if(data.equals(TRUE)) {
+ configuration.setClient(true);
+ } else {
+ configuration.setClient(false);
}
}
private void createConfig() {
- configuration = new CgenConfiguration();
loaderContext.addDataMapListener(dataMap -> {
configuration.setDataMap(dataMap);
configuration.setRootPath(buildRootPath(dataMap));
http://git-wip-us.apache.org/repos/asf/cayenne/blob/3ae49734/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/CgenTask.java
----------------------------------------------------------------------
diff --git a/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/CgenTask.java b/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/CgenTask.java
index bfafc1f..0e63c53 100644
--- a/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/CgenTask.java
+++ b/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/CgenTask.java
@@ -60,7 +60,7 @@ public class CgenTask extends BaseCayenneTask {
@Input
@Optional
- private String client;
+ private Boolean client;
private File destDir;
@@ -85,7 +85,7 @@ public class CgenTask extends BaseCayenneTask {
@Input
@Optional
- private String makePairs;
+ private Boolean makePairs;
@Input
@Optional
@@ -97,7 +97,7 @@ public class CgenTask extends BaseCayenneTask {
@Input
@Optional
- private String overwrite;
+ private Boolean overwrite;
@Input
@Optional
@@ -121,11 +121,11 @@ public class CgenTask extends BaseCayenneTask {
@Input
@Optional
- private String usePkgPath;
+ private Boolean usePkgPath;
@Input
@Optional
- private String createPropertyNames;
+ private Boolean createPropertyNames;
/**
* Force run (skip check for files modification time)
@@ -149,7 +149,7 @@ public class CgenTask extends BaseCayenneTask {
*/
@Input
@Optional
- private String createPKProperties;
+ private Boolean createPKProperties;
private String destDirName;
@@ -240,21 +240,21 @@ public class CgenTask extends BaseCayenneTask {
cgenConfiguration.setDataMap(dataMap);
cgenConfiguration.setRelPath(getDestDirFile() != null ? getDestDirFile().toPath() : cgenConfiguration.getRelPath());
cgenConfiguration.setEncoding(encoding != null ? encoding : cgenConfiguration.getEncoding());
- cgenConfiguration.setMakePairs(makePairs != null ? Boolean.valueOf(makePairs) : cgenConfiguration.isMakePairs());
+ cgenConfiguration.setMakePairs(makePairs != null ? makePairs : cgenConfiguration.isMakePairs());
cgenConfiguration.setArtifactsGenerationMode(mode != null ? mode : cgenConfiguration.getArtifactsGenerationMode());
cgenConfiguration.setOutputPattern(outputPattern != null ? outputPattern : cgenConfiguration.getOutputPattern());
- cgenConfiguration.setOverwrite(overwrite != null ? Boolean.valueOf(overwrite) : cgenConfiguration.isOverwrite());
+ cgenConfiguration.setOverwrite(overwrite != null ? overwrite : cgenConfiguration.isOverwrite());
cgenConfiguration.setSuperPkg(superPkg != null ? superPkg : cgenConfiguration.getSuperPkg());
cgenConfiguration.setSuperTemplate(superTemplate != null ? superTemplate : cgenConfiguration.getSuperTemplate());
cgenConfiguration.setTemplate(template != null ? template : cgenConfiguration.getTemplate());
cgenConfiguration.setEmbeddableSuperTemplate(embeddableSuperTemplate != null ? embeddableSuperTemplate : cgenConfiguration.getEmbeddableSuperTemplate());
cgenConfiguration.setEmbeddableTemplate(embeddableTemplate != null ? embeddableTemplate : cgenConfiguration.getEmbeddableTemplate());
- cgenConfiguration.setUsePkgPath(usePkgPath != null ? Boolean.valueOf(usePkgPath) : cgenConfiguration.isUsePkgPath());
- cgenConfiguration.setCreatePropertyNames(createPropertyNames != null ? Boolean.valueOf(createPropertyNames) : cgenConfiguration.isCreatePropertyNames());
+ cgenConfiguration.setUsePkgPath(usePkgPath != null ? usePkgPath : cgenConfiguration.isUsePkgPath());
+ cgenConfiguration.setCreatePropertyNames(createPropertyNames != null ? createPropertyNames : cgenConfiguration.isCreatePropertyNames());
cgenConfiguration.setQueryTemplate(queryTemplate != null ? queryTemplate : cgenConfiguration.getQueryTemplate());
cgenConfiguration.setQuerySuperTemplate(querySuperTemplate != null ? querySuperTemplate : cgenConfiguration.getQuerySuperTemplate());
- cgenConfiguration.setCreatePKProperties(createPKProperties != null ? Boolean.valueOf(createPKProperties) : cgenConfiguration.isCreatePKProperties());
- cgenConfiguration.setClient(client != null ? Boolean.valueOf(client) : cgenConfiguration.isClient());
+ cgenConfiguration.setCreatePKProperties(createPKProperties != null ? createPKProperties : cgenConfiguration.isCreatePKProperties());
+ cgenConfiguration.setClient(client != null ? client : cgenConfiguration.isClient());
if(!cgenConfiguration.isMakePairs()) {
if(template == null) {
cgenConfiguration.setTemplate(cgenConfiguration.isClient() ? ClientClassGenerationAction.SINGLE_CLASS_TEMPLATE : ClassGenerationAction.SINGLE_CLASS_TEMPLATE);
@@ -361,12 +361,12 @@ public class CgenTask extends BaseCayenneTask {
setAdditionalMaps(additionalMaps);
}
- public boolean isClient() {
- return Boolean.valueOf(client);
+ public Boolean isClient() {
+ return client;
}
- public void setClient(boolean client) {
- this.client = String.valueOf(client);
+ public void setClient(Boolean client) {
+ this.client = client;
}
public void client(boolean client) {
@@ -425,12 +425,12 @@ public class CgenTask extends BaseCayenneTask {
setExcludeEmbeddables(excludeEmbeddables);
}
- public boolean isMakePairs() {
- return Boolean.valueOf(makePairs);
+ public Boolean isMakePairs() {
+ return makePairs;
}
- public void setMakePairs(boolean makePairs) {
- this.makePairs = String.valueOf(makePairs);
+ public void setMakePairs(Boolean makePairs) {
+ this.makePairs = makePairs;
}
public void makePairs(boolean makePairs) {
@@ -461,12 +461,12 @@ public class CgenTask extends BaseCayenneTask {
setOutputPattern(outputPattern);
}
- public boolean isOverwrite() {
- return Boolean.valueOf(overwrite);
+ public Boolean isOverwrite() {
+ return overwrite;
}
- public void setOverwrite(boolean overwrite) {
- this.overwrite = String.valueOf(overwrite);
+ public void setOverwrite(Boolean overwrite) {
+ this.overwrite = overwrite;
}
public void overwrite(boolean overwrite) {
@@ -533,24 +533,24 @@ public class CgenTask extends BaseCayenneTask {
setEmbeddableTemplate(embeddableTemplate);
}
- public boolean isUsePkgPath() {
- return Boolean.valueOf(usePkgPath);
+ public Boolean isUsePkgPath() {
+ return usePkgPath;
}
- public void setUsePkgPath(boolean usePkgPath) {
- this.usePkgPath = String.valueOf(usePkgPath);
+ public void setUsePkgPath(Boolean usePkgPath) {
+ this.usePkgPath = usePkgPath;
}
public void usePkgPath(boolean usePkgPath) {
setUsePkgPath(usePkgPath);
}
- public boolean isCreatePropertyNames() {
- return Boolean.valueOf(createPropertyNames);
+ public Boolean isCreatePropertyNames() {
+ return createPropertyNames;
}
- public void setCreatePropertyNames(boolean createPropertyNames) {
- this.createPropertyNames = String.valueOf(createPropertyNames);
+ public void setCreatePropertyNames(Boolean createPropertyNames) {
+ this.createPropertyNames = createPropertyNames;
}
public void createPropertyNames(boolean createPropertyNames) {
@@ -569,8 +569,8 @@ public class CgenTask extends BaseCayenneTask {
setForce(force);
}
- public void setCreatePKProperties(boolean createPKProperties) {
- this.createPKProperties = String.valueOf(createPKProperties);
+ public void setCreatePKProperties(Boolean createPKProperties) {
+ this.createPKProperties = createPKProperties;
}
public void createPKProperties(boolean createPKProperties) {
http://git-wip-us.apache.org/repos/asf/cayenne/blob/3ae49734/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 ddd6893..9297481 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
@@ -24,7 +24,8 @@ import org.apache.cayenne.modeler.editor.cgen.CodeGeneratorController;
import org.apache.cayenne.modeler.editor.cgen.domain.CgenTab;
import org.apache.cayenne.modeler.editor.dbimport.DbImportView;
-import javax.swing.*;
+import javax.swing.JScrollPane;
+import javax.swing.JTabbedPane;
/**
* Data map editing tabs container
http://git-wip-us.apache.org/repos/asf/cayenne/blob/3ae49734/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 7b98f4c..9032071 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,9 +25,12 @@ import org.apache.cayenne.swing.ImageRendererColumn;
import org.apache.cayenne.swing.ObjectBinding;
import org.apache.cayenne.swing.TableBindingBuilder;
-import javax.swing.*;
-import java.awt.*;
+import javax.swing.JLabel;
+import java.awt.Component;
+/**
+ * @since 4.1
+ */
public class ClassesTabController extends CayenneController {
protected ClassesTabPanel view;
@@ -111,7 +114,7 @@ public class ClassesTabController extends CayenneController {
else if (selectedCount == getParentController().getClasses().size()) {
view.getCheckAll().setSelected(true);
}
- getParentController().updateEntities();
+ getParentController().updateSelectedEntities();
}
/**
@@ -121,7 +124,7 @@ public class ClassesTabController extends CayenneController {
public void checkAllAction() {
if (getParentController().updateSelection(view.getCheckAll().isSelected() ? o -> true : o -> false)) {
tableBinding.updateView();
- getParentController().updateEntities();
+ getParentController().updateSelectedEntities();
if(view.getCheckAll().isSelected()) {
getParentController().enableGenerateButton(true);
} else {
http://git-wip-us.apache.org/repos/asf/cayenne/blob/3ae49734/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 403058f..3f5c49c 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,8 +19,16 @@
package org.apache.cayenne.modeler.editor.cgen;
-import javax.swing.*;
-import java.awt.*;
+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;
/**
* @since 4.1
@@ -35,9 +43,6 @@ public class ClassesTabPanel extends JPanel {
this.table = new JTable();
this.table.setRowHeight(22);
-
- // TODO: andrus 04/07/2006 - is there an easy way to stick that checkbox in the
- // table header????
this.checkAll = new JCheckBox();
this.checkAllLabel = new JLabel("Check All Classes");
http://git-wip-us.apache.org/repos/asf/cayenne/blob/3ae49734/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
index 7485d25..b55c24b 100644
--- 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
@@ -21,6 +21,9 @@ package org.apache.cayenne.modeler.editor.cgen;
import org.apache.cayenne.gen.CgenConfiguration;
+/**
+ * @since 4.1
+ */
public class ClientModeController extends StandardModeController {
public ClientModeController(CodeGeneratorControllerBase parent) {
http://git-wip-us.apache.org/repos/asf/cayenne/blob/3ae49734/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 1274ecb..1244178 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
@@ -30,14 +30,15 @@ import org.apache.cayenne.swing.BindingBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import javax.swing.*;
-import java.awt.*;
+import javax.swing.JOptionPane;
+import java.awt.Component;
import java.util.Collections;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import java.util.function.Predicate;
/**
+ * @since 4.1
* A controller for the class generator dialog.
*/
public class CodeGeneratorController extends CodeGeneratorControllerBase {
http://git-wip-us.apache.org/repos/asf/cayenne/blob/3ae49734/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 211384d..21a3736 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
@@ -32,19 +32,27 @@ import org.apache.cayenne.modeler.util.ModelerUtil;
import org.apache.cayenne.validation.ValidationFailure;
import org.apache.cayenne.validation.ValidationResult;
-import javax.swing.*;
-import java.awt.*;
+import javax.swing.Icon;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import java.awt.Component;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
import java.util.List;
import java.util.function.Predicate;
import java.util.prefs.Preferences;
import java.util.stream.Collectors;
/**
+ * @since 4.1
* A base superclass of a top controller for the code generator. Defines all common model
* parts used in class generation.
*
@@ -108,11 +116,13 @@ public abstract class CodeGeneratorControllerBase extends CayenneController {
if(cgenConfiguration != null){
addToSelectedEntities(cgenConfiguration.getDataMap(), cgenConfiguration.getEntities());
addToSelectedEmbeddables(cgenConfiguration.getDataMap(), cgenConfiguration.getEmbeddables());
+ cgenConfiguration.setForce(true);
return cgenConfiguration;
}
try {
cgenConfiguration = new CgenConfiguration();
+ cgenConfiguration.setForce(true);
cgenConfiguration.setDataMap(map);
Path basePath = Paths.get(ModelerUtil.initOutputFolder());
@@ -238,9 +248,7 @@ public abstract class CodeGeneratorControllerBase extends CayenneController {
}
public List<Embeddable> getSelectedEmbeddables() {
-
List<Embeddable> selected = new ArrayList<>(selectedEmbeddables.size());
-
for (Object classObj : classes) {
if (classObj instanceof Embeddable
&& selectedEmbeddables.contains(((Embeddable) classObj)
@@ -379,16 +387,29 @@ public abstract class CodeGeneratorControllerBase extends CayenneController {
return labelIcon;
}
- public void updateEntities(){
+ public void updateSelectedEntities(){
+ updateEntities();
+ updateEmbeddables();
+ }
+
+ public void updateEntities() {
DataMap map = getProjectController().getCurrentDataMap();
CgenConfiguration cgenConfiguration = projectController.getApplication().getMetaData().get(map, CgenConfiguration.class);
if(cgenConfiguration != null) {
- cgenConfiguration.resetCollections();
+ cgenConfiguration.getEntities().clear();
for(ObjEntity entity: getSelectedEntities()) {
if(!entity.isGeneric()) {
cgenConfiguration.loadEntity(entity.getName());
}
}
+ }
+ }
+
+ public void updateEmbeddables() {
+ DataMap map = getProjectController().getCurrentDataMap();
+ CgenConfiguration cgenConfiguration = projectController.getApplication().getMetaData().get(map, CgenConfiguration.class);
+ if(cgenConfiguration != null) {
+ cgenConfiguration.getEmbeddables().clear();
for(Embeddable embeddable : getSelectedEmbeddables()) {
cgenConfiguration.loadEmbeddable(embeddable.getClassName());
}
@@ -404,7 +425,7 @@ public abstract class CodeGeneratorControllerBase extends CayenneController {
void addToSelectedEmbeddables(DataMap dataMap, Collection<String> embeddables) {
prepareClasses(dataMap);
selectedEmbeddables.addAll(embeddables);
- updateEntities();
+ updateEmbeddables();
}
public int getSelectedEntitiesSize() {
http://git-wip-us.apache.org/repos/asf/cayenne/blob/3ae49734/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 859cb2d..003d850 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,10 +19,15 @@
package org.apache.cayenne.modeler.editor.cgen;
-import javax.swing.*;
-import java.awt.*;
+import javax.swing.JScrollPane;
+import javax.swing.JSplitPane;
+import javax.swing.ScrollPaneConstants;
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.Dimension;
/**
+ * @since 4.1
*/
public class CodeGeneratorPane extends JSplitPane {
http://git-wip-us.apache.org/repos/asf/cayenne/blob/3ae49734/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 247d747..4a23e6b 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
@@ -25,13 +25,14 @@ import org.apache.cayenne.modeler.CodeTemplateManager;
import org.apache.cayenne.modeler.dialog.pref.PreferenceDialog;
import org.apache.cayenne.swing.BindingBuilder;
-import javax.swing.*;
-import java.awt.*;
+import javax.swing.DefaultComboBoxModel;
+import java.awt.Component;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
+ * @since 4.1
* A controller for the custom generation mode.
*/
public class CustomModeController extends GeneratorController {
http://git-wip-us.apache.org/repos/asf/cayenne/blob/3ae49734/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 468eec7..8b1d2a3 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,9 +29,16 @@ import org.apache.cayenne.swing.components.JCayenneCheckBox;
import org.apache.cayenne.swing.control.ActionLink;
import org.apache.cayenne.validation.ValidationException;
-import javax.swing.*;
-import java.awt.*;
-
+import javax.swing.JCheckBox;
+import javax.swing.JComboBox;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+import java.awt.BorderLayout;
+import java.awt.FlowLayout;
+
+/**
+ * @since 4.1
+ */
public class CustomModePanel extends GeneratorControllerPanel {
private ComboBoxAdapter<String> subclassTemplate;
http://git-wip-us.apache.org/repos/asf/cayenne/blob/3ae49734/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 22187f5..1b49a46 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
@@ -21,7 +21,12 @@ package org.apache.cayenne.modeler.editor.cgen;
import org.apache.cayenne.gen.ArtifactsGenerationMode;
import org.apache.cayenne.gen.CgenConfiguration;
-import org.apache.cayenne.map.*;
+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.modeler.Application;
import org.apache.cayenne.modeler.pref.FSPath;
import org.apache.cayenne.modeler.util.CayenneController;
@@ -34,13 +39,14 @@ import org.apache.cayenne.validation.SimpleValidationFailure;
import org.apache.cayenne.validation.ValidationFailure;
import org.apache.cayenne.validation.ValidationResult;
-import javax.swing.*;
+import javax.swing.JButton;
+import javax.swing.JFileChooser;
import java.io.File;
import java.util.function.Predicate;
/**
+ * @since 4.1
* A mode-specific part of the code generation dialog.
- *
*/
public abstract class GeneratorController extends CayenneController {
http://git-wip-us.apache.org/repos/asf/cayenne/blob/3ae49734/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 5771b89..3275726 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
@@ -25,11 +25,13 @@ import org.apache.cayenne.modeler.ProjectController;
import org.apache.cayenne.modeler.util.TextAdapter;
import org.apache.cayenne.validation.ValidationException;
-import javax.swing.*;
+import javax.swing.JButton;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
/**
+ * @since 4.1
* A generic panel that is a superclass of generator panels, defining common fields.
- *
*/
public class GeneratorControllerPanel extends JPanel {
http://git-wip-us.apache.org/repos/asf/cayenne/blob/3ae49734/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabController.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabController.java
index 6af5436..77a71b8 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabController.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabController.java
@@ -23,11 +23,13 @@ import org.apache.cayenne.gen.CgenConfiguration;
import org.apache.cayenne.modeler.util.CayenneController;
import org.apache.cayenne.pref.PreferenceDetail;
-import java.awt.*;
+import java.awt.Component;
+import java.awt.Dimension;
import java.util.HashMap;
import java.util.Map;
/**
+ * @since 4.1
*/
public class GeneratorTabController extends CayenneController {
http://git-wip-us.apache.org/repos/asf/cayenne/blob/3ae49734/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabPanel.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabPanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabPanel.java
index 08f1dee..a10fe21 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabPanel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabPanel.java
@@ -24,8 +24,16 @@ import com.jgoodies.forms.layout.FormLayout;
import org.apache.cayenne.modeler.util.ModelerUtil;
import org.apache.cayenne.swing.components.TopBorder;
-import javax.swing.*;
-import java.awt.*;
+import javax.swing.Box;
+import javax.swing.JButton;
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import java.awt.BorderLayout;
+import java.awt.CardLayout;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
import java.util.Objects;
/**
http://git-wip-us.apache.org/repos/asf/cayenne/blob/3ae49734/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/StandardModeController.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/StandardModeController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/StandardModeController.java
index 5b34efc..ba4344e 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/StandardModeController.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/StandardModeController.java
@@ -22,8 +22,11 @@ package org.apache.cayenne.modeler.editor.cgen;
import org.apache.cayenne.gen.CgenConfiguration;
import org.apache.cayenne.modeler.pref.DataMapDefaults;
-import java.awt.*;
+import java.awt.Component;
+/**
+ * @since 4.1
+ */
public class StandardModeController extends GeneratorController {
protected StandardModePanel view;
http://git-wip-us.apache.org/repos/asf/cayenne/blob/3ae49734/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/StandardModePanel.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/StandardModePanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/StandardModePanel.java
index 2b755e7..85c2d5f 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/StandardModePanel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/StandardModePanel.java
@@ -23,8 +23,11 @@ import com.jgoodies.forms.builder.DefaultFormBuilder;
import com.jgoodies.forms.layout.FormLayout;
import org.apache.cayenne.modeler.Application;
-import java.awt.*;
+import java.awt.BorderLayout;
+/**
+ * @since 4.1
+ */
public class StandardModePanel extends GeneratorControllerPanel {
public StandardModePanel(CodeGeneratorControllerBase codeGeneratorControllerBase) {
http://git-wip-us.apache.org/repos/asf/cayenne/blob/3ae49734/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/domain/CgenPanel.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/domain/CgenPanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/domain/CgenPanel.java
index 637cc12..e8e6596 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/domain/CgenPanel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/domain/CgenPanel.java
@@ -27,9 +27,15 @@ import org.apache.cayenne.map.DataMap;
import org.apache.cayenne.modeler.Application;
import org.apache.cayenne.modeler.util.ModelerUtil;
-import javax.swing.*;
-import java.awt.*;
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import java.awt.BorderLayout;
+/**
+ * @since 4.1
+ */
public class CgenPanel extends JPanel {
private JCheckBox checkConfig;
http://git-wip-us.apache.org/repos/asf/cayenne/blob/3ae49734/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/domain/CgenTab.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/domain/CgenTab.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/domain/CgenTab.java
index 0c5288e..5d7c88a 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/domain/CgenTab.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/domain/CgenTab.java
@@ -25,12 +25,21 @@ import org.apache.cayenne.map.DataMap;
import org.apache.cayenne.modeler.ProjectController;
import org.apache.cayenne.modeler.util.ModelerUtil;
-import javax.swing.*;
-import java.awt.*;
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
import java.util.SortedSet;
import java.util.TreeSet;
import java.util.concurrent.ConcurrentMap;
+/**
+ * @since 4.1
+ */
public class CgenTab extends JPanel {
protected ProjectController projectController;
http://git-wip-us.apache.org/repos/asf/cayenne/blob/3ae49734/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/domain/CgenTabController.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/domain/CgenTabController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/domain/CgenTabController.java
index 0f82abf..f9549ec 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/domain/CgenTabController.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/domain/CgenTabController.java
@@ -35,7 +35,7 @@ import org.apache.cayenne.project.Project;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import javax.swing.*;
+import javax.swing.JOptionPane;
import java.awt.event.ItemEvent;
import java.io.IOException;
import java.nio.file.Files;
@@ -48,6 +48,9 @@ import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import java.util.prefs.Preferences;
+/**
+ * @since 4.1
+ */
public class CgenTabController {
private static Logger logObj = LoggerFactory.getLogger(ErrorDebugDialog.class);
[02/32] cayenne git commit: cgen. create ui
Posted by nt...@apache.org.
cgen. create ui
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/8119ffaa
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/8119ffaa
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/8119ffaa
Branch: refs/heads/master
Commit: 8119ffaa88f70787590df6b23bc86c031337b921
Parents: 831442c
Author: Arseni Bulatski <an...@gmail.com>
Authored: Thu Jun 14 16:57:22 2018 +0300
Committer: Arseni Bulatski <an...@gmail.com>
Committed: Wed Oct 24 13:39:05 2018 +0300
----------------------------------------------------------------------
.../cayenne/gen/xml/CgenConfigHandler.java | 23 +
.../apache/cayenne/gen/xml/CgenExtension.java | 32 ++
.../cayenne/gen/xml/CgenLoaderDelegate.java | 28 +
.../cayenne/gen/xml/CgenSaverDelegate.java | 20 +
.../modeler/editor/DataMapTabbedView.java | 10 +-
.../cayenne/modeler/editor/EditorView.java | 3 +-
.../editor/cgen/ClassesTabController.java | 123 ++++
.../modeler/editor/cgen/ClassesTabPanel.java | 84 +++
.../editor/cgen/CodeGeneratorController.java | 146 +++++
.../cgen/CodeGeneratorControllerBase.java | 289 ++++++++++
.../modeler/editor/cgen/CodeGeneratorPane.java | 76 +++
.../editor/cgen/CustomModeController.java | 238 ++++++++
.../modeler/editor/cgen/CustomModePanel.java | 189 ++++++
.../editor/cgen/CustomPreferencesUpdater.java | 193 +++++++
.../editor/cgen/GeneratorController.java | 568 +++++++++++++++++++
.../editor/cgen/GeneratorControllerPanel.java | 53 ++
.../editor/cgen/GeneratorTabController.java | 71 +++
.../modeler/editor/cgen/GeneratorTabPanel.java | 33 ++
.../editor/cgen/StandardPanelComponent.java | 79 +++
.../modeler/init/CayenneModelerModule.java | 4 +-
20 files changed, 2256 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cayenne/blob/8119ffaa/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenConfigHandler.java
----------------------------------------------------------------------
diff --git a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenConfigHandler.java b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenConfigHandler.java
new file mode 100644
index 0000000..23f0ff3
--- /dev/null
+++ b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenConfigHandler.java
@@ -0,0 +1,23 @@
+package org.apache.cayenne.gen.xml;
+
+import org.apache.cayenne.configuration.xml.DataChannelMetaData;
+import org.apache.cayenne.configuration.xml.NamespaceAwareNestedTagHandler;
+import org.apache.cayenne.dbsync.xml.DbImportExtension;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+
+public class CgenConfigHandler extends NamespaceAwareNestedTagHandler{
+
+ private DataChannelMetaData metaData;
+
+ CgenConfigHandler(NamespaceAwareNestedTagHandler parentHandler, DataChannelMetaData metaData) {
+ super(parentHandler);
+ this.metaData = metaData;
+ this.targetNamespace = DbImportExtension.NAMESPACE;
+ }
+
+ @Override
+ protected boolean processElement(String namespaceURI, String localName, Attributes attributes) throws SAXException {
+ return false;
+ }
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/8119ffaa/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenExtension.java
----------------------------------------------------------------------
diff --git a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenExtension.java b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenExtension.java
new file mode 100644
index 0000000..619bffc
--- /dev/null
+++ b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenExtension.java
@@ -0,0 +1,32 @@
+package org.apache.cayenne.gen.xml;
+
+import org.apache.cayenne.configuration.ConfigurationNodeVisitor;
+import org.apache.cayenne.configuration.xml.DataChannelMetaData;
+import org.apache.cayenne.di.Inject;
+import org.apache.cayenne.project.Project;
+import org.apache.cayenne.project.extension.LoaderDelegate;
+import org.apache.cayenne.project.extension.ProjectExtension;
+import org.apache.cayenne.project.extension.SaverDelegate;
+
+public class CgenExtension implements ProjectExtension {
+
+ public static final String NAMESPACE = "http://cayenne.apache.org/schema/" + Project.VERSION + "/cgen";
+
+ @Inject
+ private DataChannelMetaData metaData;
+
+ @Override
+ public LoaderDelegate createLoaderDelegate() {
+ return null;
+ }
+
+ @Override
+ public SaverDelegate createSaverDelegate() {
+ return new CgenSaverDelegate(metaData);
+ }
+
+ @Override
+ public ConfigurationNodeVisitor<String> createNamingDelegate() {
+ return null;
+ }
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/8119ffaa/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenLoaderDelegate.java
----------------------------------------------------------------------
diff --git a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenLoaderDelegate.java b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenLoaderDelegate.java
new file mode 100644
index 0000000..44438e3
--- /dev/null
+++ b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenLoaderDelegate.java
@@ -0,0 +1,28 @@
+package org.apache.cayenne.gen.xml;
+
+import org.apache.cayenne.configuration.xml.DataChannelMetaData;
+import org.apache.cayenne.configuration.xml.NamespaceAwareNestedTagHandler;
+
+import org.apache.cayenne.project.extension.LoaderDelegate;
+
+public class CgenLoaderDelegate implements LoaderDelegate {
+
+ private DataChannelMetaData metaData;
+
+ CgenLoaderDelegate(DataChannelMetaData metaData){
+ this.metaData = metaData;
+ }
+
+ @Override
+ public String getTargetNamespace() {
+ return CgenExtension.NAMESPACE;
+ }
+
+ @Override
+ public NamespaceAwareNestedTagHandler createHandler(NamespaceAwareNestedTagHandler parent, String tag) {
+// if(CgenConfigHandler.CONFIG_TAG.equals(tag)) {
+// return new CgenConfigHandler(parent, metaData);
+// }
+ return null;
+ }
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/8119ffaa/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenSaverDelegate.java
----------------------------------------------------------------------
diff --git a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenSaverDelegate.java b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenSaverDelegate.java
new file mode 100644
index 0000000..f9c7173
--- /dev/null
+++ b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenSaverDelegate.java
@@ -0,0 +1,20 @@
+package org.apache.cayenne.gen.xml;
+
+import org.apache.cayenne.configuration.xml.DataChannelMetaData;
+import org.apache.cayenne.map.DataMap;
+import org.apache.cayenne.project.extension.BaseSaverDelegate;
+
+public class CgenSaverDelegate extends BaseSaverDelegate{
+
+ private DataChannelMetaData metaData;
+
+ CgenSaverDelegate(DataChannelMetaData metaData){
+ this.metaData = metaData;
+ }
+
+ @Override
+ public Void visitDataMap(DataMap dataMap) {
+
+ return null;
+ }
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/8119ffaa/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 ed1b6f1..bd9afc5 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
@@ -18,12 +18,13 @@
****************************************************************/
package org.apache.cayenne.modeler.editor;
-import javax.swing.JScrollPane;
-import javax.swing.JTabbedPane;
-
+import org.apache.cayenne.modeler.Application;
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.*;
+
/**
* Data map editing tabs container
@@ -55,8 +56,11 @@ 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);
+ JScrollPane cgenView = new JScrollPane(codeGeneratorController.getView());
addTab("DataMap", dataMapView);
addTab("DbImport", dbImportView);
+ addTab("Cgen", cgenView);
}
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/8119ffaa/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/EditorView.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/EditorView.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/EditorView.java
index e9b3290..5b4675a 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/EditorView.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/EditorView.java
@@ -103,7 +103,6 @@ public class EditorView extends JPanel implements ObjEntityDisplayListener,
private SQLTemplateTabbedView sqlTemplateView;
private EjbqlTabbedView ejbqlQueryView;
private JTabbedPane dataNodeView;
-
protected ActionManager actionManager;
private FilterController filterController;
@@ -162,7 +161,7 @@ public class EditorView extends JPanel implements ObjEntityDisplayListener,
public EditorView(ProjectController eventController) {
this.eventController = eventController;
- this.actionManager= eventController.getApplication().getActionManager();
+ this.actionManager = eventController.getApplication().getActionManager();
initView();
initController();
http://git-wip-us.apache.org/repos/asf/cayenne/blob/8119ffaa/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
new file mode 100644
index 0000000..2b478ac
--- /dev/null
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/ClassesTabController.java
@@ -0,0 +1,123 @@
+/*****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ ****************************************************************/
+
+package org.apache.cayenne.modeler.editor.cgen;
+
+import org.apache.cayenne.map.DataMap;
+import org.apache.cayenne.modeler.util.CayenneController;
+import org.apache.cayenne.swing.BindingBuilder;
+import org.apache.cayenne.swing.ImageRendererColumn;
+import org.apache.cayenne.swing.ObjectBinding;
+import org.apache.cayenne.swing.TableBindingBuilder;
+
+import javax.swing.*;
+import java.awt.*;
+
+public class ClassesTabController extends CayenneController {
+
+ public static final String GENERATE_PROPERTY = "generate";
+
+ protected ClassesTabPanel view;
+ protected ObjectBinding tableBinding;
+
+ public ClassesTabController(CodeGeneratorControllerBase parent) {
+ super(parent);
+
+ this.view = new ClassesTabPanel();
+ }
+
+ public void startup(DataMap dataMap){
+ initBindings();
+ }
+
+ protected CodeGeneratorControllerBase getParentController() {
+ return (CodeGeneratorControllerBase) getParent();
+ }
+
+ public Component getView() {
+ return view;
+ }
+
+ protected void initBindings() {
+
+ BindingBuilder builder = new BindingBuilder(
+ getApplication().getBindingFactory(),
+ this);
+
+ builder.bindToAction(view.getCheckAll(), "checkAllAction()");
+
+ TableBindingBuilder tableBuilder = new TableBindingBuilder(builder);
+
+ tableBuilder.addColumn(
+ "",
+ "parent.setCurrentClass(#item), selected",
+ Boolean.class,
+ true,
+ Boolean.TRUE);
+ tableBuilder.addColumn(
+ "Class",
+ "parent.getItemName(#item)",
+ JLabel.class,
+ false,
+ "XXXXXXXXXXXXXX");
+
+ tableBuilder.addColumn(
+ "Comments, Warnings",
+ "parent.getProblem(#item)",
+ String.class,
+ false,
+ "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
+
+ this.tableBinding = tableBuilder.bindToTable(view.getTable(), "parent.classes");
+ view.getTable().getColumnModel().getColumn(1).setCellRenderer(new ImageRendererColumn());
+ }
+
+ public boolean isSelected() {
+ return getParentController().isSelected();
+ }
+
+ public void setSelected(boolean selected) {
+ getParentController().setSelected(selected);
+ classSelectedAction();
+ }
+
+ /**
+ * A callback action that updates the state of Select All checkbox.
+ */
+ public void classSelectedAction() {
+ int selectedCount = getParentController().getSelectedEntitiesSize() + getParentController().getSelectedEmbeddablesSize() ;
+
+ if (selectedCount == 0) {
+ view.getCheckAll().setSelected(false);
+ }
+ else if (selectedCount == getParentController().getClasses().size()) {
+ view.getCheckAll().setSelected(true);
+ }
+ }
+
+ /**
+ * An action that updates entity check boxes in response to the Select All state
+ * change.
+ */
+ public void checkAllAction() {
+ if (getParentController().updateSelection(view.getCheckAll().isSelected() ? o -> true : o -> false)) {
+ tableBinding.updateView();
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/8119ffaa/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
new file mode 100644
index 0000000..e4fc20c
--- /dev/null
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/ClassesTabPanel.java
@@ -0,0 +1,84 @@
+/*****************************************************************
+ * 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 javax.swing.*;
+import java.awt.*;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
+
+/**
+ */
+public class ClassesTabPanel extends JPanel {
+
+ protected JTable table;
+ protected JCheckBox checkAll;
+ protected JLabel checkAllLabel;
+
+ public ClassesTabPanel() {
+
+ this.table = new JTable();
+ this.table.setRowHeight(22);
+
+ // TODO: andrus 04/07/2006 - is there an easy way to stick that checkbox in the
+ // table header????
+ this.checkAll = new JCheckBox();
+ this.checkAllLabel = new JLabel("Check All Classes");
+
+ checkAll.addItemListener(new ItemListener() {
+
+ public void itemStateChanged(ItemEvent event) {
+ if (checkAll.isSelected()) {
+ checkAllLabel.setText("Uncheck All Classess");
+ }
+ else {
+ checkAllLabel.setText("Check All Classes");
+ }
+ }
+ });
+
+ // assemble
+ JPanel topPanel = new JPanel(new FlowLayout(FlowLayout.LEADING));
+ topPanel.setBorder(UIManager.getBorder("ToolBar.border"));
+ topPanel.add(checkAll);
+ topPanel.add(checkAllLabel);
+
+ JScrollPane tablePanel = new JScrollPane(
+ table,
+ ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
+ ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
+
+ // set some minimal preferred size, so that it is smaller than other forms used in
+ // the dialog... this way we get the right automated overall size
+ tablePanel.setPreferredSize(new Dimension(300, 200));
+
+ setLayout(new BorderLayout());
+ add(topPanel, BorderLayout.NORTH);
+ add(tablePanel, BorderLayout.CENTER);
+ }
+
+ public JTable getTable() {
+ return table;
+ }
+
+ public JCheckBox getCheckAll() {
+ return checkAll;
+ }
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/8119ffaa/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
new file mode 100644
index 0000000..8163acb
--- /dev/null
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CodeGeneratorController.java
@@ -0,0 +1,146 @@
+/*****************************************************************
+ * 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.modeler.ProjectController;
+import org.apache.cayenne.modeler.dialog.ErrorDebugDialog;
+import org.apache.cayenne.modeler.util.CayenneController;
+import org.apache.cayenne.swing.BindingBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.swing.*;
+import java.awt.*;
+import java.util.Collection;
+import java.util.function.Predicate;
+
+/**
+ * A controller for the class generator dialog.
+ */
+public class CodeGeneratorController extends CodeGeneratorControllerBase {
+ /**
+ * Logger to print stack traces
+ */
+ private static Logger logObj = LoggerFactory.getLogger(ErrorDebugDialog.class);
+
+ protected CodeGeneratorPane view;
+
+ protected ClassesTabController classesSelector;
+ protected GeneratorTabController generatorSelector;
+
+ 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();
+ }
+
+ private void initListeners(){
+ projectController.addDataMapDisplayListener(e -> {
+ super.startup(e.getDataMap());
+ classesSelector.startup(e.getDataMap());
+ generatorSelector.startup(e.getDataMap());
+ });
+ }
+
+ @Override
+ public Component getView() {
+ return view;
+ }
+
+ protected void initBindings() {
+ BindingBuilder builder = new BindingBuilder(
+ getApplication().getBindingFactory(),
+ this);
+
+ builder.bindToAction(view.getGenerateButton(), "generateAction()");
+ builder.bindToAction(this, "classesSelectedAction()", SELECTED_PROPERTY);
+ builder.bindToAction(generatorSelector, "generatorSelectedAction()",
+ GeneratorTabController.GENERATOR_PROPERTY);
+
+ generatorSelectedAction();
+ }
+
+ public void generatorSelectedAction() {
+ GeneratorController controller = generatorSelector.getGeneratorController();
+ validate(controller);
+
+ Predicate<Object> predicate = controller != null
+ ? controller.getDefaultClassFilter()
+ : o -> false;
+
+ updateSelection(predicate);
+ classesSelector.classSelectedAction();
+ }
+
+ public void classesSelectedAction() {
+ int size = getSelectedEntitiesSize();
+ String label;
+
+ if (size == 0) {
+ label = "No entities selected";
+ }
+ else if (size == 1) {
+ label = "One entity selected";
+ }
+ else {
+ label = size + " entities selected";
+ }
+
+ label = label.concat("; ");
+
+ int sizeEmb = getSelectedEmbeddablesSize();
+
+ if (sizeEmb == 0) {
+ label = label + "No embeddables selected";
+ }
+ else if (sizeEmb == 1) {
+ label = label + "One embeddable selected";
+ }
+ else {
+ label =label + sizeEmb + " embeddables selected";
+ }
+
+ view.getClassesCount().setText(label);
+ }
+
+ public void generateAction() {
+ Collection<ClassGenerationAction> generators = generatorSelector.getGenerator();
+
+ if (generators != null) {
+ try {
+ for (ClassGenerationAction generator : generators) {
+ generator.execute();
+ }
+ JOptionPane.showMessageDialog(
+ getView(),
+ "Class generation finished");
+ } catch (Exception e) {
+ logObj.error("Error generating classes", e);
+ JOptionPane.showMessageDialog(
+ getView(),
+ "Error generating classes - " + e.getMessage());
+ }
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/8119ffaa/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
new file mode 100644
index 0000000..17196fa
--- /dev/null
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CodeGeneratorControllerBase.java
@@ -0,0 +1,289 @@
+/*****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ ****************************************************************/
+
+package org.apache.cayenne.modeler.editor.cgen;
+
+import org.apache.cayenne.map.DataMap;
+import org.apache.cayenne.map.Embeddable;
+import org.apache.cayenne.map.ObjEntity;
+import org.apache.cayenne.modeler.ProjectController;
+import org.apache.cayenne.modeler.util.CayenneController;
+import org.apache.cayenne.modeler.util.CellRenderers;
+import org.apache.cayenne.validation.ValidationFailure;
+import org.apache.cayenne.validation.ValidationResult;
+
+import javax.swing.*;
+import java.awt.*;
+import java.util.*;
+import java.util.List;
+import java.util.function.Predicate;
+
+/**
+ * A base superclass of a top controller for the code generator. Defines all common model
+ * parts used in class generation.
+ *
+ */
+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;
+
+ 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<>();
+ }
+
+ public void startup(DataMap dataMap){
+ this.dataMap = dataMap;
+ classes.clear();
+ this.classes.addAll(dataMap.getObjEntities());
+ this.classes.addAll(dataMap.getEmbeddables());
+ }
+
+ public List<Object> getClasses() {
+ return classes;
+ }
+
+ public abstract Component getView();
+
+ public void validate(GeneratorController validator) {
+
+ ValidationResult validationBuffer = new ValidationResult();
+
+ if (validator != null) {
+ for (Object classObj : classes) {
+ if (classObj instanceof ObjEntity) {
+ validator.validateEntity(
+ validationBuffer,
+ (ObjEntity) classObj,
+ false);
+ }
+ else if (classObj instanceof Embeddable) {
+ validator.validateEmbeddable(validationBuffer, (Embeddable) classObj);
+ }
+ }
+
+ }
+
+ this.validation = validationBuffer;
+ }
+
+ public boolean updateSelection(Predicate<Object> predicate) {
+
+ boolean modified = false;
+
+ for (Object classObj : classes) {
+ boolean select = predicate.test(classObj);
+ if (classObj instanceof ObjEntity) {
+
+ if (select) {
+ if (selectedEntities.add(((ObjEntity) classObj).getName())) {
+ modified = true;
+ }
+ }
+ else {
+ if (selectedEntities.remove(((ObjEntity) classObj).getName())) {
+ modified = true;
+ }
+ }
+ }
+ else if (classObj instanceof Embeddable) {
+ if (select) {
+ if (selectedEmbeddables.add(((Embeddable) classObj).getClassName())) {
+ modified = true;
+ }
+ }
+ else {
+ if (selectedEmbeddables
+ .remove(((Embeddable) classObj).getClassName())) {
+ modified = true;
+ }
+ }
+ }
+
+ }
+
+ if (modified) {
+ firePropertyChange(SELECTED_PROPERTY, null, null);
+ }
+
+ return modified;
+ }
+
+ public List<Embeddable> getSelectedEmbeddables() {
+
+ List<Embeddable> selected = new ArrayList<>(selectedEmbeddables.size());
+
+ for (Object classObj : classes) {
+ if (classObj instanceof Embeddable
+ && selectedEmbeddables.contains(((Embeddable) classObj)
+ .getClassName())) {
+ selected.add((Embeddable) classObj);
+ }
+ }
+
+ return selected;
+ }
+
+ public List<ObjEntity> getSelectedEntities() {
+ List<ObjEntity> selected = new ArrayList<>(selectedEntities.size());
+ for (Object classObj : classes) {
+ if (classObj instanceof ObjEntity
+ && selectedEntities.contains(((ObjEntity) classObj).getName())) {
+ selected.add(((ObjEntity) classObj));
+ }
+ }
+
+ return selected;
+ }
+
+ public int getSelectedEntitiesSize() {
+ return selectedEntities.size();
+ }
+
+ public int getSelectedEmbeddablesSize() {
+ return selectedEmbeddables.size();
+ }
+
+ /**
+ * Returns the first encountered validation problem for an antity matching the name or
+ * null if the entity is valid or the entity is not present.
+ */
+ public String getProblem(Object obj) {
+
+ String name = null;
+
+ if (obj instanceof ObjEntity) {
+ name = ((ObjEntity) obj).getName();
+ }
+ else if (obj instanceof Embeddable) {
+ name = ((Embeddable) obj).getClassName();
+ }
+
+ if (validation == null) {
+ return null;
+ }
+
+ List failures = validation.getFailures(name);
+ if (failures.isEmpty()) {
+ return null;
+ }
+
+ return ((ValidationFailure) failures.get(0)).getDescription();
+ }
+
+ public boolean isSelected() {
+ if (currentClass instanceof ObjEntity) {
+ return selectedEntities
+ .contains(((ObjEntity) currentClass).getName());
+ }
+ if (currentClass instanceof Embeddable) {
+ return selectedEmbeddables
+ .contains(((Embeddable) currentClass).getClassName());
+ }
+ return false;
+
+ }
+
+ public void setSelected(boolean selectedFlag) {
+ if (currentClass == null) {
+ return;
+ }
+ if (currentClass instanceof ObjEntity) {
+ if (selectedFlag) {
+ if (selectedEntities.add(((ObjEntity) currentClass).getName())) {
+ firePropertyChange(SELECTED_PROPERTY, null, null);
+ }
+ }
+ else {
+ if (selectedEntities.remove(((ObjEntity) currentClass).getName())) {
+ firePropertyChange(SELECTED_PROPERTY, null, null);
+ }
+ }
+ }
+ if (currentClass instanceof Embeddable) {
+ if (selectedFlag) {
+ if (selectedEmbeddables.add(((Embeddable) currentClass).getClassName())) {
+ firePropertyChange(SELECTED_PROPERTY, null, null);
+ }
+ }
+ else {
+ if (selectedEmbeddables
+ .remove(((Embeddable) currentClass).getClassName())) {
+ firePropertyChange(SELECTED_PROPERTY, null, null);
+ }
+ }
+ }
+ }
+
+ public Object getCurrentClass() {
+ return currentClass;
+ }
+
+ public void setCurrentClass(Object currentClass) {
+ this.currentClass = currentClass;
+ }
+
+ public Collection<DataMap> getDataMaps() {
+ return dataMaps;
+ }
+
+ public JLabel getItemName(Object obj) {
+ String className;
+ Icon icon;
+ if (obj instanceof Embeddable) {
+ className = ((Embeddable) obj).getClassName();
+ icon = CellRenderers.iconForObject(new Embeddable());
+ } else {
+ className = ((ObjEntity) obj).getName();
+ icon = CellRenderers.iconForObject(new ObjEntity());
+ }
+ JLabel labelIcon = new JLabel();
+ labelIcon.setIcon(icon);
+ labelIcon.setVisible(true);
+ labelIcon.setText(className);
+ return labelIcon;
+ }
+
+ public DataMap getDataMap() {
+ return dataMap;
+ }
+
+ public ProjectController getProjectController() {
+ return projectController;
+ }
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/8119ffaa/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
new file mode 100644
index 0000000..334931a
--- /dev/null
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CodeGeneratorPane.java
@@ -0,0 +1,76 @@
+/*****************************************************************
+ * 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.swing.components.TopBorder;
+
+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));
+
+ JScrollPane scrollPane = new JScrollPane(
+ generatorPanel,
+ ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
+ ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+ scrollPane.setPreferredSize(new Dimension(800, 400));
+
+ // assemble
+ 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/8119ffaa/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
new file mode 100644
index 0000000..8f4dac9
--- /dev/null
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CustomModeController.java
@@ -0,0 +1,238 @@
+/*****************************************************************
+ * 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.map.DataMap;
+import org.apache.cayenne.modeler.CodeTemplateManager;
+import org.apache.cayenne.modeler.dialog.pref.PreferenceDialog;
+import org.apache.cayenne.modeler.pref.DataMapDefaults;
+import org.apache.cayenne.swing.BindingBuilder;
+import org.apache.cayenne.swing.ObjectBinding;
+import org.apache.cayenne.util.Util;
+
+import javax.swing.*;
+import java.awt.*;
+import java.util.*;
+import java.util.List;
+
+/**
+ * A controller for the custom generation mode.
+ */
+public class CustomModeController extends GeneratorController {
+
+ // correspond to non-public constants on MapClassGenerator.
+ static final String MODE_DATAMAP = "datamap";
+ static final String MODE_ENTITY = "entity";
+ static final String MODE_ALL = "all";
+
+ static final String DATA_MAP_MODE_LABEL = "DataMap generation";
+ static final String ENTITY_MODE_LABEL = "Entity and Embeddable generation";
+ static final String ALL_MODE_LABEL = "Generate all";
+
+ static final Map<String, String> modesByLabel = new HashMap<>();
+
+ static {
+ modesByLabel.put(DATA_MAP_MODE_LABEL, MODE_DATAMAP);
+ modesByLabel.put(ENTITY_MODE_LABEL, MODE_ENTITY);
+ modesByLabel.put(ALL_MODE_LABEL, MODE_ALL);
+ }
+
+ protected CustomModePanel view;
+ protected CodeTemplateManager templateManager;
+
+ protected ObjectBinding superTemplate;
+ protected ObjectBinding subTemplate;
+
+ private BindingBuilder builder;
+
+ private CustomPreferencesUpdater preferencesUpdater;
+
+ public CustomPreferencesUpdater getCustomPreferencesUpdater() {
+ return preferencesUpdater;
+ }
+
+ public CustomModeController(CodeGeneratorControllerBase parent) {
+ super(parent);
+ this.view = new CustomModePanel();
+ bind();
+ }
+
+ private void bind() {
+ initBindings(new BindingBuilder(getApplication().getBindingFactory(), this));
+ builder = new BindingBuilder(getApplication().getBindingFactory(), this);
+ builder.bindToAction(view.getManageTemplatesLink(), "popPreferencesAction()");
+
+ Object[] modeChoices = new Object[]{ENTITY_MODE_LABEL, DATA_MAP_MODE_LABEL, ALL_MODE_LABEL};
+ view.getGenerationMode().setModel(new DefaultComboBoxModel(modeChoices));
+ }
+
+ public void startup(DataMap dataMap) {
+ super.startup(dataMap);
+
+ // bind preferences and init defaults...
+ DataMapDefaults dataMapDefaults = getMapPreferences().get(getParentController().getDataMap());
+
+ if (Util.isEmptyString(dataMapDefaults.getSuperclassTemplate())) {
+ dataMapDefaults.setSuperclassTemplate(CodeTemplateManager.STANDARD_SERVER_SUPERCLASS);
+ }
+
+ if (Util.isEmptyString(dataMapDefaults.getSubclassTemplate())) {
+ dataMapDefaults.setSubclassTemplate(CodeTemplateManager.STANDARD_SERVER_SUBCLASS);
+ }
+
+ if (Util.isEmptyString(dataMapDefaults.getProperty("mode"))) {
+ dataMapDefaults.setProperty("mode", MODE_ENTITY);
+ }
+
+ if (Util.isEmptyString(dataMapDefaults.getProperty("overwrite"))) {
+ dataMapDefaults.setBooleanProperty("overwrite", false);
+ }
+
+ if (Util.isEmptyString(dataMapDefaults.getProperty("pairs"))) {
+ dataMapDefaults.setBooleanProperty("pairs", true);
+ }
+
+ if (Util.isEmptyString(dataMapDefaults.getProperty("usePackagePath"))) {
+ dataMapDefaults.setBooleanProperty("usePackagePath", true);
+ }
+
+ if (Util.isEmptyString(dataMapDefaults.getProperty("outputPattern"))) {
+ dataMapDefaults.setProperty("outputPattern", "*.java");
+ }
+
+ builder.bindToComboSelection(view.getGenerationMode(), "customPreferencesUpdater.mode").updateView();
+
+ builder.bindToStateChange(view.getOverwrite(), "customPreferencesUpdater.overwrite").updateView();
+
+ builder.bindToStateChange(view.getPairs(), "customPreferencesUpdater.pairs").updateView();
+
+ builder.bindToStateChange(view.getUsePackagePath(), "customPreferencesUpdater.usePackagePath").updateView();
+
+ subTemplate = builder.bindToComboSelection(view.getSubclassTemplate(),
+ "customPreferencesUpdater.subclassTemplate");
+
+ superTemplate = builder.bindToComboSelection(view.getSuperclassTemplate(),
+ "customPreferencesUpdater.superclassTemplate");
+
+ builder.bindToTextField(view.getOutputPattern(), "customPreferencesUpdater.outputPattern").updateView();
+
+ builder.bindToStateChange(view.getCreatePropertyNames(), "customPreferencesUpdater.createPropertyNames")
+ .updateView();
+
+ updateTemplates();
+ }
+
+ protected void createDefaults() {
+ TreeMap<DataMap, DataMapDefaults> map = new TreeMap<>();
+ DataMap dataMap = getParentController().getDataMap();
+ DataMapDefaults preferences;
+ preferences = getApplication().getFrameController().getProjectController()
+ .getDataMapPreferences(this.getClass().getName().replace(".", "/"), dataMap);
+ preferences.setSuperclassPackage("");
+ preferences.updateSuperclassPackage(dataMap, false);
+
+ map.put(dataMap, preferences);
+
+ if (getOutputPath() == null) {
+ setOutputPath(preferences.getOutputPath());
+ }
+
+ setMapPreferences(map);
+ preferencesUpdater = new CustomPreferencesUpdater(map);
+ }
+
+ protected GeneratorControllerPanel createView() {
+ if (getParentController().getDataMap() != view.getStandardPanelComponent().getDataMap()) {
+ DataMapDefaults dataMapDefaults = getMapPreferences().get(getParentController().getDataMap());
+ view.getStandardPanelComponent().setDataMap(getParentController().getDataMap());
+ view.getStandardPanelComponent().setPreferences(dataMapDefaults);
+ view.getStandardPanelComponent().getDataMapName().setText(view.getStandardPanelComponent().getDataMap().getName());
+ BindingBuilder builder = new BindingBuilder(getApplication().getBindingFactory(), view.getStandardPanelComponent());
+ builder.bindToTextField(view.getStandardPanelComponent().getSuperclassPackage(), "preferences.superclassPackage").updateView();
+ }
+ return view;
+ }
+
+ protected void updateTemplates() {
+ this.templateManager = getApplication().getCodeTemplateManager();
+
+ List<String> customTemplates = new ArrayList<>(templateManager.getCustomTemplates().keySet());
+ Collections.sort(customTemplates);
+
+ List<String> superTemplates = new ArrayList<>(templateManager.getStandardSuperclassTemplates());
+ Collections.sort(superTemplates);
+ superTemplates.addAll(customTemplates);
+
+ List<String> subTemplates = new ArrayList<>(templateManager.getStandardSubclassTemplates());
+ Collections.sort(subTemplates);
+ subTemplates.addAll(customTemplates);
+
+ this.view.getSubclassTemplate().setModel(new DefaultComboBoxModel(subTemplates.toArray()));
+ this.view.getSuperclassTemplate().setModel(new DefaultComboBoxModel(superTemplates.toArray()));
+
+ superTemplate.updateView();
+ subTemplate.updateView();
+ }
+
+ public Component getView() {
+ return view;
+ }
+
+ public Collection<ClassGenerationAction> createGenerator() {
+
+ mode = modesByLabel.get(view.getGenerationMode().getSelectedItem()).toString();
+
+ Collection<ClassGenerationAction> generators = super.createGenerator();
+
+ String superKey = view.getSuperclassTemplate().getSelectedItem().toString();
+ String superTemplate = templateManager.getTemplatePath(superKey);
+
+ String subKey = view.getSubclassTemplate().getSelectedItem().toString();
+ String subTemplate = templateManager.getTemplatePath(subKey);
+
+ for (ClassGenerationAction generator : generators) {
+ generator.setSuperTemplate(superTemplate);
+ generator.setTemplate(subTemplate);
+ generator.setOverwrite(view.getOverwrite().isSelected());
+ generator.setUsePkgPath(view.getUsePackagePath().isSelected());
+ generator.setMakePairs(view.getPairs().isSelected());
+ generator.setCreatePropertyNames(view.getCreatePropertyNames().isSelected());
+
+ if (!Util.isEmptyString(view.getOutputPattern().getText())) {
+ generator.setOutputPattern(view.getOutputPattern().getText());
+ }
+ }
+
+ return generators;
+ }
+
+ public void popPreferencesAction() {
+ new PreferenceDialog(getApplication().getFrameController()).startupAction(PreferenceDialog.TEMPLATES_KEY);
+ updateTemplates();
+ }
+
+ @Override
+ protected ClassGenerationAction newGenerator() {
+ ClassGenerationAction action = new ClassGenerationAction();
+ getApplication().getInjector().injectMembers(action);
+ return action;
+ }
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/8119ffaa/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
new file mode 100644
index 0000000..538ff64
--- /dev/null
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CustomModePanel.java
@@ -0,0 +1,189 @@
+/*****************************************************************
+ * 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 com.jgoodies.forms.builder.DefaultFormBuilder;
+import com.jgoodies.forms.layout.FormLayout;
+import org.apache.cayenne.swing.control.ActionLink;
+
+import javax.swing.*;
+import java.awt.*;
+
+public class CustomModePanel extends GeneratorControllerPanel {
+
+ protected JComboBox generationMode;
+ protected JComboBox subclassTemplate;
+ protected JComboBox superclassTemplate;
+ protected JCheckBox pairs;
+ protected JCheckBox overwrite;
+ protected JCheckBox usePackagePath;
+ protected JTextField outputPattern;
+ protected JCheckBox createPropertyNames;
+
+ private JTextField additionalMaps;
+ private JButton selectAdditionalMaps;
+ private JCheckBox client;
+ private JTextField encoding;
+ private JComboBox embeddableTemplate;
+ private JComboBox embeddableSuperTemplate;
+ private JLabel dataMapName;
+
+ private DefaultFormBuilder builder;
+
+ protected ActionLink manageTemplatesLink;
+
+ private StandardPanelComponent standardPanelComponent;
+
+ public CustomModePanel() {
+
+ this.generationMode = new JComboBox();
+ this.superclassTemplate = new JComboBox();
+ this.subclassTemplate = new JComboBox();
+ this.pairs = new JCheckBox();
+ this.overwrite = new JCheckBox();
+ this.usePackagePath = new JCheckBox();
+ this.outputPattern = new JTextField();
+ this.createPropertyNames = new JCheckBox();
+ this.manageTemplatesLink = new ActionLink("Customize Templates...");
+ manageTemplatesLink.setFont(manageTemplatesLink.getFont().deriveFont(10f));
+
+ this.standardPanelComponent = new StandardPanelComponent();
+
+ this.additionalMaps = new JTextField();
+ this.selectAdditionalMaps = new JButton("Select");
+ this.client = new JCheckBox();
+ this.encoding = new JTextField();
+ this.embeddableTemplate = new JComboBox();
+ this.embeddableSuperTemplate = new JComboBox();
+ this.dataMapName = new JLabel();
+ this.dataMapName.setFont(dataMapName.getFont().deriveFont(1));
+
+ pairs.addChangeListener(e -> {
+ superclassTemplate.setEnabled(pairs.isSelected());
+ overwrite.setEnabled(!pairs.isSelected());
+ });
+
+ // assemble
+
+ FormLayout layout = new FormLayout(
+ "right:77dlu, 3dlu, fill:200:grow, 6dlu, fill:50dlu, 3dlu", "");
+ builder = new DefaultFormBuilder(layout);
+ builder.setDefaultDialogBorder();
+
+ builder.append("Output Directory:", outputFolder, selectOutputFolder);
+ builder.nextLine();
+
+ builder.append("Additional DataMaps", additionalMaps, selectAdditionalMaps);
+ builder.nextLine();
+
+ builder.append("Generation Mode:", generationMode);
+ builder.nextLine();
+
+ builder.append("Subclass Template:", subclassTemplate);
+ builder.nextLine();
+
+ builder.append("Superclass Template:", superclassTemplate);
+ builder.nextLine();
+
+ builder.append("Embeddable Template", embeddableTemplate);
+ builder.nextLine();
+
+ builder.append("Embeddable Super Template", embeddableSuperTemplate);
+ builder.nextLine();
+
+ builder.append("Output Pattern:", outputPattern);
+ builder.nextLine();
+
+ builder.append("Encoding", encoding);
+ builder.nextLine();
+
+ builder.append("Make Pairs:", pairs);
+ builder.nextLine();
+
+ builder.append("Use Package Path:", usePackagePath);
+ builder.nextLine();
+
+ builder.append("Overwrite Subclasses:", overwrite);
+ builder.nextLine();
+
+ builder.append("Create Property Names:", createPropertyNames);
+ builder.nextLine();
+
+ builder.append("Client", client);
+ builder.nextLine();
+
+ builder.append(standardPanelComponent, 4);
+
+ setLayout(new BorderLayout());
+ add(builder.getPanel(), BorderLayout.CENTER);
+
+ JPanel links = new JPanel(new FlowLayout(FlowLayout.TRAILING));
+ links.add(manageTemplatesLink);
+ add(links, BorderLayout.SOUTH);
+
+ add(builder.getPanel(), BorderLayout.CENTER);
+ }
+
+ public void addDataMapLine(StandardPanelComponent dataMapLine) {
+ dataMapLines.add(dataMapLine);
+ builder.append(dataMapLine, 4);
+ builder.nextLine();
+ }
+
+ public JComboBox getGenerationMode() {
+ return generationMode;
+ }
+
+ public ActionLink getManageTemplatesLink() {
+ return manageTemplatesLink;
+ }
+
+ public JComboBox getSubclassTemplate() {
+ return subclassTemplate;
+ }
+
+ public JComboBox getSuperclassTemplate() {
+ return superclassTemplate;
+ }
+
+ public JCheckBox getOverwrite() {
+ return overwrite;
+ }
+
+ public JCheckBox getPairs() {
+ return pairs;
+ }
+
+ public JCheckBox getUsePackagePath() {
+ return usePackagePath;
+ }
+
+ public JTextField getOutputPattern() {
+ return outputPattern;
+ }
+
+ public JCheckBox getCreatePropertyNames() {
+ return createPropertyNames;
+ }
+
+ public StandardPanelComponent getStandardPanelComponent() {
+ return standardPanelComponent;
+ }
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/8119ffaa/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CustomPreferencesUpdater.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CustomPreferencesUpdater.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CustomPreferencesUpdater.java
new file mode 100644
index 0000000..469e594
--- /dev/null
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CustomPreferencesUpdater.java
@@ -0,0 +1,193 @@
+/*****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ ****************************************************************/
+
+package org.apache.cayenne.modeler.editor.cgen;
+
+import org.apache.cayenne.map.DataMap;
+import org.apache.cayenne.modeler.pref.DataMapDefaults;
+
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+
+public class CustomPreferencesUpdater {
+
+ enum Property {
+ SUBCLASS_TEMPLATE,
+ SUPERCLASS_TEMPLATE,
+ OVERWRITE,
+ PAIRS,
+ USE_PACKAGE_PATH,
+ MODE,
+ OUTPUT_PATTERN,
+ CREATE_PROPERTY_NAMES
+ }
+
+ private static final String OVERWRITE = "overwrite";
+ private static final String PAIRS = "pairs";
+ private static final String USE_PACKAGE_PATH = "usePackagePath";
+ private static final String MODE = "mode";
+ private static final String OUTPUT_PATTERN = "outputPattern";
+ private static final String CREATE_PROPERTY_NAMES = "createPropertyNames";
+
+ private Map<DataMap, DataMapDefaults> mapPreferences;
+
+
+ public CustomPreferencesUpdater(Map<DataMap, DataMapDefaults> mapPreferences) {
+ this.mapPreferences = mapPreferences;
+ }
+
+ public String getMode() {
+ return (String) getProperty(Property.MODE);
+ }
+
+ public void setMode(String mode) {
+ updatePreferences(Property.MODE, mode);
+ }
+
+ public String getSubclassTemplate() {
+ return (String) getProperty(Property.SUBCLASS_TEMPLATE);
+ }
+
+ public void setSubclassTemplate(String subclassTemplate) {
+ updatePreferences(Property.SUBCLASS_TEMPLATE, subclassTemplate);
+ }
+
+ public String getSuperclassTemplate() {
+ return (String) getProperty(Property.SUPERCLASS_TEMPLATE);
+ }
+
+ public void setSuperclassTemplate(String superclassTemplate) {
+ updatePreferences(Property.SUPERCLASS_TEMPLATE, superclassTemplate);
+ }
+
+ public Boolean getOverwrite() {
+ return (Boolean) getProperty(Property.OVERWRITE);
+ }
+
+ public void setOverwrite(Boolean overwrite) {
+ updatePreferences(Property.OVERWRITE, overwrite);
+ }
+
+ public Boolean getPairs() {
+ return (Boolean) getProperty(Property.PAIRS);
+ }
+
+ public void setPairs(Boolean pairs) {
+ updatePreferences(Property.PAIRS, pairs);
+ }
+
+ public Boolean getUsePackagePath() {
+ return (Boolean) getProperty(Property.USE_PACKAGE_PATH);
+ }
+
+ public void setUsePackagePath(Boolean usePackagePath) {
+ updatePreferences(Property.USE_PACKAGE_PATH, usePackagePath);
+ }
+
+ public String getOutputPattern() {
+ return (String) getProperty(Property.OUTPUT_PATTERN);
+ }
+
+ public void setOutputPattern(String outputPattern) {
+ updatePreferences(Property.OUTPUT_PATTERN, outputPattern);
+ }
+
+ public Boolean getCreatePropertyNames() {
+ return (Boolean) getProperty(Property.CREATE_PROPERTY_NAMES);
+ }
+
+ public void setCreatePropertyNames(Boolean createPropertyNames) {
+ updatePreferences(Property.CREATE_PROPERTY_NAMES, createPropertyNames);
+ }
+
+ private Object getProperty(Property property) {
+ Object obj = null;
+
+ Set<Entry<DataMap, DataMapDefaults>> entities = mapPreferences.entrySet();
+ for (Entry<DataMap, DataMapDefaults> entry : entities) {
+
+ switch (property) {
+ case MODE:
+ obj = entry.getValue().getProperty(MODE);
+ break;
+ case OUTPUT_PATTERN:
+ obj = entry.getValue().getProperty(OUTPUT_PATTERN);
+ break;
+ case SUBCLASS_TEMPLATE:
+ obj = entry.getValue().getSubclassTemplate();
+ break;
+ case SUPERCLASS_TEMPLATE:
+ obj = entry.getValue().getSuperclassTemplate();
+ break;
+ case OVERWRITE:
+ obj = entry.getValue().getBooleanProperty(OVERWRITE);
+ break;
+ case PAIRS:
+ obj = entry.getValue().getBooleanProperty(PAIRS);
+ break;
+ case USE_PACKAGE_PATH:
+ obj = entry.getValue().getBooleanProperty(USE_PACKAGE_PATH);
+ break;
+ case CREATE_PROPERTY_NAMES:
+ obj = entry.getValue().getBooleanProperty(CREATE_PROPERTY_NAMES);
+ break;
+ default:
+ throw new IllegalArgumentException("Bad type property: " + property);
+ }
+
+ }
+ return obj;
+ }
+
+ private void updatePreferences(Property property, Object value) {
+ Set<Entry<DataMap, DataMapDefaults>> entities = mapPreferences.entrySet();
+ for (Entry<DataMap, DataMapDefaults> entry : entities) {
+
+ switch (property) {
+ case MODE:
+ entry.getValue().setProperty(MODE, (String) value);
+ break;
+ case OUTPUT_PATTERN:
+ entry.getValue().setProperty(OUTPUT_PATTERN, (String) value);
+ break;
+ case SUBCLASS_TEMPLATE:
+ entry.getValue().setSubclassTemplate((String) value);
+ break;
+ case SUPERCLASS_TEMPLATE:
+ entry.getValue().setSuperclassTemplate((String) value);
+ break;
+ case OVERWRITE:
+ entry.getValue().setBooleanProperty(OVERWRITE, (Boolean) value);
+ break;
+ case PAIRS:
+ entry.getValue().setBooleanProperty(PAIRS, (Boolean) value);
+ break;
+ case USE_PACKAGE_PATH:
+ entry.getValue().setBooleanProperty(USE_PACKAGE_PATH, (Boolean) value);
+ break;
+ case CREATE_PROPERTY_NAMES:
+ entry.getValue().setBooleanProperty(CREATE_PROPERTY_NAMES, (Boolean) value);
+ break;
+ default:
+ throw new IllegalArgumentException("Bad type property: " + property);
+ }
+ }
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cayenne/blob/8119ffaa/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
new file mode 100644
index 0000000..9370e3b
--- /dev/null
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorController.java
@@ -0,0 +1,568 @@
+/*****************************************************************
+ * 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.CayenneRuntimeException;
+import org.apache.cayenne.gen.ArtifactsGenerationMode;
+import org.apache.cayenne.gen.ClassGenerationAction;
+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;
+import org.apache.cayenne.swing.BindingBuilder;
+import org.apache.cayenne.util.Util;
+import org.apache.cayenne.validation.BeanValidationFailure;
+import org.apache.cayenne.validation.SimpleValidationFailure;
+import org.apache.cayenne.validation.ValidationFailure;
+import org.apache.cayenne.validation.ValidationResult;
+
+import javax.swing.*;
+import java.io.File;
+import java.util.*;
+import java.util.function.Predicate;
+import java.util.prefs.Preferences;
+
+/**
+ * A mode-specific part of the code generation dialog.
+ *
+ */
+public abstract class GeneratorController extends CayenneController {
+
+ protected String mode = ArtifactsGenerationMode.ALL.getLabel();
+ protected Map<DataMap, DataMapDefaults> mapPreferences;
+ private String outputPath;
+
+ public GeneratorController(CodeGeneratorControllerBase parent) {
+ super(parent);
+ }
+
+ public void startup(DataMap dataMap){
+ createDefaults();
+ createView();
+// initBindings(new BindingBuilder(getApplication().getBindingFactory(), this));
+ }
+
+ public String getOutputPath() {
+ return outputPath;
+ }
+
+ 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);
+ }
+ }
+
+ public void setMapPreferences(Map<DataMap, DataMapDefaults> mapPreferences) {
+ this.mapPreferences = mapPreferences;
+ }
+
+ public Map<DataMap, DataMapDefaults> getMapPreferences() {
+ return this.mapPreferences;
+ }
+
+ protected void initBindings(BindingBuilder bindingBuilder) {
+
+ initOutputFolder();
+
+ JTextField outputFolder = ((GeneratorControllerPanel) getView()).getOutputFolder();
+ JButton outputSelect = ((GeneratorControllerPanel) getView()).getSelectOutputFolder();
+
+ outputFolder.setText(getOutputPath());
+ bindingBuilder.bindToAction(outputSelect, "selectOutputFolderAction()");
+ bindingBuilder.bindToTextField(outputFolder, "outputPath");
+ }
+
+ protected CodeGeneratorControllerBase getParentController() {
+ return (CodeGeneratorControllerBase) getParent();
+ }
+
+ protected abstract GeneratorControllerPanel createView();
+
+ protected abstract void createDefaults();
+
+ /**
+ * Creates an appropriate subclass of {@link ClassGenerationAction},
+ * returning it in an unconfigured state. Configuration is performed by
+ * {@link #createGenerator()} method.
+ */
+ protected abstract ClassGenerationAction newGenerator();
+
+ /**
+ * Creates a class generator for provided selections.
+ */
+ public Collection<ClassGenerationAction> createGenerator() {
+
+ File outputDir = getOutputDir();
+
+ // no destination folder
+ if (outputDir == 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;
+ }
+
+ // not a directory
+ if (!outputDir.isDirectory()) {
+ JOptionPane.showMessageDialog(this.getView(), outputDir + " is not a valid directory.");
+ return null;
+ }
+
+ // remove generic entities...
+ Collection<ObjEntity> selectedEntities = new ArrayList<>(getParentController().getSelectedEntities());
+ selectedEntities.removeIf(ObjEntity::isGeneric);
+
+ Collection<ClassGenerationAction> generators = new ArrayList<>();
+ Collection<StandardPanelComponent> dataMapLines = ((GeneratorControllerPanel) getView()).getDataMapLines();
+ DataMap map = getParentController().getDataMap();
+ try {
+ ClassGenerationAction generator = newGenerator();
+ generator.setArtifactsGenerationMode(mode);
+ generator.setDataMap(map);
+
+ LinkedList<ObjEntity> objEntities = new LinkedList<>(map.getObjEntities());
+ objEntities.retainAll(selectedEntities);
+ generator.addEntities(objEntities);
+
+ LinkedList<Embeddable> embeddables = new LinkedList<>(map.getEmbeddables());
+ embeddables.retainAll(getParentController().getSelectedEmbeddables());
+ generator.addEmbeddables(embeddables);
+
+ generator.addQueries(map.getQueryDescriptors());
+
+ Preferences preferences = application.getPreferencesNode(GeneralPreferences.class, "");
+
+ if (preferences != null) {
+ generator.setEncoding(preferences.get(GeneralPreferences.ENCODING_PREFERENCE, null));
+ }
+
+ generator.setDestDir(outputDir);
+ generator.setMakePairs(true);
+ generator.setForce(true);
+
+ for (StandardPanelComponent dataMapLine : dataMapLines) {
+ if (dataMapLine.getDataMap() == map && !Util.isEmptyString(dataMapLine.getSuperclassPackage().getText())) {
+ generator.setSuperPkg(dataMapLine.getSuperclassPackage().getText());
+ break;
+ }
+ }
+
+ generators.add(generator);
+ } catch (CayenneRuntimeException exception) {
+ JOptionPane.showMessageDialog(this.getView(), exception.getUnlabeledMessage());
+ return null;
+ }
+
+
+ return generators;
+ }
+
+ public void validateEmbeddable(ValidationResult validationBuffer, Embeddable embeddable) {
+ ValidationFailure embeddableFailure = validateEmbeddable(embeddable);
+ if (embeddableFailure != null) {
+ validationBuffer.addFailure(embeddableFailure);
+ return;
+ }
+
+ for (EmbeddableAttribute attribute : embeddable.getAttributes()) {
+ ValidationFailure failure = validateEmbeddableAttribute(attribute);
+ if (failure != null) {
+ validationBuffer.addFailure(failure);
+ return;
+ }
+ }
+ }
+
+ private ValidationFailure validateEmbeddableAttribute(EmbeddableAttribute attribute) {
+ String name = attribute.getEmbeddable().getClassName();
+
+ ValidationFailure emptyName = BeanValidationFailure.validateNotEmpty(name, "attribute.name",
+ attribute.getName());
+ if (emptyName != null) {
+ return emptyName;
+ }
+
+ ValidationFailure badName = CodeValidationUtil.validateJavaIdentifier(name, "attribute.name",
+ attribute.getName());
+ if (badName != null) {
+ return badName;
+ }
+
+ ValidationFailure emptyType = BeanValidationFailure.validateNotEmpty(name, "attribute.type",
+ attribute.getType());
+ if (emptyType != null) {
+ return emptyType;
+ }
+
+ ValidationFailure badType = BeanValidationFailure.validateJavaClassName(name, "attribute.type",
+ attribute.getType());
+ if (badType != null) {
+ return badType;
+ }
+
+ return null;
+ }
+
+ protected ValidationFailure validateEmbeddable(Embeddable embeddable) {
+
+ String name = embeddable.getClassName();
+
+ ValidationFailure emptyClass = BeanValidationFailure.validateNotEmpty(name, "className",
+ embeddable.getClassName());
+ if (emptyClass != null) {
+ return emptyClass;
+ }
+
+ ValidationFailure badClass = BeanValidationFailure.validateJavaClassName(name, "className",
+ embeddable.getClassName());
+ if (badClass != null) {
+ return badClass;
+ }
+
+ return null;
+ }
+
+ public void validateEntity(ValidationResult validationBuffer, ObjEntity entity, boolean clientValidation) {
+
+ ValidationFailure entityFailure = validateEntity(clientValidation ? entity.getClientEntity() : entity);
+ if (entityFailure != null) {
+ validationBuffer.addFailure(entityFailure);
+ return;
+ }
+
+ for (ObjAttribute attribute : entity.getAttributes()) {
+ if (attribute instanceof EmbeddedAttribute) {
+ EmbeddedAttribute embeddedAttribute = (EmbeddedAttribute) attribute;
+ for (ObjAttribute subAttribute : embeddedAttribute.getAttributes()) {
+ ValidationFailure failure = validateEmbeddedAttribute(subAttribute);
+ if (failure != null) {
+ validationBuffer.addFailure(failure);
+ return;
+ }
+ }
+ } else {
+
+ ValidationFailure failure = validateAttribute(attribute);
+ if (failure != null) {
+ validationBuffer.addFailure(failure);
+ return;
+ }
+ }
+ }
+
+ for (ObjRelationship rel : entity.getRelationships()) {
+ ValidationFailure failure = validateRelationship(rel, clientValidation);
+ if (failure != null) {
+ validationBuffer.addFailure(failure);
+ return;
+ }
+ }
+ }
+
+ protected ValidationFailure validateEntity(ObjEntity entity) {
+
+ String name = entity.getName();
+
+ if (entity.isGeneric()) {
+ return new SimpleValidationFailure(name, "Generic class");
+ }
+
+ ValidationFailure emptyClass = BeanValidationFailure.validateNotEmpty(name, "className", entity.getClassName());
+ if (emptyClass != null) {
+ return emptyClass;
+ }
+
+ ValidationFailure badClass = BeanValidationFailure.validateJavaClassName(name, "className",
+ entity.getClassName());
+ if (badClass != null) {
+ return badClass;
+ }
+
+ if (entity.getSuperClassName() != null) {
+ ValidationFailure badSuperClass = BeanValidationFailure.validateJavaClassName(name, "superClassName",
+ entity.getSuperClassName());
+ if (badSuperClass != null) {
+ return badSuperClass;
+ }
+ }
+
+ return null;
+ }
+
+ protected ValidationFailure validateAttribute(ObjAttribute attribute) {
+
+ String name = attribute.getEntity().getName();
+
+ ValidationFailure emptyName = BeanValidationFailure.validateNotEmpty(name, "attribute.name",
+ attribute.getName());
+ if (emptyName != null) {
+ return emptyName;
+ }
+
+ ValidationFailure badName = CodeValidationUtil.validateJavaIdentifier(name, "attribute.name",
+ attribute.getName());
+ if (badName != null) {
+ return badName;
+ }
+
+ ValidationFailure emptyType = BeanValidationFailure.validateNotEmpty(name, "attribute.type",
+ attribute.getType());
+ if (emptyType != null) {
+ return emptyType;
+ }
+
+ ValidationFailure badType = BeanValidationFailure.validateJavaClassName(name, "attribute.type",
+ attribute.getType());
+ if (badType != null) {
+ return badType;
+ }
+
+ return null;
+ }
+
+ protected ValidationFailure validateEmbeddedAttribute(ObjAttribute attribute) {
+
+ String name = attribute.getEntity().getName();
+
+ // validate embeddedAttribute and attribute names
+ // embeddedAttribute returned attibute as
+ // [name_embeddedAttribute].[name_attribute]
+ String[] attributes = attribute.getName().split("\\.");
+ String nameEmbeddedAttribute = attributes[0];
+ int beginIndex = attributes[0].length();
+ String attr = attribute.getName().substring(beginIndex + 1);
+
+ ValidationFailure emptyEmbeddedName = BeanValidationFailure.validateNotEmpty(name, "attribute.name",
+ nameEmbeddedAttribute);
+ if (emptyEmbeddedName != null) {
+ return emptyEmbeddedName;
+ }
+
+ ValidationFailure badEmbeddedName = CodeValidationUtil.validateJavaIdentifier(name, "attribute.name",
+ nameEmbeddedAttribute);
+ if (badEmbeddedName != null) {
+ return badEmbeddedName;
+ }
+
+ ValidationFailure emptyName = BeanValidationFailure.validateNotEmpty(name, "attribute.name", attr);
+ if (emptyName != null) {
+ return emptyName;
+ }
+
+ ValidationFailure badName = CodeValidationUtil.validateJavaIdentifier(name, "attribute.name", attr);
+ if (badName != null) {
+ return badName;
+ }
+
+ ValidationFailure emptyType = BeanValidationFailure.validateNotEmpty(name, "attribute.type",
+ attribute.getType());
+ if (emptyType != null) {
+ return emptyType;
+ }
+
+ ValidationFailure badType = BeanValidationFailure.validateJavaClassName(name, "attribute.type",
+ attribute.getType());
+ if (badType != null) {
+ return badType;
+ }
+
+ return null;
+ }
+
+ protected ValidationFailure validateRelationship(ObjRelationship relationship, boolean clientValidation) {
+
+ String name = relationship.getSourceEntity().getName();
+
+ ValidationFailure emptyName = BeanValidationFailure.validateNotEmpty(name, "relationship.name",
+ relationship.getName());
+ if (emptyName != null) {
+ return emptyName;
+ }
+
+ ValidationFailure badName = CodeValidationUtil.validateJavaIdentifier(name, "relationship.name",
+ relationship.getName());
+ if (badName != null) {
+ return badName;
+ }
+
+ if (!relationship.isToMany()) {
+
+ ObjEntity targetEntity = relationship.getTargetEntity();
+
+ if (clientValidation && targetEntity != null) {
+ targetEntity = targetEntity.getClientEntity();
+ }
+
+ if (targetEntity == null) {
+
+ return new BeanValidationFailure(name, "relationship.targetEntity", "No target entity");
+ } else if (!targetEntity.isGeneric()) {
+ ValidationFailure emptyClass = BeanValidationFailure.validateNotEmpty(name,
+ "relationship.targetEntity.className", targetEntity.getClassName());
+ if (emptyClass != null) {
+ return emptyClass;
+ }
+
+ ValidationFailure badClass = BeanValidationFailure.validateJavaClassName(name,
+ "relationship.targetEntity.className", targetEntity.getClassName());
+ if (badClass != null) {
+ return badClass;
+ }
+ }
+ }
+
+ return null;
+ }
+
+ /**
+ * 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;
+ }
+
+ if (object instanceof Embeddable) {
+ return getParentController().getProblem(((Embeddable) object).getClassName()) == null;
+ }
+
+ return false;
+ };
+ }
+ }
+
+ public File getOutputDir() {
+ String dir = ((GeneratorControllerPanel) getView()).getOutputFolder().getText();
+ return dir != null ? new File(dir) : new File(System.getProperty("user.dir"));
+ }
+
+ /**
+ * An action method that pops up a file chooser dialog to pick the
+ * generation directory.
+ */
+ public void selectOutputFolderAction() {
+
+ JTextField outputFolder = ((GeneratorControllerPanel) getView()).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();
+ outputFolder.setText(path);
+ setOutputPath(path);
+ }
+ }
+
+ private void initOutputFolder() {
+ String path;
+ if (getOutputPath() == null) {
+ if (System.getProperty("cayenne.cgen.destdir") != null) {
+ setOutputPath(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) {
+ setOutputPath(path);
+ } else {
+ File lastDir = (lastPath != null) ? lastPath.getExistingDirectory(false) : null;
+ setOutputPath(lastDir != null ? lastDir.getAbsolutePath() : null);
+ }
+ }
+ }
+ }
+
+ private String checkDefaultMavenResourceDir(FSPath lastPath, String dirType) {
+ String path = lastPath.getPath();
+ String resourcePath = buildFilePath("src", dirType, "resources");
+ int idx = path.indexOf(resourcePath);
+ if (idx < 0) {
+ return null;
+ }
+ return path.substring(0, idx) + buildFilePath("src", dirType, "java");
+ }
+
+ private static String buildFilePath(String... pathElements) {
+ if (pathElements.length == 0) {
+ return "";
+ }
+ StringBuilder path = new StringBuilder(pathElements[0]);
+ for (int i = 1; i < pathElements.length; i++) {
+ path.append(File.separator).append(pathElements[i]);
+ }
+ return path.toString();
+ }
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/8119ffaa/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
new file mode 100644
index 0000000..9b836bd
--- /dev/null
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorControllerPanel.java
@@ -0,0 +1,53 @@
+/*****************************************************************
+ * 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 javax.swing.*;
+import java.util.ArrayList;
+import java.util.Collection;
+
+/**
+ * A generic panel that is a superclass of generator panels, defining common fields.
+ *
+ */
+public class GeneratorControllerPanel extends JPanel {
+
+ protected Collection<StandardPanelComponent> dataMapLines;
+ protected JTextField outputFolder;
+ protected JButton selectOutputFolder;
+
+ public GeneratorControllerPanel() {
+ this.dataMapLines = new ArrayList<>();
+ this.outputFolder = new JTextField();
+ this.selectOutputFolder = new JButton("Select");
+ }
+
+ public JTextField getOutputFolder() {
+ return outputFolder;
+ }
+
+ public JButton getSelectOutputFolder() {
+ return selectOutputFolder;
+ }
+
+ public Collection<StandardPanelComponent> getDataMapLines() {
+ return dataMapLines;
+ }
+}
[13/32] cayenne git commit: Add cgen tab.
Posted by nt...@apache.org.
Add cgen tab.
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/6a43436a
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/6a43436a
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/6a43436a
Branch: refs/heads/master
Commit: 6a43436ab12017594762210c18dd508e2f2ded9d
Parents: aa22c93
Author: Arseni Bulatski <an...@gmail.com>
Authored: Wed Oct 31 10:51:32 2018 +0300
Committer: Arseni Bulatski <an...@gmail.com>
Committed: Wed Oct 31 10:51:32 2018 +0300
----------------------------------------------------------------------
.../cayenne/gen/ArtifactsGenerationMode.java | 2 +-
.../cayenne/gen/ClassGenerationAction.java | 499 ++++++++++---------
.../gen/ClientClassGenerationAction.java | 7 +-
.../cayenne/gen/xml/CgenConfigHandler.java | 117 ++---
.../cayenne/gen/xml/CgenSaverDelegate.java | 23 +
.../cayenne/gen/xml/EmbeddableHandler.java | 70 ---
.../cayenne/gen/xml/ObjEntityHandler.java | 69 ---
.../cayenne/project/CompoundSaverDelegate.java | 28 +-
.../cayenne/project/FileProjectSaver.java | 2 +
.../project/extension/BaseSaverDelegate.java | 13 +
.../project/extension/SaverDelegate.java | 4 +
.../main/java/org/apache/cayenne/util/Util.java | 33 +-
.../cayenne/tools/CayenneGeneratorMojo.java | 5 +-
.../cayenne/modeler/CayenneModelerFrame.java | 81 +--
.../cayenne/modeler/action/CgenAction.java | 27 -
.../modeler/action/DefaultActionManager.java | 5 +-
.../dialog/codegen/ClassesTabController.java | 13 +-
.../modeler/dialog/codegen/ClassesTabPanel.java | 15 +-
.../dialog/codegen/ClientModeController.java | 2 +-
.../dialog/codegen/CodeGeneratorController.java | 4 +-
.../codegen/CodeGeneratorControllerBase.java | 18 +-
.../dialog/codegen/CodeGeneratorDialog.java | 17 +-
.../dialog/codegen/CustomModeController.java | 19 +-
.../modeler/dialog/codegen/CustomModePanel.java | 9 +-
.../dialog/codegen/GeneratorController.java | 26 +-
.../codegen/GeneratorControllerPanel.java | 4 +-
.../dialog/codegen/GeneratorTabController.java | 2 +-
.../dialog/codegen/GeneratorTabPanel.java | 2 +-
.../dialog/codegen/StandardModeController.java | 6 +-
.../dialog/codegen/StandardModePanel.java | 2 +-
.../dialog/codegen/StandardPanelComponent.java | 2 +-
.../modeler/dialog/codegen/cgen/CgenDialog.java | 74 ---
.../codegen/cgen/CgenGlobalController.java | 68 ---
.../dialog/codegen/cgen/CgenGlobalPanel.java | 293 -----------
.../codegen/cgen/CgenGlobalPanelController.java | 306 ------------
.../modeler/editor/DataMapTabbedView.java | 25 +-
.../editor/cgen/ClassesTabController.java | 13 +-
.../modeler/editor/cgen/ClassesTabPanel.java | 12 +-
.../editor/cgen/ClientModeController.java | 40 ++
.../editor/cgen/CodeGeneratorController.java | 48 +-
.../cgen/CodeGeneratorControllerBase.java | 112 +++--
.../modeler/editor/cgen/CodeGeneratorPane.java | 45 +-
.../editor/cgen/CustomModeController.java | 83 +--
.../modeler/editor/cgen/CustomModePanel.java | 137 +----
.../editor/cgen/GeneratorController.java | 157 +++---
.../editor/cgen/GeneratorControllerPanel.java | 30 +-
.../editor/cgen/GeneratorTabController.java | 64 ++-
.../modeler/editor/cgen/GeneratorTabPanel.java | 70 ++-
.../editor/cgen/StandardModeController.java | 61 +++
.../modeler/editor/cgen/StandardModePanel.java | 42 ++
.../editor/cgen/StandardPanelComponent.java | 63 +++
51 files changed, 1027 insertions(+), 1842 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cayenne/blob/6a43436a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/ArtifactsGenerationMode.java
----------------------------------------------------------------------
diff --git a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/ArtifactsGenerationMode.java b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/ArtifactsGenerationMode.java
index e76c172..98aca33 100644
--- a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/ArtifactsGenerationMode.java
+++ b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/ArtifactsGenerationMode.java
@@ -26,7 +26,7 @@ package org.apache.cayenne.gen;
public enum ArtifactsGenerationMode {
// TODO: andrus 12/9/2007 - label names are old... need to call it something else...
- DATAMAP("datamap"), ENTITY("entity"), ALL("all");
+ ENTITY("entity"), ALL("all");
private String label;
http://git-wip-us.apache.org/repos/asf/cayenne/blob/6a43436a/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 f74ca21..434421f 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
@@ -33,16 +33,12 @@ import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.VelocityEngine;
import org.slf4j.Logger;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.OutputStreamWriter;
-import java.io.Serializable;
-import java.io.Writer;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Properties;
+import java.io.*;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.*;
+import java.util.stream.Collectors;
public class ClassGenerationAction implements Serializable, XMLSerializable {
static final String TEMPLATES_DIR_NAME = "templates/v4_1/";
@@ -62,10 +58,11 @@ public class ClassGenerationAction implements Serializable, XMLSerializable {
public static final String SUPERCLASS_PREFIX = "_";
private static final String WILDCARD = "*";
- protected Collection<Artifact> artifacts;
-
+ Collection<Artifact> artifacts;
private Collection<String> entityArtifacts;
+ private Collection<String> excludeEntityArtifacts;
private Collection<String> embeddableArtifacts;
+ private Collection<String> excludeEmbeddableArtifacts;
protected String superPkg;
protected DataMap dataMap;
@@ -74,7 +71,10 @@ public class ClassGenerationAction implements Serializable, XMLSerializable {
protected boolean makePairs;
protected Logger logger;
- protected File destDir;
+
+ protected Path rootPath;
+ protected Path relPath;
+
protected boolean overwrite;
protected boolean usePkgPath;
@@ -110,22 +110,20 @@ public class ClassGenerationAction implements Serializable, XMLSerializable {
this.artifacts = new ArrayList<>();
this.entityArtifacts = new ArrayList<>();
+ this.excludeEntityArtifacts = new ArrayList<>();
this.embeddableArtifacts = new ArrayList<>();
+ this.excludeEmbeddableArtifacts = new ArrayList<>();
this.artifactsGenerationMode = ArtifactsGenerationMode.ENTITY;
this.overwrite = false;
- }
-
- public void setDefaults() {
- this.template = SUBCLASS_TEMPLATE;
- this.superTemplate = SUPERCLASS_TEMPLATE;
+ this.template = SUBCLASS_TEMPLATE;
+ this.superTemplate = SUPERCLASS_TEMPLATE;
+ this.embeddableTemplate = EMBEDDABLE_SUBCLASS_TEMPLATE;
+ this.embeddableSuperTemplate = EMBEDDABLE_SUPERCLASS_TEMPLATE;
- this.embeddableTemplate = EMBEDDABLE_SUBCLASS_TEMPLATE;
- this.embeddableSuperTemplate = EMBEDDABLE_SUPERCLASS_TEMPLATE;
-
- this.queryTemplate = DATAMAP_SUBCLASS_TEMPLATE;
- this.querySuperTemplate = DATAMAP_SUPERCLASS_TEMPLATE;
- }
+ this.queryTemplate = DATAMAP_SUBCLASS_TEMPLATE;
+ this.querySuperTemplate = DATAMAP_SUPERCLASS_TEMPLATE;
+ }
protected String defaultTemplateName(TemplateType type) {
switch (type) {
@@ -178,14 +176,6 @@ public class ClassGenerationAction implements Serializable, XMLSerializable {
}
/**
- * Returns a String used to prefix class name to create a generated
- * superclass. Default value is "_".
- */
- private String getSuperclassPrefix() {
- return ClassGenerationAction.SUPERCLASS_PREFIX;
- }
-
- /**
* VelocityContext initialization method called once per artifact.
*/
private void resetContextForArtifact(Artifact artifact) {
@@ -232,7 +222,7 @@ public class ClassGenerationAction implements Serializable, XMLSerializable {
}
public void prepareArtifacts() {
- resetArtifacts();
+ this.artifacts.clear();
addAllEntities();
addAllEmbeddables();
addQueries(dataMap.getQueryDescriptors());
@@ -317,84 +307,21 @@ public class ClassGenerationAction implements Serializable, XMLSerializable {
* Called internally from "execute".
*/
private void validateAttributes() {
- if (destDir == null) {
- throw new CayenneRuntimeException("'destDir' attribute is missing.");
+ Path dir = buildPath();
+ if (dir == null) {
+ throw new CayenneRuntimeException("'rootPath' attribute is missing.");
}
- if (!destDir.isDirectory()) {
+ if (!Files.isDirectory(dir)) {
throw new CayenneRuntimeException("'destDir' is not a directory.");
}
- if (!destDir.canWrite()) {
- throw new CayenneRuntimeException("Do not have write permissions for %s", destDir);
+ if (!Files.isWritable(dir)) {
+ throw new CayenneRuntimeException("Do not have write permissions for %s", dir);
}
}
/**
- * Sets the destDir.
- */
- public void setDestDir(File destDir) {
- this.destDir = destDir;
- }
-
- /**
- * Sets <code>overwrite</code> property.
- */
- public void setOverwrite(boolean overwrite) {
- this.overwrite = overwrite;
- }
-
- /**
- * Sets <code>makepairs</code> property.
- */
- public void setMakePairs(boolean makePairs) {
- this.makePairs = makePairs;
- }
-
- /**
- * Sets <code>template</code> property.
- */
- public void setTemplate(String template) {
- this.template = template;
- }
-
- /**
- * Sets <code>superTemplate</code> property.
- */
- public void setSuperTemplate(String superTemplate) {
- this.superTemplate = superTemplate;
- }
-
- public void setQueryTemplate(String queryTemplate) {
- this.queryTemplate = queryTemplate;
- }
-
- public void setQuerySuperTemplate(String querySuperTemplate) {
- this.querySuperTemplate = querySuperTemplate;
- }
-
- /**
- * Sets <code>usepkgpath</code> property.
- */
- public void setUsePkgPath(boolean usePkgPath) {
- this.usePkgPath = usePkgPath;
- }
-
- /**
- * Sets <code>outputPattern</code> property.
- */
- public void setOutputPattern(String outputPattern) {
- this.outputPattern = outputPattern;
- }
-
- /**
- * Sets <code>createPropertyNames</code> property.
- */
- public void setCreatePropertyNames(boolean createPropertyNames) {
- this.createPropertyNames = createPropertyNames;
- }
-
- /**
* Opens a Writer to write generated output. Returned Writer is mapped to a
* filesystem file (although subclasses may override that). File location is
* determined from the current state of VelocityContext and the TemplateType
@@ -429,7 +356,7 @@ public class ClassGenerationAction implements Serializable, XMLSerializable {
String className = (String) context.get(Artifact.SUPER_CLASS_KEY);
String filename = StringUtils.getInstance().replaceWildcardInStringWithString(WILDCARD, outputPattern, className);
- File dest = new File(mkpath(destDir, packageName), filename);
+ File dest = new File(mkpath(new File(getDir()), packageName), filename);
if (dest.exists() && !fileNeedUpdate(dest, superTemplate)) {
return null;
@@ -448,7 +375,7 @@ public class ClassGenerationAction implements Serializable, XMLSerializable {
String className = (String) context.get(Artifact.SUB_CLASS_KEY);
String filename = StringUtils.getInstance().replaceWildcardInStringWithString(WILDCARD, outputPattern, className);
- File dest = new File(mkpath(destDir, packageName), filename);
+ File dest = new File(mkpath(new File(Objects.requireNonNull(buildPath()).toString()), packageName), filename);
if (dest.exists()) {
// no overwrite of subclasses
@@ -517,31 +444,6 @@ public class ClassGenerationAction implements Serializable, XMLSerializable {
return fullPath;
}
- public void setTimestamp(long timestamp) {
- this.timestamp = timestamp;
- }
-
- /**
- * Sets file encoding. If set to null, default system encoding will be used.
- */
- public void setEncoding(String encoding) {
- this.encoding = encoding;
- }
-
- /**
- * Sets "superPkg" property value.
- */
- public void setSuperPkg(String superPkg) {
- this.superPkg = superPkg;
- }
-
- /**
- * @param dataMap The dataMap to set.
- */
- public void setDataMap(DataMap dataMap) {
- this.dataMap = dataMap;
- }
-
/**
* Adds entities to the internal entity list.
* @param entities collection
@@ -549,64 +451,50 @@ public class ClassGenerationAction implements Serializable, XMLSerializable {
* @since 4.0 throws exception
*/
public void addEntities(Collection<ObjEntity> entities) {
- if (artifactsGenerationMode == ArtifactsGenerationMode.ENTITY
- || artifactsGenerationMode == ArtifactsGenerationMode.ALL) {
- if (entities != null) {
- for (ObjEntity entity : entities) {
- artifacts.add(new EntityArtifact(entity));
- }
+ if (entities != null) {
+ for (ObjEntity entity : entities) {
+ artifacts.add(new EntityArtifact(entity));
}
}
}
public void addEmbeddables(Collection<Embeddable> embeddables) {
- if (artifactsGenerationMode == ArtifactsGenerationMode.ENTITY
- || artifactsGenerationMode == ArtifactsGenerationMode.ALL) {
- if (embeddables != null) {
- for (Embeddable embeddable : embeddables) {
- artifacts.add(new EmbeddableArtifact(embeddable));
- }
+ if (embeddables != null) {
+ for (Embeddable embeddable : embeddables) {
+ artifacts.add(new EmbeddableArtifact(embeddable));
}
}
}
public void addQueries(Collection<QueryDescriptor> queries) {
- if (artifactsGenerationMode == ArtifactsGenerationMode.DATAMAP
- || artifactsGenerationMode == ArtifactsGenerationMode.ALL) {
-
+ if (artifactsGenerationMode == ArtifactsGenerationMode.ALL) {
// TODO: andrus 10.12.2010 - why not also check for empty query list??
// Or create a better API for enabling DataMapArtifact
if (queries != null) {
Artifact artifact = new DataMapArtifact(dataMap, queries);
if(!artifacts.contains(artifact)) {
- artifacts.add(new DataMapArtifact(dataMap, queries));
+ artifacts.add(artifact);
}
}
}
}
private void addAllEntities() {
- if(artifactsGenerationMode == ArtifactsGenerationMode.ENTITY
- || artifactsGenerationMode == ArtifactsGenerationMode.ALL) {
- entityArtifacts.forEach(val -> {
- Artifact artifact = new EntityArtifact(dataMap.getObjEntity(val));
- if(!artifacts.contains(artifact)) {
- artifacts.add(artifact);
- }
- });
- }
+ entityArtifacts.forEach(val -> {
+ Artifact artifact = new EntityArtifact(dataMap.getObjEntity(val));
+ if(!artifacts.contains(artifact)) {
+ artifacts.add(artifact);
+ }
+ });
}
private void addAllEmbeddables() {
- if(artifactsGenerationMode == ArtifactsGenerationMode.ENTITY
- || artifactsGenerationMode == ArtifactsGenerationMode.ALL) {
- embeddableArtifacts.forEach(val -> {
- Artifact artifact = new EmbeddableArtifact(dataMap.getEmbeddable(val));
- if(!artifacts.contains(artifact)) {
- artifacts.add(artifact);
- }
- });
- }
+ embeddableArtifacts.forEach(val -> {
+ Artifact artifact = new EmbeddableArtifact(dataMap.getEmbeddable(val));
+ if(!artifacts.contains(artifact)) {
+ artifacts.add(artifact);
+ }
+ });
}
/**
@@ -616,85 +504,91 @@ public class ClassGenerationAction implements Serializable, XMLSerializable {
entityArtifacts.add(name);
}
- /**
- * @since 4.1
- */
+ /**
+ * @since 4.1
+ */
public void loadEmbeddable(String name) {
embeddableArtifacts.add(name);
}
- /**
- * Sets an optional shared VelocityContext. Useful with tools like VPP that
- * can set custom values in the context, not known to Cayenne.
- */
- public void setContext(VelocityContext context) {
- this.context = context;
+ public void setArtifactsGenerationMode(String mode) {
+ if (ArtifactsGenerationMode.ENTITY.getLabel().equalsIgnoreCase(mode)) {
+ this.artifactsGenerationMode = ArtifactsGenerationMode.ENTITY;
+ } else {
+ this.artifactsGenerationMode = ArtifactsGenerationMode.ALL;
+ }
}
- /**
- * Injects an optional logger that will be used to trace generated files at
- * the info level.
- */
- public void setLogger(Logger logger) {
- this.logger = logger;
+ public Path buildPath() {
+ return rootPath != null ? relPath != null ? rootPath.resolve(relPath).toAbsolutePath().normalize() : rootPath : null;
}
- public void setEmbeddableTemplate(String embeddableTemplate) {
- this.embeddableTemplate = embeddableTemplate;
+ public void loadEntities(String entities) {
+ excludeEntityArtifacts.addAll(Arrays.asList(entities.split(",")));
}
- public void setEmbeddableSuperTemplate(String embeddableSuperTemplate) {
- this.embeddableSuperTemplate = embeddableSuperTemplate;
+ public void resolveExcludeEntities() {
+ entityArtifacts = dataMap.getObjEntities()
+ .stream()
+ .filter(entity -> !excludeEntityArtifacts.contains(entity.getName()))
+ .map(ObjEntity::getName)
+ .collect(Collectors.toList());
}
- public void setArtifactsGenerationMode(String mode) {
- if (ArtifactsGenerationMode.ENTITY.getLabel().equalsIgnoreCase(mode)) {
- this.artifactsGenerationMode = ArtifactsGenerationMode.ENTITY;
- } else if (ArtifactsGenerationMode.DATAMAP.getLabel().equalsIgnoreCase(mode)) {
- this.artifactsGenerationMode = ArtifactsGenerationMode.DATAMAP;
- } else {
- this.artifactsGenerationMode = ArtifactsGenerationMode.ALL;
- }
+ public void loadEmbeddables(String embeddables) {
+ excludeEmbeddableArtifacts.addAll(Arrays.asList(embeddables.split(",")));
}
- /**
- * @since 4.1
- */
- public boolean isCreatePKProperties() {
- return createPKProperties;
- }
+ public void resolveExcludeEmbeddables() {
+ embeddableArtifacts = dataMap.getEmbeddables()
+ .stream()
+ .filter(embeddable -> !excludeEmbeddableArtifacts.contains(embeddable.getClassName()))
+ .map(Embeddable::getClassName)
+ .collect(Collectors.toList());
+ }
- /**
- * @since 4.1
- */
- public void setCreatePKProperties(boolean createPKProperties) {
- this.createPKProperties = createPKProperties;
- }
+ public void resetCollections(){
+ this.embeddableArtifacts.clear();
+ this.entityArtifacts.clear();
+ }
- private Collection<EntityArtifact> getEntityArtifacts() {
- resetArtifacts();
- addAllEntities();
- Collection<EntityArtifact> entityArtifacts = new ArrayList<>();
- for(Artifact artifact : artifacts){
- if(artifact instanceof EntityArtifact){
- entityArtifacts.add((EntityArtifact) artifact);
- }
- }
- return entityArtifacts;
+ private String getExcludeEntites() {
+ Collection<String> excludeEntities = dataMap.getObjEntities()
+ .stream()
+ .filter(entity -> !entityArtifacts.contains(entity.getName()))
+ .map(ObjEntity::getName)
+ .collect(Collectors.toList());
+ return org.apache.commons.lang3.StringUtils.join(excludeEntities, ",");
}
- private Collection<EmbeddableArtifact> getEmbeddableArtifacts() {
- resetArtifacts();
- addAllEmbeddables();
- Collection<EmbeddableArtifact> embeddableArtifacts = new ArrayList<>();
- for(Artifact artifact : artifacts){
- if(artifact instanceof EmbeddableArtifact){
- embeddableArtifacts.add((EmbeddableArtifact) artifact);
- }
- }
+ private String getExcludeEmbeddables() {
+ Collection<String> excludeEmbeddable = dataMap.getEmbeddables()
+ .stream()
+ .filter(embeddable -> !embeddableArtifacts.contains(embeddable.getClassName()))
+ .map(Embeddable::getClassName)
+ .collect(Collectors.toList());
+ return org.apache.commons.lang3.StringUtils.join(excludeEmbeddable, ",");
+ }
+
+ /**
+ * Returns a String used to prefix class name to create a generated
+ * superclass. Default value is "_".
+ */
+ private String getSuperclassPrefix() {
+ return ClassGenerationAction.SUPERCLASS_PREFIX;
+ }
+
+ public Collection<String> getEmbeddables() {
return embeddableArtifacts;
}
+ /**
+ * @since 4.1
+ */
+ public boolean isCreatePKProperties() {
+ return createPKProperties;
+ }
+
public boolean isMakePairs() {
return makePairs;
}
@@ -724,11 +618,9 @@ public class ClassGenerationAction implements Serializable, XMLSerializable {
}
public String getDir(){
- return destDir != null ? destDir.getAbsolutePath() : null;
+ return rootPath != null ? relPath != null ? rootPath.resolve(relPath).toAbsolutePath().normalize().toString() : rootPath.toString() : null;
}
- public File getDestDir() { return destDir; }
-
public String getTemplate() {
return template;
}
@@ -737,16 +629,15 @@ public class ClassGenerationAction implements Serializable, XMLSerializable {
return superPkg;
}
- private void resetArtifacts(){
- this.artifacts = new ArrayList<>();
- }
-
public Collection<String> getEntities() {
return entityArtifacts;
}
- public Collection<String> getEmbeddables() {
- return embeddableArtifacts;
+ public String getRelPath() {
+ if(relPath == null || relPath.toString().isEmpty()) {
+ return ".";
+ }
+ return relPath.toString();
}
public String getArtifactsGenerationMode(){
@@ -774,39 +665,155 @@ public class ClassGenerationAction implements Serializable, XMLSerializable {
}
public String getQueryTemplate() {
- return queryTemplate;
- }
+ return queryTemplate;
+ }
- public String getQuerySuperTemplate() {
- return querySuperTemplate;
- }
+ public String getQuerySuperTemplate() {
+ return querySuperTemplate;
+ }
- public void resetCollections(){
- this.embeddableArtifacts = new ArrayList<>();
- this.entityArtifacts = new ArrayList<>();
+ /**
+ * Sets an optional shared nVelocityContext. Useful with tools like VPP that
+ * can set custom values in the context, not known to Cayenne.
+ */
+ public void setContext(VelocityContext context) {
+ this.context = context;
+ }
+
+ /**
+ * Injects an optional logger that will be used to trace generated files at
+ * the info level.
+ */
+ public void setLogger(Logger logger) {
+ this.logger = logger;
+ }
+
+ public void setTimestamp(long timestamp) {
+ this.timestamp = timestamp;
+ }
+
+ /**
+ * Sets file encoding. If set to null, default system encoding will be used.
+ */
+ public void setEncoding(String encoding) {
+ this.encoding = encoding;
+ }
+
+ /**
+ * Sets "superPkg" property value.
+ */
+ public void setSuperPkg(String superPkg) {
+ this.superPkg = superPkg;
+ }
+
+ /**
+ * @param dataMap The dataMap to set.
+ */
+ public void setDataMap(DataMap dataMap) {
+ this.dataMap = dataMap;
+ }
+
+ public void setEmbeddableTemplate(String embeddableTemplate) {
+ this.embeddableTemplate = embeddableTemplate;
+ }
+
+ public void setEmbeddableSuperTemplate(String embeddableSuperTemplate) {
+ this.embeddableSuperTemplate = embeddableSuperTemplate;
+ }
+
+ /**
+ * Sets <code>overwrite</code> property.
+ */
+ public void setOverwrite(boolean overwrite) {
+ this.overwrite = overwrite;
+ }
+
+ /**
+ * Sets <code>makepairs</code> property.
+ */
+ public void setMakePairs(boolean makePairs) {
+ this.makePairs = makePairs;
+ }
+
+ /**
+ * Sets <code>template</code> property.
+ */
+ public void setTemplate(String template) {
+ this.template = template;
+ }
+
+ /**
+ * Sets <code>superTemplate</code> property.
+ */
+ public void setSuperTemplate(String superTemplate) {
+ this.superTemplate = superTemplate;
+ }
+
+ public void setQueryTemplate(String queryTemplate) {
+ this.queryTemplate = queryTemplate;
+ }
+
+ public void setQuerySuperTemplate(String querySuperTemplate) {
+ this.querySuperTemplate = querySuperTemplate;
+ }
+
+ /**
+ * Sets <code>usepkgpath</code> property.
+ */
+ public void setUsePkgPath(boolean usePkgPath) {
+ this.usePkgPath = usePkgPath;
+ }
+
+ /**
+ * Sets <code>outputPattern</code> property.
+ */
+ public void setOutputPattern(String outputPattern) {
+ this.outputPattern = outputPattern;
+ }
+
+ /**
+ * Sets <code>createPropertyNames</code> property.
+ */
+ public void setCreatePropertyNames(boolean createPropertyNames) {
+ this.createPropertyNames = createPropertyNames;
+ }
+
+ /**
+ * @since 4.1
+ */
+ public void setCreatePKProperties(boolean createPKProperties) {
+ this.createPKProperties = createPKProperties;
+ }
+
+ public void setRootPath(Path rootPath) {
+ this.rootPath = rootPath;
+ }
+
+ public void setRelPath(Path relPath) {
+ this.relPath = relPath;
+ }
+
+ public void setRelPath(String path) {
+ this.relPath = rootPath.relativize(Paths.get(path));
}
@Override
public void encodeAsXML(XMLEncoder encoder, ConfigurationNodeVisitor delegate) {
encoder.start("cgen")
.attribute("xmlns", CgenExtension.NAMESPACE)
- .nested(this.getEntityArtifacts(), delegate)
- .nested(this.getEmbeddableArtifacts(), delegate)
- .simpleTag("outputDirectory", this.destDir != null ? this.destDir.getAbsolutePath() : null)
+ .simpleTag("excludeEntities", getExcludeEntites())
+ .simpleTag("excludeEmbeddables",getExcludeEmbeddables())
+ .simpleTag("outputDirectory", getRelPath())
.simpleTag("generationMode", this.artifactsGenerationMode.getLabel())
- .simpleTag("dataMapTemplate", this.queryTemplate)
- .simpleTag("dataMapSuperclassTemplate", this.querySuperTemplate)
.simpleTag("subclassTemplate", this.template)
.simpleTag("superclassTemplate", this.superTemplate)
- .simpleTag("embeddableTemplate", this.embeddableTemplate)
- .simpleTag("embeddableSuperclassTemplate", this.embeddableSuperTemplate)
.simpleTag("outputPattern", this.outputPattern)
.simpleTag("makePairs", Boolean.toString(this.makePairs))
.simpleTag("usePkgPath", Boolean.toString(this.usePkgPath))
.simpleTag("overwriteSubclasses", Boolean.toString(this.overwrite))
.simpleTag("createPropertyNames", Boolean.toString(this.createPropertyNames))
.simpleTag("superPkg", this.superPkg)
- .simpleTag("encoding", this.encoding)
+ .simpleTag("createPKProperties", Boolean.toString(this.createPKProperties))
.end();
}
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/6a43436a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/ClientClassGenerationAction.java
----------------------------------------------------------------------
diff --git a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/ClientClassGenerationAction.java b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/ClientClassGenerationAction.java
index c944f40..c8880aa 100644
--- a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/ClientClassGenerationAction.java
+++ b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/ClientClassGenerationAction.java
@@ -19,12 +19,12 @@
package org.apache.cayenne.gen;
-import java.util.Collection;
-
import org.apache.cayenne.CayenneRuntimeException;
import org.apache.cayenne.map.ObjEntity;
import org.apache.cayenne.map.QueryDescriptor;
+import java.util.Collection;
+
/**
* @since 3.0
*/
@@ -88,8 +88,7 @@ public class ClientClassGenerationAction extends ClassGenerationAction {
@Override
public void addQueries(Collection<QueryDescriptor> queries) {
- if (artifactsGenerationMode == ArtifactsGenerationMode.DATAMAP
- || artifactsGenerationMode == ArtifactsGenerationMode.ALL) {
+ if (artifactsGenerationMode == ArtifactsGenerationMode.ALL) {
if (queries != null) {
artifacts.add(new ClientDataMapArtifact(dataMap, queries));
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/6a43436a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenConfigHandler.java
----------------------------------------------------------------------
diff --git a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenConfigHandler.java b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenConfigHandler.java
index f77f1f1..7883ca2 100644
--- a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenConfigHandler.java
+++ b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenConfigHandler.java
@@ -22,10 +22,9 @@ import org.apache.cayenne.configuration.xml.DataChannelMetaData;
import org.apache.cayenne.configuration.xml.NamespaceAwareNestedTagHandler;
import org.apache.cayenne.gen.ClassGenerationAction;
import org.xml.sax.Attributes;
-import org.xml.sax.ContentHandler;
import org.xml.sax.SAXException;
-import java.io.File;
+import java.nio.file.Paths;
/**
* @since 4.1
@@ -43,14 +42,9 @@ public class CgenConfigHandler extends NamespaceAwareNestedTagHandler{
private static final String USE_PKG_PATH_TAG = "usePkgPath";
private static final String OVERWRITE_SUBCLASSES_TAG = "overwriteSubclasses";
private static final String CREATE_PROPERTY_NAMES_TAG = "createPropertyNames";
- private static final String SUPER_PKG_TAG = "superPkg";
- private static final String OBJENTITY_TAG = "objEntity";
- private static final String EMBEDDABLE_TAG = "embeddable";
- private static final String ENCODING_TAG = "encoding";
- private static final String EMBEDDABLE_TEMPLATE_TAG = "embeddableTemplate";
- private static final String EMBEDDABLE_SUPERCLASS_TEMPLATE_TAG = "embeddableSuperclassTemplate";
- private static final String DATAMAP_TEMPLATE_TAG = "dataMapTemplate";
- private static final String DATAMAP_SUPERCLASS_TEMPLATE_TAG = "dataMapSuperclassTemplate";
+ private static final String EXCLUDE_ENTITIES_TAG = "excludeEntities";
+ private static final String EXCLUDE_EMBEDDABLES_TAG = "excludeEmbeddables";
+ private static final String CREATE_PK_PROPERTIES = "createPKProperties";
public static final String TRUE = "true";
@@ -74,22 +68,6 @@ public class CgenConfigHandler extends NamespaceAwareNestedTagHandler{
}
@Override
- protected ContentHandler createChildTagHandler(String namespaceURI, String localName,
- String qName, Attributes attributes) {
-
- if (namespaceURI.equals(targetNamespace)) {
- switch (localName) {
- case OBJENTITY_TAG:
- return new ObjEntityHandler(this, configuration);
- case EMBEDDABLE_TAG:
- return new EmbeddableHandler(this, configuration);
- }
- }
-
- return super.createChildTagHandler(namespaceURI, localName, qName, attributes);
- }
-
- @Override
protected void processCharData(String localName, String data) {
switch (localName) {
case OUTPUT_DIRECTORY_TAG:
@@ -98,6 +76,12 @@ public class CgenConfigHandler extends NamespaceAwareNestedTagHandler{
case GENERATION_MODE_TAG:
createGenerationMode(data);
break;
+ case EXCLUDE_ENTITIES_TAG:
+ createExcludeEntities(data);
+ break;
+ case EXCLUDE_EMBEDDABLES_TAG:
+ createExcludeEmbeddables(data);
+ break;
case SUBCLASS_TEMPLATE_TAG:
createSubclassTemplate(data);
break;
@@ -119,23 +103,8 @@ public class CgenConfigHandler extends NamespaceAwareNestedTagHandler{
case CREATE_PROPERTY_NAMES_TAG:
createPropertyNamesTag(data);
break;
- case SUPER_PKG_TAG:
- createSuperPkg(data);
- break;
- case ENCODING_TAG:
- createEncoding(data);
- break;
- case EMBEDDABLE_TEMPLATE_TAG:
- createEmbeddableTemplate(data);
- break;
- case EMBEDDABLE_SUPERCLASS_TEMPLATE_TAG:
- createEmbeddableSuperclassTemplate(data);
- break;
- case DATAMAP_TEMPLATE_TAG:
- createDataMapTemplate(data);
- break;
- case DATAMAP_SUPERCLASS_TEMPLATE_TAG:
- createDataMapSuperclassTemplate(data);
+ case CREATE_PK_PROPERTIES:
+ createPkPropertiesTag(data);
break;
}
}
@@ -146,7 +115,7 @@ public class CgenConfigHandler extends NamespaceAwareNestedTagHandler{
}
if(configuration != null) {
- configuration.setDestDir(new File(path));
+ configuration.setRelPath(Paths.get(path));
}
}
@@ -160,43 +129,43 @@ public class CgenConfigHandler extends NamespaceAwareNestedTagHandler{
}
}
- private void createSubclassTemplate(String template) {
- if(template.trim().length() == 0) {
+ private void createExcludeEntities(String entities) {
+ if(entities.trim().length() == 0) {
return;
}
if(configuration != null) {
- configuration.setTemplate(template);
+ configuration.loadEntities(entities);
}
}
- private void createSuperclassTemplate(String template) {
- if(template.trim().length() == 0) {
+ private void createExcludeEmbeddables(String embeddables) {
+ if(embeddables.trim().length() == 0) {
return;
}
if(configuration != null) {
- configuration.setSuperTemplate(template);
+ configuration.loadEmbeddables(embeddables);
}
}
- private void createEmbeddableTemplate(String template) {
+ private void createSubclassTemplate(String template) {
if(template.trim().length() == 0) {
return;
}
if(configuration != null) {
- configuration.setEmbeddableTemplate(template);
+ configuration.setTemplate(template);
}
}
- private void createEmbeddableSuperclassTemplate(String template) {
+ private void createSuperclassTemplate(String template) {
if(template.trim().length() == 0) {
return;
}
if(configuration != null) {
- configuration.setEmbeddableSuperTemplate(template);
+ configuration.setSuperTemplate(template);
}
}
@@ -266,43 +235,17 @@ public class CgenConfigHandler extends NamespaceAwareNestedTagHandler{
}
}
- private void createSuperPkg(String data) {
- if(data.trim().length() == 0) {
- return;
- }
-
- if(configuration != null) {
- configuration.setSuperPkg(data);
- }
- }
-
- private void createEncoding(String data) {
+ private void createPkPropertiesTag(String data) {
if(data.trim().length() == 0) {
return;
}
if(configuration != null) {
- configuration.setEncoding(data);
- }
- }
-
- private void createDataMapTemplate(String data) {
- if(data.trim().length() == 0) {
- return;
- }
-
- if(configuration != null) {
- configuration.setQueryTemplate(data);
- }
- }
-
- private void createDataMapSuperclassTemplate(String data) {
- if(data.trim().length() == 0) {
- return;
- }
-
- if(configuration != null) {
- configuration.setQuerySuperTemplate(data);
+ if(data.equals(TRUE)) {
+ configuration.setCreatePKProperties(true);
+ } else {
+ configuration.setCreatePKProperties(false);
+ }
}
}
@@ -310,6 +253,8 @@ public class CgenConfigHandler extends NamespaceAwareNestedTagHandler{
configuration = new ClassGenerationAction();
loaderContext.addDataMapListener(dataMap -> {
configuration.setDataMap(dataMap);
+ configuration.resolveExcludeEntities();
+ configuration.resolveExcludeEmbeddables();
CgenConfigHandler.this.metaData.add(dataMap, configuration);
});
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/6a43436a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenSaverDelegate.java
----------------------------------------------------------------------
diff --git a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenSaverDelegate.java b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenSaverDelegate.java
index 8d25cf1..fc23e50 100644
--- a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenSaverDelegate.java
+++ b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenSaverDelegate.java
@@ -23,6 +23,11 @@ import org.apache.cayenne.gen.ClassGenerationAction;
import org.apache.cayenne.map.DataMap;
import org.apache.cayenne.project.extension.BaseSaverDelegate;
+import java.net.URL;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+
/**
* @since 4.1
*/
@@ -38,8 +43,26 @@ public class CgenSaverDelegate extends BaseSaverDelegate{
public Void visitDataMap(DataMap dataMap) {
ClassGenerationAction cgen = metaData.get(dataMap, ClassGenerationAction.class);
if(cgen != null){
+ resolveOutputDir(cgen);
encoder.nested(cgen, getParentDelegate());
}
return null;
}
+
+ private void resolveOutputDir(ClassGenerationAction classGenerationAction) {
+ Path prevPath = classGenerationAction.buildPath();
+ URL url = getBaseDirectory().getURL();
+ if(url != null) {
+ Path resourcePath = Paths.get(url.getPath());
+ if(Files.isRegularFile(resourcePath)) {
+ resourcePath = resourcePath.getParent();
+ }
+
+ if(prevPath != null && resourcePath.compareTo(prevPath) != 0) {
+ classGenerationAction.setRootPath(resourcePath);
+ Path relPath = resourcePath.relativize(prevPath);
+ classGenerationAction.setRelPath(relPath);
+ }
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/6a43436a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/EmbeddableHandler.java
----------------------------------------------------------------------
diff --git a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/EmbeddableHandler.java b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/EmbeddableHandler.java
deleted file mode 100644
index 4772348..0000000
--- a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/EmbeddableHandler.java
+++ /dev/null
@@ -1,70 +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.gen.xml;
-
-import org.apache.cayenne.configuration.xml.NamespaceAwareNestedTagHandler;
-import org.apache.cayenne.gen.ClassGenerationAction;
-import org.xml.sax.Attributes;
-import org.xml.sax.SAXException;
-
-/**
- * @since 4.1
- */
-public class EmbeddableHandler extends NamespaceAwareNestedTagHandler {
-
- private static final String EMBEDDABLE_TAG = "embeddable";
- private static final String EMBEDDABLE_NAME_TAG = "name";
-
- private ClassGenerationAction configuration;
-
- EmbeddableHandler(NamespaceAwareNestedTagHandler parentHandler, ClassGenerationAction configuration) {
- super(parentHandler);
- this.configuration = configuration;
- }
-
- @Override
- protected boolean processElement(String namespaceURI, String localName, Attributes attributes) throws SAXException {
- switch (localName) {
- case EMBEDDABLE_TAG:
- return true;
- }
-
- return false;
- }
-
- @Override
- protected void processCharData(String localName, String data) {
- switch (localName) {
- case EMBEDDABLE_NAME_TAG:
- createEmbeddableEntity(data);
- break;
- }
- }
-
- private void createEmbeddableEntity(String data) {
- if(data.trim().length() == 0) {
- return;
- }
-
- if(configuration != null) {
- configuration.loadEmbeddable(data);
- }
- }
-}
-
http://git-wip-us.apache.org/repos/asf/cayenne/blob/6a43436a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/ObjEntityHandler.java
----------------------------------------------------------------------
diff --git a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/ObjEntityHandler.java b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/ObjEntityHandler.java
deleted file mode 100644
index 593a002..0000000
--- a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/ObjEntityHandler.java
+++ /dev/null
@@ -1,69 +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.gen.xml;
-
-import org.apache.cayenne.configuration.xml.NamespaceAwareNestedTagHandler;
-import org.apache.cayenne.gen.ClassGenerationAction;
-import org.xml.sax.Attributes;
-import org.xml.sax.SAXException;
-
-/**
- * @since 4.1
- */
-public class ObjEntityHandler extends NamespaceAwareNestedTagHandler {
-
- private static final String OBJENTITY_TAG = "objEntity";
- private static final String OBJENTITY_NAME_TAG = "name";
-
- private ClassGenerationAction configuration;
-
- ObjEntityHandler(NamespaceAwareNestedTagHandler parentHandler, ClassGenerationAction configuration) {
- super(parentHandler);
- this.configuration = configuration;
- }
-
- @Override
- protected boolean processElement(String namespaceURI, String localName, Attributes attributes) throws SAXException {
- switch (localName) {
- case OBJENTITY_TAG:
- return true;
- }
-
- return false;
- }
-
- @Override
- protected void processCharData(String localName, String data) {
- switch (localName) {
- case OBJENTITY_NAME_TAG:
- createObjEntity(data);
- break;
- }
- }
-
- private void createObjEntity(String data) {
- if(data.trim().length() == 0) {
- return;
- }
-
- if(configuration != null) {
- configuration.loadEntity(data);
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/6a43436a/cayenne-project/src/main/java/org/apache/cayenne/project/CompoundSaverDelegate.java
----------------------------------------------------------------------
diff --git a/cayenne-project/src/main/java/org/apache/cayenne/project/CompoundSaverDelegate.java b/cayenne-project/src/main/java/org/apache/cayenne/project/CompoundSaverDelegate.java
index 5ea7a29..4745e38 100644
--- a/cayenne-project/src/main/java/org/apache/cayenne/project/CompoundSaverDelegate.java
+++ b/cayenne-project/src/main/java/org/apache/cayenne/project/CompoundSaverDelegate.java
@@ -19,25 +19,15 @@
package org.apache.cayenne.project;
-import java.util.Collection;
-
import org.apache.cayenne.configuration.DataChannelDescriptor;
import org.apache.cayenne.configuration.DataNodeDescriptor;
-import org.apache.cayenne.map.DataMap;
-import org.apache.cayenne.map.DbAttribute;
-import org.apache.cayenne.map.DbEntity;
-import org.apache.cayenne.map.DbRelationship;
-import org.apache.cayenne.map.Embeddable;
-import org.apache.cayenne.map.EmbeddableAttribute;
-import org.apache.cayenne.map.ObjAttribute;
-import org.apache.cayenne.map.ObjEntity;
-import org.apache.cayenne.map.ObjRelationship;
-import org.apache.cayenne.map.Procedure;
-import org.apache.cayenne.map.ProcedureParameter;
-import org.apache.cayenne.map.QueryDescriptor;
+import org.apache.cayenne.map.*;
import org.apache.cayenne.project.extension.SaverDelegate;
+import org.apache.cayenne.resource.Resource;
import org.apache.cayenne.util.XMLEncoder;
+import java.util.Collection;
+
/**
* @since 4.1
*/
@@ -180,4 +170,14 @@ class CompoundSaverDelegate implements SaverDelegate {
public SaverDelegate getParentDelegate() {
return null;
}
+
+ @Override
+ public Resource getBaseDirectory() {
+ return null;
+ }
+
+ @Override
+ public void setBaseDirectory(Resource baseDirectory) {
+ delegates.forEach(d -> d.setBaseDirectory(baseDirectory));
+ }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/6a43436a/cayenne-project/src/main/java/org/apache/cayenne/project/FileProjectSaver.java
----------------------------------------------------------------------
diff --git a/cayenne-project/src/main/java/org/apache/cayenne/project/FileProjectSaver.java b/cayenne-project/src/main/java/org/apache/cayenne/project/FileProjectSaver.java
index 0d6af44..20e2328 100644
--- a/cayenne-project/src/main/java/org/apache/cayenne/project/FileProjectSaver.java
+++ b/cayenne-project/src/main/java/org/apache/cayenne/project/FileProjectSaver.java
@@ -97,6 +97,8 @@ public class FileProjectSaver implements ProjectSaver {
Collection<ConfigurationNode> nodes = project.getRootNode().acceptVisitor(saveableNodesGetter);
Collection<SaveUnit> units = new ArrayList<>(nodes.size());
+ delegate.setBaseDirectory(baseResource);
+
for(ConfigurationNode node : nodes) {
String targetLocation = nameMapper.configurationLocation(node);
Resource targetResource = baseResource.getRelativeResource(targetLocation);
http://git-wip-us.apache.org/repos/asf/cayenne/blob/6a43436a/cayenne-project/src/main/java/org/apache/cayenne/project/extension/BaseSaverDelegate.java
----------------------------------------------------------------------
diff --git a/cayenne-project/src/main/java/org/apache/cayenne/project/extension/BaseSaverDelegate.java b/cayenne-project/src/main/java/org/apache/cayenne/project/extension/BaseSaverDelegate.java
index a9f45f2..adb5d94 100644
--- a/cayenne-project/src/main/java/org/apache/cayenne/project/extension/BaseSaverDelegate.java
+++ b/cayenne-project/src/main/java/org/apache/cayenne/project/extension/BaseSaverDelegate.java
@@ -33,6 +33,7 @@ import org.apache.cayenne.map.ObjRelationship;
import org.apache.cayenne.map.Procedure;
import org.apache.cayenne.map.ProcedureParameter;
import org.apache.cayenne.map.QueryDescriptor;
+import org.apache.cayenne.resource.Resource;
import org.apache.cayenne.util.XMLEncoder;
/**
@@ -46,6 +47,8 @@ public class BaseSaverDelegate implements SaverDelegate {
protected SaverDelegate parentDelegate;
+ protected Resource baseDirectory;
+
@Override
public Void visitDataChannelDescriptor(DataChannelDescriptor channelDescriptor) {
return null;
@@ -131,6 +134,16 @@ public class BaseSaverDelegate implements SaverDelegate {
return parentDelegate;
}
+ @Override
+ public Resource getBaseDirectory() {
+ return baseDirectory;
+ }
+
+ @Override
+ public void setBaseDirectory(Resource baseDirectory) {
+ this.baseDirectory = baseDirectory;
+ }
+
protected boolean isStandalone() {
return parentDelegate == null;
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/6a43436a/cayenne-project/src/main/java/org/apache/cayenne/project/extension/SaverDelegate.java
----------------------------------------------------------------------
diff --git a/cayenne-project/src/main/java/org/apache/cayenne/project/extension/SaverDelegate.java b/cayenne-project/src/main/java/org/apache/cayenne/project/extension/SaverDelegate.java
index 4ed5c92..1a002fd 100644
--- a/cayenne-project/src/main/java/org/apache/cayenne/project/extension/SaverDelegate.java
+++ b/cayenne-project/src/main/java/org/apache/cayenne/project/extension/SaverDelegate.java
@@ -20,6 +20,7 @@
package org.apache.cayenne.project.extension;
import org.apache.cayenne.configuration.ConfigurationNodeVisitor;
+import org.apache.cayenne.resource.Resource;
import org.apache.cayenne.util.XMLEncoder;
/**
@@ -42,4 +43,7 @@ public interface SaverDelegate extends ConfigurationNodeVisitor<Void> {
SaverDelegate getParentDelegate();
+ Resource getBaseDirectory();
+
+ void setBaseDirectory(Resource baseDirectory);
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/6a43436a/cayenne-server/src/main/java/org/apache/cayenne/util/Util.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/util/Util.java b/cayenne-server/src/main/java/org/apache/cayenne/util/Util.java
index 08941b8..de280b4 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/util/Util.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/util/Util.java
@@ -26,45 +26,20 @@ import org.apache.cayenne.Persistent;
import org.apache.cayenne.di.AdhocObjectFactory;
import org.apache.cayenne.di.spi.DefaultAdhocObjectFactory;
import org.apache.cayenne.di.spi.DefaultClassLoaderManager;
-import org.apache.cayenne.reflect.ArcProperty;
-import org.apache.cayenne.reflect.AttributeProperty;
-import org.apache.cayenne.reflect.PropertyVisitor;
-import org.apache.cayenne.reflect.ToManyProperty;
-import org.apache.cayenne.reflect.ToOneProperty;
+import org.apache.cayenne.reflect.*;
import org.w3c.dom.Document;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.parsers.SAXParser;
-import javax.xml.parsers.SAXParserFactory;
-import java.io.BufferedReader;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.FileReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.io.Serializable;
+import javax.xml.parsers.*;
+import java.io.*;
import java.lang.reflect.Member;
import java.lang.reflect.Modifier;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.sql.SQLException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.StringTokenizer;
+import java.util.*;
import java.util.regex.Pattern;
/**
http://git-wip-us.apache.org/repos/asf/cayenne/blob/6a43436a/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 3bdf08b..1ab9f96 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
@@ -207,7 +207,7 @@ public class CayenneGeneratorMojo extends AbstractMojo {
* @since 4.1
*/
@Parameter(defaultValue = "false")
- private boolean createPKProperties;
+ private Boolean createPKProperties;
private transient Injector injector;
@@ -295,7 +295,7 @@ public class CayenneGeneratorMojo extends AbstractMojo {
injector.injectMembers(action);
- action.setDestDir(destDir);
+// action.setDestDir(destDir.toPath());
action.setEncoding(encoding != null ? encoding : action.getEncoding());
action.setMakePairs(makePairs != null ? makePairs : action.isMakePairs());
action.setArtifactsGenerationMode(mode != null ? mode : action.getArtifactsGenerationMode());
@@ -310,6 +310,7 @@ public class CayenneGeneratorMojo extends AbstractMojo {
action.setCreatePropertyNames(createPropertyNames != null ? createPropertyNames : action.isCreatePropertyNames());
action.setQueryTemplate(queryTemplate != null ? queryTemplate : action.getQueryTemplate());
action.setQuerySuperTemplate(querySuperTemplate != null ? querySuperTemplate : action.getQuerySuperTemplate());
+ action.setCreatePKProperties(createPKProperties != null ? createPKProperties : action.isCreatePropertyNames());
return action;
}
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/6a43436a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerFrame.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerFrame.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerFrame.java
index 97772de..1af72ba 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerFrame.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerFrame.java
@@ -19,64 +19,12 @@
package org.apache.cayenne.modeler;
-import org.apache.cayenne.modeler.action.AboutAction;
-import org.apache.cayenne.modeler.action.ActionManager;
-import org.apache.cayenne.modeler.action.CgenAction;
-import org.apache.cayenne.modeler.action.ConfigurePreferencesAction;
-import org.apache.cayenne.modeler.action.CopyAction;
-import org.apache.cayenne.modeler.action.CreateDataMapAction;
-import org.apache.cayenne.modeler.action.CreateDbEntityAction;
-import org.apache.cayenne.modeler.action.CreateEmbeddableAction;
-import org.apache.cayenne.modeler.action.CreateNodeAction;
-import org.apache.cayenne.modeler.action.CreateObjEntityAction;
-import org.apache.cayenne.modeler.action.CreateProcedureAction;
-import org.apache.cayenne.modeler.action.CreateQueryAction;
-import org.apache.cayenne.modeler.action.CutAction;
-import org.apache.cayenne.modeler.action.DbEntitySyncAction;
-import org.apache.cayenne.modeler.action.DocumentationAction;
-import org.apache.cayenne.modeler.action.ExitAction;
-import org.apache.cayenne.modeler.action.FindAction;
-import org.apache.cayenne.modeler.action.GenerateCodeAction;
-import org.apache.cayenne.modeler.action.GenerateDBAction;
-import org.apache.cayenne.modeler.action.ImportDataMapAction;
-import org.apache.cayenne.modeler.action.ImportEOModelAction;
-import org.apache.cayenne.modeler.action.InferRelationshipsAction;
-import org.apache.cayenne.modeler.action.MigrateAction;
-import org.apache.cayenne.modeler.action.NavigateBackwardAction;
-import org.apache.cayenne.modeler.action.NavigateForwardAction;
-import org.apache.cayenne.modeler.action.NewProjectAction;
-import org.apache.cayenne.modeler.action.ObjEntitySyncAction;
-import org.apache.cayenne.modeler.action.OpenProjectAction;
-import org.apache.cayenne.modeler.action.PasteAction;
-import org.apache.cayenne.modeler.action.ProjectAction;
-import org.apache.cayenne.modeler.action.RedoAction;
-import org.apache.cayenne.modeler.action.RemoveAction;
-import org.apache.cayenne.modeler.action.RevertAction;
-import org.apache.cayenne.modeler.action.SaveAction;
-import org.apache.cayenne.modeler.action.SaveAsAction;
-import org.apache.cayenne.modeler.action.ShowLogConsoleAction;
-import org.apache.cayenne.modeler.action.UndoAction;
-import org.apache.cayenne.modeler.action.ValidateAction;
+import org.apache.cayenne.modeler.action.*;
import org.apache.cayenne.modeler.action.dbimport.ReverseEngineeringToolMenuAction;
import org.apache.cayenne.modeler.dialog.LogConsole;
import org.apache.cayenne.modeler.dialog.welcome.WelcomeScreen;
import org.apache.cayenne.modeler.editor.EditorView;
-import org.apache.cayenne.modeler.event.DataMapDisplayEvent;
-import org.apache.cayenne.modeler.event.DataMapDisplayListener;
-import org.apache.cayenne.modeler.event.DataNodeDisplayEvent;
-import org.apache.cayenne.modeler.event.DataNodeDisplayListener;
-import org.apache.cayenne.modeler.event.DbEntityDisplayListener;
-import org.apache.cayenne.modeler.event.EmbeddableDisplayEvent;
-import org.apache.cayenne.modeler.event.EmbeddableDisplayListener;
-import org.apache.cayenne.modeler.event.EntityDisplayEvent;
-import org.apache.cayenne.modeler.event.MultipleObjectsDisplayEvent;
-import org.apache.cayenne.modeler.event.MultipleObjectsDisplayListener;
-import org.apache.cayenne.modeler.event.ObjEntityDisplayListener;
-import org.apache.cayenne.modeler.event.ProcedureDisplayEvent;
-import org.apache.cayenne.modeler.event.ProcedureDisplayListener;
-import org.apache.cayenne.modeler.event.QueryDisplayEvent;
-import org.apache.cayenne.modeler.event.QueryDisplayListener;
-import org.apache.cayenne.modeler.event.RecentFileListListener;
+import org.apache.cayenne.modeler.event.*;
import org.apache.cayenne.modeler.pref.ComponentGeometry;
import org.apache.cayenne.modeler.util.ModelerUtil;
import org.apache.cayenne.modeler.util.RecentFileMenu;
@@ -84,28 +32,8 @@ import org.apache.cayenne.swing.components.MainToolBar;
import org.apache.cayenne.swing.components.TopBorder;
import org.slf4j.LoggerFactory;
-import javax.swing.Action;
-import javax.swing.BorderFactory;
-import javax.swing.Box;
-import javax.swing.BoxLayout;
-import javax.swing.JButton;
-import javax.swing.JCheckBoxMenuItem;
-import javax.swing.JFrame;
-import javax.swing.JLabel;
-import javax.swing.JMenu;
-import javax.swing.JMenuBar;
-import javax.swing.JPanel;
-import javax.swing.JSplitPane;
-import javax.swing.JTextField;
-import javax.swing.JToolBar;
-import java.awt.AWTEvent;
-import java.awt.BorderLayout;
-import java.awt.Color;
-import java.awt.Component;
-import java.awt.Dimension;
-import java.awt.FlowLayout;
-import java.awt.Font;
-import java.awt.Toolkit;
+import javax.swing.*;
+import java.awt.*;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.awt.event.KeyEvent;
@@ -236,7 +164,6 @@ public class CayenneModelerFrame extends JFrame implements DataNodeDisplayListen
toolMenu.add(getAction(InferRelationshipsAction.class).buildMenu());
toolMenu.add(getAction(ImportEOModelAction.class).buildMenu());
toolMenu.addSeparator();
- toolMenu.add(getAction(CgenAction.class).buildMenu());
toolMenu.add(getAction(GenerateCodeAction.class).buildMenu());
toolMenu.add(getAction(GenerateDBAction.class).buildMenu());
toolMenu.add(getAction(MigrateAction.class).buildMenu());
http://git-wip-us.apache.org/repos/asf/cayenne/blob/6a43436a/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
deleted file mode 100644
index 9dbd71d..0000000
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CgenAction.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package org.apache.cayenne.modeler.action;
-
-import org.apache.cayenne.modeler.Application;
-import org.apache.cayenne.modeler.dialog.codegen.cgen.CgenGlobalController;
-import org.apache.cayenne.modeler.util.CayenneAction;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.awt.event.ActionEvent;
-
-public class CgenAction extends CayenneAction{
-
- private static Logger logObj = LoggerFactory.getLogger(CgenAction.class);
-
- public CgenAction(Application application) {
- super(getActionName(), application);
- }
-
- public static String getActionName(){
- return "Generate All Classes";
- }
-
- @Override
- public void performAction(ActionEvent e) {
- new CgenGlobalController(getApplication().getFrameController()).startup();
- }
-}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/6a43436a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DefaultActionManager.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DefaultActionManager.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DefaultActionManager.java
index d2ad35f..c476fff 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DefaultActionManager.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DefaultActionManager.java
@@ -167,8 +167,6 @@ public class DefaultActionManager implements ActionManager {
registerAction(new LinkDataMapAction(application));
registerAction(new LinkDataMapsAction(application));
-
- registerAction(new CgenAction((application)));
}
private void initActions() {
@@ -197,8 +195,7 @@ public class DefaultActionManager implements ActionManager {
GenerateCodeAction.class.getName(),
GenerateDBAction.class.getName(),
PasteAction.class.getName(),
- ReverseEngineeringToolMenuAction.class.getName(),
- CgenAction.class.getName()));
+ ReverseEngineeringToolMenuAction.class.getName()));
DATA_NODE_ACTIONS = new HashSet<>(DOMAIN_ACTIONS);
DATA_NODE_ACTIONS.addAll(Arrays.asList(
http://git-wip-us.apache.org/repos/asf/cayenne/blob/6a43436a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClassesTabController.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClassesTabController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClassesTabController.java
index 3e61094..b9d1c5b 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClassesTabController.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClassesTabController.java
@@ -26,13 +26,6 @@ import org.apache.cayenne.swing.ImageRendererColumn;
import org.apache.cayenne.swing.ObjectBinding;
import org.apache.cayenne.swing.TableBindingBuilder;
-import javax.swing.*;
-import java.awt.*;
-import java.util.*;
-import java.util.List;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
-
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JTable;
@@ -95,7 +88,7 @@ public class ClassesTabController extends CayenneController {
builder.bindToAction(view.getCheckAll(), "checkAllAction()");
TableBindingBuilder tableBuilder = new TableBindingBuilder(builder);
-
+
tableBuilder.addColumn(
"",
"parent.setCurrentClass(#item), selected",
@@ -104,7 +97,7 @@ public class ClassesTabController extends CayenneController {
Boolean.TRUE);
tableBuilder.addColumn(
- "Entity",
+ "Class",
"parent.getItemName(#item)",
JLabel.class,
false,
@@ -207,4 +200,4 @@ public class ClassesTabController extends CayenneController {
}
return true;
}
-}
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cayenne/blob/6a43436a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClassesTabPanel.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClassesTabPanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClassesTabPanel.java
index 3c6e53d..b1d3bd9 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClassesTabPanel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClassesTabPanel.java
@@ -22,12 +22,13 @@ package org.apache.cayenne.modeler.dialog.codegen;
import org.apache.cayenne.map.DataMap;
import javax.swing.BoxLayout;
-import javax.swing.*;
-import javax.swing.border.EmptyBorder;
-import java.awt.*;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
+import javax.swing.JCheckBox;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTable;
+import javax.swing.ScrollPaneConstants;
+import javax.swing.UIManager;
import javax.swing.border.EmptyBorder;
import java.awt.BorderLayout;
import java.awt.Component;
@@ -137,4 +138,4 @@ public class ClassesTabPanel extends JPanel {
public JCheckBox getCheckAll() {
return checkAll;
}
-}
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cayenne/blob/6a43436a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClientModeController.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClientModeController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClientModeController.java
index 4d5335f..9e3897e 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClientModeController.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClientModeController.java
@@ -78,4 +78,4 @@ public class ClientModeController extends StandardModeController {
protected ClassGenerationAction newGenerator() {
return new ClientClassGenerationAction();
}
-}
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cayenne/blob/6a43436a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorController.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorController.java
index f4395e9..55817a6 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorController.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorController.java
@@ -113,7 +113,7 @@ public class CodeGeneratorController extends CodeGeneratorControllerBase {
}
label = label.concat("; ");
-
+
int sizeEmb = getSelectedEmbeddablesSize();
if (sizeEmb == 0) {
@@ -166,4 +166,4 @@ public class CodeGeneratorController extends CodeGeneratorControllerBase {
view.dispose();
}
-}
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cayenne/blob/6a43436a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorControllerBase.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorControllerBase.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorControllerBase.java
index 6e6084c..91d87e4 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorControllerBase.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorControllerBase.java
@@ -27,10 +27,14 @@ import org.apache.cayenne.modeler.util.CellRenderers;
import org.apache.cayenne.validation.ValidationFailure;
import org.apache.cayenne.validation.ValidationResult;
-import javax.swing.*;
-import java.awt.*;
-import java.util.*;
+import javax.swing.Icon;
+import javax.swing.JLabel;
+import java.awt.Component;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
import java.util.List;
+import java.util.Set;
import java.util.function.Predicate;
/**
@@ -212,7 +216,7 @@ public abstract class CodeGeneratorControllerBase extends CayenneController {
for (Object classObj : classes) {
if (classObj instanceof Embeddable
&& selectedEmbeddables.contains(((Embeddable) classObj)
- .getClassName())) {
+ .getClassName())) {
selected.add((Embeddable) classObj);
}
}
@@ -262,14 +266,14 @@ public abstract class CodeGeneratorControllerBase extends CayenneController {
public String getProblem(Object obj) {
String name = null;
-
+
if (obj instanceof ObjEntity) {
name = ((ObjEntity) obj).getName();
}
else if (obj instanceof Embeddable) {
name = ((Embeddable) obj).getClassName();
}
-
+
if (validation == null) {
return null;
}
@@ -373,4 +377,4 @@ public abstract class CodeGeneratorControllerBase extends CayenneController {
return labelIcon;
}
-}
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cayenne/blob/6a43436a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorDialog.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorDialog.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorDialog.java
index c6d6e69..2bb635f 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorDialog.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorDialog.java
@@ -22,8 +22,19 @@ package org.apache.cayenne.modeler.dialog.codegen;
import org.apache.cayenne.modeler.Application;
import org.apache.cayenne.swing.components.TopBorder;
-import javax.swing.*;
-import java.awt.*;
+import javax.swing.Box;
+import javax.swing.JButton;
+import javax.swing.JDialog;
+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.Container;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
/**
*/
@@ -85,4 +96,4 @@ public class CodeGeneratorDialog extends JDialog {
public JLabel getClassesCount() {
return classesCount;
}
-}
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cayenne/blob/6a43436a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomModeController.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomModeController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomModeController.java
index 4f48854..bb87006 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomModeController.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomModeController.java
@@ -28,13 +28,22 @@ import org.apache.cayenne.swing.BindingBuilder;
import org.apache.cayenne.swing.ObjectBinding;
import org.apache.cayenne.util.Util;
-import javax.swing.*;
-import java.awt.*;
-import java.util.*;
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.JCheckBox;
+import javax.swing.JComboBox;
+import java.awt.Component;
import java.util.List;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
import java.util.Map.Entry;
+import java.util.Objects;
+import java.util.Set;
+import java.util.TreeMap;
-import static org.apache.cayenne.modeler.CodeTemplateManager.*;
+import static org.apache.cayenne.modeler.CodeTemplateManager.SINGLE_SERVER_CLASS;
+import static org.apache.cayenne.modeler.CodeTemplateManager.STANDARD_SERVER_SUBCLASS;
+import static org.apache.cayenne.modeler.CodeTemplateManager.STANDARD_SERVER_SUPERCLASS;
import static org.apache.cayenne.modeler.dialog.pref.PreferenceDialog.TEMPLATES_KEY;
/**
@@ -223,4 +232,4 @@ public class CustomModeController extends GeneratorController {
getApplication().getInjector().injectMembers(action);
return action;
}
-}
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cayenne/blob/6a43436a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomModePanel.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomModePanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomModePanel.java
index 73f89f7..406e1d2 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomModePanel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomModePanel.java
@@ -29,8 +29,6 @@ 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 {
@@ -58,11 +56,6 @@ public class CustomModePanel extends GeneratorControllerPanel {
this.manageTemplatesLink = new ActionLink("Customize Templates...");
manageTemplatesLink.setFont(manageTemplatesLink.getFont().deriveFont(10f));
- pairs.addChangeListener(e -> {
- superclassTemplate.setEnabled(pairs.isSelected());
- overwrite.setEnabled(!pairs.isSelected());
- });
-
// assemble
FormLayout layout = new FormLayout(
"right:77dlu, 1dlu, fill:100:grow, 1dlu, left:80dlu, 1dlu", "");
@@ -141,4 +134,4 @@ public class CustomModePanel extends GeneratorControllerPanel {
public JCheckBox getCreatePKProperties() {
return createPKProperties;
}
-}
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cayenne/blob/6a43436a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorController.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorController.java
index c695684..db8c872 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorController.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorController.java
@@ -22,7 +22,13 @@ package org.apache.cayenne.modeler.dialog.codegen;
import org.apache.cayenne.CayenneRuntimeException;
import org.apache.cayenne.gen.ArtifactsGenerationMode;
import org.apache.cayenne.gen.ClassGenerationAction;
-import org.apache.cayenne.map.*;
+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.modeler.Application;
import org.apache.cayenne.modeler.dialog.pref.GeneralPreferences;
import org.apache.cayenne.modeler.pref.DataMapDefaults;
@@ -36,15 +42,22 @@ import org.apache.cayenne.validation.SimpleValidationFailure;
import org.apache.cayenne.validation.ValidationFailure;
import org.apache.cayenne.validation.ValidationResult;
-import javax.swing.*;
+import javax.swing.JButton;
+import javax.swing.JFileChooser;
+import javax.swing.JOptionPane;
+import javax.swing.JTextField;
import java.io.File;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.LinkedList;
+import java.util.Map;
+import java.util.Set;
import java.util.function.Predicate;
import java.util.prefs.Preferences;
/**
* A mode-specific part of the code generation dialog.
- *
+ *
*/
public abstract class GeneratorController extends CayenneController {
@@ -149,7 +162,6 @@ public abstract class GeneratorController extends CayenneController {
selectedEntities.removeIf(ObjEntity::isGeneric);
Collection<ClassGenerationAction> generators = new ArrayList<>();
- Collection<StandardPanelComponent> dataMapLines = ((GeneratorControllerPanel) getView()).getDataMapLines();
for (DataMap map : getParentController().getDataMaps()) {
try {
ClassGenerationAction generator = newGenerator();
@@ -180,7 +192,7 @@ public abstract class GeneratorController extends CayenneController {
}
- generator.setDestDir(outputDir);
+// generator.setDestDir(outputDir);
generator.setMakePairs(true);
generator.setForce(true);
@@ -547,4 +559,4 @@ public abstract class GeneratorController extends CayenneController {
}
return path.toString();
}
-}
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cayenne/blob/6a43436a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorControllerPanel.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorControllerPanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorControllerPanel.java
index bb02345..49cbc4b 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorControllerPanel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorControllerPanel.java
@@ -27,7 +27,7 @@ import java.util.Collection;
/**
* A generic panel that is a superclass of generator panels, defining common fields.
- *
+ *
*/
public class GeneratorControllerPanel extends JPanel {
@@ -52,4 +52,4 @@ public class GeneratorControllerPanel extends JPanel {
public Collection<StandardPanelComponent> getDataMapLines() {
return dataMapLines;
}
-}
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cayenne/blob/6a43436a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorTabController.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorTabController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorTabController.java
index 4e681ae..5d7594f 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorTabController.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorTabController.java
@@ -26,7 +26,7 @@ import org.apache.cayenne.pref.PreferenceDetail;
import org.apache.cayenne.swing.BindingBuilder;
import org.apache.cayenne.util.Util;
-import java.awt.*;
+import java.awt.Component;
import java.awt.Dimension;
import java.util.Collection;
import java.util.HashMap;
http://git-wip-us.apache.org/repos/asf/cayenne/blob/6a43436a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorTabPanel.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorTabPanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorTabPanel.java
index 130741d..854e2d6 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorTabPanel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorTabPanel.java
@@ -62,4 +62,4 @@ public class GeneratorTabPanel extends JPanel {
public JComboBox getGenerationMode() {
return generationMode;
}
-}
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cayenne/blob/6a43436a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/StandardModeController.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/StandardModeController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/StandardModeController.java
index f11ade8..b0650d8 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/StandardModeController.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/StandardModeController.java
@@ -23,7 +23,7 @@ import org.apache.cayenne.gen.ClassGenerationAction;
import org.apache.cayenne.map.DataMap;
import org.apache.cayenne.modeler.pref.DataMapDefaults;
-import java.awt.*;
+import java.awt.Component;
import java.util.ArrayList;
import java.util.Collection;
import java.util.TreeMap;
@@ -38,7 +38,7 @@ public class StandardModeController extends GeneratorController {
}
protected void createDefaults() {
- TreeMap<DataMap, DataMapDefaults> treeMap = new TreeMap<DataMap, DataMapDefaults>();
+ TreeMap<DataMap, DataMapDefaults> treeMap = new TreeMap<>();
ArrayList<DataMap> dataMaps = (ArrayList<DataMap>) getParentController().getDataMaps();
for (DataMap dataMap : dataMaps) {
@@ -79,4 +79,4 @@ public class StandardModeController extends GeneratorController {
public Collection<ClassGenerationAction> createGenerator() {
return super.createGenerator();
}
-}
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cayenne/blob/6a43436a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/StandardModePanel.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/StandardModePanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/StandardModePanel.java
index 1f10ffb..cbb3f35 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/StandardModePanel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/StandardModePanel.java
@@ -22,7 +22,7 @@ package org.apache.cayenne.modeler.dialog.codegen;
import com.jgoodies.forms.builder.DefaultFormBuilder;
import com.jgoodies.forms.layout.FormLayout;
-import java.awt.*;
+import java.awt.BorderLayout;
public class StandardModePanel extends GeneratorControllerPanel {
http://git-wip-us.apache.org/repos/asf/cayenne/blob/6a43436a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/StandardPanelComponent.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/StandardPanelComponent.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/StandardPanelComponent.java
index b4794f3..425a0f2 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/StandardPanelComponent.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/StandardPanelComponent.java
@@ -78,4 +78,4 @@ public class StandardPanelComponent extends JComponent {
return superclassPackage;
}
-}
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cayenne/blob/6a43436a/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
deleted file mode 100644
index b81cc73..0000000
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/cgen/CgenDialog.java
+++ /dev/null
@@ -1,74 +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.Application;
-import org.apache.cayenne.swing.components.TopBorder;
-
-import javax.swing.Box;
-import javax.swing.JButton;
-import javax.swing.JDialog;
-import javax.swing.JPanel;
-import javax.swing.JScrollPane;
-import javax.swing.ScrollPaneConstants;
-import java.awt.BorderLayout;
-import java.awt.Component;
-import java.awt.Container;
-import java.awt.Dimension;
-import java.awt.FlowLayout;
-
-/**
- * @since 4.1
- */
-public class CgenDialog extends JDialog {
-
- protected JPanel panel;
- protected JButton cancelButton;
-
- 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;
- }
-}
[17/32] cayenne git commit: Cgen tab, cgen configuration,
cgen in maven, ant, gradle.
Posted by nt...@apache.org.
http://git-wip-us.apache.org/repos/asf/cayenne/blob/52ea45b5/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/CgenTask.java
----------------------------------------------------------------------
diff --git a/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/CgenTask.java b/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/CgenTask.java
index 384d366..3b339df 100644
--- a/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/CgenTask.java
+++ b/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/CgenTask.java
@@ -20,15 +20,18 @@
package org.apache.cayenne.tools;
import java.io.File;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
import java.util.Set;
-import com.sun.org.apache.xpath.internal.operations.Bool;
import groovy.lang.Reference;
import org.apache.cayenne.configuration.xml.DataChannelMetaData;
import org.apache.cayenne.dbsync.filter.NamePatternMatcher;
import org.apache.cayenne.dbsync.reverse.configuration.ToolsModule;
import org.apache.cayenne.di.DIBootstrap;
import org.apache.cayenne.di.Injector;
+import org.apache.cayenne.gen.CgenConfiguration;
import org.apache.cayenne.gen.CgenModule;
import org.apache.cayenne.gen.ClassGenerationAction;
import org.apache.cayenne.gen.ClientClassGenerationAction;
@@ -74,6 +77,10 @@ public class CgenTask extends BaseCayenneTask {
@Input
@Optional
+ private String excludeEmbeddables;
+
+ @Input
+ @Optional
private String makePairs;
@Input
@@ -142,6 +149,8 @@ public class CgenTask extends BaseCayenneTask {
private DataChannelMetaData metaData;
+ private boolean useConfigFromDataMap;
+
@TaskAction
public void generate() {
File dataMapFile = getDataMapFile();
@@ -152,9 +161,12 @@ public class CgenTask extends BaseCayenneTask {
CayenneGeneratorMapLoaderAction loaderAction = new CayenneGeneratorMapLoaderAction(injector);
loaderAction.setMainDataMapFile(dataMapFile);
- CayenneGeneratorEntityFilterAction filterAction = new CayenneGeneratorEntityFilterAction();
- filterAction.setClient(client);
- filterAction.setNameFilter(NamePatternMatcher.build(getLogger(), includeEntities, excludeEntities));
+ CayenneGeneratorEntityFilterAction filterEntityAction = new CayenneGeneratorEntityFilterAction();
+ filterEntityAction.setClient(client);
+ filterEntityAction.setNameFilter(NamePatternMatcher.build(getLogger(), includeEntities, excludeEntities));
+
+ CayenneGeneratorEmbeddableFilterAction filterEmbeddableAction = new CayenneGeneratorEmbeddableFilterAction();
+ filterEmbeddableAction.setNameFilter(NamePatternMatcher.build(getLogger(), null, excludeEmbeddables));
try {
loaderAction.setAdditionalDataMapFiles(convertAdditionalDataMaps());
@@ -165,16 +177,18 @@ public class CgenTask extends BaseCayenneTask {
generator.setLogger(getLogger());
if(this.force || getProject().hasProperty("force")) {
- generator.setForce(true);
+ generator.getCgenConfiguration().setForce(true);
}
- generator.setTimestamp(dataMapFile.lastModified());
- generator.setDataMap(dataMap);
- if(generator.getEntities().isEmpty() && generator.getEmbeddables().isEmpty()) {
- generator.addEntities(filterAction.getFilteredEntities(dataMap));
- generator.addEmbeddables(dataMap.getEmbeddables());
- generator.addQueries(dataMap.getQueryDescriptors());
- } else {
+ generator.getCgenConfiguration().setTimestamp(dataMapFile.lastModified());
+
+ if(!hasConfig() && useConfigFromDataMap) {
generator.prepareArtifacts();
+ setDestDir(generator.getCgenConfiguration().getRelPath());
+ generator.getCgenConfiguration().setRelPath(getDestDirFile().toPath());
+ } else {
+ generator.addEntities(filterEntityAction.getFilteredEntities(dataMap));
+ generator.addEmbeddables(filterEmbeddableAction.getFilteredEmbeddables(dataMap));
+ generator.addQueries(dataMap.getQueryDescriptors());
}
generator.execute();
} catch (Exception exception) {
@@ -196,35 +210,74 @@ public class CgenTask extends BaseCayenneTask {
);
}
- ClassGenerationAction newGeneratorInstance() {
- return client ? new ClientClassGenerationAction() : new ClassGenerationAction();
- }
-
ClassGenerationAction createGenerator(DataMap dataMap) {
- ClassGenerationAction action = this.newGeneratorInstance();
-
- if(metaData != null && metaData.get(dataMap, ClassGenerationAction.class) != null){
- action = metaData.get(dataMap, ClassGenerationAction.class);
+ CgenConfiguration cgenConfiguration = buildConfiguration(dataMap);
+ return cgenConfiguration.isClient() ? new ClientClassGenerationAction(cgenConfiguration) :
+ new ClassGenerationAction(cgenConfiguration);
+ }
+
+ CgenConfiguration buildConfiguration(DataMap dataMap) {
+ CgenConfiguration cgenConfiguration;
+ if(hasConfig()) {
+ return cgenConfigFromPom(dataMap);
+ } else if(metaData != null && metaData.get(dataMap, CgenConfiguration.class) != null) {
+ useConfigFromDataMap = true;
+ cgenConfiguration = metaData.get(dataMap, CgenConfiguration.class);
+ Path resourcePath = Paths.get(getDataMapFile().getPath());
+ if(Files.isRegularFile(resourcePath)) {
+ resourcePath = resourcePath.getParent();
+ }
+ cgenConfiguration.setRelPath(resourcePath.resolve(cgenConfiguration.getRelPath()));
+ return cgenConfiguration;
+ } else {
+ cgenConfiguration = new CgenConfiguration();
+ cgenConfiguration.setRelPath(getDestDirFile().getPath());
+ cgenConfiguration.setDataMap(dataMap);
+ return cgenConfiguration;
}
+ }
- action.setDestDir(getDestDirFile());
- action.setEncoding(encoding != null ? encoding : action.getEncoding());
- action.setMakePairs(makePairs != null ? Boolean.valueOf(makePairs) : action.isMakePairs());
- action.setArtifactsGenerationMode(mode != null ? mode : action.getArtifactsGenerationMode());
- action.setOutputPattern(outputPattern != null ? outputPattern : action.getOutputPattern());
- action.setOverwrite(overwrite != null ? Boolean.valueOf(overwrite) : action.isOverwrite());
- action.setSuperPkg(superPkg != null ? superPkg : action.getSuperPkg());
- action.setSuperTemplate(superTemplate != null ? superTemplate : action.getSuperclassTemplate());
- action.setTemplate(template != null ? template : action.getTemplate());
- action.setEmbeddableSuperTemplate(embeddableSuperTemplate != null ? embeddableSuperTemplate : action.getEmbeddableSuperTemplate());
- action.setEmbeddableTemplate(embeddableTemplate != null ? embeddableTemplate : action.getEmbeddableTemplate());
- action.setUsePkgPath(usePkgPath != null ? Boolean.valueOf(usePkgPath) : action.isUsePkgPath());
- action.setCreatePropertyNames(createPropertyNames != null ? Boolean.valueOf(createPropertyNames) : action.isCreatePropertyNames());
- action.setQueryTemplate(queryTemplate != null ? queryTemplate : action.getQueryTemplate());
- action.setQuerySuperTemplate(querySuperTemplate != null ? querySuperTemplate : action.getQuerySuperTemplate());
- return action;
+ private CgenConfiguration cgenConfigFromPom(DataMap dataMap){
+ CgenConfiguration cgenConfiguration = new CgenConfiguration();
+ cgenConfiguration.setDataMap(dataMap);
+ cgenConfiguration.setRelPath(getDestDirFile() != null ? getDestDirFile().getPath() : cgenConfiguration.getRelPath());
+ cgenConfiguration.setEncoding(encoding != null ? encoding : cgenConfiguration.getEncoding());
+ cgenConfiguration.setMakePairs(makePairs != null ? Boolean.valueOf(makePairs) : cgenConfiguration.isMakePairs());
+ cgenConfiguration.setArtifactsGenerationMode(mode != null ? mode : cgenConfiguration.getArtifactsGenerationMode());
+ cgenConfiguration.setOutputPattern(outputPattern != null ? outputPattern : cgenConfiguration.getOutputPattern());
+ cgenConfiguration.setOverwrite(overwrite != null ? Boolean.valueOf(overwrite) : cgenConfiguration.isOverwrite());
+ cgenConfiguration.setSuperPkg(superPkg != null ? superPkg : cgenConfiguration.getSuperPkg());
+ cgenConfiguration.setSuperTemplate(superTemplate != null ? superTemplate : cgenConfiguration.getSuperTemplate());
+ cgenConfiguration.setTemplate(template != null ? template : cgenConfiguration.getTemplate());
+ cgenConfiguration.setEmbeddableSuperTemplate(embeddableSuperTemplate != null ? embeddableSuperTemplate : cgenConfiguration.getEmbeddableSuperTemplate());
+ cgenConfiguration.setEmbeddableTemplate(embeddableTemplate != null ? embeddableTemplate : cgenConfiguration.getEmbeddableTemplate());
+ cgenConfiguration.setUsePkgPath(usePkgPath != null ? Boolean.valueOf(usePkgPath) : cgenConfiguration.isUsePkgPath());
+ cgenConfiguration.setCreatePropertyNames(createPropertyNames != null ? Boolean.valueOf(createPropertyNames) : cgenConfiguration.isCreatePropertyNames());
+ cgenConfiguration.setQueryTemplate(queryTemplate != null ? queryTemplate : cgenConfiguration.getQueryTemplate());
+ cgenConfiguration.setQuerySuperTemplate(querySuperTemplate != null ? querySuperTemplate : cgenConfiguration.getQuerySuperTemplate());
+ cgenConfiguration.setCreatePKProperties(createPKProperties);
+ cgenConfiguration.setClient(client);
+ if(!cgenConfiguration.isMakePairs()) {
+ if(template == null) {
+ cgenConfiguration.setTemplate(client ? ClientClassGenerationAction.SINGLE_CLASS_TEMPLATE : ClassGenerationAction.SINGLE_CLASS_TEMPLATE);
+ }
+ if(embeddableTemplate == null) {
+ cgenConfiguration.setEmbeddableTemplate(ClassGenerationAction.EMBEDDABLE_SINGLE_CLASS_TEMPLATE);
+ }
+ if(queryTemplate == null) {
+ cgenConfiguration.setQueryTemplate(client ? ClientClassGenerationAction.DATAMAP_SINGLE_CLASS_TEMPLATE : ClassGenerationAction.DATAMAP_SINGLE_CLASS_TEMPLATE);
+ }
+ }
+ return cgenConfiguration;
}
+ private boolean hasConfig() {
+ return destDir != null || destDirName != null || encoding != null || client || excludeEntities != null || excludeEmbeddables != null || includeEntities != null ||
+ makePairs != null || mode != null || outputPattern != null || overwrite != null || superPkg != null ||
+ superTemplate != null || template != null || embeddableTemplate != null || embeddableSuperTemplate != null ||
+ usePkgPath != null || createPropertyNames != null || force || queryTemplate != null ||
+ querySuperTemplate != null || createPKProperties;
+ }
@OutputDirectory
protected File getDestDirFile() {
@@ -358,6 +411,18 @@ public class CgenTask extends BaseCayenneTask {
setIncludeEntities(includeEntities);
}
+ public String getExcludeEmbeddables() {
+ return excludeEmbeddables;
+ }
+
+ public void setExcludeEmbeddables(String excludeEmbeddables) {
+ this.excludeEmbeddables = excludeEmbeddables;
+ }
+
+ public void excludeEmbeddables(String excludeEmbeddables) {
+ setExcludeEmbeddables(excludeEmbeddables);
+ }
+
public boolean isMakePairs() {
return Boolean.valueOf(makePairs);
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/52ea45b5/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/CgenTaskIT.java
----------------------------------------------------------------------
diff --git a/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/CgenTaskIT.java b/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/CgenTaskIT.java
index 132320c..b41c1d2 100644
--- a/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/CgenTaskIT.java
+++ b/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/CgenTaskIT.java
@@ -24,11 +24,14 @@ import org.gradle.testkit.runner.GradleRunner;
import org.gradle.testkit.runner.TaskOutcome;
import org.junit.Test;
-
import java.io.File;
import java.net.URLDecoder;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
/**
@@ -88,4 +91,59 @@ public class CgenTaskIT extends BaseTaskIT {
assertEquals(TaskOutcome.SUCCESS, result.task(":cgen").getOutcome());
}
+ @Test
+ public void cgenWithConfig() throws Exception {
+ GradleRunner runner = createRunner(
+ "cgen_with_config",
+ "cgen",
+ "-PdataMap=" + URLDecoder.decode(getClass().getResource("cgenConfig.map.xml").getFile(), "UTF-8")
+ );
+
+ BuildResult result = runner.forwardOutput().build();
+
+ String generatedDirectoryPath = projectDir.getAbsolutePath() + "/customDirectory1/";
+
+ String generatedClassPath = generatedDirectoryPath + "ObjEntity1.txt";
+ String datamap = generatedDirectoryPath + "CgenMap.txt";
+ String notIncludedEntity = generatedDirectoryPath + "ObjEntity.txt";
+ String notIncludedEmbeddable = generatedDirectoryPath + "Embeddable.txt";
+
+ Path generatedClass = Paths.get(generatedClassPath);
+ Path generatedDataMap = Paths.get(datamap);
+ Path generatedNotIncludedEntity = Paths.get(notIncludedEntity);
+ Path generatedNotIncludedEmbeddable = Paths.get(notIncludedEmbeddable);
+
+ assertTrue(Files.exists(generatedClass));
+ assertFalse(Files.exists(generatedDataMap));
+ assertFalse(Files.exists(generatedNotIncludedEmbeddable));
+ assertFalse(Files.exists(generatedNotIncludedEntity));
+ assertEquals(TaskOutcome.SUCCESS, result.task(":cgen").getOutcome());
+ }
+
+ @Test
+ public void testWithConfigs() throws Exception {
+ GradleRunner runner = createRunner(
+ "cgen_with_configs",
+ "cgen",
+ "-PdataMap=" + URLDecoder.decode(getClass().getResource("cgenMap.map.xml").getFile(), "UTF-8")
+ );
+
+ BuildResult result = runner.forwardOutput().build();
+
+ String generatedDirectoryPath = projectDir.getAbsolutePath() + "/customDirectory/";
+
+ String generatedClassPath = generatedDirectoryPath + "ObjEntity.groovy";
+ Path generatedClass = Paths.get(generatedClassPath);
+ assertTrue(Files.exists(generatedClass));
+
+ String notIncludedEntity = generatedDirectoryPath + "ObjEntity1.groovy";
+ Path generatedNotIncludedEntity = Paths.get(notIncludedEntity);
+ assertFalse(Files.exists(generatedNotIncludedEntity));
+
+ String includedDataMap = generatedDirectoryPath + "CgenMap.groovy";
+ Path generatedIncludedDataMap = Paths.get(includedDataMap);
+ assertTrue(Files.exists(generatedIncludedDataMap));
+
+ assertEquals(TaskOutcome.SUCCESS, result.task(":cgen").getOutcome());
+ }
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cayenne/blob/52ea45b5/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/CgenTaskTest.java
----------------------------------------------------------------------
diff --git a/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/CgenTaskTest.java b/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/CgenTaskTest.java
index 478ac5c..e2fa3ca 100644
--- a/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/CgenTaskTest.java
+++ b/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/CgenTaskTest.java
@@ -19,6 +19,7 @@
package org.apache.cayenne.tools;
+import org.apache.cayenne.gen.CgenConfiguration;
import org.apache.cayenne.gen.ClassGenerationAction;
import org.apache.cayenne.map.DataMap;
import org.junit.Rule;
@@ -27,7 +28,8 @@ import org.junit.rules.TemporaryFolder;
import java.io.File;
-import static junit.framework.TestCase.assertSame;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.*;
/**
@@ -40,7 +42,7 @@ public class CgenTaskTest {
DataMap dataMap = new DataMap();
- private CgenTask createCgenTaskMock(ClassGenerationAction action) {
+ private CgenTask createCgenTaskMock() {
CgenTask mock = mock(CgenTask.class);
doCallRealMethod().when(mock).setClient(anyBoolean());
@@ -59,7 +61,7 @@ public class CgenTaskTest {
doCallRealMethod().when(mock).setOverwrite(anyBoolean());
doCallRealMethod().when(mock).setUsePkgPath(anyBoolean());
doCallRealMethod().when(mock).setTemplate(anyString());
- when(mock.newGeneratorInstance()).thenReturn(action);
+ when(mock.buildConfiguration(dataMap)).thenCallRealMethod();
when(mock.createGenerator(dataMap)).thenCallRealMethod();
return mock;
@@ -67,9 +69,7 @@ public class CgenTaskTest {
@Test
public void testGeneratorCreation() {
- ClassGenerationAction action = mock(ClassGenerationAction.class);
- CgenTask task = createCgenTaskMock(action);
-
+ CgenTask task = createCgenTaskMock();
task.setEmbeddableSuperTemplate("superTemplate");
task.setEmbeddableTemplate("template");
task.setEncoding("UTF-8");
@@ -78,28 +78,29 @@ public class CgenTaskTest {
task.setMode("entity");
task.setOutputPattern("pattern");
task.setSuperPkg("org.example.model.auto");
- task.setSuperTemplate("*.java");
- task.setTemplate("*.java");
+ task.setSuperTemplate("superTemplate");
+ task.setTemplate("template");
task.setMakePairs(true);
task.setCreatePropertyNames(true);
task.setOverwrite(true);
task.setUsePkgPath(true);
ClassGenerationAction createdAction = task.createGenerator(dataMap);
- assertSame(action, createdAction);
- verify(action).setCreatePropertyNames(true);
- verify(action).setMakePairs(true);
- verify(action).setOverwrite(true);
- verify(action).setUsePkgPath(true);
- verify(action).setArtifactsGenerationMode("entity");
- verify(action).setEncoding("UTF-8");
- verify(action).setEmbeddableSuperTemplate("superTemplate");
- verify(action).setEmbeddableTemplate("template");
- verify(action).setOutputPattern("pattern");
- verify(action).setSuperPkg("org.example.model.auto");
- verify(action).setSuperTemplate("*.java");
- verify(action).setTemplate("*.java");
+ CgenConfiguration cgenConfiguration = createdAction.getCgenConfiguration();
+ assertEquals(cgenConfiguration.getEmbeddableSuperTemplate(), "superTemplate");
+ assertEquals(cgenConfiguration.getEmbeddableTemplate(), "template");
+ assertEquals(cgenConfiguration.getEncoding(), "UTF-8");
+ assertEquals(cgenConfiguration.getArtifactsGenerationMode(), "entity");
+ assertEquals(cgenConfiguration.getOutputPattern(), "pattern");
+ assertEquals(cgenConfiguration.getSuperPkg(), "org.example.model.auto");
+ assertEquals(cgenConfiguration.getSuperTemplate(), "superTemplate");
+ assertEquals(cgenConfiguration.getTemplate(), "template");
+ assertTrue(cgenConfiguration.isMakePairs());
+ assertTrue(cgenConfiguration.isCreatePropertyNames());
+ assertTrue(cgenConfiguration.isOverwrite());
+ assertTrue(cgenConfiguration.isUsePkgPath());
+
}
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cayenne/blob/52ea45b5/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/CgenTaskWithConfigIT.java
----------------------------------------------------------------------
diff --git a/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/CgenTaskWithConfigIT.java b/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/CgenTaskWithConfigIT.java
deleted file mode 100644
index bf981ec..0000000
--- a/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/CgenTaskWithConfigIT.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- ****************************************************************/
-package org.apache.cayenne.tools;
-
-import org.gradle.testkit.runner.BuildResult;
-import org.gradle.testkit.runner.GradleRunner;
-import org.gradle.testkit.runner.TaskOutcome;
-import org.junit.Test;
-
-
-import java.io.File;
-import java.io.UnsupportedEncodingException;
-import java.net.URLDecoder;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-/**
- * @since 4.1
- */
-public class CgenTaskWithConfigIT extends BaseTaskIT{
-
- @Test
- public void cgenWithConfig() throws Exception {
- GradleRunner runner = createRunner(
- "cgen_with_config",
- "cgen",
- "-PdataMap=" + URLDecoder.decode(getClass().getResource("cgenMap.map.xml").getFile(), "UTF-8")
- );
-
- BuildResult result = runner.forwardOutput().build();
-
- String generatedDirectoryPath = projectDir.getAbsolutePath() + "/customDirectory/";
-
- String generatedClassPath = generatedDirectoryPath + "ObjEntity1.txt";
- String datamap = generatedDirectoryPath + "TestCgenMap.txt";
- String notIncludedEntity = generatedDirectoryPath + "ObjEntity.txt";
- String notIncludedSuperDatamap = generatedDirectoryPath + "_TestCgenMap.txt";
-
- File notIncludeSuperDatamap = new File("_TestCgenMap.txt");
- assertFalse(notIncludeSuperDatamap.exists());
-
- File generatedClass = new File(generatedClassPath);
- File generatedDatamap = new File(datamap);
- File generatedNotIncludedEntity = new File(notIncludedEntity);
- File generatedNotIncludedSuperDatamap = new File(notIncludedSuperDatamap);
-
- assertTrue(generatedClass.exists());
- assertFalse(generatedDatamap.exists());
- assertFalse(generatedNotIncludedEntity.exists());
- assertFalse(generatedNotIncludedSuperDatamap.exists());
- }
-
-}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/52ea45b5/cayenne-gradle-plugin/src/test/resources/org/apache/cayenne/tools/cgenConfig.map.xml
----------------------------------------------------------------------
diff --git a/cayenne-gradle-plugin/src/test/resources/org/apache/cayenne/tools/cgenConfig.map.xml b/cayenne-gradle-plugin/src/test/resources/org/apache/cayenne/tools/cgenConfig.map.xml
new file mode 100644
index 0000000..e3bfe55
--- /dev/null
+++ b/cayenne-gradle-plugin/src/test/resources/org/apache/cayenne/tools/cgenConfig.map.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<data-map xmlns="http://cayenne.apache.org/schema/10/modelMap"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://cayenne.apache.org/schema/10/modelMap http://cayenne.apache.org/schema/10/modelMap.xsd"
+ project-version="10">
+ <embeddable className="Embeddable"/>
+ <obj-entity name="ObjEntity" className="ObjEntity"/>
+ <obj-entity name="ObjEntity1" className="ObjEntity1"/>
+ <cgen xmlns="http://cayenne.apache.org/schema/10/cgen">
+ <destDir>./customDirectory1</destDir>
+ <excludeEntities>ObjEntity</excludeEntities>
+ <excludeEmbeddables>Embeddable</excludeEmbeddables>
+ <mode>entity</mode>
+ <template>templates/v4_1/subclass.vm</template>
+ <superTemplate>templates/v4_1/superclass.vm</superTemplate>
+ <outputPattern>*.txt</outputPattern>
+ <makePairs>false</makePairs>
+ <usePkgPath>true</usePkgPath>
+ <overwrite>false</overwrite>
+ <createPropertyNames>false</createPropertyNames>
+ </cgen>
+</data-map>
http://git-wip-us.apache.org/repos/asf/cayenne/blob/52ea45b5/cayenne-gradle-plugin/src/test/resources/org/apache/cayenne/tools/cgenMap.map.xml
----------------------------------------------------------------------
diff --git a/cayenne-gradle-plugin/src/test/resources/org/apache/cayenne/tools/cgenMap.map.xml b/cayenne-gradle-plugin/src/test/resources/org/apache/cayenne/tools/cgenMap.map.xml
index 930acbc..78da7cd 100644
--- a/cayenne-gradle-plugin/src/test/resources/org/apache/cayenne/tools/cgenMap.map.xml
+++ b/cayenne-gradle-plugin/src/test/resources/org/apache/cayenne/tools/cgenMap.map.xml
@@ -7,21 +7,16 @@
<obj-entity name="ObjEntity" className="ObjEntity"/>
<obj-entity name="ObjEntity1" className="ObjEntity1"/>
<cgen xmlns="http://cayenne.apache.org/schema/10/cgen">
- <objEntity>
- <name>ObjEntity1</name>
- </objEntity>
- <generationMode>all</generationMode>
- <dataMapTemplate>templates/v4_1/datamap-subclass.vm</dataMapTemplate>
- <dataMapSuperclassTemplate>templates/v4_1/datamap-superclass.vm</dataMapSuperclassTemplate>
- <subclassTemplate>templates/v4_1/subclass.vm</subclassTemplate>
- <superclassTemplate>templates/v4_1/superclass.vm</superclassTemplate>
- <embeddableTemplate>templates/v4_1/embeddable-subclass.vm</embeddableTemplate>
- <embeddableSuperclassTemplate>templates/v4_1/embeddable-superclass.vm</embeddableSuperclassTemplate>
+ <destDir>./customDirectory</destDir>
+ <excludeEntities>ObjEntity</excludeEntities>
+ <excludeEmbeddables>Embeddable</excludeEmbeddables>
+ <mode>entity</mode>
+ <template>templates/v4_1/subclass.vm</template>
+ <superTemplate>templates/v4_1/superclass.vm</superTemplate>
<outputPattern>*.txt</outputPattern>
<makePairs>false</makePairs>
<usePkgPath>true</usePkgPath>
- <overwriteSubclasses>false</overwriteSubclasses>
+ <overwrite>false</overwrite>
<createPropertyNames>false</createPropertyNames>
- <encoding>UTF-8</encoding>
</cgen>
</data-map>
http://git-wip-us.apache.org/repos/asf/cayenne/blob/52ea45b5/cayenne-gradle-plugin/src/test/resources/org/apache/cayenne/tools/cgen_with_config.gradle
----------------------------------------------------------------------
diff --git a/cayenne-gradle-plugin/src/test/resources/org/apache/cayenne/tools/cgen_with_config.gradle b/cayenne-gradle-plugin/src/test/resources/org/apache/cayenne/tools/cgen_with_config.gradle
index 3cad46e..94de25f 100644
--- a/cayenne-gradle-plugin/src/test/resources/org/apache/cayenne/tools/cgen_with_config.gradle
+++ b/cayenne-gradle-plugin/src/test/resources/org/apache/cayenne/tools/cgen_with_config.gradle
@@ -19,10 +19,9 @@
plugins {
id 'org.apache.cayenne'
+ id 'java'
}
cgen {
map dataMap
- destDir = './customDirectory'
- mode = 'entity'
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cayenne/blob/52ea45b5/cayenne-gradle-plugin/src/test/resources/org/apache/cayenne/tools/cgen_with_configs.gradle
----------------------------------------------------------------------
diff --git a/cayenne-gradle-plugin/src/test/resources/org/apache/cayenne/tools/cgen_with_configs.gradle b/cayenne-gradle-plugin/src/test/resources/org/apache/cayenne/tools/cgen_with_configs.gradle
new file mode 100644
index 0000000..9299033
--- /dev/null
+++ b/cayenne-gradle-plugin/src/test/resources/org/apache/cayenne/tools/cgen_with_configs.gradle
@@ -0,0 +1,32 @@
+/*****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ ****************************************************************/
+
+plugins {
+ id 'org.apache.cayenne'
+}
+
+cgen {
+ map dataMap
+ destDir = './customDirectory'
+ makePairs false
+ outputPattern = '*.groovy'
+ excludeEntities = 'ObjEntity1'
+ overwrite = false
+ mode = 'all'
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cayenne/blob/52ea45b5/maven-plugins/cayenne-maven-plugin/src/main/java/org/apache/cayenne/tools/CayenneGeneratorMojo.java
----------------------------------------------------------------------
diff --git a/maven-plugins/cayenne-maven-plugin/src/main/java/org/apache/cayenne/tools/CayenneGeneratorMojo.java b/maven-plugins/cayenne-maven-plugin/src/main/java/org/apache/cayenne/tools/CayenneGeneratorMojo.java
index 1ab9f96..e936024 100644
--- a/maven-plugins/cayenne-maven-plugin/src/main/java/org/apache/cayenne/tools/CayenneGeneratorMojo.java
+++ b/maven-plugins/cayenne-maven-plugin/src/main/java/org/apache/cayenne/tools/CayenneGeneratorMojo.java
@@ -24,6 +24,7 @@ import org.apache.cayenne.dbsync.filter.NamePatternMatcher;
import org.apache.cayenne.dbsync.reverse.configuration.ToolsModule;
import org.apache.cayenne.di.DIBootstrap;
import org.apache.cayenne.di.Injector;
+import org.apache.cayenne.gen.CgenConfiguration;
import org.apache.cayenne.gen.CgenModule;
import org.apache.cayenne.gen.ClassGenerationAction;
import org.apache.cayenne.gen.ClientClassGenerationAction;
@@ -38,9 +39,13 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
+import java.net.URL;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
/**
- * Maven mojo to perform class generation from data map. This class is an Maven
+ * Maven mojo to perform class generation from data cgenConfiguration. This class is an Maven
* adapter to DefaultClassGenerator class.
*
* @since 3.0
@@ -94,6 +99,13 @@ public class CayenneGeneratorMojo extends AbstractMojo {
private String includeEntities;
/**
+ * Embeddables (expressed as a perl5 regex) to exclude from template
+ * generation. (Default is to include all embeddables in the DataMap).
+ */
+ @Parameter
+ private String excludeEmbeddables;
+
+ /**
* If set to <code>true</code>, will generate subclass/superclass pairs,
* with all generated code included in superclass (default is
* <code>true</code>).
@@ -207,30 +219,31 @@ public class CayenneGeneratorMojo extends AbstractMojo {
* @since 4.1
*/
@Parameter(defaultValue = "false")
- private Boolean createPKProperties;
+ private boolean createPKProperties;
private transient Injector injector;
private static final Logger logger = LoggerFactory.getLogger(CayenneGeneratorMojo.class);
+ private boolean useConfigFromDataMap;
+
public void execute() throws MojoExecutionException, MojoFailureException {
// Create the destination directory if necessary.
// TODO: (KJM 11/2/06) The destDir really should be added as a
// compilation resource for maven.
- if (!destDir.exists()) {
- destDir.mkdirs();
- }
-
injector = DIBootstrap.createInjector(new CgenModule(), new ToolsModule(LoggerFactory.getLogger(CayenneGeneratorMojo.class)));
Logger logger = new MavenLogger(this);
CayenneGeneratorMapLoaderAction loaderAction = new CayenneGeneratorMapLoaderAction(injector);
loaderAction.setMainDataMapFile(map);
- CayenneGeneratorEntityFilterAction filterAction = new CayenneGeneratorEntityFilterAction();
- filterAction.setClient(client);
- filterAction.setNameFilter(NamePatternMatcher.build(logger, includeEntities, excludeEntities));
+ CayenneGeneratorEntityFilterAction filterEntityAction = new CayenneGeneratorEntityFilterAction();
+ filterEntityAction.setClient(client);
+ filterEntityAction.setNameFilter(NamePatternMatcher.build(logger, includeEntities, excludeEntities));
+
+ CayenneGeneratorEmbeddableFilterAction filterEmbeddableAction = new CayenneGeneratorEmbeddableFilterAction();
+ filterEmbeddableAction.setNameFilter(NamePatternMatcher.build(logger, null, excludeEmbeddables));
try {
loaderAction.setAdditionalDataMapFiles(convertAdditionalDataMaps());
@@ -242,17 +255,17 @@ public class CayenneGeneratorMojo extends AbstractMojo {
if(force) {
// will (re-)generate all files
- generator.setForce(true);
+ generator.getCgenConfiguration().setForce(true);
}
- generator.setTimestamp(map.lastModified());
- generator.setDataMap(dataMap);
- if(!generator.getEntities().isEmpty() || !generator.getEmbeddables().isEmpty()){
+ generator.getCgenConfiguration().setTimestamp(map.lastModified());
+ if(!hasConfig() && useConfigFromDataMap) {
generator.prepareArtifacts();
} else {
- generator.addEntities(filterAction.getFilteredEntities(dataMap));
- generator.addEmbeddables(dataMap.getEmbeddables());
+ generator.addEntities(filterEntityAction.getFilteredEntities(dataMap));
+ generator.addEmbeddables(filterEmbeddableAction.getFilteredEmbeddables(dataMap));
generator.addQueries(dataMap.getQueryDescriptors());
}
+ URL dataName = dataMap.getConfigurationSource().getURL();
generator.execute();
} catch (Exception e) {
throw new MojoExecutionException("Error generating classes: ", e);
@@ -260,7 +273,7 @@ public class CayenneGeneratorMojo extends AbstractMojo {
}
/**
- * Loads and returns DataMap based on <code>map</code> attribute.
+ * Loads and returns DataMap based on <code>cgenConfiguration</code> attribute.
*/
protected File[] convertAdditionalDataMaps() throws Exception {
@@ -277,40 +290,78 @@ public class CayenneGeneratorMojo extends AbstractMojo {
);
}
+ private boolean hasConfig() {
+ return encoding != null || client || excludeEntities != null || excludeEmbeddables != null || includeEntities != null ||
+ makePairs != null || mode != null || outputPattern != null || overwrite != null || superPkg != null ||
+ superTemplate != null || template != null || embeddableTemplate != null || embeddableSuperTemplate != null ||
+ usePkgPath != null || createPropertyNames != null || force || queryTemplate != null ||
+ querySuperTemplate != null || createPKProperties;
+ }
+
/**
* Factory method to create internal class generator. Called from
* constructor.
*/
- protected ClassGenerationAction createGenerator(DataMap dataMap) {
+ private ClassGenerationAction createGenerator(DataMap dataMap) {
+ CgenConfiguration cgenConfiguration = buildConfiguration(dataMap);
+ ClassGenerationAction classGenerationAction = cgenConfiguration.isClient() ? new ClientClassGenerationAction(cgenConfiguration) :
+ new ClassGenerationAction(cgenConfiguration);
+ injector.injectMembers(classGenerationAction);
- ClassGenerationAction action = injector.getInstance(DataChannelMetaData.class).get(dataMap, ClassGenerationAction.class);
+ return classGenerationAction;
+ }
- if (client) {
- action = new ClientClassGenerationAction();
+ private CgenConfiguration buildConfiguration(DataMap dataMap) {
+ CgenConfiguration cgenConfiguration = injector.getInstance(DataChannelMetaData.class).get(dataMap, CgenConfiguration.class);
+ if(hasConfig()) {
+ return cgenConfigFromPom(dataMap);
+ } else if(cgenConfiguration != null) {
+ useConfigFromDataMap = true;
+ Path resourcePath = Paths.get(map.getPath());
+ if(Files.isRegularFile(resourcePath)) {
+ resourcePath = resourcePath.getParent();
+ }
+ cgenConfiguration.setRelPath(resourcePath.resolve(cgenConfiguration.getRelPath()));
+ return cgenConfiguration;
} else {
- if(action == null) {
- action = new ClassGenerationAction();
- }
+ cgenConfiguration = new CgenConfiguration();
+ cgenConfiguration.setDataMap(dataMap);
+ cgenConfiguration.setRelPath(destDir.getPath());
+ return cgenConfiguration;
}
+ }
- injector.injectMembers(action);
-
-// action.setDestDir(destDir.toPath());
- action.setEncoding(encoding != null ? encoding : action.getEncoding());
- action.setMakePairs(makePairs != null ? makePairs : action.isMakePairs());
- action.setArtifactsGenerationMode(mode != null ? mode : action.getArtifactsGenerationMode());
- action.setOutputPattern(outputPattern != null ? outputPattern : action.getOutputPattern());
- action.setOverwrite(overwrite != null ? overwrite : action.isOverwrite());
- action.setSuperPkg(superPkg != null ? superPkg : action.getSuperPkg());
- action.setSuperTemplate(superTemplate != null ? superTemplate : action.getSuperclassTemplate());
- action.setTemplate(template != null ? template : action.getTemplate());
- action.setEmbeddableSuperTemplate(embeddableSuperTemplate != null ? embeddableSuperTemplate : action.getEmbeddableSuperTemplate());
- action.setEmbeddableTemplate(embeddableTemplate != null ? embeddableTemplate : action.getEmbeddableTemplate());
- action.setUsePkgPath(usePkgPath != null ? usePkgPath : action.isUsePkgPath());
- action.setCreatePropertyNames(createPropertyNames != null ? createPropertyNames : action.isCreatePropertyNames());
- action.setQueryTemplate(queryTemplate != null ? queryTemplate : action.getQueryTemplate());
- action.setQuerySuperTemplate(querySuperTemplate != null ? querySuperTemplate : action.getQuerySuperTemplate());
- action.setCreatePKProperties(createPKProperties != null ? createPKProperties : action.isCreatePropertyNames());
- return action;
+ private CgenConfiguration cgenConfigFromPom(DataMap dataMap){
+ CgenConfiguration cgenConfiguration = new CgenConfiguration();
+ cgenConfiguration.setDataMap(dataMap);
+ cgenConfiguration.setRelPath(destDir != null ? destDir.getPath() : cgenConfiguration.getRelPath());
+ cgenConfiguration.setEncoding(encoding != null ? encoding : cgenConfiguration.getEncoding());
+ cgenConfiguration.setMakePairs(makePairs != null ? makePairs : cgenConfiguration.isMakePairs());
+ cgenConfiguration.setArtifactsGenerationMode(mode != null ? mode : cgenConfiguration.getArtifactsGenerationMode());
+ cgenConfiguration.setOutputPattern(outputPattern != null ? outputPattern : cgenConfiguration.getOutputPattern());
+ cgenConfiguration.setOverwrite(overwrite != null ? overwrite : cgenConfiguration.isOverwrite());
+ cgenConfiguration.setSuperPkg(superPkg != null ? superPkg : cgenConfiguration.getSuperPkg());
+ cgenConfiguration.setSuperTemplate(superTemplate != null ? superTemplate : cgenConfiguration.getSuperTemplate());
+ cgenConfiguration.setTemplate(template != null ? template : cgenConfiguration.getTemplate());
+ cgenConfiguration.setEmbeddableSuperTemplate(embeddableSuperTemplate != null ? embeddableSuperTemplate : cgenConfiguration.getEmbeddableSuperTemplate());
+ cgenConfiguration.setEmbeddableTemplate(embeddableTemplate != null ? embeddableTemplate : cgenConfiguration.getEmbeddableTemplate());
+ cgenConfiguration.setUsePkgPath(usePkgPath != null ? usePkgPath : cgenConfiguration.isUsePkgPath());
+ cgenConfiguration.setCreatePropertyNames(createPropertyNames != null ? createPropertyNames : cgenConfiguration.isCreatePropertyNames());
+ cgenConfiguration.setQueryTemplate(queryTemplate != null ? queryTemplate : cgenConfiguration.getQueryTemplate());
+ cgenConfiguration.setQuerySuperTemplate(querySuperTemplate != null ? querySuperTemplate : cgenConfiguration.getQuerySuperTemplate());
+ cgenConfiguration.setCreatePKProperties(createPKProperties);
+ cgenConfiguration.setClient(client);
+ if(!cgenConfiguration.isMakePairs()) {
+ if(template == null) {
+ cgenConfiguration.setTemplate(client ? ClientClassGenerationAction.SINGLE_CLASS_TEMPLATE : ClassGenerationAction.SINGLE_CLASS_TEMPLATE);
+ }
+ if(embeddableTemplate == null) {
+ cgenConfiguration.setEmbeddableTemplate(ClassGenerationAction.EMBEDDABLE_SINGLE_CLASS_TEMPLATE);
+ }
+ if(queryTemplate == null) {
+ cgenConfiguration.setQueryTemplate(client ? ClientClassGenerationAction.DATAMAP_SINGLE_CLASS_TEMPLATE : ClassGenerationAction.DATAMAP_SINGLE_CLASS_TEMPLATE);
+ }
+ }
+ return cgenConfiguration;
}
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/52ea45b5/maven-plugins/cayenne-maven-plugin/src/test/java/org/apache/cayenne/tools/CayenneGeneratorMojoTest.java
----------------------------------------------------------------------
diff --git a/maven-plugins/cayenne-maven-plugin/src/test/java/org/apache/cayenne/tools/CayenneGeneratorMojoTest.java b/maven-plugins/cayenne-maven-plugin/src/test/java/org/apache/cayenne/tools/CayenneGeneratorMojoTest.java
index 40338fb..edad490 100644
--- a/maven-plugins/cayenne-maven-plugin/src/test/java/org/apache/cayenne/tools/CayenneGeneratorMojoTest.java
+++ b/maven-plugins/cayenne-maven-plugin/src/test/java/org/apache/cayenne/tools/CayenneGeneratorMojoTest.java
@@ -65,4 +65,52 @@ public class CayenneGeneratorMojoTest extends AbstractMojoTestCase {
assertTrue(content.contains("public void addToAdditionalRel(TestRelEntity obj)"));
assertTrue(content.contains("public void removeFromAdditionalRel(TestRelEntity obj)"));
}
+
+ public void testCgenDataMapConfig() throws Exception {
+ File pom = getTestFile("src/test/resources/cgen/project-to-test/cgen-pom.xml");
+ assertNotNull(pom);
+ assertTrue(pom.exists());
+
+ CayenneGeneratorMojo myMojo = (CayenneGeneratorMojo) lookupMojo("cgen", pom);
+ assertNotNull(myMojo);
+ myMojo.execute();
+
+ File testEntity = new File("target/cgenClasses/ObjEntity1.txt");
+ File notIncludedDataMapEntity = new File("target/cgenClasses/TestCgenMap.txt");
+
+ File notIncludedEntity = new File("target/cgenClasses/ObjEntity.txt");
+ File notIncludedEmbeddable = new File("target/cgenClasses/Embeddable.txt");
+ File notIncludedSuperDataMap = new File("target/cgenClasses/_TestCgenMap.txt");
+
+ assertTrue(testEntity.exists());
+ assertFalse(notIncludedDataMapEntity.exists());
+
+ assertFalse(notIncludedEntity.exists());
+ assertFalse(notIncludedSuperDataMap.exists());
+ assertFalse(notIncludedEmbeddable.exists());
+ }
+
+ public void testDataMapPomCgen() throws Exception {
+ File pom = getTestFile("src/test/resources/cgen/project-to-test/datamap-and-pom.xml");
+ assertNotNull(pom);
+ assertTrue(pom.exists());
+
+ CayenneGeneratorMojo myMojo = (CayenneGeneratorMojo) lookupMojo("cgen", pom);
+ assertNotNull(myMojo);
+ myMojo.execute();
+
+ File objEntity1 = new File("target/resultClasses/ObjEntity1.txt");
+ assertTrue(objEntity1.exists());
+ File embeddable = new File("target/resultClasses/Embeddable.txt");
+ assertTrue(embeddable.exists());
+ File dataMap = new File("target/resultClasses/TestCgen.txt");
+ assertTrue(dataMap.exists());
+
+ File objEntity = new File("target/resultClasses/ObjEntity.txt");
+ assertFalse(objEntity.exists());
+ File superObjEntity1 = new File("target/resultClasses/superPkg/_ObjEntity.txt");
+ assertFalse(superObjEntity1.exists());
+ File superDataMap = new File("target/resultClasses/superPkg/_TestCgen.txt");
+ assertFalse(superDataMap.exists());
+ }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/52ea45b5/maven-plugins/cayenne-maven-plugin/src/test/java/org/apache/cayenne/tools/CgenWithConfigMojoTest.java
----------------------------------------------------------------------
diff --git a/maven-plugins/cayenne-maven-plugin/src/test/java/org/apache/cayenne/tools/CgenWithConfigMojoTest.java b/maven-plugins/cayenne-maven-plugin/src/test/java/org/apache/cayenne/tools/CgenWithConfigMojoTest.java
deleted file mode 100644
index 2532db5..0000000
--- a/maven-plugins/cayenne-maven-plugin/src/test/java/org/apache/cayenne/tools/CgenWithConfigMojoTest.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- ****************************************************************/
-package org.apache.cayenne.tools;
-
-import org.apache.maven.plugin.testing.AbstractMojoTestCase;
-
-import java.io.File;
-
-/**
- * @since 4.1
- */
-public class CgenWithConfigMojoTest extends AbstractMojoTestCase {
-
- public void testCgen() throws Exception {
- File pom = getTestFile("src/test/resources/cgen/project-to-test/cgen-pom.xml");
- assertNotNull(pom);
- assertTrue(pom.exists());
-
- CayenneGeneratorMojo myMojo = (CayenneGeneratorMojo) lookupMojo("cgen", pom);
- assertNotNull(myMojo);
- myMojo.execute();
-
- File testEntity = new File("target/cgenClasses/ObjEntity1.txt");
- File notIncludedDataMapEntity = new File("target/cgenClasses/TestCgenMap.txt");
-
- File notIncludedEntity = new File("target/cgenClasses/ObjEntity.txt");
- File notIncludedSuperDataMap = new File("target/cgenClasses/_TestCgenMap.txt");
-
- assertTrue(testEntity.exists());
- assertFalse(notIncludedDataMapEntity.exists());
-
- assertFalse(notIncludedEntity.exists());
- assertFalse(notIncludedSuperDataMap.exists());
- }
-}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/52ea45b5/maven-plugins/cayenne-maven-plugin/src/test/resources/cgen/project-to-test/cgen-pom.xml
----------------------------------------------------------------------
diff --git a/maven-plugins/cayenne-maven-plugin/src/test/resources/cgen/project-to-test/cgen-pom.xml b/maven-plugins/cayenne-maven-plugin/src/test/resources/cgen/project-to-test/cgen-pom.xml
index eadddc6..f72e2db 100644
--- a/maven-plugins/cayenne-maven-plugin/src/test/resources/cgen/project-to-test/cgen-pom.xml
+++ b/maven-plugins/cayenne-maven-plugin/src/test/resources/cgen/project-to-test/cgen-pom.xml
@@ -38,8 +38,6 @@
<artifactId>cayenne-maven-plugin</artifactId>
<configuration>
<map>src/test/resources/cgen/testCgenMap.map.xml</map>
- <destDir>target/cgenClasses</destDir>
- <mode>entity</mode>
</configuration>
</plugin>
</plugins>
http://git-wip-us.apache.org/repos/asf/cayenne/blob/52ea45b5/maven-plugins/cayenne-maven-plugin/src/test/resources/cgen/project-to-test/datamap-and-pom.xml
----------------------------------------------------------------------
diff --git a/maven-plugins/cayenne-maven-plugin/src/test/resources/cgen/project-to-test/datamap-and-pom.xml b/maven-plugins/cayenne-maven-plugin/src/test/resources/cgen/project-to-test/datamap-and-pom.xml
new file mode 100644
index 0000000..620a6d0
--- /dev/null
+++ b/maven-plugins/cayenne-maven-plugin/src/test/resources/cgen/project-to-test/datamap-and-pom.xml
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
+ http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+ <name>Test CayenneGeneratorMojo</name>
+
+ <dependencies>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>cayenne-maven-plugin</artifactId>
+ <configuration>
+ <map>src/test/resources/cgen/testCgen.map.xml</map>
+ <destDir>target/resultClasses</destDir>
+ <outputPattern>*.txt</outputPattern>
+ <makePairs>false</makePairs>
+ <usePkgPath>true</usePkgPath>
+ <superPkg>superPkg</superPkg>
+ <encoding>UTF-8</encoding>
+ <excludeEntities>ObjEntity</excludeEntities>
+ <mode>all</mode>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
http://git-wip-us.apache.org/repos/asf/cayenne/blob/52ea45b5/maven-plugins/cayenne-maven-plugin/src/test/resources/cgen/testCgen.map.xml
----------------------------------------------------------------------
diff --git a/maven-plugins/cayenne-maven-plugin/src/test/resources/cgen/testCgen.map.xml b/maven-plugins/cayenne-maven-plugin/src/test/resources/cgen/testCgen.map.xml
new file mode 100644
index 0000000..6986022
--- /dev/null
+++ b/maven-plugins/cayenne-maven-plugin/src/test/resources/cgen/testCgen.map.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<data-map xmlns="http://cayenne.apache.org/schema/10/modelMap"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://cayenne.apache.org/schema/10/modelMap http://cayenne.apache.org/schema/10/modelMap.xsd"
+ project-version="10">
+ <embeddable className="Embeddable"/>
+ <obj-entity name="ObjEntity" className="ObjEntity"/>
+ <obj-entity name="ObjEntity1" className="ObjEntity1"/>
+ <cgen xmlns="http://cayenne.apache.org/schema/10/cgen">
+ <destDir>../../../../target/cgenClasses</destDir>
+ <mode>entity</mode>
+ <excludeEntities>ObjEntity1</excludeEntities>
+ <excludeEmbeddables>Embeddable</excludeEmbeddables>
+ <template>templates/v4_1/subclass.vm</template>
+ <superTemplate>templates/v4_1/superclass.vm</superTemplate>
+ <outputPattern>*.txt</outputPattern>
+ <makePairs>true</makePairs>
+ <usePkgPath>true</usePkgPath>
+ <overwrite>false</overwrite>
+ <createPropertyNames>false</createPropertyNames>
+ </cgen>
+</data-map>
http://git-wip-us.apache.org/repos/asf/cayenne/blob/52ea45b5/maven-plugins/cayenne-maven-plugin/src/test/resources/cgen/testCgenMap.map.xml
----------------------------------------------------------------------
diff --git a/maven-plugins/cayenne-maven-plugin/src/test/resources/cgen/testCgenMap.map.xml b/maven-plugins/cayenne-maven-plugin/src/test/resources/cgen/testCgenMap.map.xml
index 930acbc..e320b07 100644
--- a/maven-plugins/cayenne-maven-plugin/src/test/resources/cgen/testCgenMap.map.xml
+++ b/maven-plugins/cayenne-maven-plugin/src/test/resources/cgen/testCgenMap.map.xml
@@ -7,21 +7,16 @@
<obj-entity name="ObjEntity" className="ObjEntity"/>
<obj-entity name="ObjEntity1" className="ObjEntity1"/>
<cgen xmlns="http://cayenne.apache.org/schema/10/cgen">
- <objEntity>
- <name>ObjEntity1</name>
- </objEntity>
- <generationMode>all</generationMode>
- <dataMapTemplate>templates/v4_1/datamap-subclass.vm</dataMapTemplate>
- <dataMapSuperclassTemplate>templates/v4_1/datamap-superclass.vm</dataMapSuperclassTemplate>
- <subclassTemplate>templates/v4_1/subclass.vm</subclassTemplate>
- <superclassTemplate>templates/v4_1/superclass.vm</superclassTemplate>
- <embeddableTemplate>templates/v4_1/embeddable-subclass.vm</embeddableTemplate>
- <embeddableSuperclassTemplate>templates/v4_1/embeddable-superclass.vm</embeddableSuperclassTemplate>
+ <destDir>../../../../target/cgenClasses</destDir>
+ <mode>entity</mode>
+ <excludeEntities>ObjEntity</excludeEntities>
+ <excludeEmbeddables>Embeddable</excludeEmbeddables>
+ <template>templates/v4_1/subclass.vm</template>
+ <superTemplate>templates/v4_1/superclass.vm</superTemplate>
<outputPattern>*.txt</outputPattern>
<makePairs>false</makePairs>
<usePkgPath>true</usePkgPath>
- <overwriteSubclasses>false</overwriteSubclasses>
+ <overwrite>false</overwrite>
<createPropertyNames>false</createPropertyNames>
- <encoding>UTF-8</encoding>
</cgen>
</data-map>
http://git-wip-us.apache.org/repos/asf/cayenne/blob/52ea45b5/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/GenerateCodeAction.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/GenerateCodeAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/GenerateCodeAction.java
index bdb2e15..6861916 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/GenerateCodeAction.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/GenerateCodeAction.java
@@ -19,15 +19,14 @@
package org.apache.cayenne.modeler.action;
+
import org.apache.cayenne.configuration.DataChannelDescriptor;
-import org.apache.cayenne.map.DataMap;
import org.apache.cayenne.modeler.Application;
-import org.apache.cayenne.modeler.dialog.codegen.CodeGeneratorController;
+import org.apache.cayenne.modeler.event.DomainDisplayEvent;
import org.apache.cayenne.modeler.util.CayenneAction;
-import org.apache.cayenne.project.Project;
import java.awt.event.ActionEvent;
-import java.util.Collection;
+
public class GenerateCodeAction extends CayenneAction {
@@ -44,9 +43,6 @@ public class GenerateCodeAction extends CayenneAction {
}
public void performAction(ActionEvent e) {
- Collection<DataMap> dataMaps;
- Project project = getProjectController().getProject();
- dataMaps = ((DataChannelDescriptor) project.getRootNode()).getDataMaps();
- new CodeGeneratorController(getApplication().getFrameController(), dataMaps).startup();
+ getProjectController().fireDomainDisplayEvent(new DomainDisplayEvent(this, (DataChannelDescriptor) getProjectController().getProject().getRootNode()));
}
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/52ea45b5/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClassesTabController.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClassesTabController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClassesTabController.java
index b9d1c5b..8df07df 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClassesTabController.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClassesTabController.java
@@ -1,203 +1,203 @@
-/*****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- ****************************************************************/
-
-package org.apache.cayenne.modeler.dialog.codegen;
-
-import org.apache.cayenne.map.DataMap;
-import org.apache.cayenne.modeler.util.CayenneController;
-import org.apache.cayenne.swing.BindingBuilder;
-import org.apache.cayenne.swing.ImageRendererColumn;
-import org.apache.cayenne.swing.ObjectBinding;
-import org.apache.cayenne.swing.TableBindingBuilder;
-
-import javax.swing.JCheckBox;
-import javax.swing.JLabel;
-import javax.swing.JTable;
-import java.awt.Component;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.List;
-
-public class ClassesTabController extends CayenneController {
-
- public static final String GENERATE_PROPERTY = "generate";
-
- protected ClassesTabPanel view;
-
- private Map<DataMap, ObjectBinding> objectBindings;
-
- protected Collection<DataMap> dataMaps;
-
- protected Map<DataMap, List<Object>> objectList;
-
- private List<Object> currentCollection;
-
- public ClassesTabController(CodeGeneratorControllerBase parent, Collection<DataMap> dataMaps) {
- super(parent);
-
- currentCollection = new ArrayList<>();
-
- this.objectList = new HashMap<>();
- for(DataMap dataMap : dataMaps) {
- List<Object> list = new ArrayList<>();
- list.add(dataMap);
- list.addAll(dataMap.getObjEntities());
- list.addAll(dataMap.getEmbeddables());
- objectList.put(dataMap, list);
- }
-
- this.objectBindings = new HashMap<>();
- this.dataMaps = dataMaps;
- this.view = new ClassesTabPanel(dataMaps);
-
- initBindings();
- }
-
- protected CodeGeneratorControllerBase getParentController() {
- return (CodeGeneratorControllerBase) getParent();
- }
-
- public Component getView() {
- return view;
- }
-
- protected void initBindings() {
-
- BindingBuilder builder = new BindingBuilder(
- getApplication().getBindingFactory(),
- this);
-
- builder.bindToAction(view.getCheckAll(), "checkAllAction()");
-
- TableBindingBuilder tableBuilder = new TableBindingBuilder(builder);
-
- tableBuilder.addColumn(
- "",
- "parent.setCurrentClass(#item), selected",
- Boolean.class,
- true,
- Boolean.TRUE);
-
- tableBuilder.addColumn(
- "Class",
- "parent.getItemName(#item)",
- JLabel.class,
- false,
- "XXXXXXXXXXXXXX");
-
- tableBuilder.addColumn(
- "Comments, Warnings",
- "parent.getProblem(#item)",
- String.class,
- false,
- "XXXXXXXXXXXXXXXXXXXXXXXXXXX");
-
- for(DataMap dataMap : dataMaps) {
- JTable table = view.getDataMapTables().get(dataMap);
- if(table != null) {
- currentCollection = objectList.get(dataMap);
- objectBindings.put(dataMap, tableBuilder.bindToTable(table, "currentCollection"));
- table.getColumnModel().getColumn(1).setCellRenderer(new ImageRendererColumn());
- }
- JCheckBox checkBox = view.getDataMapJCheckBoxMap().get(dataMap);
- if(checkBox != null) {
- checkBox.addActionListener(val -> checkDataMap(dataMap, ((JCheckBox)val.getSource()).isSelected()));
- }
- }
- }
-
- public List<Object> getCurrentCollection() {
- return currentCollection;
- }
-
- public boolean isSelected() {
- return getParentController().isSelected();
- }
-
- public void setSelected(boolean selected) {
- getParentController().setSelected(selected);
- classSelectedAction();
-
- for(DataMap dataMap : dataMaps) {
- if(view.isAllCheckBoxesFromDataMapSelected(dataMap)) {
- view.getDataMapJCheckBoxMap().get(dataMap).setSelected(true);
- } else {
- view.getDataMapJCheckBoxMap().get(dataMap).setSelected(false);
- }
- }
- }
-
- /**
- * A callback action that updates the state of Select All checkbox.
- */
- public void classSelectedAction() {
- int selectedCount = getParentController().getSelectedEntitiesSize()
- + getParentController().getSelectedEmbeddablesSize()
- + getParentController().getSelectedDataMapsSize();
-
- if (selectedCount == 0) {
- view.getCheckAll().setSelected(false);
- }
- else if (selectedCount == getParentController().getClasses().size()) {
- view.getCheckAll().setSelected(true);
- }
- }
-
- /**
- * An action that updates entity check boxes in response to the Select All state
- * change.
- */
- public void checkAllAction() {
- if (getParentController().updateSelection(view.getCheckAll().isSelected() ? o -> true : o -> false)) {
- dataMaps.forEach(dataMap -> {
- ObjectBinding binding = objectBindings.get(dataMap);
- if(binding != null) {
- currentCollection = objectList.get(dataMap);
- binding.updateView();
- }
- });
- }
- }
-
- private void checkDataMap(DataMap dataMap, boolean selected) {
- if (getParentController().updateDataMapSelection(selected ? o -> true : o -> false, dataMap)){
- ObjectBinding binding = objectBindings.get(dataMap);
- if(binding != null) {
- currentCollection = objectList.get(dataMap);
- binding.updateView();
- }
- if(isAllMapsSelected()) {
- view.getCheckAll().setSelected(true);
- }
- }
- }
-
- private boolean isAllMapsSelected() {
- for(DataMap dataMap : dataMaps) {
- if(view.getDataMapJCheckBoxMap().get(dataMap) != null) {
- if(!view.getDataMapJCheckBoxMap().get(dataMap).isSelected()) {
- return false;
- }
- }
- }
- return true;
- }
-}
\ No newline at end of file
+///*****************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one
+// * or more contributor license agreements. See the NOTICE file
+// * distributed with this work for additional information
+// * regarding copyright ownership. The ASF licenses this file
+// * to you under the Apache License, Version 2.0 (the
+// * "License"); you may not use this file except in compliance
+// * with the License. You may obtain a copy of the License at
+// *
+// * http://www.apache.org/licenses/LICENSE-2.0
+// *
+// * Unless required by applicable law or agreed to in writing,
+// * software distributed under the License is distributed on an
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// * KIND, either express or implied. See the License for the
+// * specific language governing permissions and limitations
+// * under the License.
+// ****************************************************************/
+//
+//package org.apache.cayenne.modeler.dialog.codegen;
+//
+//import org.apache.cayenne.map.DataMap;
+//import org.apache.cayenne.modeler.util.CayenneController;
+//import org.apache.cayenne.swing.BindingBuilder;
+//import org.apache.cayenne.swing.ImageRendererColumn;
+//import org.apache.cayenne.swing.ObjectBinding;
+//import org.apache.cayenne.swing.TableBindingBuilder;
+//
+//import javax.swing.JCheckBox;
+//import javax.swing.JLabel;
+//import javax.swing.JTable;
+//import java.awt.Component;
+//import java.util.ArrayList;
+//import java.util.Collection;
+//import java.util.HashMap;
+//import java.util.Map;
+//import java.util.List;
+//
+//public class ClassesTabController extends CayenneController {
+//
+// public static final String GENERATE_PROPERTY = "generate";
+//
+// protected ClassesTabPanel view;
+//
+// private Map<DataMap, ObjectBinding> objectBindings;
+//
+// protected Collection<DataMap> dataMaps;
+//
+// protected Map<DataMap, List<Object>> objectList;
+//
+// private List<Object> currentCollection;
+//
+// public ClassesTabController(CodeGeneratorControllerBase parent, Collection<DataMap> dataMaps) {
+// super(parent);
+//
+// currentCollection = new ArrayList<>();
+//
+// this.objectList = new HashMap<>();
+// for(DataMap dataMap : dataMaps) {
+// List<Object> list = new ArrayList<>();
+// list.add(dataMap);
+// list.addAll(dataMap.getObjEntities());
+// list.addAll(dataMap.getEmbeddables());
+// objectList.put(dataMap, list);
+// }
+//
+// this.objectBindings = new HashMap<>();
+// this.dataMaps = dataMaps;
+// this.view = new ClassesTabPanel(dataMaps);
+//
+// initBindings();
+// }
+//
+// protected CodeGeneratorControllerBase getParentController() {
+// return (CodeGeneratorControllerBase) getParent();
+// }
+//
+// public Component getView() {
+// return view;
+// }
+//
+// protected void initBindings() {
+//
+// BindingBuilder builder = new BindingBuilder(
+// getApplication().getBindingFactory(),
+// this);
+//
+// builder.bindToAction(view.getCheckAll(), "checkAllAction()");
+//
+// TableBindingBuilder tableBuilder = new TableBindingBuilder(builder);
+//
+// tableBuilder.addColumn(
+// "",
+// "parent.setCurrentClass(#item), selected",
+// Boolean.class,
+// true,
+// Boolean.TRUE);
+//
+// tableBuilder.addColumn(
+// "Class",
+// "parent.getItemName(#item)",
+// JLabel.class,
+// false,
+// "XXXXXXXXXXXXXX");
+//
+// tableBuilder.addColumn(
+// "Comments, Warnings",
+// "parent.getProblem(#item)",
+// String.class,
+// false,
+// "XXXXXXXXXXXXXXXXXXXXXXXXXXX");
+//
+// for(DataMap dataMap : dataMaps) {
+// JTable table = view.getDataMapTables().get(dataMap);
+// if(table != null) {
+// currentCollection = objectList.get(dataMap);
+// objectBindings.put(dataMap, tableBuilder.bindToTable(table, "currentCollection"));
+// table.getColumnModel().getColumn(1).setCellRenderer(new ImageRendererColumn());
+// }
+// JCheckBox checkBox = view.getDataMapJCheckBoxMap().get(dataMap);
+// if(checkBox != null) {
+// checkBox.addActionListener(val -> checkDataMap(dataMap, ((JCheckBox)val.getSource()).isSelected()));
+// }
+// }
+// }
+//
+// public List<Object> getCurrentCollection() {
+// return currentCollection;
+// }
+//
+// public boolean isSelected() {
+// return getParentController().isSelected();
+// }
+//
+// public void setSelected(boolean selected) {
+// getParentController().setSelected(selected);
+// classSelectedAction();
+//
+// for(DataMap dataMap : dataMaps) {
+// if(view.isAllCheckBoxesFromDataMapSelected(dataMap)) {
+// view.getDataMapJCheckBoxMap().get(dataMap).setSelected(true);
+// } else {
+// view.getDataMapJCheckBoxMap().get(dataMap).setSelected(false);
+// }
+// }
+// }
+//
+// /**
+// * A callback action that updates the state of Select All checkbox.
+// */
+// public void classSelectedAction() {
+// int selectedCount = getParentController().getSelectedEntitiesSize()
+// + getParentController().getSelectedEmbeddablesSize()
+// + getParentController().getSelectedDataMapsSize();
+//
+// if (selectedCount == 0) {
+// view.getCheckAll().setSelected(false);
+// }
+// else if (selectedCount == getParentController().getClasses().size()) {
+// view.getCheckAll().setSelected(true);
+// }
+// }
+//
+// /**
+// * An action that updates entity check boxes in response to the Select All state
+// * change.
+// */
+// public void checkAllAction() {
+// if (getParentController().updateSelection(view.getCheckAll().isSelected() ? o -> true : o -> false)) {
+// dataMaps.forEach(dataMap -> {
+// ObjectBinding binding = objectBindings.get(dataMap);
+// if(binding != null) {
+// currentCollection = objectList.get(dataMap);
+// binding.updateView();
+// }
+// });
+// }
+// }
+//
+// private void checkDataMap(DataMap dataMap, boolean selected) {
+// if (getParentController().updateDataMapSelection(selected ? o -> true : o -> false, dataMap)){
+// ObjectBinding binding = objectBindings.get(dataMap);
+// if(binding != null) {
+// currentCollection = objectList.get(dataMap);
+// binding.updateView();
+// }
+// if(isAllMapsSelected()) {
+// view.getCheckAll().setSelected(true);
+// }
+// }
+// }
+//
+// private boolean isAllMapsSelected() {
+// for(DataMap dataMap : dataMaps) {
+// if(view.getDataMapJCheckBoxMap().get(dataMap) != null) {
+// if(!view.getDataMapJCheckBoxMap().get(dataMap).isSelected()) {
+// return false;
+// }
+// }
+// }
+// return true;
+// }
+//}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cayenne/blob/52ea45b5/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClassesTabPanel.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClassesTabPanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClassesTabPanel.java
index b1d3bd9..5d7e895 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClassesTabPanel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClassesTabPanel.java
@@ -1,141 +1,141 @@
-/*****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- ****************************************************************/
-
-package org.apache.cayenne.modeler.dialog.codegen;
-
-import org.apache.cayenne.map.DataMap;
-
-import javax.swing.BoxLayout;
-import javax.swing.JCheckBox;
-import javax.swing.JLabel;
-import javax.swing.JPanel;
-import javax.swing.JScrollPane;
-import javax.swing.JTable;
-import javax.swing.ScrollPaneConstants;
-import javax.swing.UIManager;
-import javax.swing.border.EmptyBorder;
-import java.awt.BorderLayout;
-import java.awt.Component;
-import java.awt.Dimension;
-import java.awt.FlowLayout;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- */
-public class ClassesTabPanel extends JPanel {
-
- protected JCheckBox checkAll;
- protected JLabel checkAllLabel;
-
- private Map<DataMap, JTable> dataMapTables;
-
- private Map<DataMap, JCheckBox> dataMapJCheckBoxMap;
-
- public ClassesTabPanel(Collection<DataMap> dataMaps) {
- dataMapTables = new HashMap<>();
- dataMapJCheckBoxMap = new HashMap<>();
-
- // TODO: andrus 04/07/2006 - is there an easy way to stick that checkbox in the
- // table header????
- this.checkAll = new JCheckBox();
- this.checkAllLabel = new JLabel("Check All Classes");
-
- checkAll.addItemListener(event -> {
- if (checkAll.isSelected()) {
- checkAllLabel.setText("Uncheck All Classess");
- dataMapJCheckBoxMap.keySet().forEach(val -> dataMapJCheckBoxMap.get(val).setSelected(true));
- }
- else {
- checkAllLabel.setText("Check All Classes");
- dataMapJCheckBoxMap.keySet().forEach(val -> dataMapJCheckBoxMap.get(val).setSelected(false));
- }
- });
-
- // assemble
- JPanel topPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
- topPanel.setBorder(UIManager.getBorder("ToolBar.border"));
- topPanel.add(checkAll);
- topPanel.add(checkAllLabel);
-
- JPanel panel = new JPanel();
- panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
- for(DataMap dataMap : dataMaps) {
- JTable table = new JTable();
- table.setRowHeight(22);
- dataMapTables.put(dataMap, table);
- JPanel scrollTable = new JPanel(new BorderLayout());
- scrollTable.add(dataMapTables.get(dataMap).getTableHeader(), BorderLayout.NORTH);
- scrollTable.add(dataMapTables.get(dataMap), BorderLayout.CENTER);
- scrollTable.setPreferredSize(new Dimension(dataMapTables.get(dataMap).getPreferredSize().width,
- (dataMap.getEmbeddables().size() + dataMap.getObjEntities().size()) * dataMapTables.get(dataMap).getRowHeight() + 45));
- JPanel labelPanel = new JPanel(new BorderLayout());
- labelPanel.setPreferredSize(new Dimension(dataMapTables.get(dataMap).getPreferredSize().width, 20));
- JLabel dataMapLabel = new JLabel(dataMap.getName());
- dataMapLabel.setAlignmentX(Component.CENTER_ALIGNMENT);
- dataMapLabel.setBorder(new EmptyBorder(8, 8, 8, 0));
- labelPanel.add(dataMapLabel, BorderLayout.CENTER);
-
- JCheckBox dataMapCheckBox = new JCheckBox();
- dataMapJCheckBoxMap.put(dataMap, dataMapCheckBox);
- labelPanel.add(dataMapCheckBox, BorderLayout.WEST);
-
- JPanel currPanel = new JPanel(new BorderLayout());
- currPanel.add(labelPanel, BorderLayout.NORTH);
- currPanel.add(scrollTable, BorderLayout.CENTER);
-
- panel.add(currPanel);
- }
-
- JScrollPane tablePanel = new JScrollPane(
- panel,
- ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
- ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
-
- // set some minimal preferred size, so that it is smaller than other forms used in
- // the dialog... this way we get the right automated overall size
- tablePanel.setPreferredSize(new Dimension(450, 400));
- setLayout(new BorderLayout());
- add(topPanel, BorderLayout.NORTH);
- add(tablePanel, BorderLayout.CENTER);
- }
-
- public boolean isAllCheckBoxesFromDataMapSelected(DataMap dataMap) {
- JTable table = dataMapTables.get(dataMap);
- for(int i = 0; i < table.getRowCount(); i++) {
- if(!(Boolean)table.getModel().getValueAt(i, 0)) {
- return false;
- }
- }
- return true;
- }
-
- public Map<DataMap, JTable> getDataMapTables() {
- return dataMapTables;
- }
-
- public Map<DataMap, JCheckBox> getDataMapJCheckBoxMap() {
- return dataMapJCheckBoxMap;
- }
-
- public JCheckBox getCheckAll() {
- return checkAll;
- }
-}
\ No newline at end of file
+///*****************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one
+// * or more contributor license agreements. See the NOTICE file
+// * distributed with this work for additional information
+// * regarding copyright ownership. The ASF licenses this file
+// * to you under the Apache License, Version 2.0 (the
+// * "License"); you may not use this file except in compliance
+// * with the License. You may obtain a copy of the License at
+// *
+// * http://www.apache.org/licenses/LICENSE-2.0
+// *
+// * Unless required by applicable law or agreed to in writing,
+// * software distributed under the License is distributed on an
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// * KIND, either express or implied. See the License for the
+// * specific language governing permissions and limitations
+// * under the License.
+// ****************************************************************/
+//
+//package org.apache.cayenne.modeler.dialog.codegen;
+//
+//import org.apache.cayenne.map.DataMap;
+//
+//import javax.swing.BoxLayout;
+//import javax.swing.JCheckBox;
+//import javax.swing.JLabel;
+//import javax.swing.JPanel;
+//import javax.swing.JScrollPane;
+//import javax.swing.JTable;
+//import javax.swing.ScrollPaneConstants;
+//import javax.swing.UIManager;
+//import javax.swing.border.EmptyBorder;
+//import java.awt.BorderLayout;
+//import java.awt.Component;
+//import java.awt.Dimension;
+//import java.awt.FlowLayout;
+//import java.util.Collection;
+//import java.util.HashMap;
+//import java.util.Map;
+//
+///**
+// */
+//public class ClassesTabPanel extends JPanel {
+//
+// protected JCheckBox checkAll;
+// protected JLabel checkAllLabel;
+//
+// private Map<DataMap, JTable> dataMapTables;
+//
+// private Map<DataMap, JCheckBox> dataMapJCheckBoxMap;
+//
+// public ClassesTabPanel(Collection<DataMap> dataMaps) {
+// dataMapTables = new HashMap<>();
+// dataMapJCheckBoxMap = new HashMap<>();
+//
+// // TODO: andrus 04/07/2006 - is there an easy way to stick that checkbox in the
+// // table header????
+// this.checkAll = new JCheckBox();
+// this.checkAllLabel = new JLabel("Check All Classes");
+//
+// checkAll.addItemListener(event -> {
+// if (checkAll.isSelected()) {
+// checkAllLabel.setText("Uncheck All Classess");
+// dataMapJCheckBoxMap.keySet().forEach(val -> dataMapJCheckBoxMap.get(val).setSelected(true));
+// }
+// else {
+// checkAllLabel.setText("Check All Classes");
+// dataMapJCheckBoxMap.keySet().forEach(val -> dataMapJCheckBoxMap.get(val).setSelected(false));
+// }
+// });
+//
+// // assemble
+// JPanel topPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
+// topPanel.setBorder(UIManager.getBorder("ToolBar.border"));
+// topPanel.add(checkAll);
+// topPanel.add(checkAllLabel);
+//
+// JPanel panel = new JPanel();
+// panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
+// for(DataMap dataMap : dataMaps) {
+// JTable table = new JTable();
+// table.setRowHeight(22);
+// dataMapTables.put(dataMap, table);
+// JPanel scrollTable = new JPanel(new BorderLayout());
+// scrollTable.add(dataMapTables.get(dataMap).getTableHeader(), BorderLayout.NORTH);
+// scrollTable.add(dataMapTables.get(dataMap), BorderLayout.CENTER);
+// scrollTable.setPreferredSize(new Dimension(dataMapTables.get(dataMap).getPreferredSize().width,
+// (dataMap.getEmbeddables().size() + dataMap.getObjEntities().size()) * dataMapTables.get(dataMap).getRowHeight() + 45));
+// JPanel labelPanel = new JPanel(new BorderLayout());
+// labelPanel.setPreferredSize(new Dimension(dataMapTables.get(dataMap).getPreferredSize().width, 20));
+// JLabel dataMapLabel = new JLabel(dataMap.getName());
+// dataMapLabel.setAlignmentX(Component.CENTER_ALIGNMENT);
+// dataMapLabel.setBorder(new EmptyBorder(8, 8, 8, 0));
+// labelPanel.add(dataMapLabel, BorderLayout.CENTER);
+//
+// JCheckBox dataMapCheckBox = new JCheckBox();
+// dataMapJCheckBoxMap.put(dataMap, dataMapCheckBox);
+// labelPanel.add(dataMapCheckBox, BorderLayout.WEST);
+//
+// JPanel currPanel = new JPanel(new BorderLayout());
+// currPanel.add(labelPanel, BorderLayout.NORTH);
+// currPanel.add(scrollTable, BorderLayout.CENTER);
+//
+// panel.add(currPanel);
+// }
+//
+// JScrollPane tablePanel = new JScrollPane(
+// panel,
+// ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
+// ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
+//
+// // set some minimal preferred size, so that it is smaller than other forms used in
+// // the dialog... this way we get the right automated overall size
+// tablePanel.setPreferredSize(new Dimension(450, 400));
+// setLayout(new BorderLayout());
+// add(topPanel, BorderLayout.NORTH);
+// add(tablePanel, BorderLayout.CENTER);
+// }
+//
+// public boolean isAllCheckBoxesFromDataMapSelected(DataMap dataMap) {
+// JTable table = dataMapTables.get(dataMap);
+// for(int i = 0; i < table.getRowCount(); i++) {
+// if(!(Boolean)table.getModel().getValueAt(i, 0)) {
+// return false;
+// }
+// }
+// return true;
+// }
+//
+// public Map<DataMap, JTable> getDataMapTables() {
+// return dataMapTables;
+// }
+//
+// public Map<DataMap, JCheckBox> getDataMapJCheckBoxMap() {
+// return dataMapJCheckBoxMap;
+// }
+//
+// public JCheckBox getCheckAll() {
+// return checkAll;
+// }
+//}
\ No newline at end of file
[26/32] cayenne git commit: Add dialog to create missing templates or
using default.
Posted by nt...@apache.org.
Add dialog to create missing templates or using default.
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/397d29fa
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/397d29fa
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/397d29fa
Branch: refs/heads/master
Commit: 397d29fa98d1c74ac37732b9243d5cc1366fd98e
Parents: c813e76
Author: Arseni Bulatski <an...@gmail.com>
Authored: Tue Nov 13 16:27:56 2018 +0300
Committer: Arseni Bulatski <an...@gmail.com>
Committed: Tue Nov 13 16:27:56 2018 +0300
----------------------------------------------------------------------
.../cayenne/modeler/CodeTemplateManager.java | 12 +-
.../modeler/dialog/cgen/TemplateDialog.java | 87 ++++++++++++
.../modeler/dialog/cgen/TemplateDialogView.java | 136 +++++++++++++++++++
.../modeler/dialog/pref/PreferenceDialog.java | 18 ++-
.../dialog/pref/TemplatePreferences.java | 37 +++--
.../editor/cgen/CustomModeController.java | 44 ++++--
.../modeler/editor/cgen/CustomModePanel.java | 17 +--
7 files changed, 308 insertions(+), 43 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cayenne/blob/397d29fa/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CodeTemplateManager.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CodeTemplateManager.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CodeTemplateManager.java
index ccb4980..7579d5d 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CodeTemplateManager.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CodeTemplateManager.java
@@ -25,6 +25,8 @@ import org.apache.cayenne.modeler.pref.FSPath;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import java.nio.file.Path;
+import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -155,9 +157,10 @@ public class CodeTemplateManager {
// TODO: andrus, 12/5/2007 - this should also take a "pairs" parameter to
// correctly
// assign standard templates
- public String getTemplatePath(String name) {
+ public String getTemplatePath(String name, Path rootPath) {
Object value = customTemplates.get(name);
if (value != null) {
+ value = rootPath.relativize(Paths.get((String)value));
return value.toString();
}
@@ -165,9 +168,10 @@ public class CodeTemplateManager {
return value != null ? value.toString() : null;
}
- public String getNameByPath(String name) {
- if(reverseCustomTemplate.containsKey(name)){
- return reverseCustomTemplate.get(name);
+ public String getNameByPath(String name, Path rootPath) {
+ String fullPath = rootPath.resolve(Paths.get(name)).toString();
+ if(reverseCustomTemplate.containsKey(fullPath)){
+ return reverseCustomTemplate.get(fullPath);
} else {
Object value = reverseStandartTemplates.get(name);
return value != null ? value.toString() : null;
http://git-wip-us.apache.org/repos/asf/cayenne/blob/397d29fa/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/cgen/TemplateDialog.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/cgen/TemplateDialog.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/cgen/TemplateDialog.java
new file mode 100644
index 0000000..bd81368
--- /dev/null
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/cgen/TemplateDialog.java
@@ -0,0 +1,87 @@
+/*****************************************************************
+ * 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.cgen;
+
+import org.apache.cayenne.gen.CgenConfiguration;
+import org.apache.cayenne.gen.ClassGenerationAction;
+import org.apache.cayenne.modeler.editor.cgen.CustomModeController;
+import org.apache.cayenne.modeler.util.CayenneController;
+
+import javax.swing.JDialog;
+import javax.swing.SwingUtilities;
+import java.awt.Component;
+import java.awt.Dialog;
+import java.awt.Frame;
+import java.awt.Window;
+
+/**
+ * @since 4.1
+ */
+public class TemplateDialog extends CayenneController {
+
+ protected TemplateDialogView view;
+ private CgenConfiguration cgenConfiguration;
+ private String template;
+ private String superTemplate;
+
+ public TemplateDialog(final CayenneController parent, CgenConfiguration cgenConfiguration, String template, String superTemplate) {
+ super(parent);
+ this.cgenConfiguration = cgenConfiguration;
+ this.template = template;
+ this.superTemplate = superTemplate;
+ final Window parentView = parent.getView() instanceof Window
+ ? (Window) parent.getView()
+ : SwingUtilities.getWindowAncestor(parent.getView());
+ this.view = (parentView instanceof Dialog)
+ ? new TemplateDialogView((Dialog) parentView, template, superTemplate)
+ : new TemplateDialogView((Frame) parentView, template, superTemplate);
+ initListeners();
+ }
+
+ public void startupAction() {
+ view.pack();
+ // show
+ centerView();
+ makeCloseableOnEscape();
+ view.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
+ view.setModal(true);
+ view.setVisible(true);
+ }
+
+ @Override
+ public Component getView() {
+ return view;
+ }
+
+ private void initListeners() {
+ view.getUseDefault().addActionListener(action -> {
+ if(template != null) {
+ cgenConfiguration.setTemplate(ClassGenerationAction.SUBCLASS_TEMPLATE);
+ }
+ if(superTemplate != null) {
+ cgenConfiguration.setSuperTemplate(ClassGenerationAction.SUPERCLASS_TEMPLATE);
+ }
+ view.dispose();
+ });
+ view.getAddTemplate().addActionListener(action -> {
+ ((CustomModeController)parent).addTemplateAction(template, superTemplate);
+ view.dispose();
+ });
+ }
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/397d29fa/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/cgen/TemplateDialogView.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/cgen/TemplateDialogView.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/cgen/TemplateDialogView.java
new file mode 100644
index 0000000..48a80f9
--- /dev/null
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/cgen/TemplateDialogView.java
@@ -0,0 +1,136 @@
+/*****************************************************************
+ * 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.cgen;
+
+import com.jgoodies.forms.builder.PanelBuilder;
+import com.jgoodies.forms.layout.CellConstraints;
+import com.jgoodies.forms.layout.FormLayout;
+import org.apache.cayenne.modeler.util.CayenneDialog;
+
+import javax.swing.JButton;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTable;
+import javax.swing.table.AbstractTableModel;
+import java.awt.BorderLayout;
+import java.awt.Dialog;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.Frame;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @since 4.1
+ */
+public class TemplateDialogView extends CayenneDialog {
+
+ private JTable pathTable;
+ private JButton useDefault;
+ private JButton addTemplate;
+ private List<String> missingPathes;
+
+ public TemplateDialogView(Dialog parent, String templatePath, String superTemplatePath) {
+ super(parent);
+ initPathes(templatePath, superTemplatePath);
+ init();
+ }
+
+ public TemplateDialogView(Frame parent, String templatePath, String superTemplatePath) {
+ super(parent);
+ initPathes(templatePath, superTemplatePath);
+ init();
+ }
+
+ private void initPathes(String templatePath, String superTemplatePath) {
+ this.missingPathes = new ArrayList<>();
+ if(templatePath != null) {
+ missingPathes.add(templatePath);
+ }
+ if(superTemplatePath != null) {
+ missingPathes.add(superTemplatePath);
+ }
+ }
+
+ private void init() {
+ useDefault = new JButton("Use default");
+ addTemplate = new JButton("Add template");
+
+ pathTable = new JTable();
+ pathTable.setRowHeight(25);
+ pathTable.setRowMargin(3);
+ pathTable.setCellSelectionEnabled(false);
+
+
+ // assemble
+ CellConstraints cc = new CellConstraints();
+ PanelBuilder builder = new PanelBuilder(new FormLayout("fill:200dlu:grow", "pref, 3dlu, fill:40dlu:grow"));
+
+ builder.setDefaultDialogBorder();
+
+ builder.addLabel("This templates are missing: ", cc.xy(1, 1));
+ builder.add(new JScrollPane(pathTable), cc.xy(1, 3));
+
+ JPanel buttons = new JPanel(new FlowLayout(FlowLayout.RIGHT));
+ buttons.add(useDefault);
+ buttons.add(addTemplate);
+
+ getContentPane().setLayout(new BorderLayout());
+ getContentPane().add(builder.getPanel(), BorderLayout.CENTER);
+ getContentPane().add(buttons, BorderLayout.SOUTH);
+ pathTable.setModel(new MissingPathTableModel());
+
+ setPreferredSize(new Dimension(450, 350));
+ }
+
+ public JButton getUseDefault() {
+ return useDefault;
+ }
+
+ public JButton getAddTemplate() {
+ return addTemplate;
+ }
+
+ class MissingPathTableModel extends AbstractTableModel {
+
+ public int getRowCount() {
+ return missingPathes.size();
+ }
+
+ public int getColumnCount() {
+ return 1;
+ }
+
+ public Object getValueAt(int row, int col) {
+ return missingPathes.get(row);
+ }
+
+ public boolean isCellEditable(int row, int col) {
+ return false;
+ }
+
+ public String getColumnName(int column) {
+ return " ";
+ }
+
+ public Class getColumnClass(int columnIndex) {
+ return String.class;
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/397d29fa/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/PreferenceDialog.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/PreferenceDialog.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/PreferenceDialog.java
index 2e2ab38..677cc5e 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/PreferenceDialog.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/PreferenceDialog.java
@@ -19,6 +19,12 @@
package org.apache.cayenne.modeler.dialog.pref;
+import org.apache.cayenne.modeler.util.CayenneController;
+import org.apache.cayenne.pref.PreferenceEditor;
+
+import javax.swing.JDialog;
+import javax.swing.JList;
+import javax.swing.SwingUtilities;
import java.awt.Component;
import java.awt.Dialog;
import java.awt.Frame;
@@ -26,13 +32,6 @@ import java.awt.Window;
import java.util.HashMap;
import java.util.Map;
-import javax.swing.JDialog;
-import javax.swing.JList;
-import javax.swing.SwingUtilities;
-
-import org.apache.cayenne.modeler.util.CayenneController;
-import org.apache.cayenne.pref.PreferenceEditor;
-
/**
* A controller for editing Modeler preferences.
*
@@ -133,6 +132,11 @@ public class PreferenceDialog extends CayenneController {
view.setVisible(true);
}
+ public void startupToCreateTemplate(String template, String superTemplate) {
+ configure();
+ ((TemplatePreferences) detailControllers.get(TEMPLATES_KEY)).addTemplateAction(template, superTemplate);
+ }
+
protected void configure() {
// init known panels
registerPanel(GENERAL_KEY, new GeneralPreferences(this));
http://git-wip-us.apache.org/repos/asf/cayenne/blob/397d29fa/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/TemplatePreferences.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/TemplatePreferences.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/TemplatePreferences.java
index e76aa5c..1b29183 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/TemplatePreferences.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/TemplatePreferences.java
@@ -19,14 +19,6 @@
package org.apache.cayenne.modeler.dialog.pref;
-import java.awt.Component;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.prefs.BackingStoreException;
-import java.util.prefs.Preferences;
-
-import javax.swing.table.AbstractTableModel;
-
import org.apache.cayenne.modeler.CodeTemplateManager;
import org.apache.cayenne.modeler.pref.FSPath;
import org.apache.cayenne.modeler.util.CayenneController;
@@ -38,6 +30,14 @@ import org.apache.cayenne.swing.TableBindingBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import javax.swing.table.AbstractTableModel;
+import java.awt.Component;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.prefs.BackingStoreException;
+import java.util.prefs.Preferences;
+
public class TemplatePreferences extends CayenneController {
protected TemplatePreferencesView view;
@@ -120,9 +120,28 @@ public class TemplatePreferences extends CayenneController {
}
public void addTemplateAction() {
-
FSPath path = new TemplateCreator(this).startupAction();
+ addToTemplateEntries(path);
+ }
+
+ void addTemplateAction(String templatePath, String superTemplatePath) {
+ if(templatePath != null) {
+ createTemplate(templatePath);
+ }
+ if(superTemplatePath != null) {
+ createTemplate(superTemplatePath);
+ }
+ }
+
+ private void createTemplate(String templatePath) {
+ TemplateCreator templateCreator = new TemplateCreator(this);
+ TemplateCreatorView creatorView = (TemplateCreatorView)templateCreator.getView();
+ creatorView.getTemplateChooser().setFile(Paths.get(templatePath).toFile());
+ FSPath path = templateCreator.startupAction();
+ addToTemplateEntries(path);
+ }
+ private void addToTemplateEntries(FSPath path) {
if (path != null) {
int len = templateEntries.size();
templateEntries.add(path);
http://git-wip-us.apache.org/repos/asf/cayenne/blob/397d29fa/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 c591584..a6be13b 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
@@ -22,12 +22,12 @@ package org.apache.cayenne.modeler.editor.cgen;
import org.apache.cayenne.gen.CgenConfiguration;
import org.apache.cayenne.gen.ClassGenerationAction;
import org.apache.cayenne.modeler.CodeTemplateManager;
+import org.apache.cayenne.modeler.dialog.cgen.TemplateDialog;
import org.apache.cayenne.modeler.dialog.pref.PreferenceDialog;
import org.apache.cayenne.swing.BindingBuilder;
-import javax.swing.*;
-import java.awt.*;
-import java.nio.file.Path;
+import javax.swing.DefaultComboBoxModel;
+import java.awt.Component;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Collections;
@@ -82,22 +82,44 @@ public class CustomModeController extends GeneratorController {
return view;
}
+ public void missTemplateDialog(CgenConfiguration cgenConfiguration, String template, String superTemplate) {
+ new TemplateDialog(this, cgenConfiguration, template, superTemplate).startupAction();
+ updateComboBoxes();
+ }
+
public void popPreferencesAction() {
new PreferenceDialog(getApplication().getFrameController()).startupAction(PreferenceDialog.TEMPLATES_KEY);
updateTemplates();
updateComboBoxes();
}
- private void updateComboBoxes() {
- view.getSubclassTemplate().setItem(getApplication().getCodeTemplateManager().getNameByPath(
- getAbsoluteTemplatePath(cgenConfiguration.getTemplate(), cgenConfiguration.getRootPath())));
- view.getSuperclassTemplate().setItem(getApplication().getCodeTemplateManager().getNameByPath(
- getAbsoluteTemplatePath(cgenConfiguration.getSuperTemplate(), cgenConfiguration.getRootPath())));
- view.setDisableSuperComboBoxes(view.getPairs().isSelected());
+ public void addTemplateAction(String template, String superTemplate) {
+ new PreferenceDialog(getApplication().getFrameController()).startupToCreateTemplate(template, superTemplate);
+ updateTemplates();
}
- private String getAbsoluteTemplatePath(String relTemplatePath, Path rootPath) {
- return rootPath.resolve(Paths.get(relTemplatePath)).toString();
+ private void updateComboBoxes() {
+ String templateName = getApplication().getCodeTemplateManager().getNameByPath(
+ cgenConfiguration.getTemplate(), cgenConfiguration.getRootPath());
+ String superTemplateName = getApplication().getCodeTemplateManager().getNameByPath(
+ cgenConfiguration.getSuperTemplate(), cgenConfiguration.getRootPath());
+ String path = cgenConfiguration.getRootPath().resolve(Paths.get(cgenConfiguration.getTemplate())).toString();
+ String superPath = cgenConfiguration.getRootPath().resolve(Paths.get(cgenConfiguration.getSuperTemplate())).toString();
+ if(templateName == null && superTemplateName == null) {
+ view.getSubclassTemplate().setItem(null);
+ view.getSuperclassTemplate().setItem(null);
+ missTemplateDialog(cgenConfiguration, path, superPath);
+ } else if(templateName == null) {
+ view.getSubclassTemplate().setItem(null);
+ missTemplateDialog(cgenConfiguration, path, null);
+ } else if(superTemplateName == null) {
+ view.getSuperclassTemplate().setItem(null);
+ missTemplateDialog(cgenConfiguration, null, superPath);
+ } else {
+ view.getSubclassTemplate().setItem(templateName);
+ view.getSuperclassTemplate().setItem(superTemplateName);
+ }
+ view.setDisableSuperComboBoxes(view.getPairs().isSelected());
}
private void initListeners(){
http://git-wip-us.apache.org/repos/asf/cayenne/blob/397d29fa/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 16c8edf..ea5f1ce 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
@@ -27,13 +27,10 @@ import org.apache.cayenne.modeler.ProjectController;
import org.apache.cayenne.modeler.util.ComboBoxAdapter;
import org.apache.cayenne.modeler.util.TextAdapter;
import org.apache.cayenne.swing.components.JCayenneCheckBox;
-import org.apache.cayenne.swing.control.ActionLink;
import org.apache.cayenne.validation.ValidationException;
import javax.swing.*;
import java.awt.*;
-import java.nio.file.Path;
-import java.nio.file.Paths;
/**
* @since 4.1
@@ -49,7 +46,7 @@ public class CustomModePanel extends GeneratorControllerPanel {
private JCheckBox createPropertyNames;
private JCheckBox pkProperties;
- private ActionLink manageTemplatesLink;
+ private JButton manageTemplatesLink;
CustomModePanel(ProjectController projectController, CodeGeneratorControllerBase codeGeneratorControllerBase) {
super(projectController, codeGeneratorControllerBase);
@@ -58,7 +55,7 @@ public class CustomModePanel extends GeneratorControllerPanel {
@Override
protected void updateModel(String item) throws ValidationException {
CgenConfiguration cgenConfiguration = getCgenByDataMap();
- cgenConfiguration.setSuperTemplate(getTemplatePath(cgenConfiguration.getRootPath(), item));
+ cgenConfiguration.setSuperTemplate(Application.getInstance().getCodeTemplateManager().getTemplatePath(item, cgenConfiguration.getRootPath()));
if(!codeGeneratorControllerBase.isInitFromModel()) {
projectController.setDirty(true);
}
@@ -70,7 +67,7 @@ public class CustomModePanel extends GeneratorControllerPanel {
@Override
protected void updateModel(String item) throws ValidationException {
CgenConfiguration cgenConfiguration = getCgenByDataMap();
- cgenConfiguration.setTemplate(getTemplatePath(cgenConfiguration.getRootPath(), item));
+ cgenConfiguration.setTemplate(Application.getInstance().getCodeTemplateManager().getTemplatePath(item, cgenConfiguration.getRootPath()));
if(!codeGeneratorControllerBase.isInitFromModel()) {
projectController.setDirty(true);
}
@@ -93,7 +90,7 @@ public class CustomModePanel extends GeneratorControllerPanel {
this.createPropertyNames = new JCayenneCheckBox();
this.pkProperties = new JCayenneCheckBox();
- this.manageTemplatesLink = new ActionLink("Customize Templates...");
+ this.manageTemplatesLink = new JButton("Customize Templates...");
this.manageTemplatesLink.setFont(manageTemplatesLink.getFont().deriveFont(10f));
pairs.addChangeListener(e -> {
@@ -144,15 +141,11 @@ public class CustomModePanel extends GeneratorControllerPanel {
add(builder.getPanel(), BorderLayout.CENTER);
}
- private String getTemplatePath(Path rootPath, String templatePath) {
- return rootPath.relativize(Paths.get(Application.getInstance().getCodeTemplateManager().getTemplatePath(String.valueOf(templatePath)))).toString();
- }
-
public void setDisableSuperComboBoxes(boolean val){
superclassTemplate.getComboBox().setEnabled(val);
}
- public ActionLink getManageTemplatesLink() {
+ public JButton getManageTemplatesLink() {
return manageTemplatesLink;
}
[20/32] cayenne git commit: Cgen task refactoring
Posted by nt...@apache.org.
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b30e5eb5/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/StandardModePanel.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/StandardModePanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/StandardModePanel.java
deleted file mode 100644
index 81bd599..0000000
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/StandardModePanel.java
+++ /dev/null
@@ -1,42 +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;
-//
-//import com.jgoodies.forms.builder.DefaultFormBuilder;
-//import com.jgoodies.forms.layout.FormLayout;
-//
-//import java.awt.BorderLayout;
-//
-//public class StandardModePanel extends GeneratorControllerPanel {
-//
-// private DefaultFormBuilder builder;
-//
-// public StandardModePanel() {
-// FormLayout layout = new FormLayout(
-// "right:77dlu, 1dlu, fill:100:grow, 1dlu, left:80dlu, 1dlu", "");
-//
-// builder = new DefaultFormBuilder(layout);
-// builder.append("Output Directory:", outputFolder, selectOutputFolder);
-// builder.nextLine();
-//
-// setLayout(new BorderLayout());
-// add(builder.getPanel(), BorderLayout.CENTER);
-// }
-//}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b30e5eb5/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/StandardPanelComponent.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/StandardPanelComponent.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/StandardPanelComponent.java
deleted file mode 100644
index c900728..0000000
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/StandardPanelComponent.java
+++ /dev/null
@@ -1,81 +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;
-//
-//import com.jgoodies.forms.builder.DefaultFormBuilder;
-//import com.jgoodies.forms.layout.FormLayout;
-//import org.apache.cayenne.map.DataMap;
-//import org.apache.cayenne.modeler.pref.DataMapDefaults;
-//
-//import javax.swing.JComponent;
-//import javax.swing.JLabel;
-//import javax.swing.JTextField;
-//import java.awt.BorderLayout;
-//
-//public class StandardPanelComponent extends JComponent {
-//
-// private DataMap dataMap;
-// private DataMapDefaults preferences;
-// private JLabel dataMapName;
-// private JTextField superclassPackage;
-// private DefaultFormBuilder builder;
-//
-// public StandardPanelComponent() {
-// super();
-// dataMapName = new JLabel();
-// dataMapName.setFont(dataMapName.getFont().deriveFont(1));
-// superclassPackage = new JTextField();
-//
-// FormLayout layout = new FormLayout(
-// "right:77dlu, 3dlu, fill:200:grow, 3dlu", "");
-// builder = new DefaultFormBuilder(layout);
-// builder.append(dataMapName);
-// builder.nextLine();
-// builder.append("Superclass Package:", superclassPackage);
-//
-// setLayout(new BorderLayout());
-// add(builder.getPanel(), BorderLayout.CENTER);
-// }
-//
-// public DataMap getDataMap() {
-// return dataMap;
-// }
-//
-// public void setDataMap(DataMap dataMap) {
-// this.dataMap = dataMap;
-// }
-//
-// public DataMapDefaults getPreferences() {
-// return preferences;
-// }
-//
-// public void setPreferences(DataMapDefaults preferences) {
-// this.preferences = preferences;
-// }
-//
-// public JLabel getDataMapName() {
-// return dataMapName;
-// }
-//
-// public JTextField getSuperclassPackage() {
-// return superclassPackage;
-// }
-//
-//}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b30e5eb5/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/DataDomainTabbedView.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/DataDomainTabbedView.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/DataDomainTabbedView.java
index 96a195e..de4059e 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/DataDomainTabbedView.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/DataDomainTabbedView.java
@@ -39,8 +39,8 @@ public class DataDomainTabbedView extends JTabbedPane
ProjectController mediator;
DataDomainGraphTab graphTab;
- JScrollPane cgenView;
- CgenTabController cgenTabController;
+ private JScrollPane cgenView;
+ private CgenTabController cgenTabController;
/**
* constructor
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b30e5eb5/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 9c8fcab..ddd6893 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
@@ -31,12 +31,12 @@ import javax.swing.*;
*
*/
public class DataMapTabbedView extends JTabbedPane{
- ProjectController mediator;
- private int lastSelectionIndex;
- private DbImportView dbImportView1;
+ ProjectController mediator;
+ private DbImportView dbImportView;
+ private JScrollPane dbImportScrollPane;
private CodeGeneratorController codeGeneratorController;
- JScrollPane cgenView;
+ private JScrollPane cgenView;
/**
* constructor
@@ -59,37 +59,23 @@ public class DataMapTabbedView extends JTabbedPane{
// note that those panels that have no internal scrollable tables
// must be wrapped in a scroll pane
JScrollPane dataMapScrollPane = new JScrollPane(new DataMapView(mediator));
- dbImportView1 = new DbImportView(mediator);
- JScrollPane dbImportScrollPane = new JScrollPane(dbImportView1);
+ dbImportView = new DbImportView(mediator);
+ dbImportScrollPane = new JScrollPane(dbImportView);
+ codeGeneratorController = new CodeGeneratorController(Application.getInstance().getFrameController(), mediator);
+ cgenView = new JScrollPane(codeGeneratorController.getView());
addTab("DataMap", dataMapScrollPane);
addTab("DB Import", dbImportScrollPane);
- addChangeListener(e -> {
- lastSelectionIndex = getSelectedIndex();
- updateTabs();
- });
- }
-
- private void updateTabs() {
- switch (lastSelectionIndex) {
- case 1:
- dbImportView1.initFromModel();
- break;
- }
- JScrollPane dataMapView = new JScrollPane(new DataMapView(mediator));
- JScrollPane dbImportView = new JScrollPane(new DbImportView(mediator));
- this.codeGeneratorController = new CodeGeneratorController(Application.getInstance().getFrameController(), mediator);
- cgenView = new JScrollPane(codeGeneratorController.getView());
- addTab("DataMap", dataMapView);
- addTab("DbImport", dbImportView);
addTab("Class Generation", cgenView);
addChangeListener(tab -> {
if(isCgenTabActive()) {
codeGeneratorController.startup(mediator.getCurrentDataMap());
+ } else if(isDbImportTabActive()) {
+ dbImportView.initFromModel();
}
});
mediator.addDataMapDisplayListener(e -> {
- if(isCgenTabActive()) {
+ if(isCgenTabActive() || isDbImportTabActive()) {
fireStateChanged();
} else if(e.getSource() instanceof CgenTab){
setSelectedComponent(cgenView);
@@ -100,5 +86,9 @@ public class DataMapTabbedView extends JTabbedPane{
private boolean isCgenTabActive() {
return getSelectedComponent() == cgenView;
}
+
+ private boolean isDbImportTabActive() {
+ return getSelectedComponent() == dbImportScrollPane;
+ }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b30e5eb5/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 cfa6a57..7b98f4c 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
@@ -100,7 +100,11 @@ public class ClassesTabController extends CayenneController {
int selectedCount = getParentController().getSelectedEntitiesSize()
+ getParentController().getSelectedEmbeddablesSize()
+ (getParentController().isDataMapSelected() ? 1 : 0);
-
+ if(selectedCount == 0) {
+ getParentController().enableGenerateButton(false);
+ } else {
+ getParentController().enableGenerateButton(true);
+ }
if (selectedCount < getParentController().getClasses().size()) {
view.getCheckAll().setSelected(false);
}
@@ -118,6 +122,11 @@ public class ClassesTabController extends CayenneController {
if (getParentController().updateSelection(view.getCheckAll().isSelected() ? o -> true : o -> false)) {
tableBinding.updateView();
getParentController().updateEntities();
+ if(view.getCheckAll().isSelected()) {
+ getParentController().enableGenerateButton(true);
+ } else {
+ getParentController().enableGenerateButton(false);
+ }
}
}
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b30e5eb5/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
index 87881f4..7485d25 100644
--- 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
@@ -28,16 +28,11 @@ public class ClientModeController extends StandardModeController {
}
protected GeneratorControllerPanel createView() {
- this.view = new StandardModePanel();
+ this.view = new StandardModePanel(getParentController());
return view;
}
@Override
- public CgenConfiguration createConfiguration() {
- return super.createConfiguration();
- }
-
- @Override
public void updateConfiguration(CgenConfiguration cgenConfiguration) {
cgenConfiguration.setClient(true);
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b30e5eb5/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 f4ab6bc..1274ecb 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
@@ -65,14 +65,13 @@ public class CodeGeneratorController extends CodeGeneratorControllerBase {
public void startup(DataMap dataMap) {
super.startup(dataMap);
classesSelectedAction();
- GeneratorController modeController = prevGeneratorController.get(dataMap) != null ? prevGeneratorController.get(dataMap) : generatorSelector.getStandartController();
- CgenConfiguration cgenConfiguration = modeController.createConfiguration();
- if(cgenConfiguration.isClient()) {
- modeController = generatorSelector.getClientGeneratorController();
- }
- classesSelector.startup();
+ CgenConfiguration cgenConfiguration = createConfiguration();
+ GeneratorController modeController = prevGeneratorController.get(dataMap) != null ? prevGeneratorController.get(dataMap) : cgenConfiguration.isClient() ?
+ generatorSelector.getClientGeneratorController() : generatorSelector.getStandartController();
prevGeneratorController.put(dataMap, modeController);
generatorSelector.setSelectedController(modeController);
+ classesSelector.startup();
+ initFromModel = false;
}
private void initListeners(){
@@ -147,11 +146,13 @@ public class CodeGeneratorController extends CodeGeneratorControllerBase {
}
((GeneratorTabPanel)generatorSelector.getView()).getClassesCount().setText(label);
- projectController.setDirty(true);
+ if(!isInitFromModel()) {
+ getProjectController().setDirty(true);
+ }
}
public void generateAction() {
- CgenConfiguration cgenConfiguration = generatorSelector.getConfiguration();
+ CgenConfiguration cgenConfiguration = createConfiguration();
ClassGenerationAction generator = cgenConfiguration.isClient() ?
new ClientClassGenerationAction(cgenConfiguration) :
new ClassGenerationAction(cgenConfiguration);
@@ -173,4 +174,8 @@ public class CodeGeneratorController extends CodeGeneratorControllerBase {
public ConcurrentMap<DataMap, GeneratorController> getPrevGeneratorController() {
return prevGeneratorController;
}
+
+ public void enableGenerateButton(boolean enable) {
+ ((GeneratorTabPanel)generatorSelector.getView()).getGenerateButton().setEnabled(enable);
+ }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b30e5eb5/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 35ba15e..211384d 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
@@ -22,18 +22,27 @@ package org.apache.cayenne.modeler.editor.cgen;
import org.apache.cayenne.gen.CgenConfiguration;
import org.apache.cayenne.map.DataMap;
import org.apache.cayenne.map.Embeddable;
+import org.apache.cayenne.map.Entity;
import org.apache.cayenne.map.ObjEntity;
import org.apache.cayenne.modeler.ProjectController;
+import org.apache.cayenne.modeler.dialog.pref.GeneralPreferences;
import org.apache.cayenne.modeler.util.CayenneController;
import org.apache.cayenne.modeler.util.CellRenderers;
+import org.apache.cayenne.modeler.util.ModelerUtil;
import org.apache.cayenne.validation.ValidationFailure;
import org.apache.cayenne.validation.ValidationResult;
import javax.swing.*;
import java.awt.*;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
import java.util.*;
import java.util.List;
import java.util.function.Predicate;
+import java.util.prefs.Preferences;
+import java.util.stream.Collectors;
/**
* A base superclass of a top controller for the code generator. Defines all common model
@@ -56,6 +65,8 @@ public abstract class CodeGeneratorControllerBase extends CayenneController {
protected transient Object currentClass;
protected ProjectController projectController;
+ protected boolean initFromModel;
+
public CodeGeneratorControllerBase(CayenneController parent, ProjectController projectController) {
super(parent);
this.projectController = projectController;
@@ -66,6 +77,7 @@ public abstract class CodeGeneratorControllerBase extends CayenneController {
}
public void startup(DataMap dataMap){
+ initFromModel = true;
this.dataMap = dataMap;
prepareClasses(dataMap);
}
@@ -87,6 +99,65 @@ public abstract class CodeGeneratorControllerBase extends CayenneController {
value == null ? new HashSet<>() : value);
}
+ /**
+ * Creates a class generator for provided selections.
+ */
+ public CgenConfiguration createConfiguration() {
+ DataMap map = projectController.getCurrentDataMap();
+ CgenConfiguration cgenConfiguration = projectController.getApplication().getMetaData().get(map, CgenConfiguration.class);
+ if(cgenConfiguration != null){
+ addToSelectedEntities(cgenConfiguration.getDataMap(), cgenConfiguration.getEntities());
+ addToSelectedEmbeddables(cgenConfiguration.getDataMap(), cgenConfiguration.getEmbeddables());
+ return cgenConfiguration;
+ }
+
+ try {
+ cgenConfiguration = new CgenConfiguration();
+ cgenConfiguration.setDataMap(map);
+
+ Path basePath = Paths.get(ModelerUtil.initOutputFolder());
+
+ // no destination folder
+ if (basePath == null) {
+ JOptionPane.showMessageDialog(this.getView(), "Select directory for source files.");
+ return null;
+ }
+
+ // no such folder
+ if (!Files.exists(basePath)) {
+ Files.createDirectories(basePath);
+ }
+
+ // not a directory
+ if (!Files.isDirectory(basePath)) {
+ JOptionPane.showMessageDialog(this.getView(), basePath + " is not a valid directory.");
+ return null;
+ }
+
+ cgenConfiguration.setRootPath(basePath);
+ Preferences preferences = application.getPreferencesNode(GeneralPreferences.class, "");
+ if (preferences != null) {
+ cgenConfiguration.setEncoding(preferences.get(GeneralPreferences.ENCODING_PREFERENCE, null));
+ }
+ addToSelectedEntities(map, map.getObjEntities()
+ .stream()
+ .map(Entity::getName)
+ .collect(Collectors.toList()));
+ addToSelectedEmbeddables(map, map.getEmbeddables()
+ .stream()
+ .map(Embeddable::getClassName)
+ .collect(Collectors.toList()));
+ getApplication().getMetaData().add(map, cgenConfiguration);
+ projectController.setDirty(true);
+ } catch (IOException exception) {
+ JOptionPane.showMessageDialog(this.getView(), "Can't create directory. " +
+ ". Select a different one.");
+ return null;
+ }
+
+ return cgenConfiguration;
+ }
+
public List<Object> getClasses() {
return classes;
}
@@ -363,4 +434,15 @@ public abstract class CodeGeneratorControllerBase extends CayenneController {
public void setCurrentClass(Object currentClass) {
this.currentClass = currentClass;
}
+
+ public boolean isInitFromModel() {
+ return initFromModel;
+ }
+
+ public void setInitFromModel(boolean initFromModel) {
+ this.initFromModel = initFromModel;
+ }
+
+
+ public abstract void enableGenerateButton(boolean enabled);
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b30e5eb5/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 5626a38..247d747 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
@@ -46,7 +46,7 @@ public class CustomModeController extends GeneratorController {
@Override
protected GeneratorControllerPanel createView() {
- this.view = new CustomModePanel(getApplication().getFrameController().getProjectController());
+ this.view = new CustomModePanel(getApplication().getFrameController().getProjectController(), getParentController());
return view;
}
@@ -91,11 +91,6 @@ public class CustomModeController extends GeneratorController {
view.setDisableSuperComboBoxes(view.getPairs().isSelected());
}
- @Override
- public CgenConfiguration createConfiguration() {
- return super.createConfiguration();
- }
-
private void initListeners(){
view.getPairs().addActionListener(val -> {
cgenConfiguration.setMakePairs(view.getPairs().isSelected());
@@ -109,27 +104,37 @@ public class CustomModeController extends GeneratorController {
cgenConfiguration.setQueryTemplate(ClassGenerationAction.DATAMAP_SUBCLASS_TEMPLATE);
}
initForm(cgenConfiguration);
- getParentController().getProjectController().setDirty(true);
+ if(!getParentController().isInitFromModel()) {
+ getParentController().getProjectController().setDirty(true);
+ }
});
view.getOverwrite().addActionListener(val -> {
cgenConfiguration.setOverwrite(view.getOverwrite().isSelected());
- getParentController().getProjectController().setDirty(true);
+ if(!getParentController().isInitFromModel()) {
+ getParentController().getProjectController().setDirty(true);
+ }
});
view.getCreatePropertyNames().addActionListener(val -> {
cgenConfiguration.setCreatePropertyNames(view.getCreatePropertyNames().isSelected());
- getParentController().getProjectController().setDirty(true);
+ if(!getParentController().isInitFromModel()) {
+ getParentController().getProjectController().setDirty(true);
+ }
});
view.getUsePackagePath().addActionListener(val -> {
cgenConfiguration.setUsePkgPath(view.getUsePackagePath().isSelected());
- getParentController().getProjectController().setDirty(true);
+ if(!getParentController().isInitFromModel()) {
+ getParentController().getProjectController().setDirty(true);
+ }
});
view.getPkProperties().addActionListener(val -> {
cgenConfiguration.setCreatePKProperties(view.getPkProperties().isSelected());
- getParentController().getProjectController().setDirty(true);
+ if(!getParentController().isInitFromModel()) {
+ getParentController().getProjectController().setDirty(true);
+ }
});
}
@@ -146,6 +151,7 @@ public class CustomModeController extends GeneratorController {
((CodeGeneratorControllerBase) parent).setSelected(true);
}
updateComboBoxes();
+ getParentController().setInitFromModel(false);
}
@Override
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b30e5eb5/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 a8c0183..468eec7 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
@@ -45,14 +45,16 @@ public class CustomModePanel extends GeneratorControllerPanel {
private ActionLink manageTemplatesLink;
- CustomModePanel(ProjectController projectController) {
- super(projectController);
+ CustomModePanel(ProjectController projectController, CodeGeneratorControllerBase codeGeneratorControllerBase) {
+ super(projectController, codeGeneratorControllerBase);
JComboBox<String> superclassField = new JComboBox<>();
this.superclassTemplate = new ComboBoxAdapter<String>(superclassField) {
@Override
protected void updateModel(String item) throws ValidationException {
getCgenByDataMap().setSuperTemplate(Application.getInstance().getCodeTemplateManager().getTemplatePath(String.valueOf(item)));
- projectController.setDirty(true);
+ if(!codeGeneratorControllerBase.isInitFromModel()) {
+ projectController.setDirty(true);
+ }
}
};
@@ -61,7 +63,9 @@ public class CustomModePanel extends GeneratorControllerPanel {
@Override
protected void updateModel(String item) throws ValidationException {
getCgenByDataMap().setTemplate(Application.getInstance().getCodeTemplateManager().getTemplatePath(String.valueOf(item)));
- projectController.setDirty(true);
+ if(!codeGeneratorControllerBase.isInitFromModel()) {
+ projectController.setDirty(true);
+ }
}
};
@@ -72,7 +76,10 @@ public class CustomModePanel extends GeneratorControllerPanel {
JTextField outputPatternField = new JTextField();
this.outputPattern = new TextAdapter(outputPatternField) {
protected void updateModel(String text) {
-
+ getCgenByDataMap().setOutputPattern(text);
+ if(!codeGeneratorControllerBase.isInitFromModel()) {
+ projectController.setDirty(true);
+ }
}
};
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b30e5eb5/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 31aec74..22187f5 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
@@ -23,11 +23,9 @@ import org.apache.cayenne.gen.ArtifactsGenerationMode;
import org.apache.cayenne.gen.CgenConfiguration;
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.FSPath;
import org.apache.cayenne.modeler.util.CayenneController;
import org.apache.cayenne.modeler.util.CodeValidationUtil;
-import org.apache.cayenne.modeler.util.ModelerUtil;
import org.apache.cayenne.modeler.util.TextAdapter;
import org.apache.cayenne.swing.BindingBuilder;
import org.apache.cayenne.util.Util;
@@ -38,13 +36,7 @@ import org.apache.cayenne.validation.ValidationResult;
import javax.swing.*;
import java.io.File;
-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.
@@ -75,70 +67,11 @@ public abstract class GeneratorController extends CayenneController {
protected void initForm(CgenConfiguration cgenConfiguration) {
this.cgenConfiguration = cgenConfiguration;
- ((GeneratorControllerPanel)getView()).getOutputFolder().setText(cgenConfiguration.getDir());
+ ((GeneratorControllerPanel)getView()).getOutputFolder().setText(cgenConfiguration.buildPath().toString());
}
public abstract void updateConfiguration(CgenConfiguration cgenConfiguration);
- /**
- * Creates a class generator for provided selections.
- */
- public CgenConfiguration createConfiguration() {
- DataMap map = getParentController().getProjectController().getCurrentDataMap();
- CgenConfiguration cgenConfiguration = getParentController().projectController.getApplication().getMetaData().get(map, CgenConfiguration.class);
- if(cgenConfiguration != null){
- getParentController().addToSelectedEntities(cgenConfiguration.getDataMap(), cgenConfiguration.getEntities());
- getParentController().addToSelectedEmbeddables(cgenConfiguration.getDataMap(), cgenConfiguration.getEmbeddables());
- cgenConfiguration.setRootPath(Paths.get(ModelerUtil.initOutputFolder()));
- return cgenConfiguration;
- }
-
- try {
- cgenConfiguration = new CgenConfiguration();
- cgenConfiguration.setDataMap(map);
-
- Path basePath = Paths.get(ModelerUtil.initOutputFolder());
-
- // no destination folder
- if (basePath == null) {
- JOptionPane.showMessageDialog(this.getView(), "Select directory for source files.");
- return null;
- }
-
- // no such folder
- if (!Files.exists(basePath)) {
- Files.createDirectories(basePath);
- }
-
- // not a directory
- if (!Files.isDirectory(basePath)) {
- JOptionPane.showMessageDialog(this.getView(), basePath + " is not a valid directory.");
- return null;
- }
-
- cgenConfiguration.setRootPath(basePath);
- Preferences preferences = application.getPreferencesNode(GeneralPreferences.class, "");
- if (preferences != null) {
- cgenConfiguration.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, cgenConfiguration);
- } catch (IOException exception) {
- JOptionPane.showMessageDialog(this.getView(), "Can't create directory. " +
- ". Select a different one.");
- return null;
- }
-
- return cgenConfiguration;
- }
-
public void validateEmbeddable(ValidationResult validationBuffer, Embeddable embeddable) {
ValidationFailure embeddableFailure = validateEmbeddable(embeddable);
if (embeddableFailure != null) {
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b30e5eb5/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 21bd223..5771b89 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
@@ -26,8 +26,6 @@ import org.apache.cayenne.modeler.util.TextAdapter;
import org.apache.cayenne.validation.ValidationException;
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,19 +33,19 @@ import java.util.Collection;
*/
public class GeneratorControllerPanel extends JPanel {
- protected Collection<StandardPanelComponent> dataMapLines;
protected TextAdapter outputFolder;
protected JButton selectOutputFolder;
protected ProjectController projectController;
- public GeneratorControllerPanel(ProjectController projectController) {
- this.dataMapLines = new ArrayList<>();
+ public GeneratorControllerPanel(ProjectController projectController, CodeGeneratorControllerBase codeGeneratorControllerBase) {
this.projectController = projectController;
this.outputFolder = new TextAdapter(new JTextField()) {
@Override
protected void updateModel(String text) throws ValidationException {
getCgenByDataMap().setRelPath(text);
- projectController.setDirty(true);
+ if(!codeGeneratorControllerBase.isInitFromModel()) {
+ projectController.setDirty(true);
+ }
}
};
this.selectOutputFolder = new JButton("Select");
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b30e5eb5/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabController.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabController.java
index 16aebae..6af5436 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabController.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabController.java
@@ -77,7 +77,7 @@ public class GeneratorTabController extends CayenneController {
view.getGenerationMode().addActionListener(action -> {
String name = (String)view.getGenerationMode().getSelectedItem();
GeneratorController modeController = getGeneratorController();
- CgenConfiguration cgenConfiguration = modeController.createConfiguration();
+ CgenConfiguration cgenConfiguration = getParentController().createConfiguration();
modeController.updateConfiguration(cgenConfiguration);
controllers.get(name).initForm(cgenConfiguration);
((CodeGeneratorController)getParentController()).getPrevGeneratorController().put(cgenConfiguration.getDataMap(), modeController);
@@ -104,9 +104,4 @@ public class GeneratorTabController extends CayenneController {
GeneratorController getClientGeneratorController() {
return controllers.get(CLIENT_OBJECTS_MODE);
}
-
- public CgenConfiguration getConfiguration() {
- GeneratorController modeController = getGeneratorController();
- return (modeController != null) ? modeController.createConfiguration() : null;
- }
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b30e5eb5/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabPanel.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabPanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabPanel.java
index 9cfd542..08f1dee 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabPanel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabPanel.java
@@ -45,6 +45,7 @@ public class GeneratorTabPanel extends JPanel {
this.generateButton = new JButton("Generate");
generateButton.setIcon(ModelerUtil.buildIcon("icon-gen_java.png"));
generateButton.setPreferredSize(new Dimension(180, 30));
+ generateButton.setEnabled(false);
this.classesCount = new JLabel("No classes selected");
classesCount.setFont(classesCount.getFont().deriveFont(10f));
JPanel messages = new JPanel(new BorderLayout());
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b30e5eb5/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/StandardModeController.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/StandardModeController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/StandardModeController.java
index 69cb19f..5b34efc 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/StandardModeController.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/StandardModeController.java
@@ -34,7 +34,7 @@ public class StandardModeController extends GeneratorController {
}
protected GeneratorControllerPanel createView() {
- this.view = new StandardModePanel();
+ this.view = new StandardModePanel(getParentController());
return view;
}
@@ -43,13 +43,9 @@ public class StandardModeController extends GeneratorController {
}
@Override
- public CgenConfiguration createConfiguration() {
- return super.createConfiguration();
- }
-
- @Override
protected void initForm(CgenConfiguration cgenConfiguration) {
super.initForm(cgenConfiguration);
+ getParentController().setInitFromModel(false);
}
@Override
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b30e5eb5/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/StandardModePanel.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/StandardModePanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/StandardModePanel.java
index 0ddf1e2..2b755e7 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/StandardModePanel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/StandardModePanel.java
@@ -27,8 +27,8 @@ import java.awt.*;
public class StandardModePanel extends GeneratorControllerPanel {
- public StandardModePanel() {
- super(Application.getInstance().getFrameController().getProjectController());
+ public StandardModePanel(CodeGeneratorControllerBase codeGeneratorControllerBase) {
+ super(Application.getInstance().getFrameController().getProjectController(), codeGeneratorControllerBase);
FormLayout layout = new FormLayout(
"right:88dlu, 1dlu, fill:300:grow, 1dlu, left:100dlu, 100dlu", "");
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b30e5eb5/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/StandardPanelComponent.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/StandardPanelComponent.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/StandardPanelComponent.java
deleted file mode 100644
index 8170548..0000000
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/StandardPanelComponent.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- ****************************************************************/
-
-package org.apache.cayenne.modeler.editor.cgen;
-
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-import com.jgoodies.forms.layout.FormLayout;
-import org.apache.cayenne.map.DataMap;
-import org.apache.cayenne.modeler.pref.DataMapDefaults;
-
-import javax.swing.*;
-import java.awt.*;
-
-public class StandardPanelComponent extends JComponent {
-
- private DataMap dataMap;
- private DataMapDefaults preferences;
-
- public StandardPanelComponent() {
- super();
-
- FormLayout layout = new FormLayout(
- "right:77dlu, 3dlu, fill:100:grow, 3dlu", "");
- DefaultFormBuilder builder = new DefaultFormBuilder(layout);
- builder.nextLine();
-
- setLayout(new BorderLayout());
- add(builder.getPanel(), BorderLayout.CENTER);
- }
-
- public DataMap getDataMap() {
- return dataMap;
- }
-
- public void setDataMap(DataMap dataMap) {
- this.dataMap = dataMap;
- }
-
- public DataMapDefaults getPreferences() {
- return preferences;
- }
-
- public void setPreferences(DataMapDefaults preferences) {
- this.preferences = preferences;
- }
-
-}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b30e5eb5/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/domain/CgenPanel.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/domain/CgenPanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/domain/CgenPanel.java
index cf9b27a8..637cc12 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/domain/CgenPanel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/domain/CgenPanel.java
@@ -1,3 +1,22 @@
+/*****************************************************************
+ * 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.domain;
import com.jgoodies.forms.builder.DefaultFormBuilder;
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b30e5eb5/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/domain/CgenTab.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/domain/CgenTab.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/domain/CgenTab.java
index 87a7cc4..0c5288e 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/domain/CgenTab.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/domain/CgenTab.java
@@ -1,3 +1,22 @@
+/*****************************************************************
+ * 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.domain;
import com.jgoodies.forms.builder.DefaultFormBuilder;
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b30e5eb5/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/domain/CgenTabController.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/domain/CgenTabController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/domain/CgenTabController.java
index daeb677..0f82abf 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/domain/CgenTabController.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/domain/CgenTabController.java
@@ -1,3 +1,22 @@
+/*****************************************************************
+ * 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.domain;
import org.apache.cayenne.configuration.DataChannelDescriptor;
@@ -19,7 +38,6 @@ import org.slf4j.LoggerFactory;
import javax.swing.*;
import java.awt.event.ItemEvent;
import java.io.IOException;
-import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
@@ -115,14 +133,6 @@ public class CgenTabController {
if(cgenConfiguration == null) {
cgenConfiguration = createConfiguration(dataMap);
}
- if(cgenConfiguration.getRootPath() == null) {
- URL url = projectController.getProject().getConfigurationResource().getURL();
- Path resourcePath = Paths.get(url.getPath());
- if(Files.isRegularFile(resourcePath)) {
- resourcePath = resourcePath.getParent();
- }
- cgenConfiguration.setRootPath(resourcePath);
- }
ClassGenerationAction classGenerationAction = cgenConfiguration.isClient() ? new ClientClassGenerationAction(cgenConfiguration) :
new ClassGenerationAction(cgenConfiguration);
classGenerationAction.prepareArtifacts();
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b30e5eb5/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/ModelerUtil.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/ModelerUtil.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/ModelerUtil.java
index 90c6d19..ab1e01e 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/ModelerUtil.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/ModelerUtil.java
@@ -215,6 +215,9 @@ public final class ModelerUtil {
child.setLocation(x, y);
}
+ /**
+ * @since 4.1
+ */
public static String initOutputFolder() {
String path;
if (System.getProperty("cayenne.cgen.destdir") != null) {
[29/32] cayenne git commit: Selection bug fix
Posted by nt...@apache.org.
Selection bug fix
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/5128e66e
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/5128e66e
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/5128e66e
Branch: refs/heads/master
Commit: 5128e66e36433839ec288296b8cb22d80cb90845
Parents: c19f235
Author: Arseni Bulatski <an...@gmail.com>
Authored: Wed Nov 14 16:07:07 2018 +0300
Committer: Arseni Bulatski <an...@gmail.com>
Committed: Wed Nov 14 16:07:07 2018 +0300
----------------------------------------------------------------------
.../apache/cayenne/gen/CgenConfiguration.java | 34 +++++---
.../dialog/db/load/ModelerDbImportAction.java | 3 +
.../editor/cgen/CodeGeneratorController.java | 75 ++++++++++++++--
.../cgen/CodeGeneratorControllerBase.java | 91 ++++++++++++--------
4 files changed, 150 insertions(+), 53 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cayenne/blob/5128e66e/cayenne-cgen/src/main/java/org/apache/cayenne/gen/CgenConfiguration.java
----------------------------------------------------------------------
diff --git a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/CgenConfiguration.java b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/CgenConfiguration.java
index 1277baa..e03598e 100644
--- a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/CgenConfiguration.java
+++ b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/CgenConfiguration.java
@@ -30,9 +30,7 @@ import org.apache.cayenne.util.XMLSerializable;
import java.io.Serializable;
import java.nio.file.Path;
import java.nio.file.Paths;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
+import java.util.*;
import java.util.stream.Collectors;
/**
@@ -45,9 +43,9 @@ import java.util.stream.Collectors;
public class CgenConfiguration implements Serializable, XMLSerializable {
private Collection<Artifact> artifacts;
- private Collection<String> entityArtifacts;
+ private Set<String> entityArtifacts;
private Collection<String> excludeEntityArtifacts;
- private Collection<String> embeddableArtifacts;
+ private Set<String> embeddableArtifacts;
private Collection<String> excludeEmbeddableArtifacts;
private String superPkg;
@@ -87,9 +85,9 @@ public class CgenConfiguration implements Serializable, XMLSerializable {
setArtifactsGenerationMode("entity");
this.artifacts = new ArrayList<>();
- this.entityArtifacts = new ArrayList<>();
+ this.entityArtifacts = new HashSet<>();
this.excludeEntityArtifacts = new ArrayList<>();
- this.embeddableArtifacts = new ArrayList<>();
+ this.embeddableArtifacts = new HashSet<>();
this.excludeEmbeddableArtifacts = new ArrayList<>();
this.artifactsGenerationMode = ArtifactsGenerationMode.ENTITY;
@@ -286,11 +284,11 @@ public class CgenConfiguration implements Serializable, XMLSerializable {
return artifacts;
}
- public Collection<String> getEntities() {
+ public Set<String> getEntities() {
return entityArtifacts;
}
- public Collection<String> getEmbeddables() {
+ public Set<String> getEmbeddables() {
return embeddableArtifacts;
}
@@ -310,8 +308,10 @@ public class CgenConfiguration implements Serializable, XMLSerializable {
return rootPath != null ? relPath != null ? rootPath.resolve(relPath).toAbsolutePath().normalize() : rootPath : relPath;
}
- public void loadEntity(String name) {
- entityArtifacts.add(name);
+ public void loadEntity(ObjEntity entity) {
+ if(!entity.isGeneric()) {
+ entityArtifacts.add(entity.getName());
+ }
}
public void loadEmbeddable(String name) {
@@ -349,7 +349,7 @@ public class CgenConfiguration implements Serializable, XMLSerializable {
.stream()
.filter(entity -> !excludeEntityArtifacts.contains(entity.getName()))
.map(ObjEntity::getName)
- .collect(Collectors.toList());
+ .collect(Collectors.toSet());
}
public void resolveExcludeEmbeddables() {
@@ -357,9 +357,17 @@ public class CgenConfiguration implements Serializable, XMLSerializable {
.stream()
.filter(embeddable -> !excludeEmbeddableArtifacts.contains(embeddable.getClassName()))
.map(Embeddable::getClassName)
- .collect(Collectors.toList());
+ .collect(Collectors.toSet());
}
+ public Collection<String> getExcludeEntityArtifacts() {
+ return excludeEntityArtifacts;
+ }
+
+ public Collection<String> getExcludeEmbeddableArtifacts() {
+ return excludeEmbeddableArtifacts;
+ }
+
@Override
public void encodeAsXML(XMLEncoder encoder, ConfigurationNodeVisitor delegate) {
encoder.start("cgen")
http://git-wip-us.apache.org/repos/asf/cayenne/blob/5128e66e/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/load/ModelerDbImportAction.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/load/ModelerDbImportAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/load/ModelerDbImportAction.java
index 0c5c729..e0f01e3 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/load/ModelerDbImportAction.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/load/ModelerDbImportAction.java
@@ -22,6 +22,7 @@ package org.apache.cayenne.modeler.dialog.db.load;
import org.apache.cayenne.CayenneRuntimeException;
import org.apache.cayenne.configuration.DataChannelDescriptorLoader;
import org.apache.cayenne.configuration.DataMapLoader;
+import org.apache.cayenne.configuration.event.DataMapEvent;
import org.apache.cayenne.configuration.server.DataSourceFactory;
import org.apache.cayenne.configuration.server.DbAdapterFactory;
import org.apache.cayenne.configuration.xml.DataChannelMetaData;
@@ -29,6 +30,7 @@ import org.apache.cayenne.dbsync.merge.factory.MergerTokenFactoryProvider;
import org.apache.cayenne.dbsync.merge.token.MergerToken;
import org.apache.cayenne.di.Inject;
import org.apache.cayenne.map.DataMap;
+import org.apache.cayenne.modeler.Application;
import org.apache.cayenne.project.ProjectSaver;
import org.apache.cayenne.dbsync.reverse.dbimport.DbImportConfiguration;
import org.apache.cayenne.dbsync.reverse.dbimport.DefaultDbImportAction;
@@ -73,6 +75,7 @@ public class ModelerDbImportAction extends DefaultDbImportAction {
public void commit() throws Exception {
commit(config, sourceDataMap);
+ Application.getInstance().getFrameController().getProjectController().fireDataMapEvent(new DataMapEvent(this, targetMap));
}
@Override
http://git-wip-us.apache.org/repos/asf/cayenne/blob/5128e66e/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 0785820..9db6135 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
@@ -19,20 +19,27 @@
package org.apache.cayenne.modeler.editor.cgen;
+import org.apache.cayenne.configuration.event.DataMapEvent;
+import org.apache.cayenne.configuration.event.DataMapListener;
import org.apache.cayenne.gen.CgenConfiguration;
import org.apache.cayenne.gen.ClassGenerationAction;
import org.apache.cayenne.gen.ClientClassGenerationAction;
import org.apache.cayenne.map.DataMap;
+import org.apache.cayenne.map.ObjEntity;
+import org.apache.cayenne.map.event.EmbeddableEvent;
+import org.apache.cayenne.map.event.EmbeddableListener;
+import org.apache.cayenne.map.event.EntityEvent;
+import org.apache.cayenne.map.event.ObjEntityListener;
import org.apache.cayenne.modeler.ProjectController;
import org.apache.cayenne.modeler.dialog.ErrorDebugDialog;
+import org.apache.cayenne.modeler.dialog.db.load.ModelerDbImportAction;
import org.apache.cayenne.modeler.util.CayenneController;
import org.apache.cayenne.swing.BindingBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import javax.swing.JOptionPane;
-import java.awt.Component;
-import java.util.Collections;
+import javax.swing.*;
+import java.awt.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import java.util.function.Predicate;
@@ -41,7 +48,7 @@ import java.util.function.Predicate;
* @since 4.1
* A controller for the class generator dialog.
*/
-public class CodeGeneratorController extends CodeGeneratorControllerBase {
+public class CodeGeneratorController extends CodeGeneratorControllerBase implements ObjEntityListener, EmbeddableListener, DataMapListener {
/**
* Logger to print stack traces
*/
@@ -86,8 +93,9 @@ public class CodeGeneratorController extends CodeGeneratorControllerBase {
}
private void initListeners(){
- 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())));
+ projectController.addObjEntityListener(this);
+ projectController.addEmbeddableListener(this);
+ projectController.addDataMapListener(this);
}
@Override
@@ -189,4 +197,59 @@ public class CodeGeneratorController extends CodeGeneratorControllerBase {
public void enableGenerateButton(boolean enable) {
((GeneratorTabPanel)generatorSelector.getView()).getGenerateButton().setEnabled(enable);
}
+
+ @Override
+ public void objEntityChanged(EntityEvent e) {}
+
+ @Override
+ public void objEntityAdded(EntityEvent e) {
+ super.addEntity(e.getEntity().getDataMap(), (ObjEntity) e.getEntity());
+ }
+
+ @Override
+ public void objEntityRemoved(EntityEvent e) {
+ super.removeFromSelectedEntities((ObjEntity) e.getEntity());
+ DataMap map = e.getEntity().getDataMap();
+ CgenConfiguration cgenConfiguration = projectController.getApplication().getMetaData().get(map, CgenConfiguration.class);
+ if(cgenConfiguration != null) {
+ cgenConfiguration.getEntities().remove(e.getEntity().getName());
+ }
+ }
+
+ @Override
+ public void embeddableChanged(EmbeddableEvent e, DataMap map) {}
+
+ @Override
+ public void embeddableAdded(EmbeddableEvent e, DataMap map) {
+ super.addEmbeddable(e.getEmbeddable().getDataMap(), e.getEmbeddable());
+ }
+
+ @Override
+ public void embeddableRemoved(EmbeddableEvent e, DataMap map) {
+ super.removeFromSelectedEmbeddables(e.getEmbeddable());
+ CgenConfiguration cgenConfiguration = projectController.getApplication().getMetaData().get(map, CgenConfiguration.class);
+ if(cgenConfiguration != null) {
+ cgenConfiguration.getEmbeddables().remove(e.getEmbeddable().getClassName());
+ }
+ }
+
+ @Override
+ public void dataMapChanged(DataMapEvent e) {
+ if(e.getSource() instanceof ModelerDbImportAction) {
+ CgenConfiguration cgenConfiguration = getCurrentConfiguration();
+ if(cgenConfiguration != null) {
+ for(ObjEntity objEntity : dataMap.getObjEntities()) {
+ if(!cgenConfiguration.getExcludeEntityArtifacts().contains(objEntity.getName())) {
+ addEntity(cgenConfiguration.getDataMap(), objEntity);
+ }
+ }
+ }
+ }
+ }
+
+ @Override
+ public void dataMapAdded(DataMapEvent e) {}
+
+ @Override
+ public void dataMapRemoved(DataMapEvent e) {}
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/5128e66e/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 21a3736..1c41cb8 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
@@ -32,20 +32,13 @@ import org.apache.cayenne.modeler.util.ModelerUtil;
import org.apache.cayenne.validation.ValidationFailure;
import org.apache.cayenne.validation.ValidationResult;
-import javax.swing.Icon;
-import javax.swing.JLabel;
-import javax.swing.JOptionPane;
-import java.awt.Component;
+import javax.swing.*;
+import java.awt.*;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
import java.util.List;
import java.util.function.Predicate;
import java.util.prefs.Preferences;
@@ -114,8 +107,8 @@ public abstract class CodeGeneratorControllerBase extends CayenneController {
DataMap map = projectController.getCurrentDataMap();
CgenConfiguration cgenConfiguration = projectController.getApplication().getMetaData().get(map, CgenConfiguration.class);
if(cgenConfiguration != null){
- addToSelectedEntities(cgenConfiguration.getDataMap(), cgenConfiguration.getEntities());
- addToSelectedEmbeddables(cgenConfiguration.getDataMap(), cgenConfiguration.getEmbeddables());
+ addToSelectedEntities(cgenConfiguration.getEntities());
+ addToSelectedEmbeddables(cgenConfiguration.getEmbeddables());
cgenConfiguration.setForce(true);
return cgenConfiguration;
}
@@ -149,11 +142,11 @@ public abstract class CodeGeneratorControllerBase extends CayenneController {
if (preferences != null) {
cgenConfiguration.setEncoding(preferences.get(GeneralPreferences.ENCODING_PREFERENCE, null));
}
- addToSelectedEntities(map, map.getObjEntities()
+ addToSelectedEntities(map.getObjEntities()
.stream()
.map(Entity::getName)
.collect(Collectors.toList()));
- addToSelectedEmbeddables(map, map.getEmbeddables()
+ addToSelectedEmbeddables(map.getEmbeddables()
.stream()
.map(Embeddable::getClassName)
.collect(Collectors.toList()));
@@ -247,25 +240,28 @@ public abstract class CodeGeneratorControllerBase extends CayenneController {
return modified;
}
- public List<Embeddable> getSelectedEmbeddables() {
+ private List<Embeddable> getSelectedEmbeddables() {
List<Embeddable> selected = new ArrayList<>(selectedEmbeddables.size());
for (Object classObj : classes) {
- if (classObj instanceof Embeddable
- && selectedEmbeddables.contains(((Embeddable) classObj)
- .getClassName())) {
- selected.add((Embeddable) classObj);
+ if(classObj instanceof Embeddable) {
+ String name = ((Embeddable) classObj).getClassName();
+ if(selectedEmbeddables.contains(name)) {
+ selected.add((Embeddable) classObj);
+ }
}
}
return selected;
}
- public List<ObjEntity> getSelectedEntities() {
+ private List<ObjEntity> getSelectedEntities() {
List<ObjEntity> selected = new ArrayList<>(selectedEntities.size());
for (Object classObj : classes) {
- if (classObj instanceof ObjEntity
- && selectedEntities.contains(((ObjEntity) classObj).getName())) {
- selected.add(((ObjEntity) classObj));
+ if(classObj instanceof ObjEntity) {
+ String name = ((ObjEntity) classObj).getName();
+ if(selectedEntities.contains(name)) {
+ selected.add(((ObjEntity) classObj));
+ }
}
}
@@ -392,22 +388,23 @@ public abstract class CodeGeneratorControllerBase extends CayenneController {
updateEmbeddables();
}
- public void updateEntities() {
+ CgenConfiguration getCurrentConfiguration() {
DataMap map = getProjectController().getCurrentDataMap();
- CgenConfiguration cgenConfiguration = projectController.getApplication().getMetaData().get(map, CgenConfiguration.class);
+ return projectController.getApplication().getMetaData().get(map, CgenConfiguration.class);
+ }
+
+ private void updateEntities() {
+ CgenConfiguration cgenConfiguration = getCurrentConfiguration();
if(cgenConfiguration != null) {
cgenConfiguration.getEntities().clear();
for(ObjEntity entity: getSelectedEntities()) {
- if(!entity.isGeneric()) {
- cgenConfiguration.loadEntity(entity.getName());
- }
+ cgenConfiguration.loadEntity(entity);
}
}
}
- public void updateEmbeddables() {
- DataMap map = getProjectController().getCurrentDataMap();
- CgenConfiguration cgenConfiguration = projectController.getApplication().getMetaData().get(map, CgenConfiguration.class);
+ private void updateEmbeddables() {
+ CgenConfiguration cgenConfiguration = getCurrentConfiguration();
if(cgenConfiguration != null) {
cgenConfiguration.getEmbeddables().clear();
for(Embeddable embeddable : getSelectedEmbeddables()) {
@@ -416,18 +413,34 @@ public abstract class CodeGeneratorControllerBase extends CayenneController {
}
}
- void addToSelectedEntities(DataMap dataMap, Collection<String> entities) {
- prepareClasses(dataMap);
+ private void addToSelectedEntities(Collection<String> entities) {
selectedEntities.addAll(entities);
updateEntities();
}
- void addToSelectedEmbeddables(DataMap dataMap, Collection<String> embeddables) {
+ void addEntity(DataMap dataMap, ObjEntity objEntity) {
prepareClasses(dataMap);
+ selectedEntities.add(objEntity.getName());
+ CgenConfiguration cgenConfiguration = getCurrentConfiguration();
+ if(cgenConfiguration != null) {
+ cgenConfiguration.loadEntity(objEntity);
+ }
+ }
+
+ private void addToSelectedEmbeddables(Collection<String> embeddables) {
selectedEmbeddables.addAll(embeddables);
updateEmbeddables();
}
+ void addEmbeddable(DataMap dataMap, Embeddable embeddable) {
+ prepareClasses(dataMap);
+ selectedEmbeddables.add(embeddable.getClassName());
+ CgenConfiguration cgenConfiguration = getCurrentConfiguration();
+ if(cgenConfiguration != null) {
+ cgenConfiguration.loadEmbeddable(embeddable.getClassName());
+ }
+ }
+
public int getSelectedEntitiesSize() {
return selectedEntities != null ? selectedEntities.size() : 0;
}
@@ -466,4 +479,14 @@ public abstract class CodeGeneratorControllerBase extends CayenneController {
public abstract void enableGenerateButton(boolean enabled);
+
+ void removeFromSelectedEntities(ObjEntity objEntity) {
+ initCollectionsForSelection(objEntity.getDataMap());
+ selectedEntities.remove(objEntity.getName());
+ }
+
+ void removeFromSelectedEmbeddables(Embeddable embeddable) {
+ initCollectionsForSelection(embeddable.getDataMap());
+ selectedEmbeddables.remove(embeddable.getClassName());
+ }
}
[10/32] cayenne git commit: Update cgen dialog
Posted by nt...@apache.org.
Update cgen dialog
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/aa22c93c
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/aa22c93c
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/aa22c93c
Branch: refs/heads/master
Commit: aa22c93c536a6ee82e1bdd4e364113473f77135f
Parents: 93da6be
Author: Arseni Bulatski <an...@gmail.com>
Authored: Fri Jul 6 15:59:27 2018 +0300
Committer: Arseni Bulatski <an...@gmail.com>
Committed: Wed Oct 24 13:47:32 2018 +0300
----------------------------------------------------------------------
.../dialog/codegen/ClassesTabController.java | 9 ++++++++-
.../modeler/dialog/codegen/ClassesTabPanel.java | 13 ++++++-------
.../codegen/CodeGeneratorControllerBase.java | 10 +++-------
.../dialog/codegen/CodeGeneratorDialog.java | 15 ++-------------
.../dialog/codegen/CustomModeController.java | 17 ++++-------------
.../modeler/dialog/codegen/CustomModePanel.java | 7 +++++++
.../dialog/codegen/GeneratorController.java | 19 +++----------------
.../dialog/codegen/GeneratorTabController.java | 2 +-
.../dialog/codegen/StandardModeController.java | 2 +-
.../dialog/codegen/StandardModePanel.java | 2 +-
10 files changed, 36 insertions(+), 60 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cayenne/blob/aa22c93c/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClassesTabController.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClassesTabController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClassesTabController.java
index acd94d7..3e61094 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClassesTabController.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClassesTabController.java
@@ -26,6 +26,13 @@ import org.apache.cayenne.swing.ImageRendererColumn;
import org.apache.cayenne.swing.ObjectBinding;
import org.apache.cayenne.swing.TableBindingBuilder;
+import javax.swing.*;
+import java.awt.*;
+import java.util.*;
+import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JTable;
@@ -97,7 +104,7 @@ public class ClassesTabController extends CayenneController {
Boolean.TRUE);
tableBuilder.addColumn(
- "Class",
+ "Entity",
"parent.getItemName(#item)",
JLabel.class,
false,
http://git-wip-us.apache.org/repos/asf/cayenne/blob/aa22c93c/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClassesTabPanel.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClassesTabPanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClassesTabPanel.java
index f1a8132..3c6e53d 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClassesTabPanel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClassesTabPanel.java
@@ -22,13 +22,12 @@ package org.apache.cayenne.modeler.dialog.codegen;
import org.apache.cayenne.map.DataMap;
import javax.swing.BoxLayout;
-import javax.swing.JCheckBox;
-import javax.swing.JLabel;
-import javax.swing.JPanel;
-import javax.swing.JScrollPane;
-import javax.swing.JTable;
-import javax.swing.ScrollPaneConstants;
-import javax.swing.UIManager;
+import javax.swing.*;
+import javax.swing.border.EmptyBorder;
+import java.awt.*;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
import javax.swing.border.EmptyBorder;
import java.awt.BorderLayout;
import java.awt.Component;
http://git-wip-us.apache.org/repos/asf/cayenne/blob/aa22c93c/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorControllerBase.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorControllerBase.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorControllerBase.java
index 5d1201d..6e6084c 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorControllerBase.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorControllerBase.java
@@ -27,14 +27,10 @@ import org.apache.cayenne.modeler.util.CellRenderers;
import org.apache.cayenne.validation.ValidationFailure;
import org.apache.cayenne.validation.ValidationResult;
-import javax.swing.Icon;
-import javax.swing.JLabel;
-import java.awt.Component;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashSet;
+import javax.swing.*;
+import java.awt.*;
+import java.util.*;
import java.util.List;
-import java.util.Set;
import java.util.function.Predicate;
/**
http://git-wip-us.apache.org/repos/asf/cayenne/blob/aa22c93c/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorDialog.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorDialog.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorDialog.java
index 7ed60e2..c6d6e69 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorDialog.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorDialog.java
@@ -22,19 +22,8 @@ package org.apache.cayenne.modeler.dialog.codegen;
import org.apache.cayenne.modeler.Application;
import org.apache.cayenne.swing.components.TopBorder;
-import javax.swing.Box;
-import javax.swing.JButton;
-import javax.swing.JDialog;
-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.Container;
-import java.awt.Dimension;
-import java.awt.FlowLayout;
+import javax.swing.*;
+import java.awt.*;
/**
*/
http://git-wip-us.apache.org/repos/asf/cayenne/blob/aa22c93c/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomModeController.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomModeController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomModeController.java
index 3ec4778..4f48854 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomModeController.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomModeController.java
@@ -28,22 +28,13 @@ import org.apache.cayenne.swing.BindingBuilder;
import org.apache.cayenne.swing.ObjectBinding;
import org.apache.cayenne.util.Util;
-import javax.swing.DefaultComboBoxModel;
-import javax.swing.JCheckBox;
-import javax.swing.JComboBox;
-import java.awt.Component;
+import javax.swing.*;
+import java.awt.*;
+import java.util.*;
import java.util.List;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
import java.util.Map.Entry;
-import java.util.Objects;
-import java.util.Set;
-import java.util.TreeMap;
-import static org.apache.cayenne.modeler.CodeTemplateManager.SINGLE_SERVER_CLASS;
-import static org.apache.cayenne.modeler.CodeTemplateManager.STANDARD_SERVER_SUBCLASS;
-import static org.apache.cayenne.modeler.CodeTemplateManager.STANDARD_SERVER_SUPERCLASS;
+import static org.apache.cayenne.modeler.CodeTemplateManager.*;
import static org.apache.cayenne.modeler.dialog.pref.PreferenceDialog.TEMPLATES_KEY;
/**
http://git-wip-us.apache.org/repos/asf/cayenne/blob/aa22c93c/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomModePanel.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomModePanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomModePanel.java
index 7dd2e79..73f89f7 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomModePanel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomModePanel.java
@@ -29,6 +29,8 @@ 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 {
@@ -56,6 +58,11 @@ public class CustomModePanel extends GeneratorControllerPanel {
this.manageTemplatesLink = new ActionLink("Customize Templates...");
manageTemplatesLink.setFont(manageTemplatesLink.getFont().deriveFont(10f));
+ pairs.addChangeListener(e -> {
+ superclassTemplate.setEnabled(pairs.isSelected());
+ overwrite.setEnabled(!pairs.isSelected());
+ });
+
// assemble
FormLayout layout = new FormLayout(
"right:77dlu, 1dlu, fill:100:grow, 1dlu, left:80dlu, 1dlu", "");
http://git-wip-us.apache.org/repos/asf/cayenne/blob/aa22c93c/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorController.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorController.java
index 082a08f..c695684 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorController.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorController.java
@@ -22,13 +22,7 @@ package org.apache.cayenne.modeler.dialog.codegen;
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;
@@ -42,16 +36,9 @@ 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.JTextField;
+import javax.swing.*;
import java.io.File;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.LinkedList;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
import java.util.function.Predicate;
import java.util.prefs.Preferences;
http://git-wip-us.apache.org/repos/asf/cayenne/blob/aa22c93c/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorTabController.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorTabController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorTabController.java
index 5d7594f..4e681ae 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorTabController.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorTabController.java
@@ -26,7 +26,7 @@ import org.apache.cayenne.pref.PreferenceDetail;
import org.apache.cayenne.swing.BindingBuilder;
import org.apache.cayenne.util.Util;
-import java.awt.Component;
+import java.awt.*;
import java.awt.Dimension;
import java.util.Collection;
import java.util.HashMap;
http://git-wip-us.apache.org/repos/asf/cayenne/blob/aa22c93c/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/StandardModeController.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/StandardModeController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/StandardModeController.java
index 1c3a27a..f11ade8 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/StandardModeController.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/StandardModeController.java
@@ -23,7 +23,7 @@ import org.apache.cayenne.gen.ClassGenerationAction;
import org.apache.cayenne.map.DataMap;
import org.apache.cayenne.modeler.pref.DataMapDefaults;
-import java.awt.Component;
+import java.awt.*;
import java.util.ArrayList;
import java.util.Collection;
import java.util.TreeMap;
http://git-wip-us.apache.org/repos/asf/cayenne/blob/aa22c93c/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/StandardModePanel.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/StandardModePanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/StandardModePanel.java
index cbb3f35..1f10ffb 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/StandardModePanel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/StandardModePanel.java
@@ -22,7 +22,7 @@ package org.apache.cayenne.modeler.dialog.codegen;
import com.jgoodies.forms.builder.DefaultFormBuilder;
import com.jgoodies.forms.layout.FormLayout;
-import java.awt.BorderLayout;
+import java.awt.*;
public class StandardModePanel extends GeneratorControllerPanel {
[05/32] cayenne git commit: Cgen. Refactoring, changes
Posted by nt...@apache.org.
Cgen. Refactoring, changes
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/0e19c961
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/0e19c961
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/0e19c961
Branch: refs/heads/master
Commit: 0e19c96147992fcbd10d285d13d3b029cc013f7d
Parents: b85a090
Author: Arseni Bulatski <an...@gmail.com>
Authored: Thu Jun 21 16:55:07 2018 +0300
Committer: Arseni Bulatski <an...@gmail.com>
Committed: Wed Oct 24 13:41:33 2018 +0300
----------------------------------------------------------------------
.../cayenne/gen/ClassGenerationAction.java | 110 +++++----
.../org/apache/cayenne/gen/DataMapArtifact.java | 1 -
.../cayenne/gen/xml/CgenConfigHandler.java | 55 ++++-
.../apache/cayenne/gen/xml/CgenExtension.java | 21 ++
.../cayenne/gen/xml/CgenLoaderDelegate.java | 21 ++
.../cayenne/gen/xml/CgenSaverDelegate.java | 21 ++
.../cayenne/gen/xml/EmbeddableHandler.java | 21 ++
.../cayenne/gen/xml/ObjEntityHandler.java | 21 ++
.../cayenne/modeler/CodeTemplateManager.java | 44 +++-
.../editor/cgen/ClassesTabController.java | 9 +-
.../modeler/editor/cgen/ClassesTabPanel.java | 17 +-
.../editor/cgen/CodeGeneratorController.java | 2 +-
.../cgen/CodeGeneratorControllerBase.java | 26 +-
.../editor/cgen/CustomModeController.java | 188 ++++-----------
.../modeler/editor/cgen/CustomModePanel.java | 238 ++++++++++++-------
.../editor/cgen/CustomPreferencesUpdater.java | 193 ---------------
.../editor/cgen/GeneratorController.java | 29 +--
.../editor/cgen/GeneratorControllerPanel.java | 34 ++-
.../editor/cgen/GeneratorTabController.java | 5 -
.../modeler/editor/cgen/GeneratorTabPanel.java | 1 +
.../cayenne/modeler/util/ComboBoxAdapter.java | 72 ++++++
21 files changed, 575 insertions(+), 554 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cayenne/blob/0e19c961/cayenne-cgen/src/main/java/org/apache/cayenne/gen/ClassGenerationAction.java
----------------------------------------------------------------------
diff --git a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/ClassGenerationAction.java b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/ClassGenerationAction.java
index 35e34cf..f56f81e 100644
--- a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/ClassGenerationAction.java
+++ b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/ClassGenerationAction.java
@@ -22,7 +22,10 @@ package org.apache.cayenne.gen;
import org.apache.cayenne.CayenneRuntimeException;
import org.apache.cayenne.configuration.ConfigurationNodeVisitor;
import org.apache.cayenne.gen.xml.CgenExtension;
-import org.apache.cayenne.map.*;
+import org.apache.cayenne.map.DataMap;
+import org.apache.cayenne.map.Embeddable;
+import org.apache.cayenne.map.ObjEntity;
+import org.apache.cayenne.map.QueryDescriptor;
import org.apache.cayenne.util.XMLEncoder;
import org.apache.cayenne.util.XMLSerializable;
import org.apache.velocity.Template;
@@ -102,6 +105,9 @@ public class ClassGenerationAction implements Serializable, XMLSerializable {
this.embeddableTemplate = EMBEDDABLE_SUBCLASS_TEMPLATE;
this.embeddableSuperTemplate = EMBEDDABLE_SUPERCLASS_TEMPLATE;
+ this.queryTemplate = DATAMAP_SUBCLASS_TEMPLATE;
+ this.querySuperTemplate = DATAMAP_SUPERCLASS_TEMPLATE;
+
this.artifactsGenerationMode = ArtifactsGenerationMode.ENTITY;
this.artifacts = new ArrayList<>();
@@ -218,6 +224,11 @@ public class ClassGenerationAction implements Serializable, XMLSerializable {
*/
public void execute() throws Exception {
+ resetArtifacts();
+ addAllEntities();
+ addAllEmbeddables();
+ addQueries(dataMap.getQueryDescriptors());
+
validateAttributes();
try {
@@ -255,26 +266,6 @@ public class ClassGenerationAction implements Serializable, XMLSerializable {
}
}
- public void prepareArtifacts(){
-// resetArtifacts();
- if(!entityArtifacts.isEmpty()) {
- for(String name : entityArtifacts) {
- ObjEntity objEntity = dataMap.getObjEntity(name);
- if(objEntity != null) {
- artifacts.add(new EntityArtifact(objEntity));
- }
- }
- }
- if(!embeddableArtifacts.isEmpty()) {
- for(String name : embeddableArtifacts) {
- Embeddable embeddable = dataMap.getEmbeddable(name);
- if(embeddable != null) {
- artifacts.add(new EmbeddableArtifact(embeddable));
- }
- }
- }
- }
-
private Template getTemplate(TemplateType type) {
String templateName = customTemplateName(type);
@@ -577,20 +568,36 @@ public class ClassGenerationAction implements Serializable, XMLSerializable {
}
}
- public void loadEntity(String name) {
- if (artifactsGenerationMode == ArtifactsGenerationMode.ENTITY
+ private void addAllEntities() {
+ if(artifactsGenerationMode == ArtifactsGenerationMode.ENTITY
|| artifactsGenerationMode == ArtifactsGenerationMode.ALL) {
- entityArtifacts.add(name);
+ entityArtifacts.forEach(val ->
+ artifacts.add(new EntityArtifact(dataMap.getObjEntity(val))));
}
}
- public void loadEmbeddable(String name) {
- if (artifactsGenerationMode == ArtifactsGenerationMode.ENTITY
+ private void addAllEmbeddables() {
+ if(artifactsGenerationMode == ArtifactsGenerationMode.ENTITY
|| artifactsGenerationMode == ArtifactsGenerationMode.ALL) {
- embeddableArtifacts.add(name);
+ embeddableArtifacts.forEach(val ->
+ artifacts.add(new EmbeddableArtifact(dataMap.getEmbeddable(val))));
}
}
+ /**
+ * @since 4.1
+ */
+ public void loadEntity(String name) {
+ entityArtifacts.add(name);
+ }
+
+ /**
+ * @since 4.1
+ */
+ public void loadEmbeddable(String name) {
+ embeddableArtifacts.add(name);
+ }
+
/**
* Sets an optional shared VelocityContext. Useful with tools like VPP that
* can set custom values in the context, not known to Cayenne.
@@ -625,21 +632,23 @@ public class ClassGenerationAction implements Serializable, XMLSerializable {
}
}
- /**
- * @since 4.1
- */
- public boolean isCreatePKProperties() {
- return createPKProperties;
- }
+ /**
+ * @since 4.1
+ */
+ public boolean isCreatePKProperties() {
+ return createPKProperties;
+ }
- /**
- * @since 4.1
- */
- public void setCreatePKProperties(boolean createPKProperties) {
- this.createPKProperties = createPKProperties;
- }
+ /**
+ * @since 4.1
+ */
+ public void setCreatePKProperties(boolean createPKProperties) {
+ this.createPKProperties = createPKProperties;
+ }
- public Collection<EntityArtifact> getEntityArtifacts() {
+ private Collection<EntityArtifact> getEntityArtifacts() {
+ resetArtifacts();
+ addAllEntities();
Collection<EntityArtifact> entityArtifacts = new ArrayList<>();
for(Artifact artifact : artifacts){
if(artifact instanceof EntityArtifact){
@@ -649,7 +658,9 @@ public class ClassGenerationAction implements Serializable, XMLSerializable {
return entityArtifacts;
}
- public Collection<EmbeddableArtifact> getEmbeddableArtifacts() {
+ private Collection<EmbeddableArtifact> getEmbeddableArtifacts() {
+ resetArtifacts();
+ addAllEmbeddables();
Collection<EmbeddableArtifact> embeddableArtifacts = new ArrayList<>();
for(Artifact artifact : artifacts){
if(artifact instanceof EmbeddableArtifact){
@@ -699,7 +710,7 @@ public class ClassGenerationAction implements Serializable, XMLSerializable {
return superPkg;
}
- public void resetArtifacts(){
+ private void resetArtifacts(){
this.artifacts = new ArrayList<>();
}
@@ -735,6 +746,19 @@ public class ClassGenerationAction implements Serializable, XMLSerializable {
return embeddableSuperTemplate;
}
+ public String getQueryTemplate() {
+ return queryTemplate;
+ }
+
+ public String getQuerySuperTemplate() {
+ return querySuperTemplate;
+ }
+
+ public void resetCollections(){
+ this.embeddableArtifacts = new ArrayList<>();
+ this.entityArtifacts = new ArrayList<>();
+ }
+
@Override
public void encodeAsXML(XMLEncoder encoder, ConfigurationNodeVisitor delegate) {
encoder.start("cgen")
@@ -743,6 +767,8 @@ public class ClassGenerationAction implements Serializable, XMLSerializable {
.nested(this.getEmbeddableArtifacts(), delegate)
.simpleTag("outputDirectory", this.destDir.getAbsolutePath())
.simpleTag("generationMode", this.artifactsGenerationMode.getLabel())
+ .simpleTag("dataMapTemplate", this.queryTemplate)
+ .simpleTag("dataMapSuperclassTemplate", this.querySuperTemplate)
.simpleTag("subclassTemplate", this.template)
.simpleTag("superclassTemplate", this.superTemplate)
.simpleTag("embeddableTemplate", this.embeddableTemplate)
http://git-wip-us.apache.org/repos/asf/cayenne/blob/0e19c961/cayenne-cgen/src/main/java/org/apache/cayenne/gen/DataMapArtifact.java
----------------------------------------------------------------------
diff --git a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/DataMapArtifact.java b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/DataMapArtifact.java
index 54a7426..937f451 100644
--- a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/DataMapArtifact.java
+++ b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/DataMapArtifact.java
@@ -137,5 +137,4 @@ public class DataMapArtifact implements Artifact {
public DataMap getDataMap() {
return dataMap;
}
-
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/0e19c961/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenConfigHandler.java
----------------------------------------------------------------------
diff --git a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenConfigHandler.java b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenConfigHandler.java
index 667a4a6..f77f1f1 100644
--- a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenConfigHandler.java
+++ b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenConfigHandler.java
@@ -1,3 +1,21 @@
+/*****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ ****************************************************************/
package org.apache.cayenne.gen.xml;
import org.apache.cayenne.configuration.xml.DataChannelMetaData;
@@ -9,6 +27,9 @@ import org.xml.sax.SAXException;
import java.io.File;
+/**
+ * @since 4.1
+ */
public class CgenConfigHandler extends NamespaceAwareNestedTagHandler{
public static final String CONFIG_TAG = "cgen";
@@ -28,6 +49,8 @@ public class CgenConfigHandler extends NamespaceAwareNestedTagHandler{
private static final String ENCODING_TAG = "encoding";
private static final String EMBEDDABLE_TEMPLATE_TAG = "embeddableTemplate";
private static final String EMBEDDABLE_SUPERCLASS_TEMPLATE_TAG = "embeddableSuperclassTemplate";
+ private static final String DATAMAP_TEMPLATE_TAG = "dataMapTemplate";
+ private static final String DATAMAP_SUPERCLASS_TEMPLATE_TAG = "dataMapSuperclassTemplate";
public static final String TRUE = "true";
@@ -108,7 +131,12 @@ public class CgenConfigHandler extends NamespaceAwareNestedTagHandler{
case EMBEDDABLE_SUPERCLASS_TEMPLATE_TAG:
createEmbeddableSuperclassTemplate(data);
break;
-
+ case DATAMAP_TEMPLATE_TAG:
+ createDataMapTemplate(data);
+ break;
+ case DATAMAP_SUPERCLASS_TEMPLATE_TAG:
+ createDataMapSuperclassTemplate(data);
+ break;
}
}
@@ -152,7 +180,7 @@ public class CgenConfigHandler extends NamespaceAwareNestedTagHandler{
}
}
- public void createEmbeddableTemplate(String template) {
+ private void createEmbeddableTemplate(String template) {
if(template.trim().length() == 0) {
return;
}
@@ -162,7 +190,7 @@ public class CgenConfigHandler extends NamespaceAwareNestedTagHandler{
}
}
- public void createEmbeddableSuperclassTemplate(String template) {
+ private void createEmbeddableSuperclassTemplate(String template) {
if(template.trim().length() == 0) {
return;
}
@@ -258,11 +286,30 @@ public class CgenConfigHandler extends NamespaceAwareNestedTagHandler{
}
}
+ private void createDataMapTemplate(String data) {
+ if(data.trim().length() == 0) {
+ return;
+ }
+
+ if(configuration != null) {
+ configuration.setQueryTemplate(data);
+ }
+ }
+
+ private void createDataMapSuperclassTemplate(String data) {
+ if(data.trim().length() == 0) {
+ return;
+ }
+
+ if(configuration != null) {
+ configuration.setQuerySuperTemplate(data);
+ }
+ }
+
private void createConfig() {
configuration = new ClassGenerationAction();
loaderContext.addDataMapListener(dataMap -> {
configuration.setDataMap(dataMap);
- configuration.prepareArtifacts();
CgenConfigHandler.this.metaData.add(dataMap, configuration);
});
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/0e19c961/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenExtension.java
----------------------------------------------------------------------
diff --git a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenExtension.java b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenExtension.java
index e98eca9..074a532 100644
--- a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenExtension.java
+++ b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenExtension.java
@@ -1,3 +1,21 @@
+/*****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ ****************************************************************/
package org.apache.cayenne.gen.xml;
import org.apache.cayenne.configuration.ConfigurationNodeVisitor;
@@ -9,6 +27,9 @@ import org.apache.cayenne.project.extension.LoaderDelegate;
import org.apache.cayenne.project.extension.ProjectExtension;
import org.apache.cayenne.project.extension.SaverDelegate;
+/**
+ * @since 4.1
+ */
public class CgenExtension implements ProjectExtension {
public static final String NAMESPACE = "http://cayenne.apache.org/schema/" + Project.VERSION + "/cgen";
http://git-wip-us.apache.org/repos/asf/cayenne/blob/0e19c961/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenLoaderDelegate.java
----------------------------------------------------------------------
diff --git a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenLoaderDelegate.java b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenLoaderDelegate.java
index 8b3728f..b2f1cba 100644
--- a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenLoaderDelegate.java
+++ b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenLoaderDelegate.java
@@ -1,3 +1,21 @@
+/*****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ ****************************************************************/
package org.apache.cayenne.gen.xml;
import org.apache.cayenne.configuration.xml.DataChannelMetaData;
@@ -5,6 +23,9 @@ import org.apache.cayenne.configuration.xml.NamespaceAwareNestedTagHandler;
import org.apache.cayenne.project.extension.LoaderDelegate;
+/**
+ * @since 4.1
+ */
public class CgenLoaderDelegate implements LoaderDelegate {
private DataChannelMetaData metaData;
http://git-wip-us.apache.org/repos/asf/cayenne/blob/0e19c961/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenSaverDelegate.java
----------------------------------------------------------------------
diff --git a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenSaverDelegate.java b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenSaverDelegate.java
index d4d4b8f..8d25cf1 100644
--- a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenSaverDelegate.java
+++ b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenSaverDelegate.java
@@ -1,3 +1,21 @@
+/*****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ ****************************************************************/
package org.apache.cayenne.gen.xml;
import org.apache.cayenne.configuration.xml.DataChannelMetaData;
@@ -5,6 +23,9 @@ import org.apache.cayenne.gen.ClassGenerationAction;
import org.apache.cayenne.map.DataMap;
import org.apache.cayenne.project.extension.BaseSaverDelegate;
+/**
+ * @since 4.1
+ */
public class CgenSaverDelegate extends BaseSaverDelegate{
private DataChannelMetaData metaData;
http://git-wip-us.apache.org/repos/asf/cayenne/blob/0e19c961/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/EmbeddableHandler.java
----------------------------------------------------------------------
diff --git a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/EmbeddableHandler.java b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/EmbeddableHandler.java
index 4e11a6f..4772348 100644
--- a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/EmbeddableHandler.java
+++ b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/EmbeddableHandler.java
@@ -1,3 +1,21 @@
+/*****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ ****************************************************************/
package org.apache.cayenne.gen.xml;
import org.apache.cayenne.configuration.xml.NamespaceAwareNestedTagHandler;
@@ -5,6 +23,9 @@ import org.apache.cayenne.gen.ClassGenerationAction;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
+/**
+ * @since 4.1
+ */
public class EmbeddableHandler extends NamespaceAwareNestedTagHandler {
private static final String EMBEDDABLE_TAG = "embeddable";
http://git-wip-us.apache.org/repos/asf/cayenne/blob/0e19c961/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/ObjEntityHandler.java
----------------------------------------------------------------------
diff --git a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/ObjEntityHandler.java b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/ObjEntityHandler.java
index f4ebc48..593a002 100644
--- a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/ObjEntityHandler.java
+++ b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/ObjEntityHandler.java
@@ -1,3 +1,21 @@
+/*****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ ****************************************************************/
package org.apache.cayenne.gen.xml;
import org.apache.cayenne.configuration.xml.NamespaceAwareNestedTagHandler;
@@ -5,6 +23,9 @@ import org.apache.cayenne.gen.ClassGenerationAction;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
+/**
+ * @since 4.1
+ */
public class ObjEntityHandler extends NamespaceAwareNestedTagHandler {
private static final String OBJENTITY_TAG = "objEntity";
http://git-wip-us.apache.org/repos/asf/cayenne/blob/0e19c961/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CodeTemplateManager.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CodeTemplateManager.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CodeTemplateManager.java
index b56851a..98f0dc9 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CodeTemplateManager.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CodeTemplateManager.java
@@ -43,19 +43,26 @@ public class CodeTemplateManager {
static final String STANDARD_CLIENT_SUPERCLASS = "Standard Client Superclass";
static final String STANDARD_CLIENT_SUBCLASS = "Standard Client Subclass";
- public static final String STANDART_EMBEDDABLE_SUPERCLASS = "Standart Embeddable Superclass";
- public static final String STANDART_EMBEDDABLE_SUBCLASS = "Standart Embeddable Subclass";
- public static final String SINGLE_EMBEDDABLE_CLASS = "Single Embeddable class";
+ private static final String STANDART_EMBEDDABLE_SUPERCLASS = "Standart Embeddable Superclass";
+ private static final String STANDART_EMBEDDABLE_SUBCLASS = "Standart Embeddable Subclass";
+ private static final String SINGLE_EMBEDDABLE_CLASS = "Single Embeddable class";
+
+ private static final String STANDART_DATAMAP_SUPERCLASS = "Standart DataMap Superclass";
+ private static final String STANDART_DATAMAP_SUBCLASS = "Standart DataMap Subclass";
+ private static final String SINGLE_DATAMAP_CLASS = "Single DataMap class";
public static final String NODE_NAME = "codeTemplateManager";
- protected List<String> standardSubclassTemplates;
- protected List<String> standardSuperclassTemplates;
- protected Map<String, String> customTemplates;
- protected Map<String, String> standardTemplates;
+ private List<String> standardSubclassTemplates;
+ private List<String> standardSuperclassTemplates;
+ private Map<String, String> customTemplates;
+ private Map<String, String> standardTemplates;
+
+ private List<String> standartEmbeddableTemplates;
+ private List<String> standartEmbeddableSuperclassTemplates;
- protected List<String> standartEmbeddableTemplates;
- protected List<String> standartEmbeddableSuperclassTemplates;
+ private List<String> standartDataMapTemplates;
+ private List<String> standartDataMapSuperclassTemplates;
private Map<String, String> reverseStandartTemplates;
@@ -83,6 +90,13 @@ public class CodeTemplateManager {
standartEmbeddableSuperclassTemplates = new ArrayList<>();
standartEmbeddableSuperclassTemplates.add(STANDART_EMBEDDABLE_SUPERCLASS);
+ standartDataMapTemplates = new ArrayList<>();
+ standartDataMapTemplates.add(STANDART_DATAMAP_SUBCLASS);
+ standartDataMapTemplates.add(SINGLE_DATAMAP_CLASS);
+
+ standartDataMapSuperclassTemplates = new ArrayList<>();
+ standartDataMapSuperclassTemplates.add(STANDART_DATAMAP_SUPERCLASS);
+
updateCustomTemplates(getTemplatePreferences(application));
standardTemplates = new HashMap<>();
@@ -96,6 +110,10 @@ public class CodeTemplateManager {
standardTemplates.put(STANDART_EMBEDDABLE_SUBCLASS, ClassGenerationAction.EMBEDDABLE_SUBCLASS_TEMPLATE);
standardTemplates.put(SINGLE_EMBEDDABLE_CLASS, ClassGenerationAction.EMBEDDABLE_SINGLE_CLASS_TEMPLATE);
+ standardTemplates.put(STANDART_DATAMAP_SUBCLASS, ClassGenerationAction.DATAMAP_SUBCLASS_TEMPLATE);
+ standardTemplates.put(SINGLE_DATAMAP_CLASS, ClassGenerationAction.DATAMAP_SINGLE_CLASS_TEMPLATE);
+ standardTemplates.put(STANDART_DATAMAP_SUPERCLASS, ClassGenerationAction.DATAMAP_SUPERCLASS_TEMPLATE);
+
reverseStandartTemplates = new HashMap<>();
reverseStandartTemplates.put(ClassGenerationAction.SUBCLASS_TEMPLATE, STANDARD_SERVER_SUBCLASS);
reverseStandartTemplates.put(ClientClassGenerationAction.SUBCLASS_TEMPLATE, STANDARD_CLIENT_SUBCLASS);
@@ -106,6 +124,10 @@ public class CodeTemplateManager {
reverseStandartTemplates.put(ClassGenerationAction.EMBEDDABLE_SUPERCLASS_TEMPLATE, STANDART_EMBEDDABLE_SUPERCLASS);
reverseStandartTemplates.put(ClassGenerationAction.EMBEDDABLE_SUBCLASS_TEMPLATE, STANDART_EMBEDDABLE_SUBCLASS);
reverseStandartTemplates.put(ClassGenerationAction.EMBEDDABLE_SINGLE_CLASS_TEMPLATE, SINGLE_EMBEDDABLE_CLASS);
+
+ reverseStandartTemplates.put(ClassGenerationAction.DATAMAP_SUBCLASS_TEMPLATE, STANDART_DATAMAP_SUBCLASS);
+ reverseStandartTemplates.put(ClassGenerationAction.DATAMAP_SINGLE_CLASS_TEMPLATE, SINGLE_DATAMAP_CLASS);
+ reverseStandartTemplates.put(ClassGenerationAction.DATAMAP_SUPERCLASS_TEMPLATE, STANDART_DATAMAP_SUPERCLASS);
}
/**
@@ -166,4 +188,8 @@ public class CodeTemplateManager {
public List<String> getStandartEmbeddableSuperclassTemplates() {
return standartEmbeddableSuperclassTemplates;
}
+
+ public List<String> getStandartDataMapTemplates() { return standartDataMapTemplates; }
+
+ public List<String> getStandartDataMapSuperclassTemplates() { return standartDataMapSuperclassTemplates; }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/0e19c961/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/ClassesTabController.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/ClassesTabController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/ClassesTabController.java
index 586416e..704e851 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/ClassesTabController.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/ClassesTabController.java
@@ -106,7 +106,7 @@ public class ClassesTabController extends CayenneController {
else if (selectedCount == getParentController().getClasses().size()) {
view.getCheckAll().setSelected(true);
}
- updateEntities();
+ getParentController().updateEntities();
}
/**
@@ -116,12 +116,7 @@ public class ClassesTabController extends CayenneController {
public void checkAllAction() {
if (getParentController().updateSelection(view.getCheckAll().isSelected() ? o -> true : o -> false)) {
tableBinding.updateView();
- updateEntities();
+ getParentController().updateEntities();
}
}
-
- private void updateEntities(){
- getParentController().updateEntities();
-// getParentController().getProjectController().setDirty(true);
- }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/0e19c961/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/ClassesTabPanel.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/ClassesTabPanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/ClassesTabPanel.java
index e4fc20c..f6cad0b 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/ClassesTabPanel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/ClassesTabPanel.java
@@ -21,8 +21,6 @@ package org.apache.cayenne.modeler.editor.cgen;
import javax.swing.*;
import java.awt.*;
-import java.awt.event.ItemEvent;
-import java.awt.event.ItemListener;
/**
*/
@@ -42,15 +40,12 @@ public class ClassesTabPanel extends JPanel {
this.checkAll = new JCheckBox();
this.checkAllLabel = new JLabel("Check All Classes");
- checkAll.addItemListener(new ItemListener() {
-
- public void itemStateChanged(ItemEvent event) {
- if (checkAll.isSelected()) {
- checkAllLabel.setText("Uncheck All Classess");
- }
- else {
- checkAllLabel.setText("Check All Classes");
- }
+ checkAll.addItemListener(event -> {
+ if (checkAll.isSelected()) {
+ checkAllLabel.setText("Uncheck All Classess");
+ }
+ else {
+ checkAllLabel.setText("Check All Classes");
}
});
http://git-wip-us.apache.org/repos/asf/cayenne/blob/0e19c961/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CodeGeneratorController.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CodeGeneratorController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CodeGeneratorController.java
index ac5e152..64a15fa 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CodeGeneratorController.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CodeGeneratorController.java
@@ -58,7 +58,6 @@ public class CodeGeneratorController extends CodeGeneratorControllerBase {
projectController.addDataMapDisplayListener(e -> {
super.startup(e.getDataMap());
classesSelector.startup();
- generatorSelector.startup(e.getDataMap());
GeneratorController modeController = generatorSelector.getGeneratorController();
ClassGenerationAction classGenerationAction = modeController.createGenerator();
@@ -125,6 +124,7 @@ public class CodeGeneratorController extends CodeGeneratorControllerBase {
}
view.getClassesCount().setText(label);
+ projectController.setDirty(true);
}
public void generateAction() {
http://git-wip-us.apache.org/repos/asf/cayenne/blob/0e19c961/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CodeGeneratorControllerBase.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CodeGeneratorControllerBase.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CodeGeneratorControllerBase.java
index d99e708..0642fb9 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CodeGeneratorControllerBase.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CodeGeneratorControllerBase.java
@@ -264,20 +264,16 @@ public abstract class CodeGeneratorControllerBase extends CayenneController {
DataMap map = getProjectController().getCurrentDataMap();
ClassGenerationAction generator = projectController.getApplication().getMetaData().get(map, ClassGenerationAction.class);
if(generator != null) {
- generator.resetArtifacts();
- LinkedList<ObjEntity> objEntities = new LinkedList<>(map.getObjEntities());
-
- Collection<ObjEntity> selected = new ArrayList<>(getSelectedEntities());
- selected.removeIf(ObjEntity::isGeneric);
-
- objEntities.retainAll(selected);
- generator.addEntities(objEntities);
-
- LinkedList<Embeddable> embeddables = new LinkedList<>(map.getEmbeddables());
- embeddables.retainAll(getSelectedEmbeddables());
- generator.addEmbeddables(embeddables);
+ generator.resetCollections();
+ for(ObjEntity entity: getSelectedEntities()) {
+ if(!entity.isGeneric()) {
+ generator.loadEntity(entity.getName());
+ }
+ }
- generator.addQueries(map.getQueryDescriptors());
+ for(Embeddable embeddable : getSelectedEmbeddables()) {
+ generator.loadEmbeddable(embeddable.getClassName());
+ }
}
}
@@ -312,8 +308,4 @@ public abstract class CodeGeneratorControllerBase extends CayenneController {
public void setCurrentClass(Object currentClass) {
this.currentClass = currentClass;
}
-
-// public Collection<DataMap> getDataMaps() {
-// return dataMaps;
-// }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/0e19c961/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CustomModeController.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CustomModeController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CustomModeController.java
index 134381b..2559657 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CustomModeController.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CustomModeController.java
@@ -23,11 +23,8 @@ import org.apache.cayenne.gen.ClassGenerationAction;
import org.apache.cayenne.modeler.CodeTemplateManager;
import org.apache.cayenne.modeler.dialog.pref.PreferenceDialog;
import org.apache.cayenne.swing.BindingBuilder;
-import org.apache.cayenne.swing.ObjectBinding;
import javax.swing.*;
-import javax.swing.event.DocumentEvent;
-import javax.swing.event.DocumentListener;
import java.awt.*;
import java.util.*;
import java.util.List;
@@ -38,17 +35,17 @@ import java.util.List;
public class CustomModeController extends GeneratorController {
// correspond to non-public constants on MapClassGenerator.
- static final String MODE_DATAMAP = "datamap";
- static final String MODE_ENTITY = "entity";
- static final String MODE_ALL = "all";
+ private static final String MODE_DATAMAP = "datamap";
+ private static final String MODE_ENTITY = "entity";
+ private static final String MODE_ALL = "all";
- static final String DATA_MAP_MODE_LABEL = "DataMap generation";
- static final String ENTITY_MODE_LABEL = "Entity and Embeddable generation";
+ private static final String DATA_MAP_MODE_LABEL = "DataMap generation";
+ private static final String ENTITY_MODE_LABEL = "Entity and Embeddable generation";
static final String ALL_MODE_LABEL = "Generate all";
static final Map<String, String> modesByLabel = new HashMap<>();
- static final Map<String, String> labelByMode = new HashMap<>();
+ private static final Map<String, String> labelByMode = new HashMap<>();
static {
modesByLabel.put(DATA_MAP_MODE_LABEL, MODE_DATAMAP);
@@ -60,56 +57,29 @@ public class CustomModeController extends GeneratorController {
}
protected CustomModePanel view;
- private CodeTemplateManager templateManager;
-
- protected ObjectBinding superTemplate;
- protected ObjectBinding subTemplate;
-
- private BindingBuilder builder;
-
- private CustomPreferencesUpdater preferencesUpdater;
private ClassGenerationAction classGenerationAction;
public CustomModeController(CodeGeneratorControllerBase parent) {
super(parent);
- this.view = new CustomModePanel();
- initListeners();
+ this.view = new CustomModePanel(parent.getProjectController());
bind();
+ initListeners();
}
private void bind() {
initBindings(new BindingBuilder(getApplication().getBindingFactory(), this));
- builder = new BindingBuilder(getApplication().getBindingFactory(), this);
+ BindingBuilder builder = new BindingBuilder(getApplication().getBindingFactory(), this);
builder.bindToAction(view.getManageTemplatesLink(), "popPreferencesAction()");
updateTemplates();
}
- protected void createDefaults() {
-// TreeMap<DataMap, DataMapDefaults> map = new TreeMap<>();
-// DataMap dataMap = getParentController().getDataMap();
-// DataMapDefaults preferences;
-// preferences = getApplication().getFrameController().getProjectController()
-// .getDataMapPreferences(this.getClass().getName().replace(".", "/"), dataMap);
-// preferences.setSuperclassPackage("");
-// preferences.updateSuperclassPackage(dataMap, false);
-//
-// map.put(dataMap, preferences);
-//
-// if (getOutputPath() == null) {
-// setOutputPath(preferences.getOutputPath());
-// }
-//
-// setMapPreferences(map);
-// preferencesUpdater = new CustomPreferencesUpdater(map);
- }
-
protected void updateTemplates() {
Object[] modeChoices = new Object[]{ENTITY_MODE_LABEL, DATA_MAP_MODE_LABEL, ALL_MODE_LABEL};
- view.getGenerationMode().setModel(new DefaultComboBoxModel(modeChoices));
+ view.getGenerationMode().getComboBox().setModel(new DefaultComboBoxModel(modeChoices));
- this.templateManager = getApplication().getCodeTemplateManager();
+ CodeTemplateManager templateManager = getApplication().getCodeTemplateManager();
List<String> customTemplates = new ArrayList<>(templateManager.getCustomTemplates().keySet());
Collections.sort(customTemplates);
@@ -130,11 +100,22 @@ public class CustomModeController extends GeneratorController {
Collections.sort(embeddableSuperTemplates);
embeddableSuperTemplates.addAll(customTemplates);
- this.view.getSubclassTemplate().setModel(new DefaultComboBoxModel(subTemplates.toArray()));
- this.view.getSuperclassTemplate().setModel(new DefaultComboBoxModel(superTemplates.toArray()));
+ List<String> dataMapTemplates = new ArrayList<>(templateManager.getStandartDataMapTemplates());
+ Collections.sort(dataMapTemplates);
+ dataMapTemplates.addAll(customTemplates);
+
+ List<String> dataMapSuperTemplates = new ArrayList<>(templateManager.getStandartDataMapSuperclassTemplates());
+ Collections.sort(dataMapSuperTemplates);
+ dataMapSuperTemplates.addAll(customTemplates);
+
+ this.view.getSubclassTemplate().getComboBox().setModel(new DefaultComboBoxModel(subTemplates.toArray()));
+ this.view.getSuperclassTemplate().getComboBox().setModel(new DefaultComboBoxModel(superTemplates.toArray()));
- this.view.getEmbeddableTemplate().setModel(new DefaultComboBoxModel(embeddableTemplates.toArray()));
- this.view.getEmbeddableSuperTemplate().setModel(new DefaultComboBoxModel(embeddableSuperTemplates.toArray()));
+ this.view.getEmbeddableTemplate().getComboBox().setModel(new DefaultComboBoxModel(embeddableTemplates.toArray()));
+ this.view.getEmbeddableSuperTemplate().getComboBox().setModel(new DefaultComboBoxModel(embeddableSuperTemplates.toArray()));
+
+ this.view.getDataMapTemplate().getComboBox().setModel(new DefaultComboBoxModel(dataMapTemplates.toArray()));
+ this.view.getDataMapSuperTemplate().getComboBox().setModel(new DefaultComboBoxModel(dataMapSuperTemplates.toArray()));
}
public Component getView() {
@@ -144,6 +125,19 @@ public class CustomModeController extends GeneratorController {
public void popPreferencesAction() {
new PreferenceDialog(getApplication().getFrameController()).startupAction(PreferenceDialog.TEMPLATES_KEY);
updateTemplates();
+ updateComboBoxes();
+ }
+
+ private void updateComboBoxes() {
+ view.getEmbeddableTemplate().setItem(getApplication().getCodeTemplateManager().getNameByPath(classGenerationAction.getEmbeddableTemplate()));
+ view.getEmbeddableSuperTemplate().setItem(getApplication().getCodeTemplateManager().getNameByPath(classGenerationAction.getEmbeddableSuperTemplate()));
+ view.getSubclassTemplate().setItem(getApplication().getCodeTemplateManager().getNameByPath(classGenerationAction.getTemplate()));
+ view.getSuperclassTemplate().setItem(getApplication().getCodeTemplateManager().getNameByPath(classGenerationAction.getSuperclassTemplate()));
+ view.getGenerationMode().setItem(labelByMode.get(classGenerationAction.getArtifactsGenerationMode()));
+ view.getDataMapTemplate().setItem(getApplication().getCodeTemplateManager().getNameByPath(classGenerationAction.getQueryTemplate()));
+ view.getDataMapSuperTemplate().setItem(getApplication().getCodeTemplateManager().getNameByPath(classGenerationAction.getQuerySuperTemplate()));
+
+ view.setDisableSuperComboBoxes(view.getPairs().isSelected());
}
@Override
@@ -154,19 +148,6 @@ public class CustomModeController extends GeneratorController {
}
private void initListeners(){
- view.getOutputFolder().getDocument().addDocumentListener(new DocumentListener() {
- @Override
- public void insertUpdate(DocumentEvent e) {
- classGenerationAction.setDestDir(view.getOutputDir());
- getParentController().getProjectController().setDirty(true);
- }
- @Override
- public void removeUpdate(DocumentEvent e) {}
-
- @Override
- public void changedUpdate(DocumentEvent e) {}
- });
-
view.getPairs().addActionListener(val -> {
classGenerationAction.setMakePairs(view.getPairs().isSelected());
getParentController().getProjectController().setDirty(true);
@@ -186,92 +167,19 @@ public class CustomModeController extends GeneratorController {
classGenerationAction.setUsePkgPath(view.getUsePackagePath().isSelected());
getParentController().getProjectController().setDirty(true);
});
-
- view.getSubclassTemplate().addActionListener(val -> {
- classGenerationAction.setTemplate(getApplication().getCodeTemplateManager().getTemplatePath(String.valueOf(view.getSubclassTemplate().getSelectedItem())));
- getParentController().getProjectController().setDirty(true);
- });
-
- view.getSuperclassTemplate().addActionListener(val -> {
- classGenerationAction.setSuperTemplate(getApplication().getCodeTemplateManager().getTemplatePath(String.valueOf(view.getSuperclassTemplate().getSelectedItem())));
- getParentController().getProjectController().setDirty(true);
- });
-
- view.getEmbeddableTemplate().addActionListener(val -> {
- classGenerationAction.setEmbeddableTemplate(getApplication().getCodeTemplateManager().getTemplatePath(String.valueOf(view.getEmbeddableTemplate().getSelectedItem())));
- getParentController().getProjectController().setDirty(true);
- });
-
- view.getEmbeddableSuperTemplate().addActionListener(val -> {
- classGenerationAction.setEmbeddableSuperTemplate(getApplication().getCodeTemplateManager().getTemplatePath(String.valueOf(view.getEmbeddableSuperTemplate().getSelectedItem())));
- getParentController().getProjectController().setDirty(true);
- });
-
- view.getGenerationMode().addActionListener(val -> {
- classGenerationAction.setArtifactsGenerationMode(modesByLabel.get(view.getGenerationMode().getSelectedItem()));
- getParentController().getProjectController().setDirty(true);
- });
-
- view.getOutputPattern().getDocument().addDocumentListener(new DocumentListener() {
- @Override
- public void insertUpdate(DocumentEvent e) {
- classGenerationAction.setOutputPattern(view.getOutputPattern().getText());
- getParentController().getProjectController().setDirty(true);
- }
-
- @Override
- public void removeUpdate(DocumentEvent e) {}
-
- @Override
- public void changedUpdate(DocumentEvent e) {}
- });
-
- view.getSuperclassPackage().getDocument().addDocumentListener(new DocumentListener() {
- @Override
- public void insertUpdate(DocumentEvent e) {
- classGenerationAction.setSuperPkg(view.getSuperclassPackage().getText());
- getParentController().getProjectController().setDirty(true);
- }
-
- @Override
- public void removeUpdate(DocumentEvent e) {}
-
- @Override
- public void changedUpdate(DocumentEvent e) {}
- });
-
- view.getEncoding().getDocument().addDocumentListener(new DocumentListener() {
- @Override
- public void insertUpdate(DocumentEvent e) {
- classGenerationAction.setEncoding(view.getEncoding().getText());
- getParentController().getProjectController().setDirty(true);
- }
-
- @Override
- public void removeUpdate(DocumentEvent e) {}
-
- @Override
- public void changedUpdate(DocumentEvent e) {}
- });
}
public void initForm(ClassGenerationAction classGenerationAction){
this.classGenerationAction = classGenerationAction;
- view.setOutputFolder(classGenerationAction.getDir());
- view.setGenerationMode(labelByMode.get(classGenerationAction.getArtifactsGenerationMode()));
- view.setTemplate(getApplication().getCodeTemplateManager().getNameByPath(classGenerationAction.getTemplate()));
- view.setSuperclassTemplate(getApplication().getCodeTemplateManager().getNameByPath(classGenerationAction.getSuperclassTemplate()));
+ view.getOutputFolder().setText(classGenerationAction.getDir());
view.setDataMapName(classGenerationAction.getDataMap().getName());
- view.setOutputPattern(classGenerationAction.getOutputPattern());
- view.setPairs(classGenerationAction.isMakePairs());
- view.setUsePackagePath(classGenerationAction.isUsePkgPath());
- view.setOverwrite(classGenerationAction.isOverwrite());
- view.setCreatePropertyNames(classGenerationAction.isCreatePropertyNames());
- view.setSuperclassPackage(classGenerationAction.getSuperPkg());
- view.setEncoding(classGenerationAction.getEncoding());
- view.setEmbeddableTemplate(getApplication().getCodeTemplateManager().getNameByPath(classGenerationAction.getEmbeddableTemplate()));
- view.setEmbeddableSuperTemplate(getApplication().getCodeTemplateManager().getNameByPath(classGenerationAction.getEmbeddableSuperTemplate()));
-
-// getParentController().getProjectController().setDirty(false);
+ view.getOutputPattern().setText(classGenerationAction.getOutputPattern());
+ view.getPairs().setSelected(classGenerationAction.isMakePairs());
+ view.getUsePackagePath().setSelected(classGenerationAction.isUsePkgPath());
+ view.getOverwrite().setSelected(classGenerationAction.isOverwrite());
+ view.getCreatePropertyNames().setSelected(classGenerationAction.isCreatePropertyNames());
+ view.getSuperclassPackage().setText(classGenerationAction.getSuperPkg());
+ view.getEncoding().setText(classGenerationAction.getEncoding());
+ updateComboBoxes();
}
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/0e19c961/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CustomModePanel.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CustomModePanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CustomModePanel.java
index e79ef7a..bfadc8a 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CustomModePanel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CustomModePanel.java
@@ -21,85 +21,179 @@ package org.apache.cayenne.modeler.editor.cgen;
import com.jgoodies.forms.builder.DefaultFormBuilder;
import com.jgoodies.forms.layout.FormLayout;
+import org.apache.cayenne.modeler.Application;
+import org.apache.cayenne.modeler.ProjectController;
+import org.apache.cayenne.modeler.util.ComboBoxAdapter;
+import org.apache.cayenne.modeler.util.TextAdapter;
+import org.apache.cayenne.swing.components.JCayenneCheckBox;
import org.apache.cayenne.swing.control.ActionLink;
+import org.apache.cayenne.validation.ValidationException;
import javax.swing.*;
import java.awt.*;
public class CustomModePanel extends GeneratorControllerPanel {
- private JComboBox generationMode;
- private JComboBox subclassTemplate;
- private JComboBox superclassTemplate;
+ private ComboBoxAdapter generationMode;
+ private ComboBoxAdapter subclassTemplate;
+ private ComboBoxAdapter superclassTemplate;
+ private ComboBoxAdapter embeddableTemplate;
+ private ComboBoxAdapter embeddableSuperTemplate;
+ private ComboBoxAdapter dataMapTemplate;
+ private ComboBoxAdapter dataMapSuperTemplate;
protected JCheckBox pairs;
private JCheckBox overwrite;
private JCheckBox usePackagePath;
- private JTextField outputPattern;
+ private TextAdapter outputPattern;
private JCheckBox createPropertyNames;
- private JTextField superclassPackage;
+ private TextAdapter superclassPackage;
- private JTextField encoding;
- private JComboBox embeddableTemplate;
- private JComboBox embeddableSuperTemplate;
- private JLabel dataMapName;
-
- private DefaultFormBuilder builder;
-
- protected ActionLink manageTemplatesLink;
+ private TextAdapter encoding;
- public CustomModePanel() {
+ private JLabel dataMapName;
- this.generationMode = new JComboBox();
- this.superclassTemplate = new JComboBox();
- this.subclassTemplate = new JComboBox();
- this.pairs = new JCheckBox();
- this.overwrite = new JCheckBox();
- this.usePackagePath = new JCheckBox();
- this.outputPattern = new JTextField();
- this.createPropertyNames = new JCheckBox();
+ private ActionLink manageTemplatesLink;
+
+ CustomModePanel(ProjectController projectController) {
+ super(projectController);
+
+ JComboBox modeField = new JComboBox();
+ this.generationMode = new ComboBoxAdapter(modeField) {
+ @Override
+ protected void updateModel(Object item) throws ValidationException {
+ getCgenByDataMap().setArtifactsGenerationMode(CustomModeController.modesByLabel.get(item));
+ projectController.setDirty(true);
+ }
+ };
+
+ JComboBox superclassField = new JComboBox();
+ this.superclassTemplate = new ComboBoxAdapter(superclassField) {
+ @Override
+ protected void updateModel(Object item) throws ValidationException {
+ getCgenByDataMap().setSuperTemplate(Application.getInstance().getCodeTemplateManager().getTemplatePath(String.valueOf(item)));
+ projectController.setDirty(true);
+ }
+ };
+
+ JComboBox subclassField = new JComboBox();
+ this.subclassTemplate = new ComboBoxAdapter(subclassField) {
+ @Override
+ protected void updateModel(Object item) throws ValidationException {
+ getCgenByDataMap().setTemplate(Application.getInstance().getCodeTemplateManager().getTemplatePath(String.valueOf(item)));
+ projectController.setDirty(true);
+ }
+ };
+
+ JComboBox dataMapField = new JComboBox();
+ this.dataMapTemplate = new ComboBoxAdapter(dataMapField) {
+ @Override
+ protected void updateModel(Object item) throws ValidationException {
+ getCgenByDataMap().setQueryTemplate(Application.getInstance().getCodeTemplateManager().getTemplatePath(String.valueOf(item)));
+ projectController.setDirty(true);
+ }
+ };
+
+ JComboBox dataMapSuperField = new JComboBox();
+ this.dataMapSuperTemplate = new ComboBoxAdapter(dataMapSuperField) {
+ @Override
+ protected void updateModel(Object item) throws ValidationException {
+ getCgenByDataMap().setQuerySuperTemplate(Application.getInstance().getCodeTemplateManager().getTemplatePath(String.valueOf(item)));
+ projectController.setDirty(true);
+ }
+ };
+
+ this.pairs = new JCayenneCheckBox();
+ this.overwrite = new JCayenneCheckBox();
+ this.usePackagePath = new JCayenneCheckBox();
+
+ JTextField outputPatternField = new JTextField();
+ this.outputPattern = new TextAdapter(outputPatternField) {
+ protected void updateModel(String text) {
+ getCgenByDataMap().setOutputPattern(text);
+ projectController.setDirty(true);
+ }
+ };
+
+ this.createPropertyNames = new JCayenneCheckBox();
this.manageTemplatesLink = new ActionLink("Customize Templates...");
this.manageTemplatesLink.setFont(manageTemplatesLink.getFont().deriveFont(10f));
- this.superclassPackage = new JTextField();
- this.encoding = new JTextField();
- this.embeddableTemplate = new JComboBox();
- this.embeddableSuperTemplate = new JComboBox();
+ JTextField superclassPackageField = new JTextField();
+ this.superclassPackage = new TextAdapter(superclassPackageField) {
+ protected void updateModel(String text) {
+ getCgenByDataMap().setSuperPkg(text);
+ projectController.setDirty(true);
+ }
+ };
+
+ JTextField encodingField = new JTextField();
+ this.encoding = new TextAdapter(encodingField) {
+ protected void updateModel(String text) {
+ getCgenByDataMap().setEncoding(text);
+ projectController.setDirty(true);
+ }
+ };
+
+ JComboBox embeddableField = new JComboBox();
+ this.embeddableTemplate = new ComboBoxAdapter(embeddableField) {
+ @Override
+ protected void updateModel(Object item) throws ValidationException {
+ getCgenByDataMap().setEmbeddableTemplate(Application.getInstance().getCodeTemplateManager().getTemplatePath(String.valueOf(item)));
+ projectController.setDirty(true);
+ }
+ };
+
+ JComboBox embeddableSuperclassField = new JComboBox();
+ this.embeddableSuperTemplate = new ComboBoxAdapter(embeddableSuperclassField) {
+ @Override
+ protected void updateModel(Object item) throws ValidationException {
+ getCgenByDataMap().setEmbeddableSuperTemplate(Application.getInstance().getCodeTemplateManager().getTemplatePath(String.valueOf(item)));
+ projectController.setDirty(true);
+ }
+ };
+
this.dataMapName = new JLabel();
this.dataMapName.setFont(dataMapName.getFont().deriveFont(1));
pairs.addChangeListener(e -> {
- superclassTemplate.setEnabled(pairs.isSelected());
+ setDisableSuperComboBoxes(pairs.isSelected());
overwrite.setEnabled(!pairs.isSelected());
});
// assemble
FormLayout layout = new FormLayout(
- "right:77dlu, 3dlu, fill:200:grow, 6dlu, fill:50dlu, 3dlu", "");
- builder = new DefaultFormBuilder(layout);
+ "right:100dlu, 3dlu, fill:100:grow, 6dlu, fill:50dlu, 3dlu", "");
+ DefaultFormBuilder builder = new DefaultFormBuilder(layout);
builder.setDefaultDialogBorder();
- builder.append("Output Directory:", outputFolder, selectOutputFolder);
+ builder.append("Output Directory:", outputFolder.getComponent(), selectOutputFolder);
+ builder.nextLine();
+
+ builder.append("Generation Mode:", generationMode.getComboBox());
+ builder.nextLine();
+
+ builder.append("DataMap Template:", dataMapTemplate.getComboBox());
builder.nextLine();
- builder.append("Generation Mode:", generationMode);
+ builder.append("DataMap Superclass Template", dataMapSuperTemplate.getComboBox());
builder.nextLine();
- builder.append("Subclass Template:", subclassTemplate);
+ builder.append("Subclass Template:", subclassTemplate.getComboBox());
builder.nextLine();
- builder.append("Superclass Template:", superclassTemplate);
+ builder.append("Superclass Template:", superclassTemplate.getComboBox());
builder.nextLine();
- builder.append("Embeddable Template", embeddableTemplate);
+ builder.append("Embeddable Template", embeddableTemplate.getComboBox());
builder.nextLine();
- builder.append("Embeddable Super Template", embeddableSuperTemplate);
+ builder.append("Embeddable Super Template", embeddableSuperTemplate.getComboBox());
builder.nextLine();
- builder.append("Output Pattern:", outputPattern);
+ builder.append("Output Pattern:", outputPattern.getComponent());
builder.nextLine();
- builder.append("Encoding", encoding);
+ builder.append("Encoding", encoding.getComponent());
builder.nextLine();
builder.append("Make Pairs:", pairs);
@@ -117,7 +211,7 @@ public class CustomModePanel extends GeneratorControllerPanel {
builder.append(dataMapName);
builder.nextLine();
- builder.append("Superclass package", superclassPackage);
+ builder.append("Superclass package", superclassPackage.getComponent());
setLayout(new BorderLayout());
add(builder.getPanel(), BorderLayout.CENTER);
@@ -129,7 +223,13 @@ public class CustomModePanel extends GeneratorControllerPanel {
add(builder.getPanel(), BorderLayout.CENTER);
}
- public JComboBox getGenerationMode() {
+ public void setDisableSuperComboBoxes(boolean val){
+ superclassTemplate.getComboBox().setEnabled(val);
+ embeddableSuperTemplate.getComboBox().setEnabled(val);
+ dataMapSuperTemplate.getComboBox().setEnabled(val);
+ }
+
+ public ComboBoxAdapter getGenerationMode() {
return generationMode;
}
@@ -137,16 +237,20 @@ public class CustomModePanel extends GeneratorControllerPanel {
return manageTemplatesLink;
}
- public JComboBox getSubclassTemplate() { return subclassTemplate; }
+ public ComboBoxAdapter getSubclassTemplate() { return subclassTemplate; }
- public JComboBox getEmbeddableTemplate() { return embeddableTemplate; }
+ public ComboBoxAdapter getEmbeddableTemplate() { return embeddableTemplate; }
- public JComboBox getEmbeddableSuperTemplate() { return embeddableSuperTemplate; }
+ public ComboBoxAdapter getEmbeddableSuperTemplate() { return embeddableSuperTemplate; }
- public JComboBox getSuperclassTemplate() {
+ public ComboBoxAdapter getSuperclassTemplate() {
return superclassTemplate;
}
+ public ComboBoxAdapter getDataMapTemplate() { return dataMapTemplate; }
+
+ public ComboBoxAdapter getDataMapSuperTemplate() { return dataMapSuperTemplate; }
+
public JCheckBox getOverwrite() {
return overwrite;
}
@@ -159,7 +263,7 @@ public class CustomModePanel extends GeneratorControllerPanel {
return usePackagePath;
}
- public JTextField getOutputPattern() {
+ public TextAdapter getOutputPattern() {
return outputPattern;
}
@@ -167,55 +271,13 @@ public class CustomModePanel extends GeneratorControllerPanel {
return createPropertyNames;
}
- public JTextField getSuperclassPackage() {
+ public TextAdapter getSuperclassPackage() {
return superclassPackage;
}
- public JTextField getEncoding() { return encoding; }
+ public TextAdapter getEncoding() { return encoding; }
public void setDataMapName(String mapName){
dataMapName.setText(mapName);
}
-
- public void setSuperclassPackage(String pack) {
- superclassPackage.setText(pack);
- }
-
- public void setPairs(boolean val){
- pairs.setSelected(val);
- }
-
- public void setOverwrite(boolean val){
- overwrite.setSelected(val);
- }
-
- public void setUsePackagePath(boolean val) {
- usePackagePath.setSelected(val);
- }
-
- public void setCreatePropertyNames(boolean val) {
- createPropertyNames.setSelected(val);
- }
-
- public void setOutputPattern(String pattern){
- outputPattern.setText(pattern);
- }
-
- public void setSuperclassTemplate(String template){
- superclassTemplate.setSelectedItem(template);
- }
-
- public void setTemplate(String template) {
- subclassTemplate.setSelectedItem(template);
- }
-
- public void setGenerationMode(String mode) {
- generationMode.setSelectedItem(mode);
- }
-
- public void setEncoding(String encoding) { this.encoding.setText(encoding); }
-
- public void setEmbeddableTemplate(String template) { embeddableTemplate.setSelectedItem(template); }
-
- public void setEmbeddableSuperTemplate(String template) { embeddableSuperTemplate.setSelectedItem(template); }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/0e19c961/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CustomPreferencesUpdater.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CustomPreferencesUpdater.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CustomPreferencesUpdater.java
deleted file mode 100644
index 469e594..0000000
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CustomPreferencesUpdater.java
+++ /dev/null
@@ -1,193 +0,0 @@
-/*****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- ****************************************************************/
-
-package org.apache.cayenne.modeler.editor.cgen;
-
-import org.apache.cayenne.map.DataMap;
-import org.apache.cayenne.modeler.pref.DataMapDefaults;
-
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Set;
-
-public class CustomPreferencesUpdater {
-
- enum Property {
- SUBCLASS_TEMPLATE,
- SUPERCLASS_TEMPLATE,
- OVERWRITE,
- PAIRS,
- USE_PACKAGE_PATH,
- MODE,
- OUTPUT_PATTERN,
- CREATE_PROPERTY_NAMES
- }
-
- private static final String OVERWRITE = "overwrite";
- private static final String PAIRS = "pairs";
- private static final String USE_PACKAGE_PATH = "usePackagePath";
- private static final String MODE = "mode";
- private static final String OUTPUT_PATTERN = "outputPattern";
- private static final String CREATE_PROPERTY_NAMES = "createPropertyNames";
-
- private Map<DataMap, DataMapDefaults> mapPreferences;
-
-
- public CustomPreferencesUpdater(Map<DataMap, DataMapDefaults> mapPreferences) {
- this.mapPreferences = mapPreferences;
- }
-
- public String getMode() {
- return (String) getProperty(Property.MODE);
- }
-
- public void setMode(String mode) {
- updatePreferences(Property.MODE, mode);
- }
-
- public String getSubclassTemplate() {
- return (String) getProperty(Property.SUBCLASS_TEMPLATE);
- }
-
- public void setSubclassTemplate(String subclassTemplate) {
- updatePreferences(Property.SUBCLASS_TEMPLATE, subclassTemplate);
- }
-
- public String getSuperclassTemplate() {
- return (String) getProperty(Property.SUPERCLASS_TEMPLATE);
- }
-
- public void setSuperclassTemplate(String superclassTemplate) {
- updatePreferences(Property.SUPERCLASS_TEMPLATE, superclassTemplate);
- }
-
- public Boolean getOverwrite() {
- return (Boolean) getProperty(Property.OVERWRITE);
- }
-
- public void setOverwrite(Boolean overwrite) {
- updatePreferences(Property.OVERWRITE, overwrite);
- }
-
- public Boolean getPairs() {
- return (Boolean) getProperty(Property.PAIRS);
- }
-
- public void setPairs(Boolean pairs) {
- updatePreferences(Property.PAIRS, pairs);
- }
-
- public Boolean getUsePackagePath() {
- return (Boolean) getProperty(Property.USE_PACKAGE_PATH);
- }
-
- public void setUsePackagePath(Boolean usePackagePath) {
- updatePreferences(Property.USE_PACKAGE_PATH, usePackagePath);
- }
-
- public String getOutputPattern() {
- return (String) getProperty(Property.OUTPUT_PATTERN);
- }
-
- public void setOutputPattern(String outputPattern) {
- updatePreferences(Property.OUTPUT_PATTERN, outputPattern);
- }
-
- public Boolean getCreatePropertyNames() {
- return (Boolean) getProperty(Property.CREATE_PROPERTY_NAMES);
- }
-
- public void setCreatePropertyNames(Boolean createPropertyNames) {
- updatePreferences(Property.CREATE_PROPERTY_NAMES, createPropertyNames);
- }
-
- private Object getProperty(Property property) {
- Object obj = null;
-
- Set<Entry<DataMap, DataMapDefaults>> entities = mapPreferences.entrySet();
- for (Entry<DataMap, DataMapDefaults> entry : entities) {
-
- switch (property) {
- case MODE:
- obj = entry.getValue().getProperty(MODE);
- break;
- case OUTPUT_PATTERN:
- obj = entry.getValue().getProperty(OUTPUT_PATTERN);
- break;
- case SUBCLASS_TEMPLATE:
- obj = entry.getValue().getSubclassTemplate();
- break;
- case SUPERCLASS_TEMPLATE:
- obj = entry.getValue().getSuperclassTemplate();
- break;
- case OVERWRITE:
- obj = entry.getValue().getBooleanProperty(OVERWRITE);
- break;
- case PAIRS:
- obj = entry.getValue().getBooleanProperty(PAIRS);
- break;
- case USE_PACKAGE_PATH:
- obj = entry.getValue().getBooleanProperty(USE_PACKAGE_PATH);
- break;
- case CREATE_PROPERTY_NAMES:
- obj = entry.getValue().getBooleanProperty(CREATE_PROPERTY_NAMES);
- break;
- default:
- throw new IllegalArgumentException("Bad type property: " + property);
- }
-
- }
- return obj;
- }
-
- private void updatePreferences(Property property, Object value) {
- Set<Entry<DataMap, DataMapDefaults>> entities = mapPreferences.entrySet();
- for (Entry<DataMap, DataMapDefaults> entry : entities) {
-
- switch (property) {
- case MODE:
- entry.getValue().setProperty(MODE, (String) value);
- break;
- case OUTPUT_PATTERN:
- entry.getValue().setProperty(OUTPUT_PATTERN, (String) value);
- break;
- case SUBCLASS_TEMPLATE:
- entry.getValue().setSubclassTemplate((String) value);
- break;
- case SUPERCLASS_TEMPLATE:
- entry.getValue().setSuperclassTemplate((String) value);
- break;
- case OVERWRITE:
- entry.getValue().setBooleanProperty(OVERWRITE, (Boolean) value);
- break;
- case PAIRS:
- entry.getValue().setBooleanProperty(PAIRS, (Boolean) value);
- break;
- case USE_PACKAGE_PATH:
- entry.getValue().setBooleanProperty(USE_PACKAGE_PATH, (Boolean) value);
- break;
- case CREATE_PROPERTY_NAMES:
- entry.getValue().setBooleanProperty(CREATE_PROPERTY_NAMES, (Boolean) value);
- break;
- default:
- throw new IllegalArgumentException("Bad type property: " + property);
- }
- }
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cayenne/blob/0e19c961/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorController.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorController.java
index 7a62efc..7e8087f 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorController.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorController.java
@@ -29,6 +29,7 @@ import org.apache.cayenne.modeler.pref.DataMapDefaults;
import org.apache.cayenne.modeler.pref.FSPath;
import org.apache.cayenne.modeler.util.CayenneController;
import org.apache.cayenne.modeler.util.CodeValidationUtil;
+import org.apache.cayenne.modeler.util.TextAdapter;
import org.apache.cayenne.swing.BindingBuilder;
import org.apache.cayenne.util.Util;
import org.apache.cayenne.validation.BeanValidationFailure;
@@ -56,10 +57,6 @@ public abstract class GeneratorController extends CayenneController {
super(parent);
}
- public String getOutputPath() {
- return outputPath;
- }
-
public void setOutputPath(String path) {
String old = this.outputPath;
this.outputPath = path;
@@ -79,14 +76,6 @@ public abstract class GeneratorController extends CayenneController {
}
}
- public void setMapPreferences(Map<DataMap, DataMapDefaults> mapPreferences) {
- this.mapPreferences = mapPreferences;
- }
-
- public Map<DataMap, DataMapDefaults> getMapPreferences() {
- return this.mapPreferences;
- }
-
protected void initBindings(BindingBuilder bindingBuilder) {
JButton outputSelect = ((GeneratorControllerPanel) getView()).getSelectOutputFolder();
bindingBuilder.bindToAction(outputSelect, "selectOutputFolderAction()");
@@ -113,8 +102,6 @@ public abstract class GeneratorController extends CayenneController {
if(generator != null){
getParentController().addToSelectedEntities(generator.getEntities());
getParentController().addToSelectedEmbeddables(generator.getEmbeddables());
- generator.getEntities().clear();
- generator.getEmbeddables().clear();
return generator;
}
@@ -451,20 +438,14 @@ public abstract class GeneratorController extends CayenneController {
}
}
- public File getOutputDir() {
- String dir = ((GeneratorControllerPanel) getView()).getOutputFolder().getText();
- return dir != null ? new File(dir) : new File(System.getProperty("user.dir"));
- }
-
/**
* An action method that pops up a file chooser dialog to pick the
* generation directory.
*/
public void selectOutputFolderAction() {
+ TextAdapter outputFolder = ((GeneratorControllerPanel) getView()).getOutputFolder();
- JTextField outputFolder = ((GeneratorControllerPanel) getView()).getOutputFolder();
-
- String currentDir = outputFolder.getText();
+ String currentDir = outputFolder.getComponent().getText();
JFileChooser chooser = new JFileChooser();
chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
@@ -484,8 +465,8 @@ public abstract class GeneratorController extends CayenneController {
// update model
String path = selected.getAbsolutePath();
- outputFolder.setText(path);
-// setOutputPath(path);
+ ((GeneratorControllerPanel) getView()).getOutputFolder().setText(path);
+ ((GeneratorControllerPanel) getView()).getOutputFolder().updateModel();
}
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/0e19c961/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorControllerPanel.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorControllerPanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorControllerPanel.java
index 7f1f689..7536a01 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorControllerPanel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorControllerPanel.java
@@ -19,6 +19,11 @@
package org.apache.cayenne.modeler.editor.cgen;
+import org.apache.cayenne.gen.ClassGenerationAction;
+import org.apache.cayenne.map.DataMap;
+import org.apache.cayenne.modeler.ProjectController;
+import org.apache.cayenne.modeler.util.TextAdapter;
+
import javax.swing.*;
import java.io.File;
@@ -28,27 +33,32 @@ import java.io.File;
*/
public class GeneratorControllerPanel extends JPanel {
- protected JTextField outputFolder;
+ protected TextAdapter outputFolder;
protected JButton selectOutputFolder;
- public GeneratorControllerPanel() {
- this.outputFolder = new JTextField();
+ ProjectController projectController;
+
+ public GeneratorControllerPanel(ProjectController projectController) {
+ this.projectController = projectController;
+ JTextField outputFolderField = new JTextField();
+ this.outputFolder = new TextAdapter(outputFolderField) {
+ protected void updateModel(String text) {
+ getCgenByDataMap().setDestDir(new File(text));
+ projectController.setDirty(true);
+ }
+ };
this.selectOutputFolder = new JButton("Select");
}
- public JTextField getOutputFolder() {
- return outputFolder;
+ public ClassGenerationAction getCgenByDataMap() {
+ DataMap dataMap = projectController.getCurrentDataMap();
+ return projectController.getApplication().getMetaData().get(dataMap, ClassGenerationAction.class);
}
-
- public File getOutputDir(){
- return new File(outputFolder.getText());
+ public TextAdapter getOutputFolder() {
+ return outputFolder;
}
public JButton getSelectOutputFolder() {
return selectOutputFolder;
}
-
- public void setOutputFolder(String folder) {
- this.outputFolder.setText(folder);
- }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/0e19c961/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabController.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabController.java
index fc3f567..53000da 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabController.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabController.java
@@ -20,7 +20,6 @@
package org.apache.cayenne.modeler.editor.cgen;
import org.apache.cayenne.gen.ClassGenerationAction;
-import org.apache.cayenne.map.DataMap;
import org.apache.cayenne.modeler.util.CayenneController;
import org.apache.cayenne.pref.PreferenceDetail;
@@ -43,10 +42,6 @@ public class GeneratorTabController extends CayenneController {
this.view = new GeneratorTabPanel(customModeController.getView());
}
- public void startup(DataMap dataMap){
-// customModeController.startup(dataMap);
- }
-
public Component getView() {
return view;
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/0e19c961/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabPanel.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabPanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabPanel.java
index 40249f4..4082f36 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabPanel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabPanel.java
@@ -23,6 +23,7 @@ import javax.swing.*;
import java.awt.*;
/**
+ * @since 4.1
*/
public class GeneratorTabPanel extends JPanel {
http://git-wip-us.apache.org/repos/asf/cayenne/blob/0e19c961/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/ComboBoxAdapter.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/ComboBoxAdapter.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/ComboBoxAdapter.java
new file mode 100644
index 0000000..2a7fd79
--- /dev/null
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/ComboBoxAdapter.java
@@ -0,0 +1,72 @@
+/*****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ ****************************************************************/
+package org.apache.cayenne.modeler.util;
+
+import org.apache.cayenne.modeler.undo.JComboBoxUndoListener;
+import org.apache.cayenne.validation.ValidationException;
+
+import javax.swing.*;
+import java.awt.event.ActionListener;
+
+/**
+ * @since 4.1
+ */
+public abstract class ComboBoxAdapter {
+
+ private JComboBox comboBox;
+ private ActionListener listener;
+
+ private JComboBoxUndoListener undoListener;
+
+ protected ComboBoxAdapter(JComboBox comboBox) {
+ this.comboBox = comboBox;
+ listener = e -> updateModel();
+
+ undoListener = new JComboBoxUndoListener();
+
+ comboBox.addActionListener(listener);
+ comboBox.addItemListener(undoListener);
+ }
+
+ public void setItem(Object item) {
+ comboBox.removeActionListener(listener);
+ comboBox.removeItemListener(undoListener);
+
+ try{
+ comboBox.setSelectedItem(item);
+ }
+ finally {
+ comboBox.addActionListener(listener);
+ comboBox.addItemListener(undoListener);
+ }
+ }
+
+ public JComboBox getComboBox() {
+ return comboBox;
+ }
+
+ /**
+ * Updates bound model with document text.
+ */
+ protected abstract void updateModel(Object item) throws ValidationException;
+
+ public void updateModel() {
+ updateModel(comboBox.getSelectedItem());
+ }
+}
[11/32] cayenne git commit: Add cgen tab.
Posted by nt...@apache.org.
http://git-wip-us.apache.org/repos/asf/cayenne/blob/6a43436a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabController.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabController.java
index 2824685..ef290a6 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabController.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabController.java
@@ -21,25 +21,47 @@ package org.apache.cayenne.modeler.editor.cgen;
import org.apache.cayenne.gen.ClassGenerationAction;
import org.apache.cayenne.modeler.util.CayenneController;
+import org.apache.cayenne.pref.CayenneProjectPreferences;
import org.apache.cayenne.pref.PreferenceDetail;
+import org.apache.cayenne.swing.BindingBuilder;
+import org.apache.cayenne.util.Util;
-import java.awt.Component;
+import java.awt.*;
+import java.util.HashMap;
+import java.util.Map;
/**
*/
public class GeneratorTabController extends CayenneController {
+ private static final String STANDARD_OBJECTS_MODE = "Standard Persistent Objects";
+ private static final String CLIENT_OBJECTS_MODE = "Client Persistent Objects";
+ private static final String ADVANCED_MODE = "Advanced";
+
public static final String GENERATOR_PROPERTY = "generator";
+ private static final String[] GENERATION_MODES = new String[] {
+ STANDARD_OBJECTS_MODE, CLIENT_OBJECTS_MODE, ADVANCED_MODE
+ };
+
protected GeneratorTabPanel view;
+ protected Map<String, GeneratorController> controllers;
protected PreferenceDetail preferences;
- protected CustomModeController customModeController;
-
public GeneratorTabController(CodeGeneratorControllerBase parent) {
super(parent);
- customModeController = new CustomModeController(parent);
- this.view = new GeneratorTabPanel(customModeController.getView());
+ this.controllers = new HashMap<>(3);
+ controllers.put(STANDARD_OBJECTS_MODE, new StandardModeController(parent));
+ controllers.put(CLIENT_OBJECTS_MODE, new ClientModeController(parent));
+ controllers.put(ADVANCED_MODE, new CustomModeController(parent));
+ Component[] modePanels = new Component[GENERATION_MODES.length];
+ for (int i = 0; i < GENERATION_MODES.length; i++) {
+ modePanels[i] = controllers.get(GENERATION_MODES[i])
+ .getView();
+ }
+ this.view = new GeneratorTabPanel(GENERATION_MODES, modePanels);
+ initBindings();
+ view.setPreferredSize(new Dimension(600, 480));
}
public Component getView() {
@@ -54,8 +76,36 @@ public class GeneratorTabController extends CayenneController {
return preferences;
}
- public GeneratorController getGeneratorController() {
- return customModeController;
+ protected void initBindings() {
+
+ // bind actions
+ BindingBuilder builder = new BindingBuilder(
+ getApplication().getBindingFactory(),
+ this);
+
+ CayenneProjectPreferences cayPrPref = application.getCayenneProjectPreferences();
+
+ this.preferences = (PreferenceDetail) cayPrPref.getProjectDetailObject(
+ PreferenceDetail.class,
+ getViewPreferences().node("controller"));
+
+ if (Util.isEmptyString(preferences.getProperty("mode"))) {
+ preferences.setProperty("mode", STANDARD_OBJECTS_MODE);
+ }
+
+ builder.bindToComboSelection(
+ view.getGenerationMode(),
+ "preferences.property['mode']").updateView();
+
+ view.getGenerationMode().addActionListener(action -> {
+ String name = (String)view.getGenerationMode().getSelectedItem();
+ controllers.get(name).initForm(getGenerator());
+ });
+ }
+
+ GeneratorController getGeneratorController() {
+ String name = (String)view.getGenerationMode().getSelectedItem();
+ return controllers.get(name);
}
public ClassGenerationAction getGenerator() {
http://git-wip-us.apache.org/repos/asf/cayenne/blob/6a43436a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabPanel.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabPanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabPanel.java
index ab25218..9cfd542 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabPanel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabPanel.java
@@ -19,17 +19,77 @@
package org.apache.cayenne.modeler.editor.cgen;
-import javax.swing.JPanel;
-import java.awt.BorderLayout;
-import java.awt.Component;
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+import com.jgoodies.forms.layout.FormLayout;
+import org.apache.cayenne.modeler.util.ModelerUtil;
+import org.apache.cayenne.swing.components.TopBorder;
+
+import javax.swing.*;
+import java.awt.*;
+import java.util.Objects;
/**
* @since 4.1
*/
public class GeneratorTabPanel extends JPanel {
- public GeneratorTabPanel(Component modePanels) {
+ private JComboBox<String> generationMode;
+ private CardLayout modeLayout;
+ private JPanel modesPanel;
+
+ private JButton generateButton;
+ private JLabel classesCount;
+
+ public GeneratorTabPanel(String[] modeNames, Component[] modePanels) {
setLayout(new BorderLayout());
- add(modePanels, BorderLayout.CENTER);
+ this.generateButton = new JButton("Generate");
+ generateButton.setIcon(ModelerUtil.buildIcon("icon-gen_java.png"));
+ generateButton.setPreferredSize(new Dimension(180, 30));
+ this.classesCount = new JLabel("No classes selected");
+ classesCount.setFont(classesCount.getFont().deriveFont(10f));
+ 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);
+ add(buttons, BorderLayout.NORTH);
+
+ JPanel panel = new JPanel();
+ this.generationMode = new JComboBox<>(modeNames);
+ this.modeLayout = new CardLayout();
+ this.modesPanel = new JPanel(modeLayout);
+
+ generationMode.addItemListener(e -> modeLayout.show(modesPanel, Objects.requireNonNull(generationMode.getSelectedItem()).toString()));
+
+ // assemble
+ FormLayout layout = new FormLayout("right:77dlu, 3dlu, fill:300, fill:300dlu:grow", "");
+ DefaultFormBuilder builder = new DefaultFormBuilder(layout);
+ builder.setDefaultDialogBorder();
+ builder.append("Type:", generationMode, 1);
+ builder.appendSeparator();
+
+ for (int i = 0; i < modeNames.length; i++) {
+ modesPanel.add(modePanels[i], modeNames[i]);
+ }
+
+ panel.setLayout(new BorderLayout());
+ panel.add(builder.getPanel(), BorderLayout.NORTH);
+ panel.add(modesPanel, BorderLayout.CENTER);
+
+ add(panel, BorderLayout.CENTER);
+ }
+
+ public JComboBox getGenerationMode() {
+ return generationMode;
+ }
+
+ 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/StandardModeController.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/StandardModeController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/StandardModeController.java
new file mode 100644
index 0000000..6985896
--- /dev/null
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/StandardModeController.java
@@ -0,0 +1,61 @@
+/*****************************************************************
+ * 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.modeler.pref.DataMapDefaults;
+
+import java.awt.*;
+
+public class StandardModeController extends GeneratorController {
+
+ protected StandardModePanel view;
+ protected DataMapDefaults preferences;
+
+ public StandardModeController(CodeGeneratorControllerBase parent) {
+ super(parent);
+ }
+
+ protected GeneratorControllerPanel createView() {
+ this.view = new StandardModePanel();
+ return view;
+ }
+
+ public Component getView() {
+ return view;
+ }
+
+ @Override
+ protected ClassGenerationAction newGenerator() {
+ ClassGenerationAction action = new ClassGenerationAction();
+ getApplication().getInjector().injectMembers(action);
+ return action;
+ }
+
+ @Override
+ protected void initForm(ClassGenerationAction classGenerationAction) {
+ super.initForm(classGenerationAction);
+ }
+
+ @Override
+ public ClassGenerationAction createGenerator() {
+ return super.createGenerator();
+ }
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/6a43436a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/StandardModePanel.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/StandardModePanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/StandardModePanel.java
new file mode 100644
index 0000000..0ddf1e2
--- /dev/null
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/StandardModePanel.java
@@ -0,0 +1,42 @@
+/*****************************************************************
+ * 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 com.jgoodies.forms.builder.DefaultFormBuilder;
+import com.jgoodies.forms.layout.FormLayout;
+import org.apache.cayenne.modeler.Application;
+
+import java.awt.*;
+
+public class StandardModePanel extends GeneratorControllerPanel {
+
+ public StandardModePanel() {
+ super(Application.getInstance().getFrameController().getProjectController());
+ FormLayout layout = new FormLayout(
+ "right:88dlu, 1dlu, fill:300:grow, 1dlu, left:100dlu, 100dlu", "");
+
+ DefaultFormBuilder builder = new DefaultFormBuilder(layout);
+ builder.append("Output Directory:", outputFolder.getComponent(), selectOutputFolder);
+ builder.nextLine();
+
+ setLayout(new BorderLayout());
+ add(builder.getPanel(), BorderLayout.CENTER);
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cayenne/blob/6a43436a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/StandardPanelComponent.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/StandardPanelComponent.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/StandardPanelComponent.java
new file mode 100644
index 0000000..8170548
--- /dev/null
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/StandardPanelComponent.java
@@ -0,0 +1,63 @@
+/*****************************************************************
+ * 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 com.jgoodies.forms.builder.DefaultFormBuilder;
+import com.jgoodies.forms.layout.FormLayout;
+import org.apache.cayenne.map.DataMap;
+import org.apache.cayenne.modeler.pref.DataMapDefaults;
+
+import javax.swing.*;
+import java.awt.*;
+
+public class StandardPanelComponent extends JComponent {
+
+ private DataMap dataMap;
+ private DataMapDefaults preferences;
+
+ public StandardPanelComponent() {
+ super();
+
+ FormLayout layout = new FormLayout(
+ "right:77dlu, 3dlu, fill:100:grow, 3dlu", "");
+ DefaultFormBuilder builder = new DefaultFormBuilder(layout);
+ builder.nextLine();
+
+ setLayout(new BorderLayout());
+ add(builder.getPanel(), BorderLayout.CENTER);
+ }
+
+ public DataMap getDataMap() {
+ return dataMap;
+ }
+
+ public void setDataMap(DataMap dataMap) {
+ this.dataMap = dataMap;
+ }
+
+ public DataMapDefaults getPreferences() {
+ return preferences;
+ }
+
+ public void setPreferences(DataMapDefaults preferences) {
+ this.preferences = preferences;
+ }
+
+}
[06/32] cayenne git commit: Create global cgen config
Posted by nt...@apache.org.
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;
[24/32] cayenne git commit: Add replacement to datamap generation
mode.
Posted by nt...@apache.org.
Add replacement to datamap generation mode.
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/ac6819f3
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/ac6819f3
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/ac6819f3
Branch: refs/heads/master
Commit: ac6819f330415205cb6ccacc6bdf3013937ef13e
Parents: 3ae4973
Author: Arseni Bulatski <an...@gmail.com>
Authored: Mon Nov 12 15:58:58 2018 +0300
Committer: Arseni Bulatski <an...@gmail.com>
Committed: Mon Nov 12 16:01:26 2018 +0300
----------------------------------------------------------------------
UPGRADE.txt | 4 --
.../cayenne/tools/CayenneGeneratorTask.java | 22 +++++---
.../cayenne/tools/CgenWithConfigTest.java | 38 +++++++++++++-
.../java/org/apache/cayenne/tools/CgenTask.java | 23 ++++++---
.../org/apache/cayenne/tools/CgenTaskIT.java | 35 +++++++++++++
.../tools/cgen_replaceDatamapMode.gradle | 31 ++++++++++++
.../cayenne/tools/CayenneGeneratorMojo.java | 22 +++++---
.../cayenne/tools/CayenneGeneratorMojoTest.java | 26 +++++++++-
.../cgen/project-to-test/datamap-and-pom.xml | 1 -
.../project-to-test/replaceDatamapMode-pom.xml | 53 ++++++++++++++++++++
10 files changed, 227 insertions(+), 28 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cayenne/blob/ac6819f3/UPGRADE.txt
----------------------------------------------------------------------
diff --git a/UPGRADE.txt b/UPGRADE.txt
index 83bcc5a..bd660d3 100644
--- a/UPGRADE.txt
+++ b/UPGRADE.txt
@@ -4,10 +4,6 @@ Apache Cayenne Upgrade Information
IMPORTANT: be sure to read all notes for the intermediate releases between your
current release and the release you are upgrading to.
-------------------------------------------------------------------------------
-UPGRADING TO 4.1.M3
-
-* Per CAY-2493 'datamap' generation mode in cgen replaced with 'all' generation mode with
- <excludeEntities>*</excludeEntities> and <excludeEmbeddables>*</excludeEmbeddables> patterns.
UPGRADING TO 4.1.M2
http://git-wip-us.apache.org/repos/asf/cayenne/blob/ac6819f3/cayenne-ant/src/main/java/org/apache/cayenne/tools/CayenneGeneratorTask.java
----------------------------------------------------------------------
diff --git a/cayenne-ant/src/main/java/org/apache/cayenne/tools/CayenneGeneratorTask.java b/cayenne-ant/src/main/java/org/apache/cayenne/tools/CayenneGeneratorTask.java
index 6291a6d..8d5a151 100644
--- a/cayenne-ant/src/main/java/org/apache/cayenne/tools/CayenneGeneratorTask.java
+++ b/cayenne-ant/src/main/java/org/apache/cayenne/tools/CayenneGeneratorTask.java
@@ -24,6 +24,7 @@ import org.apache.cayenne.dbsync.filter.NamePatternMatcher;
import org.apache.cayenne.dbsync.reverse.configuration.ToolsModule;
import org.apache.cayenne.di.DIBootstrap;
import org.apache.cayenne.di.Injector;
+import org.apache.cayenne.gen.ArtifactsGenerationMode;
import org.apache.cayenne.gen.CgenConfiguration;
import org.apache.cayenne.gen.CgenModule;
import org.apache.cayenne.gen.ClassGenerationAction;
@@ -108,17 +109,16 @@ public class CayenneGeneratorTask extends CayenneTask {
loadAction.setMainDataMapFile(map);
loadAction.setAdditionalDataMapFiles(additionalMaps);
-
- CayenneGeneratorEntityFilterAction filterEntityAction = new CayenneGeneratorEntityFilterAction();
- filterEntityAction.setNameFilter(NamePatternMatcher.build(logger, includeEntitiesPattern, excludeEntitiesPattern));
-
- CayenneGeneratorEmbeddableFilterAction filterEmbeddableAction = new CayenneGeneratorEmbeddableFilterAction();
- filterEmbeddableAction.setNameFilter(NamePatternMatcher.build(logger, null, excludeEmbeddablesPattern));
try {
DataMap dataMap = loadAction.getMainDataMap();
ClassGenerationAction generatorAction = createGenerator(dataMap);
+ CayenneGeneratorEntityFilterAction filterEntityAction = new CayenneGeneratorEntityFilterAction();
+ filterEntityAction.setNameFilter(NamePatternMatcher.build(logger, includeEntitiesPattern, excludeEntitiesPattern));
+
+ CayenneGeneratorEmbeddableFilterAction filterEmbeddableAction = new CayenneGeneratorEmbeddableFilterAction();
+ filterEmbeddableAction.setNameFilter(NamePatternMatcher.build(logger, null, excludeEmbeddablesPattern));
filterEntityAction.setClient(generatorAction.getCgenConfiguration().isClient());
generatorAction.setLogger(logger);
if(force) {
@@ -177,6 +177,9 @@ public class CayenneGeneratorTask extends CayenneTask {
cgenConfiguration.setRelPath(destDir != null ? destDir.toPath() : cgenConfiguration.getRelPath());
cgenConfiguration.setEncoding(encoding != null ? encoding : cgenConfiguration.getEncoding());
cgenConfiguration.setMakePairs(makepairs != null ? makepairs : cgenConfiguration.isMakePairs());
+ if(mode != null && mode.equals("datamap")) {
+ replaceDatamapGenerationMode();
+ }
cgenConfiguration.setArtifactsGenerationMode(mode != null ? mode : cgenConfiguration.getArtifactsGenerationMode());
cgenConfiguration.setOutputPattern(outputPattern != null ? outputPattern : cgenConfiguration.getOutputPattern());
cgenConfiguration.setOverwrite(overwrite != null ? overwrite : cgenConfiguration.isOverwrite());
@@ -205,6 +208,13 @@ public class CayenneGeneratorTask extends CayenneTask {
return cgenConfiguration;
}
+ private void replaceDatamapGenerationMode() {
+ this.mode = ArtifactsGenerationMode.ALL.getLabel();
+ this.excludeEntitiesPattern = "*";
+ this.excludeEmbeddablesPattern = "*";
+ this.includeEntitiesPattern = "";
+ }
+
/**
* Validates attributes that are not related to internal DefaultClassGenerator. Throws
* BuildException if attributes are invalid.
http://git-wip-us.apache.org/repos/asf/cayenne/blob/ac6819f3/cayenne-ant/src/test/java/org/apache/cayenne/tools/CgenWithConfigTest.java
----------------------------------------------------------------------
diff --git a/cayenne-ant/src/test/java/org/apache/cayenne/tools/CgenWithConfigTest.java b/cayenne-ant/src/test/java/org/apache/cayenne/tools/CgenWithConfigTest.java
index b51a1e0..ce8fd10 100644
--- a/cayenne-ant/src/test/java/org/apache/cayenne/tools/CgenWithConfigTest.java
+++ b/cayenne-ant/src/test/java/org/apache/cayenne/tools/CgenWithConfigTest.java
@@ -79,7 +79,7 @@ public class CgenWithConfigTest {
File notIncludedEntity = new File(mapDir, "ObjEntity.txt");
assertFalse(notIncludedEntity.exists());
- File notIncludeSuperDatamap = new File("_Antmap_cgen_xml.txt");
+ File notIncludeSuperDatamap = new File(mapDir, convertPath("auto/_Antmap_cgen_xml.txt"));
assertFalse(notIncludeSuperDatamap.exists());
}
@@ -111,13 +111,47 @@ public class CgenWithConfigTest {
File notIncludedEntity = new File(mapDir, "ObjEntity1.txt");
assertFalse(notIncludedEntity.exists());
- File notIncludeSuperDatamap = new File("_Antmap_cgen_xml.txt");
+ File notIncludeSuperDatamap = new File(mapDir, convertPath("_Antmap_cgen_xml.txt"));
assertFalse(notIncludeSuperDatamap.exists());
File notIncludedSuperEntity = new File(mapDir, convertPath("_ObjEntity.txt"));
assertFalse(notIncludedSuperEntity.exists());
}
+ @Test
+ public void testReplaceDatamapMode() {
+ File mapDir = new File(baseDir, "cgenReplaceMode");
+ assertTrue(mapDir.mkdirs());
+
+ task.setDestDir(mapDir);
+ task.setMap(map);
+ task.setMode("datamap");
+ task.setMakepairs(true);
+ task.setOutputPattern("*.txt");
+
+ // run task
+ task.execute();
+
+ // check results
+ File notIncludedEntity = new File(mapDir, convertPath("ObjEntity.txt"));
+ assertFalse(notIncludedEntity.isFile());
+
+ File notIncludedEmbeddable = new File(mapDir, convertPath("Embeddable.txt"));
+ assertFalse(notIncludedEmbeddable.isFile());
+
+ File datamap = new File(mapDir, convertPath("Antmap_cgen_xml.txt"));
+ assertTrue(datamap.exists());
+
+ File notIncludedEntity1 = new File(mapDir, "ObjEntity1.txt");
+ assertFalse(notIncludedEntity1.exists());
+
+ File includeSuperDatamap = new File(mapDir, convertPath("auto/_Antmap_cgen_xml.txt"));
+ assertTrue(includeSuperDatamap.exists());
+
+ File notIncludedSuperEntity = new File(mapDir, convertPath("auto/_ObjEntity.txt"));
+ assertFalse(notIncludedSuperEntity.exists());
+ }
+
private String convertPath(String unixPath) {
return unixPath.replace('/', File.separatorChar);
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/ac6819f3/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/CgenTask.java
----------------------------------------------------------------------
diff --git a/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/CgenTask.java b/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/CgenTask.java
index 0e63c53..818b592 100644
--- a/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/CgenTask.java
+++ b/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/CgenTask.java
@@ -31,6 +31,7 @@ import org.apache.cayenne.dbsync.filter.NamePatternMatcher;
import org.apache.cayenne.dbsync.reverse.configuration.ToolsModule;
import org.apache.cayenne.di.DIBootstrap;
import org.apache.cayenne.di.Injector;
+import org.apache.cayenne.gen.ArtifactsGenerationMode;
import org.apache.cayenne.gen.CgenConfiguration;
import org.apache.cayenne.gen.CgenModule;
import org.apache.cayenne.gen.ClassGenerationAction;
@@ -166,18 +167,16 @@ public class CgenTask extends BaseCayenneTask {
CayenneGeneratorMapLoaderAction loaderAction = new CayenneGeneratorMapLoaderAction(injector);
loaderAction.setMainDataMapFile(dataMapFile);
-
- CayenneGeneratorEntityFilterAction filterEntityAction = new CayenneGeneratorEntityFilterAction();
- filterEntityAction.setNameFilter(NamePatternMatcher.build(getLogger(), includeEntities, excludeEntities));
-
- CayenneGeneratorEmbeddableFilterAction filterEmbeddableAction = new CayenneGeneratorEmbeddableFilterAction();
- filterEmbeddableAction.setNameFilter(NamePatternMatcher.build(getLogger(), null, excludeEmbeddables));
-
try {
loaderAction.setAdditionalDataMapFiles(convertAdditionalDataMaps());
DataMap dataMap = loaderAction.getMainDataMap();
ClassGenerationAction generator = this.createGenerator(dataMap);
+ CayenneGeneratorEntityFilterAction filterEntityAction = new CayenneGeneratorEntityFilterAction();
+ filterEntityAction.setNameFilter(NamePatternMatcher.build(getLogger(), includeEntities, excludeEntities));
+
+ CayenneGeneratorEmbeddableFilterAction filterEmbeddableAction = new CayenneGeneratorEmbeddableFilterAction();
+ filterEmbeddableAction.setNameFilter(NamePatternMatcher.build(getLogger(), null, excludeEmbeddables));
filterEntityAction.setClient(generator.getCgenConfiguration().isClient());
generator.setLogger(getLogger());
@@ -241,6 +240,9 @@ public class CgenTask extends BaseCayenneTask {
cgenConfiguration.setRelPath(getDestDirFile() != null ? getDestDirFile().toPath() : cgenConfiguration.getRelPath());
cgenConfiguration.setEncoding(encoding != null ? encoding : cgenConfiguration.getEncoding());
cgenConfiguration.setMakePairs(makePairs != null ? makePairs : cgenConfiguration.isMakePairs());
+ if(mode != null && mode.equals("datamap")) {
+ replaceDatamapGenerationMode();
+ }
cgenConfiguration.setArtifactsGenerationMode(mode != null ? mode : cgenConfiguration.getArtifactsGenerationMode());
cgenConfiguration.setOutputPattern(outputPattern != null ? outputPattern : cgenConfiguration.getOutputPattern());
cgenConfiguration.setOverwrite(overwrite != null ? overwrite : cgenConfiguration.isOverwrite());
@@ -269,6 +271,13 @@ public class CgenTask extends BaseCayenneTask {
return cgenConfiguration;
}
+ private void replaceDatamapGenerationMode() {
+ this.mode = ArtifactsGenerationMode.ALL.getLabel();
+ this.excludeEntities = "*";
+ this.excludeEmbeddables = "*";
+ this.includeEntities = "";
+ }
+
private boolean hasConfig() {
return destDir != null || destDirName != null || encoding != null || client != null || excludeEntities != null || excludeEmbeddables != null || includeEntities != null ||
makePairs != null || mode != null || outputPattern != null || overwrite != null || superPkg != null ||
http://git-wip-us.apache.org/repos/asf/cayenne/blob/ac6819f3/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/CgenTaskIT.java
----------------------------------------------------------------------
diff --git a/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/CgenTaskIT.java b/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/CgenTaskIT.java
index c3879ac..9758e51 100644
--- a/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/CgenTaskIT.java
+++ b/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/CgenTaskIT.java
@@ -146,4 +146,39 @@ public class CgenTaskIT extends BaseTaskIT {
assertEquals(TaskOutcome.SUCCESS, result.task(":cgen").getOutcome());
}
+
+ @Test
+ public void testReplaceDatamapMode() throws Exception {
+ GradleRunner runner = createRunner(
+ "cgen_replaceDatamapMode",
+ "cgen",
+ "-PdataMap=cgenMap.map.xml"
+ );
+
+ BuildResult result = runner.forwardOutput().build();
+
+ String generatedDirectoryPath = projectDir.getAbsolutePath() + "/customDirectory/";
+
+ String notIncludedEntity = generatedDirectoryPath + "ObjEntity.txt";
+ Path generatedNotIncludedEntity = Paths.get(notIncludedEntity);
+ assertFalse(Files.exists(generatedNotIncludedEntity));
+
+ String notIncludedEntity1 = generatedDirectoryPath + "ObjEntity1.txt";
+ Path generatedNotIncludedEntity1 = Paths.get(notIncludedEntity1);
+ assertFalse(Files.exists(generatedNotIncludedEntity1));
+
+ String notIncludedEmbeddable = generatedDirectoryPath + "Embeddable.txt";
+ Path generatedNotIncludedEmbeddable = Paths.get(notIncludedEmbeddable);
+ assertFalse(Files.exists(generatedNotIncludedEmbeddable));
+
+ String includedDataMap = generatedDirectoryPath + "CgenMap.txt";
+ Path generatedIncludedDataMap = Paths.get(includedDataMap);
+ assertTrue(Files.exists(generatedIncludedDataMap));
+
+ String includedSuperDataMap = generatedDirectoryPath + "auto/_CgenMap.txt";
+ Path generatedIncludedSuperDataMap = Paths.get(includedSuperDataMap);
+ assertTrue(Files.exists(generatedIncludedSuperDataMap));
+
+ assertEquals(TaskOutcome.SUCCESS, result.task(":cgen").getOutcome());
+ }
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cayenne/blob/ac6819f3/cayenne-gradle-plugin/src/test/resources/org/apache/cayenne/tools/cgen_replaceDatamapMode.gradle
----------------------------------------------------------------------
diff --git a/cayenne-gradle-plugin/src/test/resources/org/apache/cayenne/tools/cgen_replaceDatamapMode.gradle b/cayenne-gradle-plugin/src/test/resources/org/apache/cayenne/tools/cgen_replaceDatamapMode.gradle
new file mode 100644
index 0000000..6486a95
--- /dev/null
+++ b/cayenne-gradle-plugin/src/test/resources/org/apache/cayenne/tools/cgen_replaceDatamapMode.gradle
@@ -0,0 +1,31 @@
+/*****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ ****************************************************************/
+
+plugins {
+ id 'org.apache.cayenne'
+}
+
+cgen {
+ map dataMap
+ destDir = './customDirectory'
+ makePairs true
+ outputPattern = '*.txt'
+ overwrite = false
+ mode = "datamap"
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cayenne/blob/ac6819f3/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 647f363..f3abbe5 100644
--- a/maven-plugins/cayenne-maven-plugin/src/main/java/org/apache/cayenne/tools/CayenneGeneratorMojo.java
+++ b/maven-plugins/cayenne-maven-plugin/src/main/java/org/apache/cayenne/tools/CayenneGeneratorMojo.java
@@ -24,6 +24,7 @@ import org.apache.cayenne.dbsync.filter.NamePatternMatcher;
import org.apache.cayenne.dbsync.reverse.configuration.ToolsModule;
import org.apache.cayenne.di.DIBootstrap;
import org.apache.cayenne.di.Injector;
+import org.apache.cayenne.gen.ArtifactsGenerationMode;
import org.apache.cayenne.gen.CgenConfiguration;
import org.apache.cayenne.gen.CgenModule;
import org.apache.cayenne.gen.ClassGenerationAction;
@@ -241,17 +242,16 @@ public class CayenneGeneratorMojo extends AbstractMojo {
CayenneGeneratorMapLoaderAction loaderAction = new CayenneGeneratorMapLoaderAction(injector);
loaderAction.setMainDataMapFile(map);
- CayenneGeneratorEntityFilterAction filterEntityAction = new CayenneGeneratorEntityFilterAction();
- filterEntityAction.setNameFilter(NamePatternMatcher.build(logger, includeEntities, excludeEntities));
-
- CayenneGeneratorEmbeddableFilterAction filterEmbeddableAction = new CayenneGeneratorEmbeddableFilterAction();
- filterEmbeddableAction.setNameFilter(NamePatternMatcher.build(logger, null, excludeEmbeddables));
-
try {
loaderAction.setAdditionalDataMapFiles(convertAdditionalDataMaps());
DataMap dataMap = loaderAction.getMainDataMap();
ClassGenerationAction generator = createGenerator(dataMap);
+ CayenneGeneratorEntityFilterAction filterEntityAction = new CayenneGeneratorEntityFilterAction();
+ filterEntityAction.setNameFilter(NamePatternMatcher.build(logger, includeEntities, excludeEntities));
+
+ CayenneGeneratorEmbeddableFilterAction filterEmbeddableAction = new CayenneGeneratorEmbeddableFilterAction();
+ filterEmbeddableAction.setNameFilter(NamePatternMatcher.build(logger, null, excludeEmbeddables));
filterEntityAction.setClient(generator.getCgenConfiguration().isClient());
generator.setLogger(logger);
@@ -333,6 +333,9 @@ public class CayenneGeneratorMojo extends AbstractMojo {
cgenConfiguration.setRelPath(destDir != null ? destDir.getPath() : defaultDir.getPath());
cgenConfiguration.setEncoding(encoding != null ? encoding : cgenConfiguration.getEncoding());
cgenConfiguration.setMakePairs(makePairs != null ? makePairs : cgenConfiguration.isMakePairs());
+ if(mode != null && mode.equals("datamap")) {
+ replaceDatamapGenerationMode();
+ }
cgenConfiguration.setArtifactsGenerationMode(mode != null ? mode : cgenConfiguration.getArtifactsGenerationMode());
cgenConfiguration.setOutputPattern(outputPattern != null ? outputPattern : cgenConfiguration.getOutputPattern());
cgenConfiguration.setOverwrite(overwrite != null ? overwrite : cgenConfiguration.isOverwrite());
@@ -360,4 +363,11 @@ public class CayenneGeneratorMojo extends AbstractMojo {
}
return cgenConfiguration;
}
+
+ private void replaceDatamapGenerationMode() {
+ this.mode = ArtifactsGenerationMode.ALL.getLabel();
+ this.excludeEntities = "*";
+ this.excludeEmbeddables = "*";
+ this.includeEntities = "";
+ }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/ac6819f3/maven-plugins/cayenne-maven-plugin/src/test/java/org/apache/cayenne/tools/CayenneGeneratorMojoTest.java
----------------------------------------------------------------------
diff --git a/maven-plugins/cayenne-maven-plugin/src/test/java/org/apache/cayenne/tools/CayenneGeneratorMojoTest.java b/maven-plugins/cayenne-maven-plugin/src/test/java/org/apache/cayenne/tools/CayenneGeneratorMojoTest.java
index 8454c32..ef1e1c9 100644
--- a/maven-plugins/cayenne-maven-plugin/src/test/java/org/apache/cayenne/tools/CayenneGeneratorMojoTest.java
+++ b/maven-plugins/cayenne-maven-plugin/src/test/java/org/apache/cayenne/tools/CayenneGeneratorMojoTest.java
@@ -108,9 +108,31 @@ public class CayenneGeneratorMojoTest extends AbstractMojoTestCase {
File objEntity = new File("target/resultClasses/ObjEntity.txt");
assertFalse(objEntity.exists());
- File superObjEntity1 = new File("target/resultClasses/superPkg/_ObjEntity.txt");
+ File superObjEntity1 = new File("target/resultClasses/auto/_ObjEntity.txt");
assertFalse(superObjEntity1.exists());
- File superDataMap = new File("target/resultClasses/superPkg/_TestCgen.txt");
+ File superDataMap = new File("target/resultClasses/auto/_TestCgen.txt");
assertFalse(superDataMap.exists());
}
+
+ public void testDatamapModeReplace() throws Exception {
+ File pom = getTestFile("src/test/resources/cgen/project-to-test/replaceDatamapMode-pom.xml");
+ assertNotNull(pom);
+ assertTrue(pom.exists());
+
+ CayenneGeneratorMojo myMojo = (CayenneGeneratorMojo) lookupMojo("cgen", pom);
+ assertNotNull(myMojo);
+ myMojo.execute();
+
+ File objEntity1 = new File("target/testForMode/ObjEntity1.txt");
+ assertFalse(objEntity1.exists());
+ File embeddable = new File("target/testForMode/Embeddable.txt");
+ assertFalse(embeddable.exists());
+ File objEntity = new File("target/testForMode/ObjEntity.txt");
+ assertFalse(objEntity.exists());
+ File dataMap = new File("target/testForMode/TestCgen.txt");
+ assertTrue(dataMap.exists());
+
+ File superDataMap = new File("target/testForMode/superPkg/_TestCgen.txt");
+ assertTrue(superDataMap.exists());
+ }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/ac6819f3/maven-plugins/cayenne-maven-plugin/src/test/resources/cgen/project-to-test/datamap-and-pom.xml
----------------------------------------------------------------------
diff --git a/maven-plugins/cayenne-maven-plugin/src/test/resources/cgen/project-to-test/datamap-and-pom.xml b/maven-plugins/cayenne-maven-plugin/src/test/resources/cgen/project-to-test/datamap-and-pom.xml
index 620a6d0..a5b90fd 100644
--- a/maven-plugins/cayenne-maven-plugin/src/test/resources/cgen/project-to-test/datamap-and-pom.xml
+++ b/maven-plugins/cayenne-maven-plugin/src/test/resources/cgen/project-to-test/datamap-and-pom.xml
@@ -42,7 +42,6 @@
<outputPattern>*.txt</outputPattern>
<makePairs>false</makePairs>
<usePkgPath>true</usePkgPath>
- <superPkg>superPkg</superPkg>
<encoding>UTF-8</encoding>
<excludeEntities>ObjEntity</excludeEntities>
<mode>all</mode>
http://git-wip-us.apache.org/repos/asf/cayenne/blob/ac6819f3/maven-plugins/cayenne-maven-plugin/src/test/resources/cgen/project-to-test/replaceDatamapMode-pom.xml
----------------------------------------------------------------------
diff --git a/maven-plugins/cayenne-maven-plugin/src/test/resources/cgen/project-to-test/replaceDatamapMode-pom.xml b/maven-plugins/cayenne-maven-plugin/src/test/resources/cgen/project-to-test/replaceDatamapMode-pom.xml
new file mode 100644
index 0000000..8480f85
--- /dev/null
+++ b/maven-plugins/cayenne-maven-plugin/src/test/resources/cgen/project-to-test/replaceDatamapMode-pom.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
+ http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+ <name>Test CayenneGeneratorMojo</name>
+
+ <dependencies>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>cayenne-maven-plugin</artifactId>
+ <configuration>
+ <map>src/test/resources/cgen/testCgen.map.xml</map>
+ <destDir>target/testForMode</destDir>
+ <outputPattern>*.txt</outputPattern>
+ <makePairs>true</makePairs>
+ <usePkgPath>true</usePkgPath>
+ <superPkg>superPkg</superPkg>
+ <encoding>UTF-8</encoding>
+ <mode>datamap</mode>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
[31/32] cayenne git commit: Generation all selection fix
Posted by nt...@apache.org.
Generation all selection fix
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/d20a03f8
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/d20a03f8
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/d20a03f8
Branch: refs/heads/master
Commit: d20a03f88c3b0f40d12644ae2a66d9a93aadb63e
Parents: 51803e4
Author: Arseni Bulatski <an...@gmail.com>
Authored: Wed Nov 14 17:09:44 2018 +0300
Committer: Arseni Bulatski <an...@gmail.com>
Committed: Wed Nov 14 17:09:44 2018 +0300
----------------------------------------------------------------------
.../apache/cayenne/modeler/editor/cgen/CustomModeController.java | 4 ----
.../apache/cayenne/modeler/editor/cgen/GeneratorController.java | 4 ++++
2 files changed, 4 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cayenne/blob/d20a03f8/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 07f7828..e2d8408 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
@@ -177,10 +177,6 @@ public class CustomModeController extends GeneratorController {
view.getOverwrite().setSelected(cgenConfiguration.isOverwrite());
view.getCreatePropertyNames().setSelected(cgenConfiguration.isCreatePropertyNames());
view.getPkProperties().setSelected(cgenConfiguration.isCreatePKProperties());
- if(cgenConfiguration.getArtifactsGenerationMode().equalsIgnoreCase("all")) {
- ((CodeGeneratorControllerBase) parent).setCurrentClass(cgenConfiguration.getDataMap());
- ((CodeGeneratorControllerBase) parent).setSelected(true);
- }
updateComboBoxes();
getParentController().setInitFromModel(false);
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/d20a03f8/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 1b49a46..58bc85e 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
@@ -74,6 +74,10 @@ public abstract class GeneratorController extends CayenneController {
protected void initForm(CgenConfiguration cgenConfiguration) {
this.cgenConfiguration = cgenConfiguration;
((GeneratorControllerPanel)getView()).getOutputFolder().setText(cgenConfiguration.buildPath().toString());
+ if(cgenConfiguration.getArtifactsGenerationMode().equalsIgnoreCase("all")) {
+ ((CodeGeneratorControllerBase) parent).setCurrentClass(cgenConfiguration.getDataMap());
+ ((CodeGeneratorControllerBase) parent).setSelected(true);
+ }
}
public abstract void updateConfiguration(CgenConfiguration cgenConfiguration);
[12/32] cayenne git commit: Add cgen tab.
Posted by nt...@apache.org.
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);
+ }
}
[09/32] cayenne git commit: Create tests for maven, ant and gradle
Posted by nt...@apache.org.
Create tests for maven, ant and gradle
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/93da6be1
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/93da6be1
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/93da6be1
Branch: refs/heads/master
Commit: 93da6be17b9b8cd5ad9c4cb5184565b426991393
Parents: d9db6e3
Author: Arseni Bulatski <an...@gmail.com>
Authored: Fri Jun 29 13:42:55 2018 +0300
Committer: Arseni Bulatski <an...@gmail.com>
Committed: Wed Oct 24 13:44:26 2018 +0300
----------------------------------------------------------------------
.../cayenne/tools/CgenWithConfigTest.java | 91 ++++++++++++++++++++
cayenne-ant/src/test/resources/cgenTest.map.xml | 27 ++++++
.../cayenne/tools/CgenTaskWithConfigIT.java | 71 +++++++++++++++
.../org/apache/cayenne/tools/cgenMap.map.xml | 27 ++++++
.../cayenne/tools/cgen_with_config.gradle | 28 ++++++
.../cayenne/tools/CayenneGeneratorMojo.java | 2 +
.../cayenne/tools/CgenWithConfigMojoTest.java | 51 +++++++++++
.../resources/cgen/project-to-test/cgen-pom.xml | 48 +++++++++++
.../src/test/resources/cgen/testCgenMap.map.xml | 27 ++++++
9 files changed, 372 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cayenne/blob/93da6be1/cayenne-ant/src/test/java/org/apache/cayenne/tools/CgenWithConfigTest.java
----------------------------------------------------------------------
diff --git a/cayenne-ant/src/test/java/org/apache/cayenne/tools/CgenWithConfigTest.java b/cayenne-ant/src/test/java/org/apache/cayenne/tools/CgenWithConfigTest.java
new file mode 100644
index 0000000..cdccd49
--- /dev/null
+++ b/cayenne-ant/src/test/java/org/apache/cayenne/tools/CgenWithConfigTest.java
@@ -0,0 +1,91 @@
+/*****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ ****************************************************************/
+package org.apache.cayenne.tools;
+
+import org.apache.cayenne.test.file.FileUtil;
+import org.apache.cayenne.test.resource.ResourceUtil;
+import org.apache.tools.ant.Location;
+import org.apache.tools.ant.Project;
+import org.junit.Before;
+import org.junit.Test;
+
+import java.io.File;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+/**
+ * @since 4.1
+ */
+public class CgenWithConfigTest {
+
+ private static final File baseDir;
+ private static final File map;
+
+ static {
+ baseDir = FileUtil.baseTestDirectory();
+ map = new File(baseDir, "antmap-cgen.xml");
+
+ ResourceUtil.copyResourceToFile("cgenTest.map.xml", map);
+ }
+
+ protected CayenneGeneratorTask task;
+
+ @Before
+ public void setUp() {
+
+ Project project = new Project();
+ project.setBaseDir(baseDir);
+
+ task = new CayenneGeneratorTask();
+ task.setProject(project);
+ task.setTaskName("Test");
+ task.setLocation(Location.UNKNOWN_LOCATION);
+ }
+
+ @Test
+ public void testCgen() throws Exception {
+ File mapDir = new File(baseDir, "cgenConfigTest");
+ assertTrue(mapDir.mkdirs());
+
+ task.setDestDir(mapDir);
+ task.setMap(map);
+ task.setMode("entity");
+
+ // run task
+ task.execute();
+
+ // check results
+ File entity = new File(mapDir, convertPath("ObjEntity1.txt"));
+ assertTrue(entity.isFile());
+
+ File datamap = new File(mapDir, convertPath("TestCgenMap.txt"));
+ assertFalse(datamap.exists());
+
+ File notIncludedEntity = new File(mapDir, "ObjEntity.txt");
+ assertFalse(notIncludedEntity.exists());
+
+ File notIncludeSuperDatamap = new File("_TestCgenMap.txt");
+ assertFalse(notIncludeSuperDatamap.exists());
+ }
+
+ private String convertPath(String unixPath) {
+ return unixPath.replace('/', File.separatorChar);
+ }
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/93da6be1/cayenne-ant/src/test/resources/cgenTest.map.xml
----------------------------------------------------------------------
diff --git a/cayenne-ant/src/test/resources/cgenTest.map.xml b/cayenne-ant/src/test/resources/cgenTest.map.xml
new file mode 100644
index 0000000..930acbc
--- /dev/null
+++ b/cayenne-ant/src/test/resources/cgenTest.map.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<data-map xmlns="http://cayenne.apache.org/schema/10/modelMap"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://cayenne.apache.org/schema/10/modelMap http://cayenne.apache.org/schema/10/modelMap.xsd"
+ project-version="10">
+ <embeddable className="Embeddable"/>
+ <obj-entity name="ObjEntity" className="ObjEntity"/>
+ <obj-entity name="ObjEntity1" className="ObjEntity1"/>
+ <cgen xmlns="http://cayenne.apache.org/schema/10/cgen">
+ <objEntity>
+ <name>ObjEntity1</name>
+ </objEntity>
+ <generationMode>all</generationMode>
+ <dataMapTemplate>templates/v4_1/datamap-subclass.vm</dataMapTemplate>
+ <dataMapSuperclassTemplate>templates/v4_1/datamap-superclass.vm</dataMapSuperclassTemplate>
+ <subclassTemplate>templates/v4_1/subclass.vm</subclassTemplate>
+ <superclassTemplate>templates/v4_1/superclass.vm</superclassTemplate>
+ <embeddableTemplate>templates/v4_1/embeddable-subclass.vm</embeddableTemplate>
+ <embeddableSuperclassTemplate>templates/v4_1/embeddable-superclass.vm</embeddableSuperclassTemplate>
+ <outputPattern>*.txt</outputPattern>
+ <makePairs>false</makePairs>
+ <usePkgPath>true</usePkgPath>
+ <overwriteSubclasses>false</overwriteSubclasses>
+ <createPropertyNames>false</createPropertyNames>
+ <encoding>UTF-8</encoding>
+ </cgen>
+</data-map>
http://git-wip-us.apache.org/repos/asf/cayenne/blob/93da6be1/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/CgenTaskWithConfigIT.java
----------------------------------------------------------------------
diff --git a/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/CgenTaskWithConfigIT.java b/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/CgenTaskWithConfigIT.java
new file mode 100644
index 0000000..bf981ec
--- /dev/null
+++ b/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/CgenTaskWithConfigIT.java
@@ -0,0 +1,71 @@
+/*****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ ****************************************************************/
+package org.apache.cayenne.tools;
+
+import org.gradle.testkit.runner.BuildResult;
+import org.gradle.testkit.runner.GradleRunner;
+import org.gradle.testkit.runner.TaskOutcome;
+import org.junit.Test;
+
+
+import java.io.File;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+/**
+ * @since 4.1
+ */
+public class CgenTaskWithConfigIT extends BaseTaskIT{
+
+ @Test
+ public void cgenWithConfig() throws Exception {
+ GradleRunner runner = createRunner(
+ "cgen_with_config",
+ "cgen",
+ "-PdataMap=" + URLDecoder.decode(getClass().getResource("cgenMap.map.xml").getFile(), "UTF-8")
+ );
+
+ BuildResult result = runner.forwardOutput().build();
+
+ String generatedDirectoryPath = projectDir.getAbsolutePath() + "/customDirectory/";
+
+ String generatedClassPath = generatedDirectoryPath + "ObjEntity1.txt";
+ String datamap = generatedDirectoryPath + "TestCgenMap.txt";
+ String notIncludedEntity = generatedDirectoryPath + "ObjEntity.txt";
+ String notIncludedSuperDatamap = generatedDirectoryPath + "_TestCgenMap.txt";
+
+ File notIncludeSuperDatamap = new File("_TestCgenMap.txt");
+ assertFalse(notIncludeSuperDatamap.exists());
+
+ File generatedClass = new File(generatedClassPath);
+ File generatedDatamap = new File(datamap);
+ File generatedNotIncludedEntity = new File(notIncludedEntity);
+ File generatedNotIncludedSuperDatamap = new File(notIncludedSuperDatamap);
+
+ assertTrue(generatedClass.exists());
+ assertFalse(generatedDatamap.exists());
+ assertFalse(generatedNotIncludedEntity.exists());
+ assertFalse(generatedNotIncludedSuperDatamap.exists());
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/93da6be1/cayenne-gradle-plugin/src/test/resources/org/apache/cayenne/tools/cgenMap.map.xml
----------------------------------------------------------------------
diff --git a/cayenne-gradle-plugin/src/test/resources/org/apache/cayenne/tools/cgenMap.map.xml b/cayenne-gradle-plugin/src/test/resources/org/apache/cayenne/tools/cgenMap.map.xml
new file mode 100644
index 0000000..930acbc
--- /dev/null
+++ b/cayenne-gradle-plugin/src/test/resources/org/apache/cayenne/tools/cgenMap.map.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<data-map xmlns="http://cayenne.apache.org/schema/10/modelMap"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://cayenne.apache.org/schema/10/modelMap http://cayenne.apache.org/schema/10/modelMap.xsd"
+ project-version="10">
+ <embeddable className="Embeddable"/>
+ <obj-entity name="ObjEntity" className="ObjEntity"/>
+ <obj-entity name="ObjEntity1" className="ObjEntity1"/>
+ <cgen xmlns="http://cayenne.apache.org/schema/10/cgen">
+ <objEntity>
+ <name>ObjEntity1</name>
+ </objEntity>
+ <generationMode>all</generationMode>
+ <dataMapTemplate>templates/v4_1/datamap-subclass.vm</dataMapTemplate>
+ <dataMapSuperclassTemplate>templates/v4_1/datamap-superclass.vm</dataMapSuperclassTemplate>
+ <subclassTemplate>templates/v4_1/subclass.vm</subclassTemplate>
+ <superclassTemplate>templates/v4_1/superclass.vm</superclassTemplate>
+ <embeddableTemplate>templates/v4_1/embeddable-subclass.vm</embeddableTemplate>
+ <embeddableSuperclassTemplate>templates/v4_1/embeddable-superclass.vm</embeddableSuperclassTemplate>
+ <outputPattern>*.txt</outputPattern>
+ <makePairs>false</makePairs>
+ <usePkgPath>true</usePkgPath>
+ <overwriteSubclasses>false</overwriteSubclasses>
+ <createPropertyNames>false</createPropertyNames>
+ <encoding>UTF-8</encoding>
+ </cgen>
+</data-map>
http://git-wip-us.apache.org/repos/asf/cayenne/blob/93da6be1/cayenne-gradle-plugin/src/test/resources/org/apache/cayenne/tools/cgen_with_config.gradle
----------------------------------------------------------------------
diff --git a/cayenne-gradle-plugin/src/test/resources/org/apache/cayenne/tools/cgen_with_config.gradle b/cayenne-gradle-plugin/src/test/resources/org/apache/cayenne/tools/cgen_with_config.gradle
new file mode 100644
index 0000000..3cad46e
--- /dev/null
+++ b/cayenne-gradle-plugin/src/test/resources/org/apache/cayenne/tools/cgen_with_config.gradle
@@ -0,0 +1,28 @@
+/*****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ ****************************************************************/
+
+plugins {
+ id 'org.apache.cayenne'
+}
+
+cgen {
+ map dataMap
+ destDir = './customDirectory'
+ mode = 'entity'
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cayenne/blob/93da6be1/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 e57d306..3bdf08b 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
@@ -217,6 +217,7 @@ public class CayenneGeneratorMojo extends AbstractMojo {
// Create the destination directory if necessary.
// TODO: (KJM 11/2/06) The destDir really should be added as a
// compilation resource for maven.
+
if (!destDir.exists()) {
destDir.mkdirs();
}
@@ -238,6 +239,7 @@ public class CayenneGeneratorMojo extends AbstractMojo {
ClassGenerationAction generator = createGenerator(dataMap);
generator.setLogger(logger);
+
if(force) {
// will (re-)generate all files
generator.setForce(true);
http://git-wip-us.apache.org/repos/asf/cayenne/blob/93da6be1/maven-plugins/cayenne-maven-plugin/src/test/java/org/apache/cayenne/tools/CgenWithConfigMojoTest.java
----------------------------------------------------------------------
diff --git a/maven-plugins/cayenne-maven-plugin/src/test/java/org/apache/cayenne/tools/CgenWithConfigMojoTest.java b/maven-plugins/cayenne-maven-plugin/src/test/java/org/apache/cayenne/tools/CgenWithConfigMojoTest.java
new file mode 100644
index 0000000..2532db5
--- /dev/null
+++ b/maven-plugins/cayenne-maven-plugin/src/test/java/org/apache/cayenne/tools/CgenWithConfigMojoTest.java
@@ -0,0 +1,51 @@
+/*****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ ****************************************************************/
+package org.apache.cayenne.tools;
+
+import org.apache.maven.plugin.testing.AbstractMojoTestCase;
+
+import java.io.File;
+
+/**
+ * @since 4.1
+ */
+public class CgenWithConfigMojoTest extends AbstractMojoTestCase {
+
+ public void testCgen() throws Exception {
+ File pom = getTestFile("src/test/resources/cgen/project-to-test/cgen-pom.xml");
+ assertNotNull(pom);
+ assertTrue(pom.exists());
+
+ CayenneGeneratorMojo myMojo = (CayenneGeneratorMojo) lookupMojo("cgen", pom);
+ assertNotNull(myMojo);
+ myMojo.execute();
+
+ File testEntity = new File("target/cgenClasses/ObjEntity1.txt");
+ File notIncludedDataMapEntity = new File("target/cgenClasses/TestCgenMap.txt");
+
+ File notIncludedEntity = new File("target/cgenClasses/ObjEntity.txt");
+ File notIncludedSuperDataMap = new File("target/cgenClasses/_TestCgenMap.txt");
+
+ assertTrue(testEntity.exists());
+ assertFalse(notIncludedDataMapEntity.exists());
+
+ assertFalse(notIncludedEntity.exists());
+ assertFalse(notIncludedSuperDataMap.exists());
+ }
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/93da6be1/maven-plugins/cayenne-maven-plugin/src/test/resources/cgen/project-to-test/cgen-pom.xml
----------------------------------------------------------------------
diff --git a/maven-plugins/cayenne-maven-plugin/src/test/resources/cgen/project-to-test/cgen-pom.xml b/maven-plugins/cayenne-maven-plugin/src/test/resources/cgen/project-to-test/cgen-pom.xml
new file mode 100644
index 0000000..eadddc6
--- /dev/null
+++ b/maven-plugins/cayenne-maven-plugin/src/test/resources/cgen/project-to-test/cgen-pom.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
+ http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+ <name>Test CayenneCgenMojo</name>
+
+ <dependencies>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>cayenne-maven-plugin</artifactId>
+ <configuration>
+ <map>src/test/resources/cgen/testCgenMap.map.xml</map>
+ <destDir>target/cgenClasses</destDir>
+ <mode>entity</mode>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
http://git-wip-us.apache.org/repos/asf/cayenne/blob/93da6be1/maven-plugins/cayenne-maven-plugin/src/test/resources/cgen/testCgenMap.map.xml
----------------------------------------------------------------------
diff --git a/maven-plugins/cayenne-maven-plugin/src/test/resources/cgen/testCgenMap.map.xml b/maven-plugins/cayenne-maven-plugin/src/test/resources/cgen/testCgenMap.map.xml
new file mode 100644
index 0000000..930acbc
--- /dev/null
+++ b/maven-plugins/cayenne-maven-plugin/src/test/resources/cgen/testCgenMap.map.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<data-map xmlns="http://cayenne.apache.org/schema/10/modelMap"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://cayenne.apache.org/schema/10/modelMap http://cayenne.apache.org/schema/10/modelMap.xsd"
+ project-version="10">
+ <embeddable className="Embeddable"/>
+ <obj-entity name="ObjEntity" className="ObjEntity"/>
+ <obj-entity name="ObjEntity1" className="ObjEntity1"/>
+ <cgen xmlns="http://cayenne.apache.org/schema/10/cgen">
+ <objEntity>
+ <name>ObjEntity1</name>
+ </objEntity>
+ <generationMode>all</generationMode>
+ <dataMapTemplate>templates/v4_1/datamap-subclass.vm</dataMapTemplate>
+ <dataMapSuperclassTemplate>templates/v4_1/datamap-superclass.vm</dataMapSuperclassTemplate>
+ <subclassTemplate>templates/v4_1/subclass.vm</subclassTemplate>
+ <superclassTemplate>templates/v4_1/superclass.vm</superclassTemplate>
+ <embeddableTemplate>templates/v4_1/embeddable-subclass.vm</embeddableTemplate>
+ <embeddableSuperclassTemplate>templates/v4_1/embeddable-superclass.vm</embeddableSuperclassTemplate>
+ <outputPattern>*.txt</outputPattern>
+ <makePairs>false</makePairs>
+ <usePkgPath>true</usePkgPath>
+ <overwriteSubclasses>false</overwriteSubclasses>
+ <createPropertyNames>false</createPropertyNames>
+ <encoding>UTF-8</encoding>
+ </cgen>
+</data-map>
[27/32] cayenne git commit: Some fixes
Posted by nt...@apache.org.
Some fixes
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/3225c39e
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/3225c39e
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/3225c39e
Branch: refs/heads/master
Commit: 3225c39e18631e663395fea5a59b399d6fbc77d0
Parents: 397d29f
Author: Arseni Bulatski <an...@gmail.com>
Authored: Tue Nov 13 17:20:53 2018 +0300
Committer: Arseni Bulatski <an...@gmail.com>
Committed: Tue Nov 13 17:20:53 2018 +0300
----------------------------------------------------------------------
.../java/org/apache/cayenne/modeler/CodeTemplateManager.java | 2 +-
.../apache/cayenne/modeler/editor/cgen/CustomModeController.java | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cayenne/blob/3225c39e/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CodeTemplateManager.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CodeTemplateManager.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CodeTemplateManager.java
index 7579d5d..a5d2fb6 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CodeTemplateManager.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CodeTemplateManager.java
@@ -169,7 +169,7 @@ public class CodeTemplateManager {
}
public String getNameByPath(String name, Path rootPath) {
- String fullPath = rootPath.resolve(Paths.get(name)).toString();
+ String fullPath = rootPath.resolve(Paths.get(name)).normalize().toString();
if(reverseCustomTemplate.containsKey(fullPath)){
return reverseCustomTemplate.get(fullPath);
} else {
http://git-wip-us.apache.org/repos/asf/cayenne/blob/3225c39e/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 a6be13b..07f7828 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
@@ -103,8 +103,8 @@ public class CustomModeController extends GeneratorController {
cgenConfiguration.getTemplate(), cgenConfiguration.getRootPath());
String superTemplateName = getApplication().getCodeTemplateManager().getNameByPath(
cgenConfiguration.getSuperTemplate(), cgenConfiguration.getRootPath());
- String path = cgenConfiguration.getRootPath().resolve(Paths.get(cgenConfiguration.getTemplate())).toString();
- String superPath = cgenConfiguration.getRootPath().resolve(Paths.get(cgenConfiguration.getSuperTemplate())).toString();
+ String path = cgenConfiguration.getRootPath().resolve(Paths.get(cgenConfiguration.getTemplate())).normalize().toString();
+ String superPath = cgenConfiguration.getRootPath().resolve(Paths.get(cgenConfiguration.getSuperTemplate())).normalize().toString();
if(templateName == null && superTemplateName == null) {
view.getSubclassTemplate().setItem(null);
view.getSuperclassTemplate().setItem(null);
[22/32] cayenne git commit: Cgen task refactoring
Posted by nt...@apache.org.
Cgen task refactoring
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/b30e5eb5
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/b30e5eb5
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/b30e5eb5
Branch: refs/heads/master
Commit: b30e5eb5d9e22f7ff0c7d3e8763d9b990bd8cb4d
Parents: a5c2ceb
Author: Arseni Bulatski <an...@gmail.com>
Authored: Fri Nov 9 15:23:06 2018 +0300
Committer: Arseni Bulatski <an...@gmail.com>
Committed: Fri Nov 9 16:40:51 2018 +0300
----------------------------------------------------------------------
RELEASE-NOTES.txt | 1 +
.../cayenne/tools/CayenneGeneratorTask.java | 42 +-
.../cayenne/tools/CgenWithConfigTest.java | 4 +-
.../apache/cayenne/gen/CgenConfiguration.java | 71 ++-
.../cayenne/gen/ClassGenerationAction.java | 24 +-
.../apache/cayenne/gen/EmbeddableArtifact.java | 12 +-
.../org/apache/cayenne/gen/EntityArtifact.java | 12 +-
.../cayenne/gen/xml/CgenConfigHandler.java | 14 +
.../cayenne/gen/xml/CgenSaverDelegate.java | 2 +-
.../CayenneGeneratorEmbeddableFilterAction.java | 5 +
.../CayenneGeneratorEntityFilterAction.java | 13 -
.../java/org/apache/cayenne/tools/CgenTask.java | 44 +-
.../org/apache/cayenne/tools/BaseTaskIT.java | 15 +
.../org/apache/cayenne/tools/CgenTaskIT.java | 12 +-
.../apache/cayenne/tools/DbGenerateTaskIT.java | 4 +-
.../apache/cayenne/tools/GradlePluginIT.java | 2 +-
.../org/apache/cayenne/tools/cgenConfig.map.xml | 22 -
.../cayenne/tools/cgen_with_config.map.xml | 22 +
.../cayenne/project/CompoundSaverDelegate.java | 13 +-
.../main/java/org/apache/cayenne/util/Util.java | 33 +-
.../org/apache/cayenne/schema/10/cgen.xsd | 47 ++
.../cayenne/tools/CayenneGeneratorMojo.java | 46 +-
.../cayenne/tools/CayenneGeneratorMojoTest.java | 2 +-
.../cayenne/modeler/CayenneModelerFrame.java | 79 ++-
.../dialog/codegen/ClassesTabController.java | 203 -------
.../modeler/dialog/codegen/ClassesTabPanel.java | 141 -----
.../dialog/codegen/ClientModeController.java | 81 ---
.../dialog/codegen/CodeGeneratorController.java | 169 ------
.../codegen/CodeGeneratorControllerBase.java | 380 -------------
.../dialog/codegen/CodeGeneratorDialog.java | 99 ----
.../dialog/codegen/CustomModeController.java | 235 --------
.../modeler/dialog/codegen/CustomModePanel.java | 137 -----
.../codegen/CustomPreferencesUpdater.java | 209 -------
.../dialog/codegen/GeneratorController.java | 561 -------------------
.../codegen/GeneratorControllerPanel.java | 55 --
.../dialog/codegen/GeneratorTabController.java | 115 ----
.../dialog/codegen/GeneratorTabPanel.java | 65 ---
.../dialog/codegen/StandardModeController.java | 82 ---
.../dialog/codegen/StandardModePanel.java | 42 --
.../dialog/codegen/StandardPanelComponent.java | 81 ---
.../modeler/editor/DataDomainTabbedView.java | 4 +-
.../modeler/editor/DataMapTabbedView.java | 40 +-
.../editor/cgen/ClassesTabController.java | 11 +-
.../editor/cgen/ClientModeController.java | 7 +-
.../editor/cgen/CodeGeneratorController.java | 21 +-
.../cgen/CodeGeneratorControllerBase.java | 82 +++
.../editor/cgen/CustomModeController.java | 28 +-
.../modeler/editor/cgen/CustomModePanel.java | 17 +-
.../editor/cgen/GeneratorController.java | 69 +--
.../editor/cgen/GeneratorControllerPanel.java | 10 +-
.../editor/cgen/GeneratorTabController.java | 7 +-
.../modeler/editor/cgen/GeneratorTabPanel.java | 1 +
.../editor/cgen/StandardModeController.java | 8 +-
.../modeler/editor/cgen/StandardModePanel.java | 4 +-
.../editor/cgen/StandardPanelComponent.java | 63 ---
.../modeler/editor/cgen/domain/CgenPanel.java | 19 +
.../modeler/editor/cgen/domain/CgenTab.java | 19 +
.../editor/cgen/domain/CgenTabController.java | 28 +-
.../cayenne/modeler/util/ModelerUtil.java | 3 +
59 files changed, 592 insertions(+), 3045 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b30e5eb5/RELEASE-NOTES.txt
----------------------------------------------------------------------
diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt
index fd08cdc..d701e29 100644
--- a/RELEASE-NOTES.txt
+++ b/RELEASE-NOTES.txt
@@ -25,6 +25,7 @@ CAY-2485 Compact Slf4j Logger
CAY-2487 Removed usage of CayenneException.
CAY-2489 Add validation to the case of not to PK relationships
CAY-2491 Remaster Db Import View
+CAY-2493 Save cgen configuration with datamap XML
Bug Fixes:
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b30e5eb5/cayenne-ant/src/main/java/org/apache/cayenne/tools/CayenneGeneratorTask.java
----------------------------------------------------------------------
diff --git a/cayenne-ant/src/main/java/org/apache/cayenne/tools/CayenneGeneratorTask.java b/cayenne-ant/src/main/java/org/apache/cayenne/tools/CayenneGeneratorTask.java
index 02cc0bf..6291a6d 100644
--- a/cayenne-ant/src/main/java/org/apache/cayenne/tools/CayenneGeneratorTask.java
+++ b/cayenne-ant/src/main/java/org/apache/cayenne/tools/CayenneGeneratorTask.java
@@ -35,8 +35,6 @@ import org.apache.velocity.VelocityContext;
import org.slf4j.LoggerFactory;
import java.io.File;
-import java.nio.file.Files;
-import java.nio.file.Paths;
/**
* An Ant task to perform class generation based on CayenneDataMap.
@@ -47,12 +45,15 @@ public class CayenneGeneratorTask extends CayenneTask {
protected String includeEntitiesPattern;
protected String excludeEntitiesPattern;
+ /**
+ * @since 4.1
+ */
protected String excludeEmbeddablesPattern;
protected VPPConfig vppConfig;
protected File map;
protected File additionalMaps[];
- protected boolean client;
+ protected Boolean client;
protected File destDir;
protected String encoding;
protected Boolean makepairs;
@@ -67,8 +68,11 @@ public class CayenneGeneratorTask extends CayenneTask {
protected String querytemplate;
protected String querysupertemplate;
protected Boolean usepkgpath;
- protected boolean createpropertynames;
+ protected Boolean createpropertynames;
+ /**
+ * @since 4.1
+ */
private boolean force;
private boolean useConfigFromDataMap;
@@ -80,7 +84,7 @@ public class CayenneGeneratorTask extends CayenneTask {
*
* @since 4.1
*/
- protected boolean createpkproperties;
+ protected Boolean createpkproperties;
public CayenneGeneratorTask() {
}
@@ -106,7 +110,6 @@ public class CayenneGeneratorTask extends CayenneTask {
loadAction.setAdditionalDataMapFiles(additionalMaps);
CayenneGeneratorEntityFilterAction filterEntityAction = new CayenneGeneratorEntityFilterAction();
- filterEntityAction.setClient(client);
filterEntityAction.setNameFilter(NamePatternMatcher.build(logger, includeEntitiesPattern, excludeEntitiesPattern));
CayenneGeneratorEmbeddableFilterAction filterEmbeddableAction = new CayenneGeneratorEmbeddableFilterAction();
@@ -116,6 +119,7 @@ public class CayenneGeneratorTask extends CayenneTask {
DataMap dataMap = loadAction.getMainDataMap();
ClassGenerationAction generatorAction = createGenerator(dataMap);
+ filterEntityAction.setClient(generatorAction.getCgenConfiguration().isClient());
generatorAction.setLogger(logger);
if(force) {
// will (re-)generate all files
@@ -146,11 +150,11 @@ public class CayenneGeneratorTask extends CayenneTask {
}
private boolean hasConfig() {
- return destDir != null || encoding != null || client || excludeEntitiesPattern != null || excludeEmbeddablesPattern != null || includeEntitiesPattern != null ||
+ return destDir != null || encoding != null || client != null || excludeEntitiesPattern != null || excludeEmbeddablesPattern != null || includeEntitiesPattern != null ||
makepairs != null || mode != null || outputPattern != null || overwrite != null || superpkg != null ||
supertemplate != null || template != null || embeddabletemplate != null || embeddablesupertemplate != null ||
- usepkgpath != null || createpropertynames || querytemplate != null ||
- querysupertemplate != null || createpkproperties || force;
+ usepkgpath != null || createpropertynames != null || querytemplate != null ||
+ querysupertemplate != null || createpkproperties != null || force;
}
private CgenConfiguration buildConfiguration(DataMap dataMap) {
@@ -159,11 +163,6 @@ public class CayenneGeneratorTask extends CayenneTask {
return cgenConfigFromPom(dataMap);
} else if(cgenConfiguration != null) {
useConfigFromDataMap = true;
- java.nio.file.Path resourcePath = Paths.get(map.getPath());
- if(Files.isRegularFile(resourcePath)) {
- resourcePath = resourcePath.getParent();
- }
- cgenConfiguration.setRelPath(resourcePath.resolve(cgenConfiguration.getRelPath()));
return cgenConfiguration;
} else {
cgenConfiguration = new CgenConfiguration();
@@ -175,7 +174,7 @@ public class CayenneGeneratorTask extends CayenneTask {
private CgenConfiguration cgenConfigFromPom(DataMap dataMap){
CgenConfiguration cgenConfiguration = new CgenConfiguration();
cgenConfiguration.setDataMap(dataMap);
- cgenConfiguration.setRelPath(destDir != null ? destDir.getPath() : cgenConfiguration.getRelPath());
+ cgenConfiguration.setRelPath(destDir != null ? destDir.toPath() : cgenConfiguration.getRelPath());
cgenConfiguration.setEncoding(encoding != null ? encoding : cgenConfiguration.getEncoding());
cgenConfiguration.setMakePairs(makepairs != null ? makepairs : cgenConfiguration.isMakePairs());
cgenConfiguration.setArtifactsGenerationMode(mode != null ? mode : cgenConfiguration.getArtifactsGenerationMode());
@@ -187,20 +186,20 @@ public class CayenneGeneratorTask extends CayenneTask {
cgenConfiguration.setEmbeddableSuperTemplate(embeddablesupertemplate != null ? embeddablesupertemplate : cgenConfiguration.getEmbeddableSuperTemplate());
cgenConfiguration.setEmbeddableTemplate(embeddabletemplate != null ? embeddabletemplate : cgenConfiguration.getEmbeddableTemplate());
cgenConfiguration.setUsePkgPath(usepkgpath != null ? usepkgpath : cgenConfiguration.isUsePkgPath());
- cgenConfiguration.setCreatePropertyNames(createpropertynames);
+ cgenConfiguration.setCreatePropertyNames(createpropertynames != null ? createpropertynames : cgenConfiguration.isCreatePropertyNames());
cgenConfiguration.setQueryTemplate(querytemplate != null ? querytemplate : cgenConfiguration.getQueryTemplate());
cgenConfiguration.setQuerySuperTemplate(querysupertemplate != null ? querysupertemplate : cgenConfiguration.getQuerySuperTemplate());
- cgenConfiguration.setCreatePKProperties(createpkproperties);
- cgenConfiguration.setClient(client);
+ cgenConfiguration.setCreatePKProperties(createpkproperties != null ? createpkproperties : cgenConfiguration.isCreatePKProperties());
+ cgenConfiguration.setClient(client != null ? client : cgenConfiguration.isClient());
if(!cgenConfiguration.isMakePairs()) {
if(template == null) {
- cgenConfiguration.setTemplate(client ? ClientClassGenerationAction.SINGLE_CLASS_TEMPLATE : ClassGenerationAction.SINGLE_CLASS_TEMPLATE);
+ cgenConfiguration.setTemplate(cgenConfiguration.isClient() ? ClientClassGenerationAction.SINGLE_CLASS_TEMPLATE : ClassGenerationAction.SINGLE_CLASS_TEMPLATE);
}
if(embeddabletemplate == null) {
cgenConfiguration.setEmbeddableTemplate(ClassGenerationAction.EMBEDDABLE_SINGLE_CLASS_TEMPLATE);
}
if(querytemplate == null) {
- cgenConfiguration.setQueryTemplate(client ? ClientClassGenerationAction.DATAMAP_SINGLE_CLASS_TEMPLATE : ClassGenerationAction.DATAMAP_SINGLE_CLASS_TEMPLATE);
+ cgenConfiguration.setQueryTemplate(cgenConfiguration.isClient() ? ClientClassGenerationAction.DATAMAP_SINGLE_CLASS_TEMPLATE : ClassGenerationAction.DATAMAP_SINGLE_CLASS_TEMPLATE);
}
}
return cgenConfiguration;
@@ -331,6 +330,9 @@ public class CayenneGeneratorTask extends CayenneTask {
this.includeEntitiesPattern = includeEntitiesPattern;
}
+ /**
+ * Sets <code>excludeEmbeddablesPattern</code> property.
+ */
public void setExcludeEmbeddablesPattern(String excludeEmbeddablesPattern) {
this.excludeEmbeddablesPattern = excludeEmbeddablesPattern;
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b30e5eb5/cayenne-ant/src/test/java/org/apache/cayenne/tools/CgenWithConfigTest.java
----------------------------------------------------------------------
diff --git a/cayenne-ant/src/test/java/org/apache/cayenne/tools/CgenWithConfigTest.java b/cayenne-ant/src/test/java/org/apache/cayenne/tools/CgenWithConfigTest.java
index 4241105..b51a1e0 100644
--- a/cayenne-ant/src/test/java/org/apache/cayenne/tools/CgenWithConfigTest.java
+++ b/cayenne-ant/src/test/java/org/apache/cayenne/tools/CgenWithConfigTest.java
@@ -60,7 +60,7 @@ public class CgenWithConfigTest {
}
@Test
- public void testCgen() throws Exception {
+ public void testCgenWithDmConfig() {
File mapDir = new File(baseDir, "cgenConfigTest");
assertTrue(mapDir.mkdirs());
@@ -84,7 +84,7 @@ public class CgenWithConfigTest {
}
@Test
- public void testCgenWithDmAndPomConfigs() throws Exception {
+ public void testCgenWithDmAndPomConfigs() {
File mapDir = new File(baseDir, "cgenDmPomTest");
assertTrue(mapDir.mkdirs());
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b30e5eb5/cayenne-cgen/src/main/java/org/apache/cayenne/gen/CgenConfiguration.java
----------------------------------------------------------------------
diff --git a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/CgenConfiguration.java b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/CgenConfiguration.java
index 8d4157d..15bc435 100644
--- a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/CgenConfiguration.java
+++ b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/CgenConfiguration.java
@@ -1,3 +1,22 @@
+/*****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ ****************************************************************/
+
package org.apache.cayenne.gen;
import org.apache.cayenne.configuration.ConfigurationNodeVisitor;
@@ -16,6 +35,13 @@ import java.util.Arrays;
import java.util.Collection;
import java.util.stream.Collectors;
+/**
+ * Used to keep config of class generation action.
+ * Previously was the part of ClassGeneretionAction class.
+ * Now CgenConfiguration is saved in dataMap file.
+ * You can reuse it in next cgen actions.
+ * @since 4.1
+ */
public class CgenConfiguration implements Serializable, XMLSerializable {
private Collection<Artifact> artifacts;
@@ -58,6 +84,7 @@ public class CgenConfiguration implements Serializable, XMLSerializable {
this.timestamp = 0L;
this.usePkgPath = true;
this.makePairs = true;
+ setArtifactsGenerationMode("entity");
this.artifacts = new ArrayList<>();
this.entityArtifacts = new ArrayList<>();
@@ -244,18 +271,18 @@ public class CgenConfiguration implements Serializable, XMLSerializable {
this.createPKProperties = createPKProperties;
}
- public String getRelPath() {
+ public Path getRelPath() {
+ return relPath;
+ }
+
+ public String buildRelPath() {
if(relPath == null || relPath.toString().isEmpty()) {
return ".";
}
return relPath.toString();
}
- public String getDir(){
- return rootPath != null ? relPath != null ? rootPath.resolve(relPath).toAbsolutePath().normalize().toString() : rootPath.toString() : null;
- }
-
- public Collection<Artifact> getArtifacts() {
+ Collection<Artifact> getArtifacts() {
return artifacts;
}
@@ -267,20 +294,26 @@ public class CgenConfiguration implements Serializable, XMLSerializable {
return embeddableArtifacts;
}
+ public boolean isClient() {
+ return client;
+ }
+
+ public void setClient(boolean client) {
+ this.client = client;
+ }
+
+ void addArtifact(Artifact artifact) {
+ artifacts.add(artifact);
+ }
+
public Path buildPath() {
return rootPath != null ? relPath != null ? rootPath.resolve(relPath).toAbsolutePath().normalize() : rootPath : relPath;
}
- /**
- * @since 4.1
- */
public void loadEntity(String name) {
entityArtifacts.add(name);
}
- /**
- * @since 4.1
- */
public void loadEmbeddable(String name) {
embeddableArtifacts.add(name);
}
@@ -327,25 +360,13 @@ public class CgenConfiguration implements Serializable, XMLSerializable {
.collect(Collectors.toList());
}
- public boolean isClient() {
- return client;
- }
-
- public void setClient(boolean client) {
- this.client = client;
- }
-
- public void addArtifact(Artifact artifact) {
- artifacts.add(artifact);
- }
-
@Override
public void encodeAsXML(XMLEncoder encoder, ConfigurationNodeVisitor delegate) {
encoder.start("cgen")
.attribute("xmlns", CgenExtension.NAMESPACE)
.simpleTag("excludeEntities", getExcludeEntites())
.simpleTag("excludeEmbeddables",getExcludeEmbeddables())
- .simpleTag("destDir", getRelPath())
+ .simpleTag("destDir", buildRelPath())
.simpleTag("mode", this.artifactsGenerationMode.getLabel())
.simpleTag("template", this.template)
.simpleTag("superTemplate", this.superTemplate)
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b30e5eb5/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 36ba514..68897ef 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
@@ -28,10 +28,18 @@ import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.VelocityEngine;
import org.slf4j.Logger;
-import java.io.*;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStreamWriter;
+import java.io.Writer;
import java.nio.file.Files;
import java.nio.file.Path;
-import java.util.*;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Properties;
import java.util.stream.Collectors;
public class ClassGenerationAction {
@@ -53,6 +61,9 @@ public class ClassGenerationAction {
public static final String SUPERCLASS_PREFIX = "_";
private static final String WILDCARD = "*";
+ /**
+ * @since 4.1
+ */
protected CgenConfiguration cgenConfiguration;
protected Logger logger;
@@ -197,6 +208,9 @@ public class ClassGenerationAction {
}
}
+ /**
+ * @since 4.1
+ */
public void prepareArtifacts() {
cgenConfiguration.getArtifacts().clear();
addEntities(cgenConfiguration.getEntities().stream()
@@ -439,6 +453,9 @@ public class ClassGenerationAction {
this.logger = logger;
}
+ /**
+ * @since 4.1
+ */
public CgenConfiguration getCgenConfiguration() {
return cgenConfiguration;
}
@@ -451,6 +468,9 @@ public class ClassGenerationAction {
this.context = context;
}
+ /**
+ * @since 4.1
+ */
public void setCgenConfiguration(CgenConfiguration cgenConfiguration) {
this.cgenConfiguration = cgenConfiguration;
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b30e5eb5/cayenne-cgen/src/main/java/org/apache/cayenne/gen/EmbeddableArtifact.java
----------------------------------------------------------------------
diff --git a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/EmbeddableArtifact.java b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/EmbeddableArtifact.java
index fec8dae..8e6ea43 100644
--- a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/EmbeddableArtifact.java
+++ b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/EmbeddableArtifact.java
@@ -18,10 +18,7 @@
****************************************************************/
package org.apache.cayenne.gen;
-import org.apache.cayenne.configuration.ConfigurationNodeVisitor;
import org.apache.cayenne.map.Embeddable;
-import org.apache.cayenne.util.XMLEncoder;
-import org.apache.cayenne.util.XMLSerializable;
import org.apache.velocity.VelocityContext;
/**
@@ -29,7 +26,7 @@ import org.apache.velocity.VelocityContext;
*
* @since 3.0
*/
-public class EmbeddableArtifact implements Artifact, XMLSerializable {
+public class EmbeddableArtifact implements Artifact {
protected Embeddable embeddable;
@@ -68,11 +65,4 @@ public class EmbeddableArtifact implements Artifact, XMLSerializable {
public void postInitContext(VelocityContext context) {
// noop - no special keys...
}
-
- @Override
- public void encodeAsXML(XMLEncoder encoder, ConfigurationNodeVisitor delegate) {
- encoder.start("embeddable")
- .simpleTag("name", embeddable.getClassName())
- .end();
- }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b30e5eb5/cayenne-cgen/src/main/java/org/apache/cayenne/gen/EntityArtifact.java
----------------------------------------------------------------------
diff --git a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/EntityArtifact.java b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/EntityArtifact.java
index b53ee46..3f70f53 100644
--- a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/EntityArtifact.java
+++ b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/EntityArtifact.java
@@ -19,10 +19,7 @@
package org.apache.cayenne.gen;
import org.apache.cayenne.BaseDataObject;
-import org.apache.cayenne.configuration.ConfigurationNodeVisitor;
import org.apache.cayenne.map.ObjEntity;
-import org.apache.cayenne.util.XMLEncoder;
-import org.apache.cayenne.util.XMLSerializable;
import org.apache.velocity.VelocityContext;
/**
@@ -30,7 +27,7 @@ import org.apache.velocity.VelocityContext;
*
* @since 3.0
*/
-public class EntityArtifact implements Artifact, XMLSerializable {
+public class EntityArtifact implements Artifact {
public static String ENTITY_UTILS_KEY = "entityUtils";
@@ -97,11 +94,4 @@ public class EntityArtifact implements Artifact, XMLSerializable {
context.put(ENTITY_UTILS_KEY, metadata);
}
-
- @Override
- public void encodeAsXML(XMLEncoder encoder, ConfigurationNodeVisitor delegate) {
- encoder.start("objEntity")
- .simpleTag("name", entity.getName())
- .end();
- }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b30e5eb5/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenConfigHandler.java
----------------------------------------------------------------------
diff --git a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenConfigHandler.java b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenConfigHandler.java
index 1f4dd5e..754aac6 100644
--- a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenConfigHandler.java
+++ b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenConfigHandler.java
@@ -21,9 +21,13 @@ package org.apache.cayenne.gen.xml;
import org.apache.cayenne.configuration.xml.DataChannelMetaData;
import org.apache.cayenne.configuration.xml.NamespaceAwareNestedTagHandler;
import org.apache.cayenne.gen.CgenConfiguration;
+import org.apache.cayenne.map.DataMap;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
+import java.net.URL;
+import java.nio.file.Files;
+import java.nio.file.Path;
import java.nio.file.Paths;
/**
@@ -271,9 +275,19 @@ public class CgenConfigHandler extends NamespaceAwareNestedTagHandler{
configuration = new CgenConfiguration();
loaderContext.addDataMapListener(dataMap -> {
configuration.setDataMap(dataMap);
+ configuration.setRootPath(buildRootPath(dataMap));
configuration.resolveExcludeEntities();
configuration.resolveExcludeEmbeddables();
CgenConfigHandler.this.metaData.add(dataMap, configuration);
});
}
+
+ private Path buildRootPath(DataMap dataMap) {
+ URL url = dataMap.getConfigurationSource().getURL();
+ Path resourcePath = Paths.get(url.getPath());
+ if(Files.isRegularFile(resourcePath)) {
+ resourcePath = resourcePath.getParent();
+ }
+ return resourcePath;
+ }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b30e5eb5/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenSaverDelegate.java
----------------------------------------------------------------------
diff --git a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenSaverDelegate.java b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenSaverDelegate.java
index aa008b1..b31a8b0 100644
--- a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenSaverDelegate.java
+++ b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenSaverDelegate.java
@@ -60,7 +60,7 @@ public class CgenSaverDelegate extends BaseSaverDelegate{
if(Files.isRegularFile(resourcePath)) {
resourcePath = resourcePath.getParent();
}
-
+ cgenConfiguration.setRootPath(resourcePath);
if(prevPath != null && resourcePath.compareTo(prevPath) != 0) {
Path relPath = resourcePath.relativize(prevPath);
cgenConfiguration.setRelPath(relPath);
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b30e5eb5/cayenne-cgen/src/main/java/org/apache/cayenne/tools/CayenneGeneratorEmbeddableFilterAction.java
----------------------------------------------------------------------
diff --git a/cayenne-cgen/src/main/java/org/apache/cayenne/tools/CayenneGeneratorEmbeddableFilterAction.java b/cayenne-cgen/src/main/java/org/apache/cayenne/tools/CayenneGeneratorEmbeddableFilterAction.java
index 00ab16a..dba3ab7 100644
--- a/cayenne-cgen/src/main/java/org/apache/cayenne/tools/CayenneGeneratorEmbeddableFilterAction.java
+++ b/cayenne-cgen/src/main/java/org/apache/cayenne/tools/CayenneGeneratorEmbeddableFilterAction.java
@@ -7,6 +7,11 @@ import org.apache.cayenne.map.Embeddable;
import java.util.ArrayList;
import java.util.Collection;
+/**
+ * Performs embeddable filtering to build a collection of embedables that should be used in
+ * class generation.
+ * @since 4.1
+ */
class CayenneGeneratorEmbeddableFilterAction {
private NameFilter nameFilter;
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b30e5eb5/cayenne-cgen/src/main/java/org/apache/cayenne/tools/CayenneGeneratorEntityFilterAction.java
----------------------------------------------------------------------
diff --git a/cayenne-cgen/src/main/java/org/apache/cayenne/tools/CayenneGeneratorEntityFilterAction.java b/cayenne-cgen/src/main/java/org/apache/cayenne/tools/CayenneGeneratorEntityFilterAction.java
index 7d53536..64a11e8 100644
--- a/cayenne-cgen/src/main/java/org/apache/cayenne/tools/CayenneGeneratorEntityFilterAction.java
+++ b/cayenne-cgen/src/main/java/org/apache/cayenne/tools/CayenneGeneratorEntityFilterAction.java
@@ -20,7 +20,6 @@ package org.apache.cayenne.tools;
import org.apache.cayenne.dbsync.filter.NameFilter;
import org.apache.cayenne.map.DataMap;
-import org.apache.cayenne.map.Embeddable;
import org.apache.cayenne.map.ObjEntity;
import java.net.MalformedURLException;
@@ -38,18 +37,6 @@ class CayenneGeneratorEntityFilterAction {
private NameFilter nameFilter;
private boolean client;
- Collection<Embeddable> getFilteredEmbeddables(DataMap mainDataMap) {
- Collection<Embeddable> embeddables = new ArrayList<>(mainDataMap.getEmbeddables());
-
- // filter out excluded entities...
-
- // note that unlike entity, embeddable is matched by class name as it doesn't
- // have a symbolic name...
- embeddables.removeIf(e -> !nameFilter.isIncluded(e.getClassName()));
-
- return embeddables;
- }
-
Collection<ObjEntity> getFilteredEntities(DataMap mainDataMap)
throws MalformedURLException {
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b30e5eb5/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/CgenTask.java
----------------------------------------------------------------------
diff --git a/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/CgenTask.java b/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/CgenTask.java
index 3b339df..bfafc1f 100644
--- a/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/CgenTask.java
+++ b/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/CgenTask.java
@@ -59,7 +59,8 @@ public class CgenTask extends BaseCayenneTask {
private File additionalMaps;
@Input
- private boolean client;
+ @Optional
+ private String client;
private File destDir;
@@ -75,6 +76,9 @@ public class CgenTask extends BaseCayenneTask {
@Optional
private String includeEntities;
+ /**
+ * @since 4.1
+ */
@Input
@Optional
private String excludeEmbeddables;
@@ -143,7 +147,9 @@ public class CgenTask extends BaseCayenneTask {
* Default is <code>false</code>.
* @since 4.1
*/
- private boolean createPKProperties;
+ @Input
+ @Optional
+ private String createPKProperties;
private String destDirName;
@@ -162,7 +168,6 @@ public class CgenTask extends BaseCayenneTask {
loaderAction.setMainDataMapFile(dataMapFile);
CayenneGeneratorEntityFilterAction filterEntityAction = new CayenneGeneratorEntityFilterAction();
- filterEntityAction.setClient(client);
filterEntityAction.setNameFilter(NamePatternMatcher.build(getLogger(), includeEntities, excludeEntities));
CayenneGeneratorEmbeddableFilterAction filterEmbeddableAction = new CayenneGeneratorEmbeddableFilterAction();
@@ -173,7 +178,7 @@ public class CgenTask extends BaseCayenneTask {
DataMap dataMap = loaderAction.getMainDataMap();
ClassGenerationAction generator = this.createGenerator(dataMap);
-
+ filterEntityAction.setClient(generator.getCgenConfiguration().isClient());
generator.setLogger(getLogger());
if(this.force || getProject().hasProperty("force")) {
@@ -183,8 +188,6 @@ public class CgenTask extends BaseCayenneTask {
if(!hasConfig() && useConfigFromDataMap) {
generator.prepareArtifacts();
- setDestDir(generator.getCgenConfiguration().getRelPath());
- generator.getCgenConfiguration().setRelPath(getDestDirFile().toPath());
} else {
generator.addEntities(filterEntityAction.getFilteredEntities(dataMap));
generator.addEmbeddables(filterEmbeddableAction.getFilteredEmbeddables(dataMap));
@@ -223,11 +226,6 @@ public class CgenTask extends BaseCayenneTask {
} else if(metaData != null && metaData.get(dataMap, CgenConfiguration.class) != null) {
useConfigFromDataMap = true;
cgenConfiguration = metaData.get(dataMap, CgenConfiguration.class);
- Path resourcePath = Paths.get(getDataMapFile().getPath());
- if(Files.isRegularFile(resourcePath)) {
- resourcePath = resourcePath.getParent();
- }
- cgenConfiguration.setRelPath(resourcePath.resolve(cgenConfiguration.getRelPath()));
return cgenConfiguration;
} else {
cgenConfiguration = new CgenConfiguration();
@@ -240,7 +238,7 @@ public class CgenTask extends BaseCayenneTask {
private CgenConfiguration cgenConfigFromPom(DataMap dataMap){
CgenConfiguration cgenConfiguration = new CgenConfiguration();
cgenConfiguration.setDataMap(dataMap);
- cgenConfiguration.setRelPath(getDestDirFile() != null ? getDestDirFile().getPath() : cgenConfiguration.getRelPath());
+ cgenConfiguration.setRelPath(getDestDirFile() != null ? getDestDirFile().toPath() : cgenConfiguration.getRelPath());
cgenConfiguration.setEncoding(encoding != null ? encoding : cgenConfiguration.getEncoding());
cgenConfiguration.setMakePairs(makePairs != null ? Boolean.valueOf(makePairs) : cgenConfiguration.isMakePairs());
cgenConfiguration.setArtifactsGenerationMode(mode != null ? mode : cgenConfiguration.getArtifactsGenerationMode());
@@ -255,28 +253,28 @@ public class CgenTask extends BaseCayenneTask {
cgenConfiguration.setCreatePropertyNames(createPropertyNames != null ? Boolean.valueOf(createPropertyNames) : cgenConfiguration.isCreatePropertyNames());
cgenConfiguration.setQueryTemplate(queryTemplate != null ? queryTemplate : cgenConfiguration.getQueryTemplate());
cgenConfiguration.setQuerySuperTemplate(querySuperTemplate != null ? querySuperTemplate : cgenConfiguration.getQuerySuperTemplate());
- cgenConfiguration.setCreatePKProperties(createPKProperties);
- cgenConfiguration.setClient(client);
+ cgenConfiguration.setCreatePKProperties(createPKProperties != null ? Boolean.valueOf(createPKProperties) : cgenConfiguration.isCreatePKProperties());
+ cgenConfiguration.setClient(client != null ? Boolean.valueOf(client) : cgenConfiguration.isClient());
if(!cgenConfiguration.isMakePairs()) {
if(template == null) {
- cgenConfiguration.setTemplate(client ? ClientClassGenerationAction.SINGLE_CLASS_TEMPLATE : ClassGenerationAction.SINGLE_CLASS_TEMPLATE);
+ cgenConfiguration.setTemplate(cgenConfiguration.isClient() ? ClientClassGenerationAction.SINGLE_CLASS_TEMPLATE : ClassGenerationAction.SINGLE_CLASS_TEMPLATE);
}
if(embeddableTemplate == null) {
cgenConfiguration.setEmbeddableTemplate(ClassGenerationAction.EMBEDDABLE_SINGLE_CLASS_TEMPLATE);
}
if(queryTemplate == null) {
- cgenConfiguration.setQueryTemplate(client ? ClientClassGenerationAction.DATAMAP_SINGLE_CLASS_TEMPLATE : ClassGenerationAction.DATAMAP_SINGLE_CLASS_TEMPLATE);
+ cgenConfiguration.setQueryTemplate(cgenConfiguration.isClient() ? ClientClassGenerationAction.DATAMAP_SINGLE_CLASS_TEMPLATE : ClassGenerationAction.DATAMAP_SINGLE_CLASS_TEMPLATE);
}
}
return cgenConfiguration;
}
private boolean hasConfig() {
- return destDir != null || destDirName != null || encoding != null || client || excludeEntities != null || excludeEmbeddables != null || includeEntities != null ||
+ return destDir != null || destDirName != null || encoding != null || client != null || excludeEntities != null || excludeEmbeddables != null || includeEntities != null ||
makePairs != null || mode != null || outputPattern != null || overwrite != null || superPkg != null ||
superTemplate != null || template != null || embeddableTemplate != null || embeddableSuperTemplate != null ||
usePkgPath != null || createPropertyNames != null || force || queryTemplate != null ||
- querySuperTemplate != null || createPKProperties;
+ querySuperTemplate != null || createPKProperties != null;
}
@OutputDirectory
@@ -364,11 +362,11 @@ public class CgenTask extends BaseCayenneTask {
}
public boolean isClient() {
- return client;
+ return Boolean.valueOf(client);
}
public void setClient(boolean client) {
- this.client = client;
+ this.client = String.valueOf(client);
}
public void client(boolean client) {
@@ -419,6 +417,10 @@ public class CgenTask extends BaseCayenneTask {
this.excludeEmbeddables = excludeEmbeddables;
}
+ /**
+ * @since 4.1
+ * @param excludeEmbeddables
+ */
public void excludeEmbeddables(String excludeEmbeddables) {
setExcludeEmbeddables(excludeEmbeddables);
}
@@ -568,7 +570,7 @@ public class CgenTask extends BaseCayenneTask {
}
public void setCreatePKProperties(boolean createPKProperties) {
- this.createPKProperties = createPKProperties;
+ this.createPKProperties = String.valueOf(createPKProperties);
}
public void createPKProperties(boolean createPKProperties) {
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b30e5eb5/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/BaseTaskIT.java
----------------------------------------------------------------------
diff --git a/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/BaseTaskIT.java b/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/BaseTaskIT.java
index 91118ca..b5c4a08 100644
--- a/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/BaseTaskIT.java
+++ b/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/BaseTaskIT.java
@@ -21,6 +21,7 @@ package org.apache.cayenne.tools;
import java.io.File;
import java.io.IOException;
+import java.net.URISyntaxException;
import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.nio.file.Path;
@@ -51,6 +52,7 @@ public class BaseTaskIT {
protected GradleRunner createRunner(String projectName, String... args) throws Exception {
prepareBuildScript(projectName);
+ prepareDataMap(args);
List<String> gradleArguments = new ArrayList<>();
gradleArguments.addAll(Arrays.asList(args));
@@ -67,4 +69,17 @@ public class BaseTaskIT {
Path dst = FileSystems.getDefault().getPath(projectDir.getAbsolutePath(), "build.gradle");
Files.copy(src, dst, StandardCopyOption.REPLACE_EXISTING);
}
+
+ private void prepareDataMap(String... args) throws Exception {
+ String pattern = "-PdataMap=";
+ for(String arg : args) {
+ if(arg.startsWith(pattern)) {
+ String path = arg.substring(pattern.length());
+ Path src = new File(getClass().getResource(path).toURI()).toPath();
+ Path dst = FileSystems.getDefault().getPath(projectDir.getAbsolutePath(), path);
+ Files.copy(src, dst, StandardCopyOption.REPLACE_EXISTING);
+ }
+ }
+
+ }
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b30e5eb5/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/CgenTaskIT.java
----------------------------------------------------------------------
diff --git a/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/CgenTaskIT.java b/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/CgenTaskIT.java
index b41c1d2..c3879ac 100644
--- a/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/CgenTaskIT.java
+++ b/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/CgenTaskIT.java
@@ -45,7 +45,7 @@ public class CgenTaskIT extends BaseTaskIT {
GradleRunner runner = createRunner(
"cgen_default_config",
"cgen",
- "-PdataMap=" + URLDecoder.decode(getClass().getResource("test_datamap.map.xml").getFile(), "UTF-8")
+ "-PdataMap=test_datamap.map.xml"
);
BuildResult result = runner.forwardOutput().build();
@@ -68,7 +68,7 @@ public class CgenTaskIT extends BaseTaskIT {
GradleRunner runner = createRunner(
"cgen_custom_config",
"cgen",
- "-PdataMap=" + URLDecoder.decode(getClass().getResource("test_datamap.map.xml").getFile(), "UTF-8")
+ "-PdataMap=test_datamap.map.xml"
);
BuildResult result = runner.build();
@@ -92,11 +92,11 @@ public class CgenTaskIT extends BaseTaskIT {
}
@Test
- public void cgenWithConfig() throws Exception {
+ public void cgenWithConfigInDm() throws Exception {
GradleRunner runner = createRunner(
"cgen_with_config",
"cgen",
- "-PdataMap=" + URLDecoder.decode(getClass().getResource("cgenConfig.map.xml").getFile(), "UTF-8")
+ "-PdataMap=cgen_with_config.map.xml"
);
BuildResult result = runner.forwardOutput().build();
@@ -121,11 +121,11 @@ public class CgenTaskIT extends BaseTaskIT {
}
@Test
- public void testWithConfigs() throws Exception {
+ public void testWithConfigsInDmAndPom() throws Exception {
GradleRunner runner = createRunner(
"cgen_with_configs",
"cgen",
- "-PdataMap=" + URLDecoder.decode(getClass().getResource("cgenMap.map.xml").getFile(), "UTF-8")
+ "-PdataMap=cgenMap.map.xml"
);
BuildResult result = runner.forwardOutput().build();
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b30e5eb5/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/DbGenerateTaskIT.java
----------------------------------------------------------------------
diff --git a/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/DbGenerateTaskIT.java b/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/DbGenerateTaskIT.java
index 87c1194..c88f1f7 100644
--- a/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/DbGenerateTaskIT.java
+++ b/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/DbGenerateTaskIT.java
@@ -58,7 +58,7 @@ public class DbGenerateTaskIT extends BaseTaskIT {
"cdbgen_simple",
"cdbgen",
"-PdbUrl=" + dbUrl,
- "-PdataMap=" + URLDecoder.decode(getClass().getResource("test_datamap.map.xml").getFile(), "UTF-8"),
+ "-PdataMap=test_datamap.map.xml",
"--info"
);
@@ -84,7 +84,7 @@ public class DbGenerateTaskIT extends BaseTaskIT {
GradleRunner runner = createRunner(
"cdbgen_custom",
"customCdbgen",
- "-PdataMap=" + URLDecoder.decode(getClass().getResource("test_datamap.map.xml").getFile(), "UTF-8"),
+ "-PdataMap=test_datamap.map.xml",
"--info"
);
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b30e5eb5/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/GradlePluginIT.java
----------------------------------------------------------------------
diff --git a/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/GradlePluginIT.java b/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/GradlePluginIT.java
index 199c0a6..60f5749 100644
--- a/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/GradlePluginIT.java
+++ b/cayenne-gradle-plugin/src/test/java/org/apache/cayenne/tools/GradlePluginIT.java
@@ -43,7 +43,7 @@ public class GradlePluginIT extends BaseTaskIT {
GradleRunner runner = createRunner(
"cgen_default_config",
"cgen",
- "-PdataMap=" + URLDecoder.decode(getClass().getResource("test_datamap.map.xml").getFile(), "UTF-8")
+ "-PdataMap=test_datamap.map.xml"
);
runner.withGradleVersion(version);
runner.build();
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b30e5eb5/cayenne-gradle-plugin/src/test/resources/org/apache/cayenne/tools/cgenConfig.map.xml
----------------------------------------------------------------------
diff --git a/cayenne-gradle-plugin/src/test/resources/org/apache/cayenne/tools/cgenConfig.map.xml b/cayenne-gradle-plugin/src/test/resources/org/apache/cayenne/tools/cgenConfig.map.xml
deleted file mode 100644
index e3bfe55..0000000
--- a/cayenne-gradle-plugin/src/test/resources/org/apache/cayenne/tools/cgenConfig.map.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<data-map xmlns="http://cayenne.apache.org/schema/10/modelMap"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://cayenne.apache.org/schema/10/modelMap http://cayenne.apache.org/schema/10/modelMap.xsd"
- project-version="10">
- <embeddable className="Embeddable"/>
- <obj-entity name="ObjEntity" className="ObjEntity"/>
- <obj-entity name="ObjEntity1" className="ObjEntity1"/>
- <cgen xmlns="http://cayenne.apache.org/schema/10/cgen">
- <destDir>./customDirectory1</destDir>
- <excludeEntities>ObjEntity</excludeEntities>
- <excludeEmbeddables>Embeddable</excludeEmbeddables>
- <mode>entity</mode>
- <template>templates/v4_1/subclass.vm</template>
- <superTemplate>templates/v4_1/superclass.vm</superTemplate>
- <outputPattern>*.txt</outputPattern>
- <makePairs>false</makePairs>
- <usePkgPath>true</usePkgPath>
- <overwrite>false</overwrite>
- <createPropertyNames>false</createPropertyNames>
- </cgen>
-</data-map>
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b30e5eb5/cayenne-gradle-plugin/src/test/resources/org/apache/cayenne/tools/cgen_with_config.map.xml
----------------------------------------------------------------------
diff --git a/cayenne-gradle-plugin/src/test/resources/org/apache/cayenne/tools/cgen_with_config.map.xml b/cayenne-gradle-plugin/src/test/resources/org/apache/cayenne/tools/cgen_with_config.map.xml
new file mode 100644
index 0000000..e3bfe55
--- /dev/null
+++ b/cayenne-gradle-plugin/src/test/resources/org/apache/cayenne/tools/cgen_with_config.map.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<data-map xmlns="http://cayenne.apache.org/schema/10/modelMap"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://cayenne.apache.org/schema/10/modelMap http://cayenne.apache.org/schema/10/modelMap.xsd"
+ project-version="10">
+ <embeddable className="Embeddable"/>
+ <obj-entity name="ObjEntity" className="ObjEntity"/>
+ <obj-entity name="ObjEntity1" className="ObjEntity1"/>
+ <cgen xmlns="http://cayenne.apache.org/schema/10/cgen">
+ <destDir>./customDirectory1</destDir>
+ <excludeEntities>ObjEntity</excludeEntities>
+ <excludeEmbeddables>Embeddable</excludeEmbeddables>
+ <mode>entity</mode>
+ <template>templates/v4_1/subclass.vm</template>
+ <superTemplate>templates/v4_1/superclass.vm</superTemplate>
+ <outputPattern>*.txt</outputPattern>
+ <makePairs>false</makePairs>
+ <usePkgPath>true</usePkgPath>
+ <overwrite>false</overwrite>
+ <createPropertyNames>false</createPropertyNames>
+ </cgen>
+</data-map>
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b30e5eb5/cayenne-project/src/main/java/org/apache/cayenne/project/CompoundSaverDelegate.java
----------------------------------------------------------------------
diff --git a/cayenne-project/src/main/java/org/apache/cayenne/project/CompoundSaverDelegate.java b/cayenne-project/src/main/java/org/apache/cayenne/project/CompoundSaverDelegate.java
index 4745e38..7d446e3 100644
--- a/cayenne-project/src/main/java/org/apache/cayenne/project/CompoundSaverDelegate.java
+++ b/cayenne-project/src/main/java/org/apache/cayenne/project/CompoundSaverDelegate.java
@@ -21,7 +21,18 @@ package org.apache.cayenne.project;
import org.apache.cayenne.configuration.DataChannelDescriptor;
import org.apache.cayenne.configuration.DataNodeDescriptor;
-import org.apache.cayenne.map.*;
+import org.apache.cayenne.map.DataMap;
+import org.apache.cayenne.map.DbAttribute;
+import org.apache.cayenne.map.DbEntity;
+import org.apache.cayenne.map.DbRelationship;
+import org.apache.cayenne.map.Embeddable;
+import org.apache.cayenne.map.EmbeddableAttribute;
+import org.apache.cayenne.map.ObjAttribute;
+import org.apache.cayenne.map.ObjEntity;
+import org.apache.cayenne.map.ObjRelationship;
+import org.apache.cayenne.map.Procedure;
+import org.apache.cayenne.map.ProcedureParameter;
+import org.apache.cayenne.map.QueryDescriptor;
import org.apache.cayenne.project.extension.SaverDelegate;
import org.apache.cayenne.resource.Resource;
import org.apache.cayenne.util.XMLEncoder;
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b30e5eb5/cayenne-server/src/main/java/org/apache/cayenne/util/Util.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/util/Util.java b/cayenne-server/src/main/java/org/apache/cayenne/util/Util.java
index de280b4..08941b8 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/util/Util.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/util/Util.java
@@ -26,20 +26,45 @@ import org.apache.cayenne.Persistent;
import org.apache.cayenne.di.AdhocObjectFactory;
import org.apache.cayenne.di.spi.DefaultAdhocObjectFactory;
import org.apache.cayenne.di.spi.DefaultClassLoaderManager;
-import org.apache.cayenne.reflect.*;
+import org.apache.cayenne.reflect.ArcProperty;
+import org.apache.cayenne.reflect.AttributeProperty;
+import org.apache.cayenne.reflect.PropertyVisitor;
+import org.apache.cayenne.reflect.ToManyProperty;
+import org.apache.cayenne.reflect.ToOneProperty;
import org.w3c.dom.Document;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
-import javax.xml.parsers.*;
-import java.io.*;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.parsers.SAXParser;
+import javax.xml.parsers.SAXParserFactory;
+import java.io.BufferedReader;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.Serializable;
import java.lang.reflect.Member;
import java.lang.reflect.Modifier;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.sql.SQLException;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.StringTokenizer;
import java.util.regex.Pattern;
/**
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b30e5eb5/cayenne-server/src/main/resources/org/apache/cayenne/schema/10/cgen.xsd
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/resources/org/apache/cayenne/schema/10/cgen.xsd b/cayenne-server/src/main/resources/org/apache/cayenne/schema/10/cgen.xsd
new file mode 100644
index 0000000..7b26e92
--- /dev/null
+++ b/cayenne-server/src/main/resources/org/apache/cayenne/schema/10/cgen.xsd
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ~ Licensed to the Apache Software Foundation (ASF) under one
+ ~ or more contributor license agreements. See the NOTICE file
+ ~ distributed with this work for additional information
+ ~ regarding copyright ownership. The ASF licenses this file
+ ~ to you under the Apache License, Version 2.0 (the
+ ~ "License"); you may not use this file except in compliance
+ ~ with the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing,
+ ~ software distributed under the License is distributed on an
+ ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ ~ KIND, either express or implied. See the License for the
+ ~ specific language governing permissions and limitations
+ ~ under the License.
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-->
+
+<xs:schema targetNamespace="http://cayenne.apache.org/schema/10/cgen"
+ elementFormDefault="qualified" version="10"
+ xmlns:cay="http://cayenne.apache.org/schema/10/cgen"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema">
+
+ <xs:element name="cgen">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="excludeEntities" minOccurs="0" type="xs:string"/>
+ <xs:element name="excludeEmbeddables" minOccurs="0" type="xs:string"/>
+ <xs:element name="destDir" minOccurs="0" type="xs:string"/>
+ <xs:element name="mode" minOccurs="0" type="xs:string"/>
+ <xs:element name="template" minOccurs="0" type="xs:string"/>
+ <xs:element name="superTemplate" minOccurs="0" type="xs:string"/>
+ <xs:element name="outputPattern" minOccurs="0" type="xs:string"/>
+ <xs:element name="makePairs" minOccurs="0" type="xs:boolean"/>
+ <xs:element name="skipRelationshipsLoading" minOccurs="0" type="xs:boolean"/>
+ <xs:element name="usePkgPath" minOccurs="0" type="xs:boolean"/>
+ <xs:element name="overwrite" minOccurs="0" type="xs:boolean"/>
+ <xs:element name="createPropertyNames" minOccurs="0" type="xs:boolean"/>
+ <xs:element name="createPKProperties" minOccurs="0" type="xs:boolean"/>
+ <xs:element name="client" minOccurs="0" type="xs:boolean"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+
+</xs:schema>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b30e5eb5/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 e936024..647f363 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
@@ -39,10 +39,6 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
-import java.net.URL;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.Paths;
/**
* Maven mojo to perform class generation from data cgenConfiguration. This class is an Maven
@@ -65,13 +61,19 @@ public class CayenneGeneratorMojo extends AbstractMojo {
* Whether we are generating classes for the client tier in a Remote Object
* Persistence application. Default is <code>false</code>.
*/
- @Parameter(defaultValue = "false")
- private boolean client;
+ @Parameter
+ private Boolean client;
/**
- * Destination directory for Java classes (ignoring their package names).
+ * Default destination directory for Java classes (ignoring their package names).
*/
@Parameter(defaultValue = "${project.build.sourceDirectory}")
+ private File defaultDir;
+
+ /**
+ * Destination directory for Java classes (ignoring their package names).
+ */
+ @Parameter
private File destDir;
/**
@@ -99,6 +101,7 @@ public class CayenneGeneratorMojo extends AbstractMojo {
private String includeEntities;
/**
+ * @since 4.1
* Embeddables (expressed as a perl5 regex) to exclude from template
* generation. (Default is to include all embeddables in the DataMap).
*/
@@ -218,8 +221,8 @@ public class CayenneGeneratorMojo extends AbstractMojo {
* Default is <code>false</code>.
* @since 4.1
*/
- @Parameter(defaultValue = "false")
- private boolean createPKProperties;
+ @Parameter
+ private Boolean createPKProperties;
private transient Injector injector;
@@ -239,7 +242,6 @@ public class CayenneGeneratorMojo extends AbstractMojo {
loaderAction.setMainDataMapFile(map);
CayenneGeneratorEntityFilterAction filterEntityAction = new CayenneGeneratorEntityFilterAction();
- filterEntityAction.setClient(client);
filterEntityAction.setNameFilter(NamePatternMatcher.build(logger, includeEntities, excludeEntities));
CayenneGeneratorEmbeddableFilterAction filterEmbeddableAction = new CayenneGeneratorEmbeddableFilterAction();
@@ -249,8 +251,8 @@ public class CayenneGeneratorMojo extends AbstractMojo {
loaderAction.setAdditionalDataMapFiles(convertAdditionalDataMaps());
DataMap dataMap = loaderAction.getMainDataMap();
-
ClassGenerationAction generator = createGenerator(dataMap);
+ filterEntityAction.setClient(generator.getCgenConfiguration().isClient());
generator.setLogger(logger);
if(force) {
@@ -265,7 +267,6 @@ public class CayenneGeneratorMojo extends AbstractMojo {
generator.addEmbeddables(filterEmbeddableAction.getFilteredEmbeddables(dataMap));
generator.addQueries(dataMap.getQueryDescriptors());
}
- URL dataName = dataMap.getConfigurationSource().getURL();
generator.execute();
} catch (Exception e) {
throw new MojoExecutionException("Error generating classes: ", e);
@@ -291,11 +292,11 @@ public class CayenneGeneratorMojo extends AbstractMojo {
}
private boolean hasConfig() {
- return encoding != null || client || excludeEntities != null || excludeEmbeddables != null || includeEntities != null ||
+ return destDir != null || encoding != null || client != null || excludeEntities != null || excludeEmbeddables != null || includeEntities != null ||
makePairs != null || mode != null || outputPattern != null || overwrite != null || superPkg != null ||
superTemplate != null || template != null || embeddableTemplate != null || embeddableSuperTemplate != null ||
usePkgPath != null || createPropertyNames != null || force || queryTemplate != null ||
- querySuperTemplate != null || createPKProperties;
+ querySuperTemplate != null || createPKProperties != null;
}
/**
@@ -317,16 +318,11 @@ public class CayenneGeneratorMojo extends AbstractMojo {
return cgenConfigFromPom(dataMap);
} else if(cgenConfiguration != null) {
useConfigFromDataMap = true;
- Path resourcePath = Paths.get(map.getPath());
- if(Files.isRegularFile(resourcePath)) {
- resourcePath = resourcePath.getParent();
- }
- cgenConfiguration.setRelPath(resourcePath.resolve(cgenConfiguration.getRelPath()));
return cgenConfiguration;
} else {
cgenConfiguration = new CgenConfiguration();
cgenConfiguration.setDataMap(dataMap);
- cgenConfiguration.setRelPath(destDir.getPath());
+ cgenConfiguration.setRelPath(defaultDir.getPath());
return cgenConfiguration;
}
}
@@ -334,7 +330,7 @@ public class CayenneGeneratorMojo extends AbstractMojo {
private CgenConfiguration cgenConfigFromPom(DataMap dataMap){
CgenConfiguration cgenConfiguration = new CgenConfiguration();
cgenConfiguration.setDataMap(dataMap);
- cgenConfiguration.setRelPath(destDir != null ? destDir.getPath() : cgenConfiguration.getRelPath());
+ cgenConfiguration.setRelPath(destDir != null ? destDir.getPath() : defaultDir.getPath());
cgenConfiguration.setEncoding(encoding != null ? encoding : cgenConfiguration.getEncoding());
cgenConfiguration.setMakePairs(makePairs != null ? makePairs : cgenConfiguration.isMakePairs());
cgenConfiguration.setArtifactsGenerationMode(mode != null ? mode : cgenConfiguration.getArtifactsGenerationMode());
@@ -349,17 +345,17 @@ public class CayenneGeneratorMojo extends AbstractMojo {
cgenConfiguration.setCreatePropertyNames(createPropertyNames != null ? createPropertyNames : cgenConfiguration.isCreatePropertyNames());
cgenConfiguration.setQueryTemplate(queryTemplate != null ? queryTemplate : cgenConfiguration.getQueryTemplate());
cgenConfiguration.setQuerySuperTemplate(querySuperTemplate != null ? querySuperTemplate : cgenConfiguration.getQuerySuperTemplate());
- cgenConfiguration.setCreatePKProperties(createPKProperties);
- cgenConfiguration.setClient(client);
+ cgenConfiguration.setCreatePKProperties(createPKProperties != null ? createPKProperties : cgenConfiguration.isCreatePKProperties());
+ cgenConfiguration.setClient(client != null ? client : cgenConfiguration.isClient());
if(!cgenConfiguration.isMakePairs()) {
if(template == null) {
- cgenConfiguration.setTemplate(client ? ClientClassGenerationAction.SINGLE_CLASS_TEMPLATE : ClassGenerationAction.SINGLE_CLASS_TEMPLATE);
+ cgenConfiguration.setTemplate(cgenConfiguration.isClient() ? ClientClassGenerationAction.SINGLE_CLASS_TEMPLATE : ClassGenerationAction.SINGLE_CLASS_TEMPLATE);
}
if(embeddableTemplate == null) {
cgenConfiguration.setEmbeddableTemplate(ClassGenerationAction.EMBEDDABLE_SINGLE_CLASS_TEMPLATE);
}
if(queryTemplate == null) {
- cgenConfiguration.setQueryTemplate(client ? ClientClassGenerationAction.DATAMAP_SINGLE_CLASS_TEMPLATE : ClassGenerationAction.DATAMAP_SINGLE_CLASS_TEMPLATE);
+ cgenConfiguration.setQueryTemplate(cgenConfiguration.isClient() ? ClientClassGenerationAction.DATAMAP_SINGLE_CLASS_TEMPLATE : ClassGenerationAction.DATAMAP_SINGLE_CLASS_TEMPLATE);
}
}
return cgenConfiguration;
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b30e5eb5/maven-plugins/cayenne-maven-plugin/src/test/java/org/apache/cayenne/tools/CayenneGeneratorMojoTest.java
----------------------------------------------------------------------
diff --git a/maven-plugins/cayenne-maven-plugin/src/test/java/org/apache/cayenne/tools/CayenneGeneratorMojoTest.java b/maven-plugins/cayenne-maven-plugin/src/test/java/org/apache/cayenne/tools/CayenneGeneratorMojoTest.java
index edad490..8454c32 100644
--- a/maven-plugins/cayenne-maven-plugin/src/test/java/org/apache/cayenne/tools/CayenneGeneratorMojoTest.java
+++ b/maven-plugins/cayenne-maven-plugin/src/test/java/org/apache/cayenne/tools/CayenneGeneratorMojoTest.java
@@ -90,7 +90,7 @@ public class CayenneGeneratorMojoTest extends AbstractMojoTestCase {
assertFalse(notIncludedEmbeddable.exists());
}
- public void testDataMapPomCgen() throws Exception {
+ public void testCgenWithDmAndPomConfigs() throws Exception {
File pom = getTestFile("src/test/resources/cgen/project-to-test/datamap-and-pom.xml");
assertNotNull(pom);
assertTrue(pom.exists());
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b30e5eb5/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerFrame.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerFrame.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerFrame.java
index 1af72ba..4ca815b 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerFrame.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerFrame.java
@@ -19,12 +19,63 @@
package org.apache.cayenne.modeler;
-import org.apache.cayenne.modeler.action.*;
+import org.apache.cayenne.modeler.action.AboutAction;
+import org.apache.cayenne.modeler.action.ActionManager;
+import org.apache.cayenne.modeler.action.ConfigurePreferencesAction;
+import org.apache.cayenne.modeler.action.CopyAction;
+import org.apache.cayenne.modeler.action.CreateDataMapAction;
+import org.apache.cayenne.modeler.action.CreateDbEntityAction;
+import org.apache.cayenne.modeler.action.CreateEmbeddableAction;
+import org.apache.cayenne.modeler.action.CreateNodeAction;
+import org.apache.cayenne.modeler.action.CreateObjEntityAction;
+import org.apache.cayenne.modeler.action.CreateProcedureAction;
+import org.apache.cayenne.modeler.action.CreateQueryAction;
+import org.apache.cayenne.modeler.action.CutAction;
+import org.apache.cayenne.modeler.action.DbEntitySyncAction;
+import org.apache.cayenne.modeler.action.DocumentationAction;
+import org.apache.cayenne.modeler.action.ExitAction;
+import org.apache.cayenne.modeler.action.FindAction;
+import org.apache.cayenne.modeler.action.GenerateCodeAction;
+import org.apache.cayenne.modeler.action.GenerateDBAction;
+import org.apache.cayenne.modeler.action.ImportDataMapAction;
+import org.apache.cayenne.modeler.action.ImportEOModelAction;
+import org.apache.cayenne.modeler.action.InferRelationshipsAction;
+import org.apache.cayenne.modeler.action.MigrateAction;
+import org.apache.cayenne.modeler.action.NavigateBackwardAction;
+import org.apache.cayenne.modeler.action.NavigateForwardAction;
+import org.apache.cayenne.modeler.action.NewProjectAction;
+import org.apache.cayenne.modeler.action.ObjEntitySyncAction;
+import org.apache.cayenne.modeler.action.OpenProjectAction;
+import org.apache.cayenne.modeler.action.PasteAction;
+import org.apache.cayenne.modeler.action.ProjectAction;
+import org.apache.cayenne.modeler.action.RedoAction;
+import org.apache.cayenne.modeler.action.RemoveAction;
+import org.apache.cayenne.modeler.action.RevertAction;
+import org.apache.cayenne.modeler.action.SaveAction;
+import org.apache.cayenne.modeler.action.SaveAsAction;
+import org.apache.cayenne.modeler.action.ShowLogConsoleAction;
+import org.apache.cayenne.modeler.action.UndoAction;
+import org.apache.cayenne.modeler.action.ValidateAction;
import org.apache.cayenne.modeler.action.dbimport.ReverseEngineeringToolMenuAction;
import org.apache.cayenne.modeler.dialog.LogConsole;
import org.apache.cayenne.modeler.dialog.welcome.WelcomeScreen;
import org.apache.cayenne.modeler.editor.EditorView;
-import org.apache.cayenne.modeler.event.*;
+import org.apache.cayenne.modeler.event.DataMapDisplayEvent;
+import org.apache.cayenne.modeler.event.DataMapDisplayListener;
+import org.apache.cayenne.modeler.event.DataNodeDisplayEvent;
+import org.apache.cayenne.modeler.event.DataNodeDisplayListener;
+import org.apache.cayenne.modeler.event.DbEntityDisplayListener;
+import org.apache.cayenne.modeler.event.EmbeddableDisplayEvent;
+import org.apache.cayenne.modeler.event.EmbeddableDisplayListener;
+import org.apache.cayenne.modeler.event.EntityDisplayEvent;
+import org.apache.cayenne.modeler.event.MultipleObjectsDisplayEvent;
+import org.apache.cayenne.modeler.event.MultipleObjectsDisplayListener;
+import org.apache.cayenne.modeler.event.ObjEntityDisplayListener;
+import org.apache.cayenne.modeler.event.ProcedureDisplayEvent;
+import org.apache.cayenne.modeler.event.ProcedureDisplayListener;
+import org.apache.cayenne.modeler.event.QueryDisplayEvent;
+import org.apache.cayenne.modeler.event.QueryDisplayListener;
+import org.apache.cayenne.modeler.event.RecentFileListListener;
import org.apache.cayenne.modeler.pref.ComponentGeometry;
import org.apache.cayenne.modeler.util.ModelerUtil;
import org.apache.cayenne.modeler.util.RecentFileMenu;
@@ -32,8 +83,28 @@ import org.apache.cayenne.swing.components.MainToolBar;
import org.apache.cayenne.swing.components.TopBorder;
import org.slf4j.LoggerFactory;
-import javax.swing.*;
-import java.awt.*;
+import javax.swing.Action;
+import javax.swing.BorderFactory;
+import javax.swing.Box;
+import javax.swing.BoxLayout;
+import javax.swing.JButton;
+import javax.swing.JCheckBoxMenuItem;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JMenu;
+import javax.swing.JMenuBar;
+import javax.swing.JPanel;
+import javax.swing.JSplitPane;
+import javax.swing.JTextField;
+import javax.swing.JToolBar;
+import java.awt.AWTEvent;
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.Font;
+import java.awt.Toolkit;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.awt.event.KeyEvent;
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b30e5eb5/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClassesTabController.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClassesTabController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClassesTabController.java
deleted file mode 100644
index 8df07df..0000000
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClassesTabController.java
+++ /dev/null
@@ -1,203 +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;
-//
-//import org.apache.cayenne.map.DataMap;
-//import org.apache.cayenne.modeler.util.CayenneController;
-//import org.apache.cayenne.swing.BindingBuilder;
-//import org.apache.cayenne.swing.ImageRendererColumn;
-//import org.apache.cayenne.swing.ObjectBinding;
-//import org.apache.cayenne.swing.TableBindingBuilder;
-//
-//import javax.swing.JCheckBox;
-//import javax.swing.JLabel;
-//import javax.swing.JTable;
-//import java.awt.Component;
-//import java.util.ArrayList;
-//import java.util.Collection;
-//import java.util.HashMap;
-//import java.util.Map;
-//import java.util.List;
-//
-//public class ClassesTabController extends CayenneController {
-//
-// public static final String GENERATE_PROPERTY = "generate";
-//
-// protected ClassesTabPanel view;
-//
-// private Map<DataMap, ObjectBinding> objectBindings;
-//
-// protected Collection<DataMap> dataMaps;
-//
-// protected Map<DataMap, List<Object>> objectList;
-//
-// private List<Object> currentCollection;
-//
-// public ClassesTabController(CodeGeneratorControllerBase parent, Collection<DataMap> dataMaps) {
-// super(parent);
-//
-// currentCollection = new ArrayList<>();
-//
-// this.objectList = new HashMap<>();
-// for(DataMap dataMap : dataMaps) {
-// List<Object> list = new ArrayList<>();
-// list.add(dataMap);
-// list.addAll(dataMap.getObjEntities());
-// list.addAll(dataMap.getEmbeddables());
-// objectList.put(dataMap, list);
-// }
-//
-// this.objectBindings = new HashMap<>();
-// this.dataMaps = dataMaps;
-// this.view = new ClassesTabPanel(dataMaps);
-//
-// initBindings();
-// }
-//
-// protected CodeGeneratorControllerBase getParentController() {
-// return (CodeGeneratorControllerBase) getParent();
-// }
-//
-// public Component getView() {
-// return view;
-// }
-//
-// protected void initBindings() {
-//
-// BindingBuilder builder = new BindingBuilder(
-// getApplication().getBindingFactory(),
-// this);
-//
-// builder.bindToAction(view.getCheckAll(), "checkAllAction()");
-//
-// TableBindingBuilder tableBuilder = new TableBindingBuilder(builder);
-//
-// tableBuilder.addColumn(
-// "",
-// "parent.setCurrentClass(#item), selected",
-// Boolean.class,
-// true,
-// Boolean.TRUE);
-//
-// tableBuilder.addColumn(
-// "Class",
-// "parent.getItemName(#item)",
-// JLabel.class,
-// false,
-// "XXXXXXXXXXXXXX");
-//
-// tableBuilder.addColumn(
-// "Comments, Warnings",
-// "parent.getProblem(#item)",
-// String.class,
-// false,
-// "XXXXXXXXXXXXXXXXXXXXXXXXXXX");
-//
-// for(DataMap dataMap : dataMaps) {
-// JTable table = view.getDataMapTables().get(dataMap);
-// if(table != null) {
-// currentCollection = objectList.get(dataMap);
-// objectBindings.put(dataMap, tableBuilder.bindToTable(table, "currentCollection"));
-// table.getColumnModel().getColumn(1).setCellRenderer(new ImageRendererColumn());
-// }
-// JCheckBox checkBox = view.getDataMapJCheckBoxMap().get(dataMap);
-// if(checkBox != null) {
-// checkBox.addActionListener(val -> checkDataMap(dataMap, ((JCheckBox)val.getSource()).isSelected()));
-// }
-// }
-// }
-//
-// public List<Object> getCurrentCollection() {
-// return currentCollection;
-// }
-//
-// public boolean isSelected() {
-// return getParentController().isSelected();
-// }
-//
-// public void setSelected(boolean selected) {
-// getParentController().setSelected(selected);
-// classSelectedAction();
-//
-// for(DataMap dataMap : dataMaps) {
-// if(view.isAllCheckBoxesFromDataMapSelected(dataMap)) {
-// view.getDataMapJCheckBoxMap().get(dataMap).setSelected(true);
-// } else {
-// view.getDataMapJCheckBoxMap().get(dataMap).setSelected(false);
-// }
-// }
-// }
-//
-// /**
-// * A callback action that updates the state of Select All checkbox.
-// */
-// public void classSelectedAction() {
-// int selectedCount = getParentController().getSelectedEntitiesSize()
-// + getParentController().getSelectedEmbeddablesSize()
-// + getParentController().getSelectedDataMapsSize();
-//
-// if (selectedCount == 0) {
-// view.getCheckAll().setSelected(false);
-// }
-// else if (selectedCount == getParentController().getClasses().size()) {
-// view.getCheckAll().setSelected(true);
-// }
-// }
-//
-// /**
-// * An action that updates entity check boxes in response to the Select All state
-// * change.
-// */
-// public void checkAllAction() {
-// if (getParentController().updateSelection(view.getCheckAll().isSelected() ? o -> true : o -> false)) {
-// dataMaps.forEach(dataMap -> {
-// ObjectBinding binding = objectBindings.get(dataMap);
-// if(binding != null) {
-// currentCollection = objectList.get(dataMap);
-// binding.updateView();
-// }
-// });
-// }
-// }
-//
-// private void checkDataMap(DataMap dataMap, boolean selected) {
-// if (getParentController().updateDataMapSelection(selected ? o -> true : o -> false, dataMap)){
-// ObjectBinding binding = objectBindings.get(dataMap);
-// if(binding != null) {
-// currentCollection = objectList.get(dataMap);
-// binding.updateView();
-// }
-// if(isAllMapsSelected()) {
-// view.getCheckAll().setSelected(true);
-// }
-// }
-// }
-//
-// private boolean isAllMapsSelected() {
-// for(DataMap dataMap : dataMaps) {
-// if(view.getDataMapJCheckBoxMap().get(dataMap) != null) {
-// if(!view.getDataMapJCheckBoxMap().get(dataMap).isSelected()) {
-// return false;
-// }
-// }
-// }
-// return true;
-// }
-//}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b30e5eb5/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClassesTabPanel.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClassesTabPanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClassesTabPanel.java
deleted file mode 100644
index 5d7e895..0000000
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClassesTabPanel.java
+++ /dev/null
@@ -1,141 +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;
-//
-//import org.apache.cayenne.map.DataMap;
-//
-//import javax.swing.BoxLayout;
-//import javax.swing.JCheckBox;
-//import javax.swing.JLabel;
-//import javax.swing.JPanel;
-//import javax.swing.JScrollPane;
-//import javax.swing.JTable;
-//import javax.swing.ScrollPaneConstants;
-//import javax.swing.UIManager;
-//import javax.swing.border.EmptyBorder;
-//import java.awt.BorderLayout;
-//import java.awt.Component;
-//import java.awt.Dimension;
-//import java.awt.FlowLayout;
-//import java.util.Collection;
-//import java.util.HashMap;
-//import java.util.Map;
-//
-///**
-// */
-//public class ClassesTabPanel extends JPanel {
-//
-// protected JCheckBox checkAll;
-// protected JLabel checkAllLabel;
-//
-// private Map<DataMap, JTable> dataMapTables;
-//
-// private Map<DataMap, JCheckBox> dataMapJCheckBoxMap;
-//
-// public ClassesTabPanel(Collection<DataMap> dataMaps) {
-// dataMapTables = new HashMap<>();
-// dataMapJCheckBoxMap = new HashMap<>();
-//
-// // TODO: andrus 04/07/2006 - is there an easy way to stick that checkbox in the
-// // table header????
-// this.checkAll = new JCheckBox();
-// this.checkAllLabel = new JLabel("Check All Classes");
-//
-// checkAll.addItemListener(event -> {
-// if (checkAll.isSelected()) {
-// checkAllLabel.setText("Uncheck All Classess");
-// dataMapJCheckBoxMap.keySet().forEach(val -> dataMapJCheckBoxMap.get(val).setSelected(true));
-// }
-// else {
-// checkAllLabel.setText("Check All Classes");
-// dataMapJCheckBoxMap.keySet().forEach(val -> dataMapJCheckBoxMap.get(val).setSelected(false));
-// }
-// });
-//
-// // assemble
-// JPanel topPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
-// topPanel.setBorder(UIManager.getBorder("ToolBar.border"));
-// topPanel.add(checkAll);
-// topPanel.add(checkAllLabel);
-//
-// JPanel panel = new JPanel();
-// panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
-// for(DataMap dataMap : dataMaps) {
-// JTable table = new JTable();
-// table.setRowHeight(22);
-// dataMapTables.put(dataMap, table);
-// JPanel scrollTable = new JPanel(new BorderLayout());
-// scrollTable.add(dataMapTables.get(dataMap).getTableHeader(), BorderLayout.NORTH);
-// scrollTable.add(dataMapTables.get(dataMap), BorderLayout.CENTER);
-// scrollTable.setPreferredSize(new Dimension(dataMapTables.get(dataMap).getPreferredSize().width,
-// (dataMap.getEmbeddables().size() + dataMap.getObjEntities().size()) * dataMapTables.get(dataMap).getRowHeight() + 45));
-// JPanel labelPanel = new JPanel(new BorderLayout());
-// labelPanel.setPreferredSize(new Dimension(dataMapTables.get(dataMap).getPreferredSize().width, 20));
-// JLabel dataMapLabel = new JLabel(dataMap.getName());
-// dataMapLabel.setAlignmentX(Component.CENTER_ALIGNMENT);
-// dataMapLabel.setBorder(new EmptyBorder(8, 8, 8, 0));
-// labelPanel.add(dataMapLabel, BorderLayout.CENTER);
-//
-// JCheckBox dataMapCheckBox = new JCheckBox();
-// dataMapJCheckBoxMap.put(dataMap, dataMapCheckBox);
-// labelPanel.add(dataMapCheckBox, BorderLayout.WEST);
-//
-// JPanel currPanel = new JPanel(new BorderLayout());
-// currPanel.add(labelPanel, BorderLayout.NORTH);
-// currPanel.add(scrollTable, BorderLayout.CENTER);
-//
-// panel.add(currPanel);
-// }
-//
-// JScrollPane tablePanel = new JScrollPane(
-// panel,
-// ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
-// ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
-//
-// // set some minimal preferred size, so that it is smaller than other forms used in
-// // the dialog... this way we get the right automated overall size
-// tablePanel.setPreferredSize(new Dimension(450, 400));
-// setLayout(new BorderLayout());
-// add(topPanel, BorderLayout.NORTH);
-// add(tablePanel, BorderLayout.CENTER);
-// }
-//
-// public boolean isAllCheckBoxesFromDataMapSelected(DataMap dataMap) {
-// JTable table = dataMapTables.get(dataMap);
-// for(int i = 0; i < table.getRowCount(); i++) {
-// if(!(Boolean)table.getModel().getValueAt(i, 0)) {
-// return false;
-// }
-// }
-// return true;
-// }
-//
-// public Map<DataMap, JTable> getDataMapTables() {
-// return dataMapTables;
-// }
-//
-// public Map<DataMap, JCheckBox> getDataMapJCheckBoxMap() {
-// return dataMapJCheckBoxMap;
-// }
-//
-// public JCheckBox getCheckAll() {
-// return checkAll;
-// }
-//}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cayenne/blob/b30e5eb5/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClientModeController.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClientModeController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClientModeController.java
deleted file mode 100644
index 0225d3b..0000000
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClientModeController.java
+++ /dev/null
@@ -1,81 +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;
-//
-//import org.apache.cayenne.gen.ClassGenerationAction;
-//import org.apache.cayenne.gen.ClientClassGenerationAction;
-//import org.apache.cayenne.map.DataMap;
-//import org.apache.cayenne.map.ObjEntity;
-//import org.apache.cayenne.modeler.pref.DataMapDefaults;
-//import org.apache.cayenne.validation.BeanValidationFailure;
-//import org.apache.cayenne.validation.ValidationResult;
-//
-//import java.util.ArrayList;
-//import java.util.TreeMap;
-//
-//public class ClientModeController extends StandardModeController {
-//
-// public ClientModeController(CodeGeneratorControllerBase parent) {
-// super(parent);
-// }
-//
-// public void validateEntity(ValidationResult validationBuffer, ObjEntity entity) {
-// if (!entity.isClientAllowed()) {
-// validationBuffer.addFailure(new BeanValidationFailure(
-// entity.getName(),
-// "clientAllowed",
-// "Not a client entity"));
-// } else {
-// super.validateEntity(validationBuffer, entity, true);
-// }
-// }
-//
-// protected void createDefaults() {
-// TreeMap<DataMap, DataMapDefaults> map = new TreeMap<DataMap, DataMapDefaults>();
-// ArrayList<DataMap> dataMaps = (ArrayList<DataMap>) getParentController().getDataMaps();
-// for (DataMap dataMap : dataMaps) {
-// DataMapDefaults preferences = getApplication()
-// .getFrameController()
-// .getProjectController()
-// .getDataMapPreferences(this.getClass().getName().replace(".", "/"), dataMap);
-//
-// preferences.setSuperclassPackage("");
-// preferences.updateSuperclassPackage(dataMap, true);
-//
-// map.put(dataMap, preferences);
-//
-// if (getOutputPath() == null) {
-// setOutputPath(preferences.getOutputPath());
-// }
-// }
-//
-// setMapPreferences(map);
-// }
-//
-// protected GeneratorControllerPanel createView() {
-// this.view = new StandardModePanel();
-// return view;
-// }
-//
-// @Override
-// protected ClassGenerationAction newGenerator() {
-// return new ClientClassGenerationAction();
-// }
-//}
\ No newline at end of file
[16/32] cayenne git commit: Cgen tab, cgen configuration,
cgen in maven, ant, gradle.
Posted by nt...@apache.org.
http://git-wip-us.apache.org/repos/asf/cayenne/blob/52ea45b5/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClientModeController.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClientModeController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClientModeController.java
index 9e3897e..0225d3b 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClientModeController.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClientModeController.java
@@ -1,81 +1,81 @@
-/*****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- ****************************************************************/
-
-package org.apache.cayenne.modeler.dialog.codegen;
-
-import org.apache.cayenne.gen.ClassGenerationAction;
-import org.apache.cayenne.gen.ClientClassGenerationAction;
-import org.apache.cayenne.map.DataMap;
-import org.apache.cayenne.map.ObjEntity;
-import org.apache.cayenne.modeler.pref.DataMapDefaults;
-import org.apache.cayenne.validation.BeanValidationFailure;
-import org.apache.cayenne.validation.ValidationResult;
-
-import java.util.ArrayList;
-import java.util.TreeMap;
-
-public class ClientModeController extends StandardModeController {
-
- public ClientModeController(CodeGeneratorControllerBase parent) {
- super(parent);
- }
-
- public void validateEntity(ValidationResult validationBuffer, ObjEntity entity) {
- if (!entity.isClientAllowed()) {
- validationBuffer.addFailure(new BeanValidationFailure(
- entity.getName(),
- "clientAllowed",
- "Not a client entity"));
- } else {
- super.validateEntity(validationBuffer, entity, true);
- }
- }
-
- protected void createDefaults() {
- TreeMap<DataMap, DataMapDefaults> map = new TreeMap<DataMap, DataMapDefaults>();
- ArrayList<DataMap> dataMaps = (ArrayList<DataMap>) getParentController().getDataMaps();
- for (DataMap dataMap : dataMaps) {
- DataMapDefaults preferences = getApplication()
- .getFrameController()
- .getProjectController()
- .getDataMapPreferences(this.getClass().getName().replace(".", "/"), dataMap);
-
- preferences.setSuperclassPackage("");
- preferences.updateSuperclassPackage(dataMap, true);
-
- map.put(dataMap, preferences);
-
- if (getOutputPath() == null) {
- setOutputPath(preferences.getOutputPath());
- }
- }
-
- setMapPreferences(map);
- }
-
- protected GeneratorControllerPanel createView() {
- this.view = new StandardModePanel();
- return view;
- }
-
- @Override
- protected ClassGenerationAction newGenerator() {
- return new ClientClassGenerationAction();
- }
-}
\ No newline at end of file
+///*****************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one
+// * or more contributor license agreements. See the NOTICE file
+// * distributed with this work for additional information
+// * regarding copyright ownership. The ASF licenses this file
+// * to you under the Apache License, Version 2.0 (the
+// * "License"); you may not use this file except in compliance
+// * with the License. You may obtain a copy of the License at
+// *
+// * http://www.apache.org/licenses/LICENSE-2.0
+// *
+// * Unless required by applicable law or agreed to in writing,
+// * software distributed under the License is distributed on an
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// * KIND, either express or implied. See the License for the
+// * specific language governing permissions and limitations
+// * under the License.
+// ****************************************************************/
+//
+//package org.apache.cayenne.modeler.dialog.codegen;
+//
+//import org.apache.cayenne.gen.ClassGenerationAction;
+//import org.apache.cayenne.gen.ClientClassGenerationAction;
+//import org.apache.cayenne.map.DataMap;
+//import org.apache.cayenne.map.ObjEntity;
+//import org.apache.cayenne.modeler.pref.DataMapDefaults;
+//import org.apache.cayenne.validation.BeanValidationFailure;
+//import org.apache.cayenne.validation.ValidationResult;
+//
+//import java.util.ArrayList;
+//import java.util.TreeMap;
+//
+//public class ClientModeController extends StandardModeController {
+//
+// public ClientModeController(CodeGeneratorControllerBase parent) {
+// super(parent);
+// }
+//
+// public void validateEntity(ValidationResult validationBuffer, ObjEntity entity) {
+// if (!entity.isClientAllowed()) {
+// validationBuffer.addFailure(new BeanValidationFailure(
+// entity.getName(),
+// "clientAllowed",
+// "Not a client entity"));
+// } else {
+// super.validateEntity(validationBuffer, entity, true);
+// }
+// }
+//
+// protected void createDefaults() {
+// TreeMap<DataMap, DataMapDefaults> map = new TreeMap<DataMap, DataMapDefaults>();
+// ArrayList<DataMap> dataMaps = (ArrayList<DataMap>) getParentController().getDataMaps();
+// for (DataMap dataMap : dataMaps) {
+// DataMapDefaults preferences = getApplication()
+// .getFrameController()
+// .getProjectController()
+// .getDataMapPreferences(this.getClass().getName().replace(".", "/"), dataMap);
+//
+// preferences.setSuperclassPackage("");
+// preferences.updateSuperclassPackage(dataMap, true);
+//
+// map.put(dataMap, preferences);
+//
+// if (getOutputPath() == null) {
+// setOutputPath(preferences.getOutputPath());
+// }
+// }
+//
+// setMapPreferences(map);
+// }
+//
+// protected GeneratorControllerPanel createView() {
+// this.view = new StandardModePanel();
+// return view;
+// }
+//
+// @Override
+// protected ClassGenerationAction newGenerator() {
+// return new ClientClassGenerationAction();
+// }
+//}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cayenne/blob/52ea45b5/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorController.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorController.java
index 55817a6..a5ac549 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorController.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorController.java
@@ -1,169 +1,169 @@
-/*****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- ****************************************************************/
-
-package org.apache.cayenne.modeler.dialog.codegen;
-
-import org.apache.cayenne.gen.ClassGenerationAction;
-import org.apache.cayenne.map.DataMap;
-import org.apache.cayenne.modeler.dialog.ErrorDebugDialog;
-import org.apache.cayenne.modeler.util.CayenneController;
-import org.apache.cayenne.swing.BindingBuilder;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import javax.swing.JOptionPane;
-import java.awt.Component;
-import java.util.Collection;
-import java.util.function.Predicate;
-
-/**
- * A controller for the class generator dialog.
- */
-public class CodeGeneratorController extends CodeGeneratorControllerBase {
- /**
- * Logger to print stack traces
- */
- private static Logger logObj = LoggerFactory.getLogger(ErrorDebugDialog.class);
-
- protected CodeGeneratorDialog view;
-
- protected ClassesTabController classesSelector;
- protected GeneratorTabController generatorSelector;
-
- public CodeGeneratorController(CayenneController parent, Collection<DataMap> dataMaps) {
- super(parent, dataMaps);
-
- this.classesSelector = new ClassesTabController(this, dataMaps);
- this.generatorSelector = new GeneratorTabController(this);
- }
-
- @Override
- public Component getView() {
- return view;
- }
-
- public void startup() {
- // show dialog even on empty DataMap, as custom generation may still take
- // advantage of it
-
- view = new CodeGeneratorDialog(generatorSelector.getView(), classesSelector.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()");
- builder.bindToAction(view.getGenerateButton(), "generateAction()");
- builder.bindToAction(this, "classesSelectedAction()", SELECTED_PROPERTY);
- builder.bindToAction(generatorSelector, "generatorSelectedAction()",
- GeneratorTabController.GENERATOR_PROPERTY);
-
- generatorSelectedAction();
- }
-
- public void generatorSelectedAction() {
- GeneratorController controller = generatorSelector.getGeneratorController();
- validate(controller);
-
- Predicate<Object> predicate = controller != null
- ? controller.getDefaultClassFilter()
- : o -> false;
-
- updateSelection(predicate);
- classesSelector.classSelectedAction();
- }
-
- public void classesSelectedAction() {
- int size = getSelectedEntitiesSize();
- String label;
-
- if (size == 0) {
- label = "No entities selected";
- }
- else if (size == 1) {
- label = "One entity selected";
- }
- else {
- label = size + " entities selected";
- }
-
- label = label.concat("; ");
-
- int sizeEmb = getSelectedEmbeddablesSize();
-
- if (sizeEmb == 0) {
- label = label + "No embeddables selected";
- }
- else if (sizeEmb == 1) {
- label = label + "One embeddable selected";
- }
- else {
- label = label + sizeEmb + " embeddables selected";
- }
-
- label = label.concat("; ");
-
- int sizeDataMap = getSelectedDataMapsSize();
-
- if(sizeDataMap == 0) {
- label = label + "No datamaps selected";
- } else if(sizeDataMap == 1) {
- label = label + "One datamap selected";
- } else {
- label = label + sizeDataMap + " datamaps selected";
- }
-
- view.getClassesCount().setText(label);
- }
-
- public void cancelAction() {
- view.dispose();
- }
-
- public void generateAction() {
- Collection<ClassGenerationAction> generators = generatorSelector.getGenerator();
-
- if (generators != null) {
- try {
- for (ClassGenerationAction generator : generators) {
- generator.execute();
- }
- JOptionPane.showMessageDialog(
- this.getView(),
- "Class generation finished");
- } catch (Exception e) {
- logObj.error("Error generating classes", e);
- JOptionPane.showMessageDialog(
- this.getView(),
- "Error generating classes - " + e.getMessage());
- }
- }
-
- view.dispose();
- }
-}
\ No newline at end of file
+///*****************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one
+// * or more contributor license agreements. See the NOTICE file
+// * distributed with this work for additional information
+// * regarding copyright ownership. The ASF licenses this file
+// * to you under the Apache License, Version 2.0 (the
+// * "License"); you may not use this file except in compliance
+// * with the License. You may obtain a copy of the License at
+// *
+// * http://www.apache.org/licenses/LICENSE-2.0
+// *
+// * Unless required by applicable law or agreed to in writing,
+// * software distributed under the License is distributed on an
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// * KIND, either express or implied. See the License for the
+// * specific language governing permissions and limitations
+// * under the License.
+// ****************************************************************/
+//
+//package org.apache.cayenne.modeler.dialog.codegen;
+//
+//import org.apache.cayenne.gen.ClassGenerationAction;
+//import org.apache.cayenne.map.DataMap;
+//import org.apache.cayenne.modeler.dialog.ErrorDebugDialog;
+//import org.apache.cayenne.modeler.util.CayenneController;
+//import org.apache.cayenne.swing.BindingBuilder;
+//import org.slf4j.Logger;
+//import org.slf4j.LoggerFactory;
+//
+//import javax.swing.JOptionPane;
+//import java.awt.Component;
+//import java.util.Collection;
+//import java.util.function.Predicate;
+//
+///**
+// * A controller for the class generator dialog.
+// */
+//public class CodeGeneratorController extends CodeGeneratorControllerBase {
+// /**
+// * Logger to print stack traces
+// */
+// private static Logger logObj = LoggerFactory.getLogger(ErrorDebugDialog.class);
+//
+// protected CodeGeneratorDialog view;
+//
+// protected ClassesTabController classesSelector;
+// protected GeneratorTabController generatorSelector;
+//
+// public CodeGeneratorController(CayenneController parent, Collection<DataMap> dataMaps) {
+// super(parent, dataMaps);
+//
+// this.classesSelector = new ClassesTabController(this, dataMaps);
+// this.generatorSelector = new GeneratorTabController(this);
+// }
+//
+// @Override
+// public Component getView() {
+// return view;
+// }
+//
+// public void startup() {
+// // show dialog even on empty DataMap, as custom generation may still take
+// // advantage of it
+//
+// view = new CodeGeneratorDialog(generatorSelector.getView(), classesSelector.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()");
+// builder.bindToAction(view.getGenerateButton(), "generateAction()");
+// builder.bindToAction(this, "classesSelectedAction()", SELECTED_PROPERTY);
+// builder.bindToAction(generatorSelector, "generatorSelectedAction()",
+// GeneratorTabController.GENERATOR_PROPERTY);
+//
+// generatorSelectedAction();
+// }
+//
+// public void generatorSelectedAction() {
+// GeneratorController controller = generatorSelector.getGeneratorController();
+// validate(controller);
+//
+// Predicate<Object> predicate = controller != null
+// ? controller.getDefaultClassFilter()
+// : o -> false;
+//
+// updateSelection(predicate);
+// classesSelector.classSelectedAction();
+// }
+//
+// public void classesSelectedAction() {
+// int size = getSelectedEntitiesSize();
+// String label;
+//
+// if (size == 0) {
+// label = "No entities selected";
+// }
+// else if (size == 1) {
+// label = "One entity selected";
+// }
+// else {
+// label = size + " entities selected";
+// }
+//
+// label = label.concat("; ");
+//
+// int sizeEmb = getSelectedEmbeddablesSize();
+//
+// if (sizeEmb == 0) {
+// label = label + "No embeddables selected";
+// }
+// else if (sizeEmb == 1) {
+// label = label + "One embeddable selected";
+// }
+// else {
+// label = label + sizeEmb + " embeddables selected";
+// }
+//
+// label = label.concat("; ");
+//
+// int sizeDataMap = getSelectedDataMapsSize();
+//
+// if(sizeDataMap == 0) {
+// label = label + "No datamaps selected";
+// } else if(sizeDataMap == 1) {
+// label = label + "One datamap selected";
+// } else {
+// label = label + sizeDataMap + " datamaps selected";
+// }
+//
+// view.getClassesCount().setText(label);
+// }
+//
+// public void cancelAction() {
+// view.dispose();
+// }
+//
+// public void generateAction() {
+// Collection<ClassGenerationAction> generators = generatorSelector.getConfiguration();
+//
+// if (generators != null) {
+// try {
+// for (ClassGenerationAction generator : generators) {
+// generator.execute();
+// }
+// JOptionPane.showMessageDialog(
+// this.getView(),
+// "Class generation finished");
+// } catch (Exception e) {
+// logObj.error("Error generating classes", e);
+// JOptionPane.showMessageDialog(
+// this.getView(),
+// "Error generating classes - " + e.getMessage());
+// }
+// }
+//
+// view.dispose();
+// }
+//}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cayenne/blob/52ea45b5/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorControllerBase.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorControllerBase.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorControllerBase.java
index 91d87e4..3848126 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorControllerBase.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorControllerBase.java
@@ -1,380 +1,380 @@
-/*****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- ****************************************************************/
-
-package org.apache.cayenne.modeler.dialog.codegen;
-
-import org.apache.cayenne.map.DataMap;
-import org.apache.cayenne.map.Embeddable;
-import org.apache.cayenne.map.ObjEntity;
-import org.apache.cayenne.modeler.util.CayenneController;
-import org.apache.cayenne.modeler.util.CellRenderers;
-import org.apache.cayenne.validation.ValidationFailure;
-import org.apache.cayenne.validation.ValidationResult;
-
-import javax.swing.Icon;
-import javax.swing.JLabel;
-import java.awt.Component;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-import java.util.function.Predicate;
-
-/**
- * A base superclass of a top controller for the code generator. Defines all common model
- * parts used in class generation.
- *
- */
-public abstract class CodeGeneratorControllerBase extends CayenneController {
-
- public static final String SELECTED_PROPERTY = "selected";
-
- protected Collection<DataMap> dataMaps;
-
- protected ValidationResult validation;
-
- protected List<Object> classes;
-
- private Set<String> selectedEntities;
- private Set<String> selectedEmbeddables;
- private Set<String> selectedDataMaps;
-
- private transient Object currentClass;
-
- public CodeGeneratorControllerBase(CayenneController parent, Collection<DataMap> dataMaps) {
- super(parent);
-
- this.dataMaps = dataMaps;
- this.classes = new ArrayList<>();
-
- for(DataMap dataMap:dataMaps){
- this.classes.addAll(dataMap.getObjEntities());
- this.classes.addAll(dataMap.getEmbeddables());
- this.classes.add(dataMap);
- }
- this.selectedEntities = new HashSet<>();
- this.selectedEmbeddables = new HashSet<>();
- this.selectedDataMaps = new HashSet<>();
- }
-
- public List<Object> getClasses() {
- return classes;
- }
-
- public abstract Component getView();
-
- public void validate(GeneratorController validator) {
-
- ValidationResult validationBuffer = new ValidationResult();
-
- if (validator != null) {
- for (Object classObj : classes) {
- if (classObj instanceof ObjEntity) {
- validator.validateEntity(
- validationBuffer,
- (ObjEntity) classObj,
- false);
- }
- else if (classObj instanceof Embeddable) {
- validator.validateEmbeddable(validationBuffer, (Embeddable) classObj);
- }
- }
-
- }
-
- this.validation = validationBuffer;
- }
-
- public boolean updateSelection(Predicate<Object> predicate) {
-
- boolean modified = false;
-
- for (Object classObj : classes) {
- boolean select = predicate.test(classObj);
- if (classObj instanceof ObjEntity) {
-
- if (select) {
- if (selectedEntities.add(((ObjEntity) classObj).getName())) {
- modified = true;
- }
- }
- else {
- if (selectedEntities.remove(((ObjEntity) classObj).getName())) {
- modified = true;
- }
- }
- }
- else if (classObj instanceof Embeddable) {
- if (select) {
- if (selectedEmbeddables.add(((Embeddable) classObj).getClassName())) {
- modified = true;
- }
- }
- else {
- if (selectedEmbeddables
- .remove(((Embeddable) classObj).getClassName())) {
- modified = true;
- }
- }
- } else if(classObj instanceof DataMap) {
- if(select) {
- if(selectedDataMaps.add(((DataMap) classObj).getName())) {
- modified = true;
- }
- } else {
- if(selectedDataMaps.remove(((DataMap) classObj).getName())) {
- modified = true;
- }
- }
- }
-
- }
-
- if (modified) {
- firePropertyChange(SELECTED_PROPERTY, null, null);
- }
-
- return modified;
- }
-
- public boolean updateDataMapSelection(Predicate<Object> predicate, DataMap dataMap) {
-
- boolean modified = false;
-
- for (Object classObj : classes) {
- boolean select = predicate.test(classObj);
- if (classObj instanceof ObjEntity) {
- if(dataMap.getObjEntities().contains(classObj)) {
- if (select) {
- if (selectedEntities.add(((ObjEntity) classObj).getName())) {
- modified = true;
- }
- } else {
- if (selectedEntities.remove(((ObjEntity) classObj).getName())) {
- modified = true;
- }
- }
- }
- }
- else if (classObj instanceof Embeddable) {
- if(dataMap.getEmbeddables().contains(classObj)) {
- if (select) {
- if (selectedEmbeddables.add(((Embeddable) classObj).getClassName())) {
- modified = true;
- }
- } else {
- if (selectedEmbeddables
- .remove(((Embeddable) classObj).getClassName())) {
- modified = true;
- }
- }
- }
- } else {
- if(dataMap == classObj) {
- if (select) {
- if (selectedDataMaps.add(((DataMap) classObj).getName())) {
- modified = true;
- }
- } else {
- if (selectedDataMaps.remove(((DataMap) classObj).getName())) {
- modified = true;
- }
- }
- }
- }
-
- }
-
- if (modified) {
- firePropertyChange(SELECTED_PROPERTY, null, null);
- }
-
- return modified;
- }
-
- public List<Embeddable> getSelectedEmbeddables() {
-
- List<Embeddable> selected = new ArrayList<>(selectedEmbeddables.size());
-
- for (Object classObj : classes) {
- if (classObj instanceof Embeddable
- && selectedEmbeddables.contains(((Embeddable) classObj)
- .getClassName())) {
- selected.add((Embeddable) classObj);
- }
- }
-
- return selected;
- }
-
- public List<ObjEntity> getSelectedEntities() {
- List<ObjEntity> selected = new ArrayList<>(selectedEntities.size());
- for (Object classObj : classes) {
- if (classObj instanceof ObjEntity
- && selectedEntities.contains(((ObjEntity) classObj).getName())) {
- selected.add(((ObjEntity) classObj));
- }
- }
-
- return selected;
- }
-
- public List<DataMap> getSelectedDataMaps() {
- List<DataMap> selected = new ArrayList<>(selectedDataMaps.size());
- for(Object classObj : classes) {
- if(classObj instanceof DataMap
- && selectedDataMaps.contains(((DataMap) classObj).getName())) {
- selected.add((DataMap) classObj);
- }
- }
- return selected;
- }
-
- public int getSelectedEntitiesSize() {
- return selectedEntities.size();
- }
-
- public int getSelectedEmbeddablesSize() {
- return selectedEmbeddables.size();
- }
-
- public int getSelectedDataMapsSize() {
- return selectedDataMaps.size();
- }
-
- /**
- * Returns the first encountered validation problem for an antity matching the name or
- * null if the entity is valid or the entity is not present.
- */
- public String getProblem(Object obj) {
-
- String name = null;
-
- if (obj instanceof ObjEntity) {
- name = ((ObjEntity) obj).getName();
- }
- else if (obj instanceof Embeddable) {
- name = ((Embeddable) obj).getClassName();
- }
-
- if (validation == null) {
- return null;
- }
-
- List failures = validation.getFailures(name);
- if (failures.isEmpty()) {
- return null;
- }
-
- return ((ValidationFailure) failures.get(0)).getDescription();
- }
-
- public boolean isSelected() {
- if (currentClass instanceof ObjEntity) {
- return selectedEntities
- .contains(((ObjEntity) currentClass).getName());
- }
- if (currentClass instanceof Embeddable) {
- return selectedEmbeddables
- .contains(((Embeddable) currentClass).getClassName());
- }
- if(currentClass instanceof DataMap) {
- return selectedDataMaps
- .contains(((DataMap) currentClass).getName());
- }
- return false;
-
- }
-
- public void setSelected(boolean selectedFlag) {
- if (currentClass == null) {
- return;
- }
- if (currentClass instanceof ObjEntity) {
- if (selectedFlag) {
- if (selectedEntities.add(((ObjEntity) currentClass).getName())) {
- firePropertyChange(SELECTED_PROPERTY, null, null);
- }
- }
- else {
- if (selectedEntities.remove(((ObjEntity) currentClass).getName())) {
- firePropertyChange(SELECTED_PROPERTY, null, null);
- }
- }
- }
- if (currentClass instanceof Embeddable) {
- if (selectedFlag) {
- if (selectedEmbeddables.add(((Embeddable) currentClass).getClassName())) {
- firePropertyChange(SELECTED_PROPERTY, null, null);
- }
- }
- else {
- if (selectedEmbeddables
- .remove(((Embeddable) currentClass).getClassName())) {
- firePropertyChange(SELECTED_PROPERTY, null, null);
- }
- }
- }
- if(currentClass instanceof DataMap) {
- if(selectedFlag) {
- if(selectedDataMaps.add(((DataMap) currentClass).getName())) {
- firePropertyChange(SELECTED_PROPERTY, null, null);
- }
- } else {
- if(selectedDataMaps.remove(((DataMap) currentClass).getName())) {
- firePropertyChange(SELECTED_PROPERTY, null, null);
- }
- }
- }
- }
-
- public Object getCurrentClass() {
- return currentClass;
- }
-
- public void setCurrentClass(Object currentClass) {
- this.currentClass = currentClass;
- }
-
- public Collection<DataMap> getDataMaps() {
- return dataMaps;
- }
-
- public JLabel getItemName(Object obj) {
- String className;
- Icon icon;
- if (obj instanceof Embeddable) {
- className = ((Embeddable) obj).getClassName();
- icon = CellRenderers.iconForObject(new Embeddable());
- } 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);
- labelIcon.setVisible(true);
- labelIcon.setText(className);
- return labelIcon;
- }
-
-}
\ No newline at end of file
+///*****************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one
+// * or more contributor license agreements. See the NOTICE file
+// * distributed with this work for additional information
+// * regarding copyright ownership. The ASF licenses this file
+// * to you under the Apache License, Version 2.0 (the
+// * "License"); you may not use this file except in compliance
+// * with the License. You may obtain a copy of the License at
+// *
+// * http://www.apache.org/licenses/LICENSE-2.0
+// *
+// * Unless required by applicable law or agreed to in writing,
+// * software distributed under the License is distributed on an
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// * KIND, either express or implied. See the License for the
+// * specific language governing permissions and limitations
+// * under the License.
+// ****************************************************************/
+//
+//package org.apache.cayenne.modeler.dialog.codegen;
+//
+//import org.apache.cayenne.map.DataMap;
+//import org.apache.cayenne.map.Embeddable;
+//import org.apache.cayenne.map.ObjEntity;
+//import org.apache.cayenne.modeler.util.CayenneController;
+//import org.apache.cayenne.modeler.util.CellRenderers;
+//import org.apache.cayenne.validation.ValidationFailure;
+//import org.apache.cayenne.validation.ValidationResult;
+//
+//import javax.swing.Icon;
+//import javax.swing.JLabel;
+//import java.awt.Component;
+//import java.util.ArrayList;
+//import java.util.Collection;
+//import java.util.HashSet;
+//import java.util.List;
+//import java.util.Set;
+//import java.util.function.Predicate;
+//
+///**
+// * A base superclass of a top controller for the code generator. Defines all common model
+// * parts used in class generation.
+// *
+// */
+//public abstract class CodeGeneratorControllerBase extends CayenneController {
+//
+// public static final String SELECTED_PROPERTY = "selected";
+//
+// protected Collection<DataMap> dataMaps;
+//
+// protected ValidationResult validation;
+//
+// protected List<Object> classes;
+//
+// private Set<String> selectedEntities;
+// private Set<String> selectedEmbeddables;
+// private Set<String> selectedDataMaps;
+//
+// private transient Object currentClass;
+//
+// public CodeGeneratorControllerBase(CayenneController parent, Collection<DataMap> dataMaps) {
+// super(parent);
+//
+// this.dataMaps = dataMaps;
+// this.classes = new ArrayList<>();
+//
+// for(DataMap dataMap:dataMaps){
+// this.classes.addAll(dataMap.getObjEntities());
+// this.classes.addAll(dataMap.getEmbeddables());
+// this.classes.add(dataMap);
+// }
+// this.selectedEntities = new HashSet<>();
+// this.selectedEmbeddables = new HashSet<>();
+// this.selectedDataMaps = new HashSet<>();
+// }
+//
+// public List<Object> getClasses() {
+// return classes;
+// }
+//
+// public abstract Component getView();
+//
+// public void validate(GeneratorController validator) {
+//
+// ValidationResult validationBuffer = new ValidationResult();
+//
+// if (validator != null) {
+// for (Object classObj : classes) {
+// if (classObj instanceof ObjEntity) {
+// validator.validateEntity(
+// validationBuffer,
+// (ObjEntity) classObj,
+// false);
+// }
+// else if (classObj instanceof Embeddable) {
+// validator.validateEmbeddable(validationBuffer, (Embeddable) classObj);
+// }
+// }
+//
+// }
+//
+// this.validation = validationBuffer;
+// }
+//
+// public boolean updateSelection(Predicate<Object> predicate) {
+//
+// boolean modified = false;
+//
+// for (Object classObj : classes) {
+// boolean select = predicate.test(classObj);
+// if (classObj instanceof ObjEntity) {
+//
+// if (select) {
+// if (selectedEntities.add(((ObjEntity) classObj).getName())) {
+// modified = true;
+// }
+// }
+// else {
+// if (selectedEntities.remove(((ObjEntity) classObj).getName())) {
+// modified = true;
+// }
+// }
+// }
+// else if (classObj instanceof Embeddable) {
+// if (select) {
+// if (selectedEmbeddables.add(((Embeddable) classObj).getClassName())) {
+// modified = true;
+// }
+// }
+// else {
+// if (selectedEmbeddables
+// .remove(((Embeddable) classObj).getClassName())) {
+// modified = true;
+// }
+// }
+// } else if(classObj instanceof DataMap) {
+// if(select) {
+// if(selectedDataMaps.add(((DataMap) classObj).getName())) {
+// modified = true;
+// }
+// } else {
+// if(selectedDataMaps.remove(((DataMap) classObj).getName())) {
+// modified = true;
+// }
+// }
+// }
+//
+// }
+//
+// if (modified) {
+// firePropertyChange(SELECTED_PROPERTY, null, null);
+// }
+//
+// return modified;
+// }
+//
+// public boolean updateDataMapSelection(Predicate<Object> predicate, DataMap dataMap) {
+//
+// boolean modified = false;
+//
+// for (Object classObj : classes) {
+// boolean select = predicate.test(classObj);
+// if (classObj instanceof ObjEntity) {
+// if(dataMap.getObjEntities().contains(classObj)) {
+// if (select) {
+// if (selectedEntities.add(((ObjEntity) classObj).getName())) {
+// modified = true;
+// }
+// } else {
+// if (selectedEntities.remove(((ObjEntity) classObj).getName())) {
+// modified = true;
+// }
+// }
+// }
+// }
+// else if (classObj instanceof Embeddable) {
+// if(dataMap.getEmbeddables().contains(classObj)) {
+// if (select) {
+// if (selectedEmbeddables.add(((Embeddable) classObj).getClassName())) {
+// modified = true;
+// }
+// } else {
+// if (selectedEmbeddables
+// .remove(((Embeddable) classObj).getClassName())) {
+// modified = true;
+// }
+// }
+// }
+// } else {
+// if(dataMap == classObj) {
+// if (select) {
+// if (selectedDataMaps.add(((DataMap) classObj).getName())) {
+// modified = true;
+// }
+// } else {
+// if (selectedDataMaps.remove(((DataMap) classObj).getName())) {
+// modified = true;
+// }
+// }
+// }
+// }
+//
+// }
+//
+// if (modified) {
+// firePropertyChange(SELECTED_PROPERTY, null, null);
+// }
+//
+// return modified;
+// }
+//
+// public List<Embeddable> getSelectedEmbeddables() {
+//
+// List<Embeddable> selected = new ArrayList<>(selectedEmbeddables.size());
+//
+// for (Object classObj : classes) {
+// if (classObj instanceof Embeddable
+// && selectedEmbeddables.contains(((Embeddable) classObj)
+// .getClassName())) {
+// selected.add((Embeddable) classObj);
+// }
+// }
+//
+// return selected;
+// }
+//
+// public List<ObjEntity> getSelectedEntities() {
+// List<ObjEntity> selected = new ArrayList<>(selectedEntities.size());
+// for (Object classObj : classes) {
+// if (classObj instanceof ObjEntity
+// && selectedEntities.contains(((ObjEntity) classObj).getName())) {
+// selected.add(((ObjEntity) classObj));
+// }
+// }
+//
+// return selected;
+// }
+//
+// public List<DataMap> getSelectedDataMaps() {
+// List<DataMap> selected = new ArrayList<>(selectedDataMaps.size());
+// for(Object classObj : classes) {
+// if(classObj instanceof DataMap
+// && selectedDataMaps.contains(((DataMap) classObj).getName())) {
+// selected.add((DataMap) classObj);
+// }
+// }
+// return selected;
+// }
+//
+// public int getSelectedEntitiesSize() {
+// return selectedEntities.size();
+// }
+//
+// public int getSelectedEmbeddablesSize() {
+// return selectedEmbeddables.size();
+// }
+//
+// public int getSelectedDataMapsSize() {
+// return selectedDataMaps.size();
+// }
+//
+// /**
+// * Returns the first encountered validation problem for an antity matching the name or
+// * null if the entity is valid or the entity is not present.
+// */
+// public String getProblem(Object obj) {
+//
+// String name = null;
+//
+// if (obj instanceof ObjEntity) {
+// name = ((ObjEntity) obj).getName();
+// }
+// else if (obj instanceof Embeddable) {
+// name = ((Embeddable) obj).getClassName();
+// }
+//
+// if (validation == null) {
+// return null;
+// }
+//
+// List failures = validation.getFailures(name);
+// if (failures.isEmpty()) {
+// return null;
+// }
+//
+// return ((ValidationFailure) failures.get(0)).getDescription();
+// }
+//
+// public boolean isSelected() {
+// if (currentClass instanceof ObjEntity) {
+// return selectedEntities
+// .contains(((ObjEntity) currentClass).getName());
+// }
+// if (currentClass instanceof Embeddable) {
+// return selectedEmbeddables
+// .contains(((Embeddable) currentClass).getClassName());
+// }
+// if(currentClass instanceof DataMap) {
+// return selectedDataMaps
+// .contains(((DataMap) currentClass).getName());
+// }
+// return false;
+//
+// }
+//
+// public void setSelected(boolean selectedFlag) {
+// if (currentClass == null) {
+// return;
+// }
+// if (currentClass instanceof ObjEntity) {
+// if (selectedFlag) {
+// if (selectedEntities.add(((ObjEntity) currentClass).getName())) {
+// firePropertyChange(SELECTED_PROPERTY, null, null);
+// }
+// }
+// else {
+// if (selectedEntities.remove(((ObjEntity) currentClass).getName())) {
+// firePropertyChange(SELECTED_PROPERTY, null, null);
+// }
+// }
+// }
+// if (currentClass instanceof Embeddable) {
+// if (selectedFlag) {
+// if (selectedEmbeddables.add(((Embeddable) currentClass).getClassName())) {
+// firePropertyChange(SELECTED_PROPERTY, null, null);
+// }
+// }
+// else {
+// if (selectedEmbeddables
+// .remove(((Embeddable) currentClass).getClassName())) {
+// firePropertyChange(SELECTED_PROPERTY, null, null);
+// }
+// }
+// }
+// if(currentClass instanceof DataMap) {
+// if(selectedFlag) {
+// if(selectedDataMaps.add(((DataMap) currentClass).getName())) {
+// firePropertyChange(SELECTED_PROPERTY, null, null);
+// }
+// } else {
+// if(selectedDataMaps.remove(((DataMap) currentClass).getName())) {
+// firePropertyChange(SELECTED_PROPERTY, null, null);
+// }
+// }
+// }
+// }
+//
+// public Object getCurrentClass() {
+// return currentClass;
+// }
+//
+// public void setCurrentClass(Object currentClass) {
+// this.currentClass = currentClass;
+// }
+//
+// public Collection<DataMap> getDataMaps() {
+// return dataMaps;
+// }
+//
+// public JLabel getItemName(Object obj) {
+// String className;
+// Icon icon;
+// if (obj instanceof Embeddable) {
+// className = ((Embeddable) obj).getClassName();
+// icon = CellRenderers.iconForObject(new Embeddable());
+// } 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);
+// labelIcon.setVisible(true);
+// labelIcon.setText(className);
+// return labelIcon;
+// }
+//
+//}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cayenne/blob/52ea45b5/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorDialog.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorDialog.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorDialog.java
index 2bb635f..c4f4bd1 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorDialog.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorDialog.java
@@ -1,99 +1,99 @@
-/*****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- ****************************************************************/
-
-package org.apache.cayenne.modeler.dialog.codegen;
-
-import org.apache.cayenne.modeler.Application;
-import org.apache.cayenne.swing.components.TopBorder;
-
-import javax.swing.Box;
-import javax.swing.JButton;
-import javax.swing.JDialog;
-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.Container;
-import java.awt.Dimension;
-import java.awt.FlowLayout;
-
-/**
- */
-public class CodeGeneratorDialog extends JDialog {
-
- private JButton generateButton;
- protected JButton cancelButton;
- private JLabel classesCount;
-
- CodeGeneratorDialog(Component generatorPanel, Component entitySelectorPanel) {
- super(Application.getFrame());
-
- JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
- splitPane.setFocusable(false);
-
- this.generateButton = new JButton("Generate");
- getRootPane().setDefaultButton(generateButton);
-
- this.cancelButton = new JButton("Cancel");
- this.classesCount = new JLabel("No classes selected");
- classesCount.setFont(classesCount.getFont().deriveFont(10f));
-
-
- JScrollPane scrollPane = new JScrollPane(
- generatorPanel,
- ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
- ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
- scrollPane.setPreferredSize(new Dimension(630, 500));
-
- splitPane.setLeftComponent(entitySelectorPanel);
- splitPane.setRightComponent(scrollPane);
-
- 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(cancelButton);
- buttons.add(generateButton);
-
- Container contentPane = getContentPane();
- contentPane.setLayout(new BorderLayout());
- contentPane.add(splitPane, BorderLayout.CENTER);
- contentPane.add(buttons, BorderLayout.SOUTH);
-
- setTitle("Code Generation");
- }
-
- public JButton getCancelButton() {
- return cancelButton;
- }
-
- public JButton getGenerateButton() {
- return generateButton;
- }
-
- public JLabel getClassesCount() {
- return classesCount;
- }
-}
\ No newline at end of file
+///*****************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one
+// * or more contributor license agreements. See the NOTICE file
+// * distributed with this work for additional information
+// * regarding copyright ownership. The ASF licenses this file
+// * to you under the Apache License, Version 2.0 (the
+// * "License"); you may not use this file except in compliance
+// * with the License. You may obtain a copy of the License at
+// *
+// * http://www.apache.org/licenses/LICENSE-2.0
+// *
+// * Unless required by applicable law or agreed to in writing,
+// * software distributed under the License is distributed on an
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// * KIND, either express or implied. See the License for the
+// * specific language governing permissions and limitations
+// * under the License.
+// ****************************************************************/
+//
+//package org.apache.cayenne.modeler.dialog.codegen;
+//
+//import org.apache.cayenne.modeler.Application;
+//import org.apache.cayenne.swing.components.TopBorder;
+//
+//import javax.swing.Box;
+//import javax.swing.JButton;
+//import javax.swing.JDialog;
+//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.Container;
+//import java.awt.Dimension;
+//import java.awt.FlowLayout;
+//
+///**
+// */
+//public class CodeGeneratorDialog extends JDialog {
+//
+// private JButton generateButton;
+// protected JButton cancelButton;
+// private JLabel classesCount;
+//
+// CodeGeneratorDialog(Component generatorPanel, Component entitySelectorPanel) {
+// super(Application.getFrame());
+//
+// JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
+// splitPane.setFocusable(false);
+//
+// this.generateButton = new JButton("Generate");
+// getRootPane().setDefaultButton(generateButton);
+//
+// this.cancelButton = new JButton("Cancel");
+// this.classesCount = new JLabel("No classes selected");
+// classesCount.setFont(classesCount.getFont().deriveFont(10f));
+//
+//
+// JScrollPane scrollPane = new JScrollPane(
+// generatorPanel,
+// ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
+// ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+// scrollPane.setPreferredSize(new Dimension(630, 500));
+//
+// splitPane.setLeftComponent(entitySelectorPanel);
+// splitPane.setRightComponent(scrollPane);
+//
+// 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(cancelButton);
+// buttons.add(generateButton);
+//
+// Container contentPane = getContentPane();
+// contentPane.setLayout(new BorderLayout());
+// contentPane.add(splitPane, BorderLayout.CENTER);
+// contentPane.add(buttons, BorderLayout.SOUTH);
+//
+// setTitle("Code Generation");
+// }
+//
+// public JButton getCancelButton() {
+// return cancelButton;
+// }
+//
+// public JButton getGenerateButton() {
+// return generateButton;
+// }
+//
+// public JLabel getClassesCount() {
+// return classesCount;
+// }
+//}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cayenne/blob/52ea45b5/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomModeController.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomModeController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomModeController.java
index bb87006..344bd72 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomModeController.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomModeController.java
@@ -1,235 +1,235 @@
-/*****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- ****************************************************************/
-
-package org.apache.cayenne.modeler.dialog.codegen;
-
-import org.apache.cayenne.gen.ClassGenerationAction;
-import org.apache.cayenne.map.DataMap;
-import org.apache.cayenne.modeler.CodeTemplateManager;
-import org.apache.cayenne.modeler.dialog.pref.PreferenceDialog;
-import org.apache.cayenne.modeler.pref.DataMapDefaults;
-import org.apache.cayenne.swing.BindingBuilder;
-import org.apache.cayenne.swing.ObjectBinding;
-import org.apache.cayenne.util.Util;
-
-import javax.swing.DefaultComboBoxModel;
-import javax.swing.JCheckBox;
-import javax.swing.JComboBox;
-import java.awt.Component;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Map.Entry;
-import java.util.Objects;
-import java.util.Set;
-import java.util.TreeMap;
-
-import static org.apache.cayenne.modeler.CodeTemplateManager.SINGLE_SERVER_CLASS;
-import static org.apache.cayenne.modeler.CodeTemplateManager.STANDARD_SERVER_SUBCLASS;
-import static org.apache.cayenne.modeler.CodeTemplateManager.STANDARD_SERVER_SUPERCLASS;
-import static org.apache.cayenne.modeler.dialog.pref.PreferenceDialog.TEMPLATES_KEY;
-
-/**
- * A controller for the custom generation mode.
- */
-public class CustomModeController extends GeneratorController {
-
- // correspond to non-public constants on MapClassGenerator.
- private static final String MODE_ENTITY = "entity";
-
- protected CustomModePanel view;
- private CodeTemplateManager templateManager;
-
- private ObjectBinding superTemplate;
- private ObjectBinding subTemplate;
-
- private CustomPreferencesUpdater preferencesUpdater;
-
- public CustomPreferencesUpdater getCustomPreferencesUpdater() {
- return preferencesUpdater;
- }
-
- public CustomModeController(CodeGeneratorControllerBase parent) {
- super(parent);
-
- // bind preferences and init defaults...
-
- Set<Entry<DataMap, DataMapDefaults>> entities = getMapPreferences().entrySet();
-
- for (Entry<DataMap, DataMapDefaults> entry : entities) {
-
- if (Util.isEmptyString(entry.getValue().getSuperclassTemplate())) {
- entry.getValue().setSuperclassTemplate(STANDARD_SERVER_SUPERCLASS);
- }
-
- if (Util.isEmptyString(entry.getValue().getSubclassTemplate())) {
- entry.getValue().setSubclassTemplate(STANDARD_SERVER_SUBCLASS);
- }
-
- if (Util.isEmptyString(entry.getValue().getProperty("mode"))) {
- entry.getValue().setProperty("mode", MODE_ENTITY);
- }
-
- if (Util.isEmptyString(entry.getValue().getProperty("overwrite"))) {
- entry.getValue().setBooleanProperty("overwrite", false);
- }
-
- if (Util.isEmptyString(entry.getValue().getProperty("pairs"))) {
- entry.getValue().setBooleanProperty("pairs", true);
- }
-
- if (Util.isEmptyString(entry.getValue().getProperty("usePackagePath"))) {
- entry.getValue().setBooleanProperty("usePackagePath", true);
- }
-
- if (Util.isEmptyString(entry.getValue().getProperty("outputPattern"))) {
- entry.getValue().setProperty("outputPattern", "*.java");
- }
- }
-
- BindingBuilder builder = new BindingBuilder(getApplication().getBindingFactory(), this);
-
- builder.bindToAction(view.getManageTemplatesLink(), "popPreferencesAction()");
-
- builder.bindToStateChange(view.getOverwrite(), "customPreferencesUpdater.overwrite").updateView();
-
- builder.bindToStateChange(view.getPairs(), "customPreferencesUpdater.pairs").updateView();
-
- builder.bindToStateChange(view.getUsePackagePath(), "customPreferencesUpdater.usePackagePath").updateView();
-
- subTemplate = builder.bindToComboSelection(view.getSubclassTemplate(),
- "customPreferencesUpdater.subclassTemplate");
-
- superTemplate = builder.bindToComboSelection(view.getSuperclassTemplate(),
- "customPreferencesUpdater.superclassTemplate");
-
- builder.bindToTextField(view.getOutputPattern(), "customPreferencesUpdater.outputPattern").updateView();
-
- builder.bindToStateChange(view.getCreatePropertyNames(), "customPreferencesUpdater.createPropertyNames")
- .updateView();
-
- builder.bindToStateChange(view.getCreatePKProperties(), "customPreferencesUpdater.createPKProperties")
- .updateView();
-
- updateTemplates();
- }
-
- protected void createDefaults() {
- TreeMap<DataMap, DataMapDefaults> map = new TreeMap<DataMap, DataMapDefaults>();
- Collection<DataMap> dataMaps = getParentController().getDataMaps();
- for (DataMap dataMap : dataMaps) {
- DataMapDefaults preferences;
- preferences = getApplication().getFrameController().getProjectController()
- .getDataMapPreferences(this.getClass().getName().replace(".", "/"), dataMap);
- preferences.setSuperclassPackage("");
- preferences.updateSuperclassPackage(dataMap, false);
-
- map.put(dataMap, preferences);
-
- if (getOutputPath() == null) {
- setOutputPath(preferences.getOutputPath());
- }
- }
-
- setMapPreferences(map);
- preferencesUpdater = new CustomPreferencesUpdater(map);
- }
-
- protected GeneratorControllerPanel createView() {
- this.view = new CustomModePanel();
- return view;
- }
-
- private void updateTemplates() {
- this.templateManager = getApplication().getCodeTemplateManager();
-
- List<String> customTemplates = new ArrayList<>(templateManager.getCustomTemplates().keySet());
- Collections.sort(customTemplates);
-
- List<String> superTemplates = new ArrayList<>(templateManager.getStandardSuperclassTemplates());
- Collections.sort(superTemplates);
- superTemplates.addAll(customTemplates);
-
- List<String> subTemplates = new ArrayList<>(templateManager.getStandardSubclassTemplates());
- Collections.sort(subTemplates);
- subTemplates.addAll(customTemplates);
-
- this.view.getSubclassTemplate().setModel(new DefaultComboBoxModel<>(subTemplates.toArray(new String[0])));
- this.view.getSuperclassTemplate().setModel(new DefaultComboBoxModel<>(superTemplates.toArray(new String[0])));
-
- JCheckBox pairs = this.view.getPairs();
- updateView();
- pairs.addItemListener(e -> updateView());
-
- superTemplate.updateView();
- subTemplate.updateView();
- }
-
- private void updateView() {
- boolean selected = view.getPairs().isSelected();
- JComboBox<String> subclassTemplate = view.getSubclassTemplate();
- subclassTemplate.setSelectedItem(selected ? STANDARD_SERVER_SUBCLASS : SINGLE_SERVER_CLASS);
- view.getSuperclassTemplate().setEnabled(selected);
- view.getOverwrite().setEnabled(!selected);
- }
-
- public Component getView() {
- return view;
- }
-
- public Collection<ClassGenerationAction> createGenerator() {
-
- Collection<ClassGenerationAction> generators = super.createGenerator();
-
- String superKey = Objects.requireNonNull(view.getSuperclassTemplate().getSelectedItem()).toString();
- String superTemplate = templateManager.getTemplatePath(superKey);
-
- String subKey = Objects.requireNonNull(view.getSubclassTemplate().getSelectedItem()).toString();
- String subTemplate = templateManager.getTemplatePath(subKey);
-
- for (ClassGenerationAction generator : generators) {
- generator.setSuperTemplate(superTemplate);
- generator.setTemplate(subTemplate);
- generator.setOverwrite(view.getOverwrite().isSelected());
- generator.setUsePkgPath(view.getUsePackagePath().isSelected());
- generator.setMakePairs(view.getPairs().isSelected());
- generator.setCreatePropertyNames(view.getCreatePropertyNames().isSelected());
- generator.setCreatePKProperties(view.getCreatePKProperties().isSelected());
-
- if (!Util.isEmptyString(view.getOutputPattern().getText())) {
- generator.setOutputPattern(view.getOutputPattern().getText());
- }
- }
-
- return generators;
- }
-
- public void popPreferencesAction() {
- new PreferenceDialog(getApplication().getFrameController()).startupAction(TEMPLATES_KEY);
- updateTemplates();
- }
-
- @Override
- protected ClassGenerationAction newGenerator() {
- ClassGenerationAction action = new ClassGenerationAction();
- getApplication().getInjector().injectMembers(action);
- return action;
- }
-}
\ No newline at end of file
+///*****************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one
+// * or more contributor license agreements. See the NOTICE file
+// * distributed with this work for additional information
+// * regarding copyright ownership. The ASF licenses this file
+// * to you under the Apache License, Version 2.0 (the
+// * "License"); you may not use this file except in compliance
+// * with the License. You may obtain a copy of the License at
+// *
+// * http://www.apache.org/licenses/LICENSE-2.0
+// *
+// * Unless required by applicable law or agreed to in writing,
+// * software distributed under the License is distributed on an
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// * KIND, either express or implied. See the License for the
+// * specific language governing permissions and limitations
+// * under the License.
+// ****************************************************************/
+//
+//package org.apache.cayenne.modeler.dialog.codegen;
+//
+//import org.apache.cayenne.gen.ClassGenerationAction;
+//import org.apache.cayenne.map.DataMap;
+//import org.apache.cayenne.modeler.CodeTemplateManager;
+//import org.apache.cayenne.modeler.dialog.pref.PreferenceDialog;
+//import org.apache.cayenne.modeler.pref.DataMapDefaults;
+//import org.apache.cayenne.swing.BindingBuilder;
+//import org.apache.cayenne.swing.ObjectBinding;
+//import org.apache.cayenne.util.Util;
+//
+//import javax.swing.DefaultComboBoxModel;
+//import javax.swing.JCheckBox;
+//import javax.swing.JComboBox;
+//import java.awt.Component;
+//import java.util.List;
+//import java.util.ArrayList;
+//import java.util.Collection;
+//import java.util.Collections;
+//import java.util.Map.Entry;
+//import java.util.Objects;
+//import java.util.Set;
+//import java.util.TreeMap;
+//
+//import static org.apache.cayenne.modeler.CodeTemplateManager.SINGLE_SERVER_CLASS;
+//import static org.apache.cayenne.modeler.CodeTemplateManager.STANDARD_SERVER_SUBCLASS;
+//import static org.apache.cayenne.modeler.CodeTemplateManager.STANDARD_SERVER_SUPERCLASS;
+//import static org.apache.cayenne.modeler.dialog.pref.PreferenceDialog.TEMPLATES_KEY;
+//
+///**
+// * A controller for the custom generation mode.
+// */
+//public class CustomModeController extends GeneratorController {
+//
+// // correspond to non-public constants on MapClassGenerator.
+// private static final String MODE_ENTITY = "entity";
+//
+// protected CustomModePanel view;
+// private CodeTemplateManager templateManager;
+//
+// private ObjectBinding superTemplate;
+// private ObjectBinding subTemplate;
+//
+// private CustomPreferencesUpdater preferencesUpdater;
+//
+// public CustomPreferencesUpdater getCustomPreferencesUpdater() {
+// return preferencesUpdater;
+// }
+//
+// public CustomModeController(CodeGeneratorControllerBase parent) {
+// super(parent);
+//
+// // bind preferences and init defaults...
+//
+// Set<Entry<DataMap, DataMapDefaults>> entities = getMapPreferences().entrySet();
+//
+// for (Entry<DataMap, DataMapDefaults> entry : entities) {
+//
+// if (Util.isEmptyString(entry.getValue().getSuperclassTemplate())) {
+// entry.getValue().setSuperclassTemplate(STANDARD_SERVER_SUPERCLASS);
+// }
+//
+// if (Util.isEmptyString(entry.getValue().getSubclassTemplate())) {
+// entry.getValue().setSubclassTemplate(STANDARD_SERVER_SUBCLASS);
+// }
+//
+// if (Util.isEmptyString(entry.getValue().getProperty("mode"))) {
+// entry.getValue().setProperty("mode", MODE_ENTITY);
+// }
+//
+// if (Util.isEmptyString(entry.getValue().getProperty("overwrite"))) {
+// entry.getValue().setBooleanProperty("overwrite", false);
+// }
+//
+// if (Util.isEmptyString(entry.getValue().getProperty("pairs"))) {
+// entry.getValue().setBooleanProperty("pairs", true);
+// }
+//
+// if (Util.isEmptyString(entry.getValue().getProperty("usePackagePath"))) {
+// entry.getValue().setBooleanProperty("usePackagePath", true);
+// }
+//
+// if (Util.isEmptyString(entry.getValue().getProperty("outputPattern"))) {
+// entry.getValue().setProperty("outputPattern", "*.java");
+// }
+// }
+//
+// BindingBuilder builder = new BindingBuilder(getApplication().getBindingFactory(), this);
+//
+// builder.bindToAction(view.getManageTemplatesLink(), "popPreferencesAction()");
+//
+// builder.bindToStateChange(view.getOverwrite(), "customPreferencesUpdater.overwrite").updateView();
+//
+// builder.bindToStateChange(view.getPairs(), "customPreferencesUpdater.pairs").updateView();
+//
+// builder.bindToStateChange(view.getUsePackagePath(), "customPreferencesUpdater.usePackagePath").updateView();
+//
+// subTemplate = builder.bindToComboSelection(view.getSubclassTemplate(),
+// "customPreferencesUpdater.subclassTemplate");
+//
+// superTemplate = builder.bindToComboSelection(view.getSuperclassTemplate(),
+// "customPreferencesUpdater.superclassTemplate");
+//
+// builder.bindToTextField(view.getOutputPattern(), "customPreferencesUpdater.outputPattern").updateView();
+//
+// builder.bindToStateChange(view.getCreatePropertyNames(), "customPreferencesUpdater.createPropertyNames")
+// .updateView();
+//
+// builder.bindToStateChange(view.getCreatePKProperties(), "customPreferencesUpdater.createPKProperties")
+// .updateView();
+//
+// updateTemplates();
+// }
+//
+// protected void createDefaults() {
+// TreeMap<DataMap, DataMapDefaults> map = new TreeMap<DataMap, DataMapDefaults>();
+// Collection<DataMap> dataMaps = getParentController().getDataMaps();
+// for (DataMap dataMap : dataMaps) {
+// DataMapDefaults preferences;
+// preferences = getApplication().getFrameController().getProjectController()
+// .getDataMapPreferences(this.getClass().getName().replace(".", "/"), dataMap);
+// preferences.setSuperclassPackage("");
+// preferences.updateSuperclassPackage(dataMap, false);
+//
+// map.put(dataMap, preferences);
+//
+// if (getOutputPath() == null) {
+// setOutputPath(preferences.getOutputPath());
+// }
+// }
+//
+// setMapPreferences(map);
+// preferencesUpdater = new CustomPreferencesUpdater(map);
+// }
+//
+// protected GeneratorControllerPanel createView() {
+// this.view = new CustomModePanel();
+// return view;
+// }
+//
+// private void updateTemplates() {
+// this.templateManager = getApplication().getCodeTemplateManager();
+//
+// List<String> customTemplates = new ArrayList<>(templateManager.getCustomTemplates().keySet());
+// Collections.sort(customTemplates);
+//
+// List<String> superTemplates = new ArrayList<>(templateManager.getStandardSuperclassTemplates());
+// Collections.sort(superTemplates);
+// superTemplates.addAll(customTemplates);
+//
+// List<String> subTemplates = new ArrayList<>(templateManager.getStandardSubclassTemplates());
+// Collections.sort(subTemplates);
+// subTemplates.addAll(customTemplates);
+//
+// this.view.getSubclassTemplate().setModel(new DefaultComboBoxModel<>(subTemplates.toArray(new String[0])));
+// this.view.getSuperclassTemplate().setModel(new DefaultComboBoxModel<>(superTemplates.toArray(new String[0])));
+//
+// JCheckBox pairs = this.view.getPairs();
+// updateView();
+// pairs.addItemListener(e -> updateView());
+//
+// superTemplate.updateView();
+// subTemplate.updateView();
+// }
+//
+// private void updateView() {
+// boolean selected = view.getPairs().isSelected();
+// JComboBox<String> subclassTemplate = view.getSubclassTemplate();
+// subclassTemplate.setSelectedItem(selected ? STANDARD_SERVER_SUBCLASS : SINGLE_SERVER_CLASS);
+// view.getSuperclassTemplate().setEnabled(selected);
+// view.getOverwrite().setEnabled(!selected);
+// }
+//
+// public Component getView() {
+// return view;
+// }
+//
+// public Collection<ClassGenerationAction> createConfiguration() {
+//
+// Collection<ClassGenerationAction> generators = super.createConfiguration();
+//
+// String superKey = Objects.requireNonNull(view.getSuperclassTemplate().getSelectedItem()).toString();
+// String superTemplate = templateManager.getTemplatePath(superKey);
+//
+// String subKey = Objects.requireNonNull(view.getSubclassTemplate().getSelectedItem()).toString();
+// String subTemplate = templateManager.getTemplatePath(subKey);
+//
+// for (ClassGenerationAction generator : generators) {
+// generator.setSuperTemplate(superTemplate);
+// generator.setTemplate(subTemplate);
+// generator.setOverwrite(view.getOverwrite().isSelected());
+// generator.setUsePkgPath(view.getUsePackagePath().isSelected());
+// generator.setMakePairs(view.getPairs().isSelected());
+// generator.setCreatePropertyNames(view.getCreatePropertyNames().isSelected());
+// generator.setCreatePKProperties(view.getCreatePKProperties().isSelected());
+//
+// if (!Util.isEmptyString(view.getOutputPattern().getText())) {
+// generator.setOutputPattern(view.getOutputPattern().getText());
+// }
+// }
+//
+// return generators;
+// }
+//
+// public void popPreferencesAction() {
+// new PreferenceDialog(getApplication().getFrameController()).startupAction(TEMPLATES_KEY);
+// updateTemplates();
+// }
+//
+// @Override
+// protected ClassGenerationAction newGenerator() {
+// ClassGenerationAction action = new ClassGenerationAction();
+// getApplication().getInjector().injectMembers(action);
+// return action;
+// }
+//}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cayenne/blob/52ea45b5/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomModePanel.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomModePanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomModePanel.java
index 406e1d2..6396abd 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomModePanel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomModePanel.java
@@ -1,137 +1,137 @@
-/*****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- ****************************************************************/
-
-package org.apache.cayenne.modeler.dialog.codegen;
-
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-import com.jgoodies.forms.layout.FormLayout;
-import org.apache.cayenne.swing.control.ActionLink;
-
-import javax.swing.JCheckBox;
-import javax.swing.JComboBox;
-import javax.swing.JPanel;
-import javax.swing.JTextField;
-import java.awt.BorderLayout;
-import java.awt.FlowLayout;
-
-public class CustomModePanel extends GeneratorControllerPanel {
-
- private JComboBox<String> subclassTemplate;
- private JComboBox<String> superclassTemplate;
- protected JCheckBox pairs;
- private JCheckBox overwrite;
- private JCheckBox usePackagePath;
- private JTextField outputPattern;
- private JCheckBox createPropertyNames;
- private JCheckBox createPKProperties;
-
- private ActionLink manageTemplatesLink;
-
- CustomModePanel() {
-
- this.superclassTemplate = new JComboBox<>();
- this.subclassTemplate = new JComboBox<>();
- this.pairs = new JCheckBox();
- this.overwrite = new JCheckBox();
- this.usePackagePath = new JCheckBox();
- this.outputPattern = new JTextField();
- this.createPropertyNames = new JCheckBox();
- this.createPKProperties = new JCheckBox();
- this.manageTemplatesLink = new ActionLink("Customize Templates...");
- manageTemplatesLink.setFont(manageTemplatesLink.getFont().deriveFont(10f));
-
- // assemble
- FormLayout layout = new FormLayout(
- "right:77dlu, 1dlu, fill:100:grow, 1dlu, left:80dlu, 1dlu", "");
- DefaultFormBuilder builder = new DefaultFormBuilder(layout);
- builder.setDefaultDialogBorder();
-
- builder.append("Output Directory:", outputFolder, selectOutputFolder);
- builder.nextLine();
-
- builder.append("Subclass Template:", subclassTemplate);
- builder.nextLine();
-
- builder.append("Superclass Template:", superclassTemplate);
- builder.nextLine();
-
- builder.append("Output Pattern:", outputPattern);
- builder.nextLine();
-
- builder.append("Make Pairs:", pairs);
- builder.nextLine();
-
- builder.append("Use Package Path:", usePackagePath);
- builder.nextLine();
-
- builder.append("Overwrite Subclasses:", overwrite);
- builder.nextLine();
-
- builder.append("Create Property Names:", createPropertyNames);
- builder.nextLine();
-
- builder.append("Create PK Properties:", createPKProperties);
- builder.nextLine();
-
- setLayout(new BorderLayout());
- add(builder.getPanel(), BorderLayout.CENTER);
-
- JPanel links = new JPanel(new FlowLayout(FlowLayout.RIGHT));
- links.add(manageTemplatesLink);
- add(links, BorderLayout.SOUTH);
-
- add(builder.getPanel(), BorderLayout.CENTER);
- }
-
- public ActionLink getManageTemplatesLink() {
- return manageTemplatesLink;
- }
-
- public JComboBox<String> getSubclassTemplate() {
- return subclassTemplate;
- }
-
- public JComboBox<String> getSuperclassTemplate() {
- return superclassTemplate;
- }
-
- public JCheckBox getOverwrite() {
- return overwrite;
- }
-
- public JCheckBox getPairs() {
- return pairs;
- }
-
- public JCheckBox getUsePackagePath() {
- return usePackagePath;
- }
-
- public JTextField getOutputPattern() {
- return outputPattern;
- }
-
- public JCheckBox getCreatePropertyNames() {
- return createPropertyNames;
- }
-
- public JCheckBox getCreatePKProperties() {
- return createPKProperties;
- }
-}
\ No newline at end of file
+///*****************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one
+// * or more contributor license agreements. See the NOTICE file
+// * distributed with this work for additional information
+// * regarding copyright ownership. The ASF licenses this file
+// * to you under the Apache License, Version 2.0 (the
+// * "License"); you may not use this file except in compliance
+// * with the License. You may obtain a copy of the License at
+// *
+// * http://www.apache.org/licenses/LICENSE-2.0
+// *
+// * Unless required by applicable law or agreed to in writing,
+// * software distributed under the License is distributed on an
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// * KIND, either express or implied. See the License for the
+// * specific language governing permissions and limitations
+// * under the License.
+// ****************************************************************/
+//
+//package org.apache.cayenne.modeler.dialog.codegen;
+//
+//import com.jgoodies.forms.builder.DefaultFormBuilder;
+//import com.jgoodies.forms.layout.FormLayout;
+//import org.apache.cayenne.swing.control.ActionLink;
+//
+//import javax.swing.JCheckBox;
+//import javax.swing.JComboBox;
+//import javax.swing.JPanel;
+//import javax.swing.JTextField;
+//import java.awt.BorderLayout;
+//import java.awt.FlowLayout;
+//
+//public class CustomModePanel extends GeneratorControllerPanel {
+//
+// private JComboBox<String> subclassTemplate;
+// private JComboBox<String> superclassTemplate;
+// protected JCheckBox pairs;
+// private JCheckBox overwrite;
+// private JCheckBox usePackagePath;
+// private JTextField outputPattern;
+// private JCheckBox createPropertyNames;
+// private JCheckBox createPKProperties;
+//
+// private ActionLink manageTemplatesLink;
+//
+// CustomModePanel() {
+//
+// this.superclassTemplate = new JComboBox<>();
+// this.subclassTemplate = new JComboBox<>();
+// this.pairs = new JCheckBox();
+// this.overwrite = new JCheckBox();
+// this.usePackagePath = new JCheckBox();
+// this.outputPattern = new JTextField();
+// this.createPropertyNames = new JCheckBox();
+// this.createPKProperties = new JCheckBox();
+// this.manageTemplatesLink = new ActionLink("Customize Templates...");
+// manageTemplatesLink.setFont(manageTemplatesLink.getFont().deriveFont(10f));
+//
+// // assemble
+// FormLayout layout = new FormLayout(
+// "right:77dlu, 1dlu, fill:100:grow, 1dlu, left:80dlu, 1dlu", "");
+// DefaultFormBuilder builder = new DefaultFormBuilder(layout);
+// builder.setDefaultDialogBorder();
+//
+// builder.append("Output Directory:", outputFolder, selectOutputFolder);
+// builder.nextLine();
+//
+// builder.append("Subclass Template:", subclassTemplate);
+// builder.nextLine();
+//
+// builder.append("Superclass Template:", superclassTemplate);
+// builder.nextLine();
+//
+// builder.append("Output Pattern:", outputPattern);
+// builder.nextLine();
+//
+// builder.append("Make Pairs:", pairs);
+// builder.nextLine();
+//
+// builder.append("Use Package Path:", usePackagePath);
+// builder.nextLine();
+//
+// builder.append("Overwrite Subclasses:", overwrite);
+// builder.nextLine();
+//
+// builder.append("Create Property Names:", createPropertyNames);
+// builder.nextLine();
+//
+// builder.append("Create PK Properties:", createPKProperties);
+// builder.nextLine();
+//
+// setLayout(new BorderLayout());
+// add(builder.getPanel(), BorderLayout.CENTER);
+//
+// JPanel links = new JPanel(new FlowLayout(FlowLayout.RIGHT));
+// links.add(manageTemplatesLink);
+// add(links, BorderLayout.SOUTH);
+//
+// add(builder.getPanel(), BorderLayout.CENTER);
+// }
+//
+// public ActionLink getManageTemplatesLink() {
+// return manageTemplatesLink;
+// }
+//
+// public JComboBox<String> getSubclassTemplate() {
+// return subclassTemplate;
+// }
+//
+// public JComboBox<String> getSuperclassTemplate() {
+// return superclassTemplate;
+// }
+//
+// public JCheckBox getOverwrite() {
+// return overwrite;
+// }
+//
+// public JCheckBox getPairs() {
+// return pairs;
+// }
+//
+// public JCheckBox getUsePackagePath() {
+// return usePackagePath;
+// }
+//
+// public JTextField getOutputPattern() {
+// return outputPattern;
+// }
+//
+// public JCheckBox getCreatePropertyNames() {
+// return createPropertyNames;
+// }
+//
+// public JCheckBox getCreatePKProperties() {
+// return createPKProperties;
+// }
+//}
\ No newline at end of file
[14/32] cayenne git commit: Cgen tab, cgen configuration,
cgen in maven, ant, gradle.
Posted by nt...@apache.org.
http://git-wip-us.apache.org/repos/asf/cayenne/blob/52ea45b5/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/StandardModePanel.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/StandardModePanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/StandardModePanel.java
index cbb3f35..81bd599 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/StandardModePanel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/StandardModePanel.java
@@ -1,42 +1,42 @@
-/*****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- ****************************************************************/
-
-package org.apache.cayenne.modeler.dialog.codegen;
-
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-import com.jgoodies.forms.layout.FormLayout;
-
-import java.awt.BorderLayout;
-
-public class StandardModePanel extends GeneratorControllerPanel {
-
- private DefaultFormBuilder builder;
-
- public StandardModePanel() {
- FormLayout layout = new FormLayout(
- "right:77dlu, 1dlu, fill:100:grow, 1dlu, left:80dlu, 1dlu", "");
-
- builder = new DefaultFormBuilder(layout);
- builder.append("Output Directory:", outputFolder, selectOutputFolder);
- builder.nextLine();
-
- setLayout(new BorderLayout());
- add(builder.getPanel(), BorderLayout.CENTER);
- }
-}
\ No newline at end of file
+///*****************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one
+// * or more contributor license agreements. See the NOTICE file
+// * distributed with this work for additional information
+// * regarding copyright ownership. The ASF licenses this file
+// * to you under the Apache License, Version 2.0 (the
+// * "License"); you may not use this file except in compliance
+// * with the License. You may obtain a copy of the License at
+// *
+// * http://www.apache.org/licenses/LICENSE-2.0
+// *
+// * Unless required by applicable law or agreed to in writing,
+// * software distributed under the License is distributed on an
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// * KIND, either express or implied. See the License for the
+// * specific language governing permissions and limitations
+// * under the License.
+// ****************************************************************/
+//
+//package org.apache.cayenne.modeler.dialog.codegen;
+//
+//import com.jgoodies.forms.builder.DefaultFormBuilder;
+//import com.jgoodies.forms.layout.FormLayout;
+//
+//import java.awt.BorderLayout;
+//
+//public class StandardModePanel extends GeneratorControllerPanel {
+//
+// private DefaultFormBuilder builder;
+//
+// public StandardModePanel() {
+// FormLayout layout = new FormLayout(
+// "right:77dlu, 1dlu, fill:100:grow, 1dlu, left:80dlu, 1dlu", "");
+//
+// builder = new DefaultFormBuilder(layout);
+// builder.append("Output Directory:", outputFolder, selectOutputFolder);
+// builder.nextLine();
+//
+// setLayout(new BorderLayout());
+// add(builder.getPanel(), BorderLayout.CENTER);
+// }
+//}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cayenne/blob/52ea45b5/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/StandardPanelComponent.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/StandardPanelComponent.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/StandardPanelComponent.java
index 425a0f2..c900728 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/StandardPanelComponent.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/StandardPanelComponent.java
@@ -1,81 +1,81 @@
-/*****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- ****************************************************************/
-
-package org.apache.cayenne.modeler.dialog.codegen;
-
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-import com.jgoodies.forms.layout.FormLayout;
-import org.apache.cayenne.map.DataMap;
-import org.apache.cayenne.modeler.pref.DataMapDefaults;
-
-import javax.swing.JComponent;
-import javax.swing.JLabel;
-import javax.swing.JTextField;
-import java.awt.BorderLayout;
-
-public class StandardPanelComponent extends JComponent {
-
- private DataMap dataMap;
- private DataMapDefaults preferences;
- private JLabel dataMapName;
- private JTextField superclassPackage;
- private DefaultFormBuilder builder;
-
- public StandardPanelComponent() {
- super();
- dataMapName = new JLabel();
- dataMapName.setFont(dataMapName.getFont().deriveFont(1));
- superclassPackage = new JTextField();
-
- FormLayout layout = new FormLayout(
- "right:77dlu, 3dlu, fill:200:grow, 3dlu", "");
- builder = new DefaultFormBuilder(layout);
- builder.append(dataMapName);
- builder.nextLine();
- builder.append("Superclass Package:", superclassPackage);
-
- setLayout(new BorderLayout());
- add(builder.getPanel(), BorderLayout.CENTER);
- }
-
- public DataMap getDataMap() {
- return dataMap;
- }
-
- public void setDataMap(DataMap dataMap) {
- this.dataMap = dataMap;
- }
-
- public DataMapDefaults getPreferences() {
- return preferences;
- }
-
- public void setPreferences(DataMapDefaults preferences) {
- this.preferences = preferences;
- }
-
- public JLabel getDataMapName() {
- return dataMapName;
- }
-
- public JTextField getSuperclassPackage() {
- return superclassPackage;
- }
-
-}
\ No newline at end of file
+///*****************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one
+// * or more contributor license agreements. See the NOTICE file
+// * distributed with this work for additional information
+// * regarding copyright ownership. The ASF licenses this file
+// * to you under the Apache License, Version 2.0 (the
+// * "License"); you may not use this file except in compliance
+// * with the License. You may obtain a copy of the License at
+// *
+// * http://www.apache.org/licenses/LICENSE-2.0
+// *
+// * Unless required by applicable law or agreed to in writing,
+// * software distributed under the License is distributed on an
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// * KIND, either express or implied. See the License for the
+// * specific language governing permissions and limitations
+// * under the License.
+// ****************************************************************/
+//
+//package org.apache.cayenne.modeler.dialog.codegen;
+//
+//import com.jgoodies.forms.builder.DefaultFormBuilder;
+//import com.jgoodies.forms.layout.FormLayout;
+//import org.apache.cayenne.map.DataMap;
+//import org.apache.cayenne.modeler.pref.DataMapDefaults;
+//
+//import javax.swing.JComponent;
+//import javax.swing.JLabel;
+//import javax.swing.JTextField;
+//import java.awt.BorderLayout;
+//
+//public class StandardPanelComponent extends JComponent {
+//
+// private DataMap dataMap;
+// private DataMapDefaults preferences;
+// private JLabel dataMapName;
+// private JTextField superclassPackage;
+// private DefaultFormBuilder builder;
+//
+// public StandardPanelComponent() {
+// super();
+// dataMapName = new JLabel();
+// dataMapName.setFont(dataMapName.getFont().deriveFont(1));
+// superclassPackage = new JTextField();
+//
+// FormLayout layout = new FormLayout(
+// "right:77dlu, 3dlu, fill:200:grow, 3dlu", "");
+// builder = new DefaultFormBuilder(layout);
+// builder.append(dataMapName);
+// builder.nextLine();
+// builder.append("Superclass Package:", superclassPackage);
+//
+// setLayout(new BorderLayout());
+// add(builder.getPanel(), BorderLayout.CENTER);
+// }
+//
+// public DataMap getDataMap() {
+// return dataMap;
+// }
+//
+// public void setDataMap(DataMap dataMap) {
+// this.dataMap = dataMap;
+// }
+//
+// public DataMapDefaults getPreferences() {
+// return preferences;
+// }
+//
+// public void setPreferences(DataMapDefaults preferences) {
+// this.preferences = preferences;
+// }
+//
+// public JLabel getDataMapName() {
+// return dataMapName;
+// }
+//
+// public JTextField getSuperclassPackage() {
+// return superclassPackage;
+// }
+//
+//}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cayenne/blob/52ea45b5/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/DataDomainTabbedView.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/DataDomainTabbedView.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/DataDomainTabbedView.java
index be3a0e8..96a195e 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/DataDomainTabbedView.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/DataDomainTabbedView.java
@@ -1,84 +1,99 @@
-/*****************************************************************
- * 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;
-
-import javax.swing.JScrollPane;
-import javax.swing.JTabbedPane;
-import javax.swing.event.ChangeEvent;
-import javax.swing.event.ChangeListener;
-
-import org.apache.cayenne.modeler.ProjectController;
-import org.apache.cayenne.modeler.event.DomainDisplayEvent;
-import org.apache.cayenne.modeler.event.DomainDisplayListener;
-import org.apache.cayenne.modeler.event.EntityDisplayEvent;
-import org.apache.cayenne.modeler.graph.DataDomainGraphTab;
-
-/**
- * DataDomain editing tabs container
- */
-public class DataDomainTabbedView extends JTabbedPane
- implements ChangeListener, DomainDisplayListener {
-
- ProjectController mediator;
-
- DataDomainGraphTab graphTab;
-
- /**
- * constructor
- * @param mediator mediator instance
- */
- public DataDomainTabbedView(ProjectController mediator) {
- this.mediator = mediator;
-
- initView();
- }
-
- /**
- * create tabs
- */
- private void initView() {
-
- setTabPlacement(JTabbedPane.TOP);
-
- // add panels to tabs
- // note that those panels that have no internal scrollable tables
- // must be wrapped in a scroll pane
- JScrollPane domainView = new JScrollPane(new DataDomainView(mediator));
- addTab("Main", domainView);
-
- graphTab = new DataDomainGraphTab(mediator);
- addTab("Graph", graphTab);
-
- addChangeListener(this);
- mediator.addDomainDisplayListener(this);
- }
-
- public void stateChanged(ChangeEvent e) {
- if (getSelectedComponent() == graphTab) {
- graphTab.refresh();
- }
- }
-
- public void currentDomainChanged(DomainDisplayEvent e) {
- if (e instanceof EntityDisplayEvent) {
- //need select an entity
- setSelectedComponent(graphTab);
- }
- }
-}
+/*****************************************************************
+ * 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;
+
+import org.apache.cayenne.modeler.ProjectController;
+import org.apache.cayenne.modeler.action.GenerateCodeAction;
+import org.apache.cayenne.modeler.editor.cgen.domain.CgenTabController;
+import org.apache.cayenne.modeler.event.DomainDisplayEvent;
+import org.apache.cayenne.modeler.event.DomainDisplayListener;
+import org.apache.cayenne.modeler.event.EntityDisplayEvent;
+import org.apache.cayenne.modeler.graph.DataDomainGraphTab;
+
+import javax.swing.*;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+
+/**
+ * DataDomain editing tabs container
+ */
+public class DataDomainTabbedView extends JTabbedPane
+ implements ChangeListener, DomainDisplayListener {
+
+ ProjectController mediator;
+
+ DataDomainGraphTab graphTab;
+ JScrollPane cgenView;
+ CgenTabController cgenTabController;
+
+ /**
+ * constructor
+ * @param mediator mediator instance
+ */
+ public DataDomainTabbedView(ProjectController mediator) {
+ this.mediator = mediator;
+
+ initView();
+ }
+
+ /**
+ * create tabs
+ */
+ private void initView() {
+
+ setTabPlacement(JTabbedPane.TOP);
+
+ // add panels to tabs
+ // note that those panels that have no internal scrollable tables
+ // must be wrapped in a scroll pane
+ JScrollPane domainView = new JScrollPane(new DataDomainView(mediator));
+ addTab("Main", domainView);
+
+ graphTab = new DataDomainGraphTab(mediator);
+ addTab("Graph", graphTab);
+
+ addChangeListener(this);
+ mediator.addDomainDisplayListener(this);
+
+ cgenTabController = new CgenTabController(mediator);
+ cgenView = new JScrollPane(cgenTabController.getView());
+ addTab("Class Generation", cgenView);
+ }
+
+ public void stateChanged(ChangeEvent e) {
+ if (getSelectedComponent() == graphTab) {
+ graphTab.refresh();
+ } else if(getSelectedComponent() == cgenView) {
+ cgenTabController.getView().initView();
+ }
+ }
+
+ public void currentDomainChanged(DomainDisplayEvent e) {
+ if (e instanceof EntityDisplayEvent) {
+ //need select an entity
+ setSelectedComponent(graphTab);
+ }
+ if(getSelectedComponent() == cgenView) {
+ fireStateChanged();
+ }
+ if(e.getSource() instanceof GenerateCodeAction) {
+ setSelectedComponent(cgenView);
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/52ea45b5/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 388e087..76cf573 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
@@ -21,6 +21,7 @@ package org.apache.cayenne.modeler.editor;
import org.apache.cayenne.modeler.Application;
import org.apache.cayenne.modeler.ProjectController;
import org.apache.cayenne.modeler.editor.cgen.CodeGeneratorController;
+import org.apache.cayenne.modeler.editor.cgen.domain.CgenTab;
import org.apache.cayenne.modeler.editor.dbimport.DbImportView;
import javax.swing.*;
@@ -30,9 +31,11 @@ import javax.swing.*;
* Data map editing tabs container
*
*/
-public class DataMapTabbedView extends JTabbedPane {
+public class DataMapTabbedView extends JTabbedPane{
ProjectController mediator;
private CodeGeneratorController codeGeneratorController;
+ JScrollPane cgenView;
+
/**
* constructor
@@ -57,7 +60,7 @@ public class DataMapTabbedView extends JTabbedPane {
JScrollPane dataMapView = new JScrollPane(new DataMapView(mediator));
JScrollPane dbImportView = new JScrollPane(new DbImportView(mediator));
this.codeGeneratorController = new CodeGeneratorController(Application.getInstance().getFrameController(), mediator);
- JScrollPane cgenView = new JScrollPane(codeGeneratorController.getView());
+ cgenView = new JScrollPane(codeGeneratorController.getView());
addTab("DataMap", dataMapView);
addTab("DbImport", dbImportView);
addTab("Class Generation", cgenView);
@@ -70,13 +73,14 @@ public class DataMapTabbedView extends JTabbedPane {
mediator.addDataMapDisplayListener(e -> {
if(isCgenTabActive()) {
fireStateChanged();
+ } else if(e.getSource() instanceof CgenTab){
+ setSelectedComponent(cgenView);
}
});
}
private boolean isCgenTabActive() {
- return getSelectedIndex() == 2;
+ return getSelectedComponent() == cgenView;
}
-
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/52ea45b5/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
index 9f217f0..87881f4 100644
--- 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
@@ -19,8 +19,7 @@
package org.apache.cayenne.modeler.editor.cgen;
-import org.apache.cayenne.gen.ClassGenerationAction;
-import org.apache.cayenne.gen.ClientClassGenerationAction;
+import org.apache.cayenne.gen.CgenConfiguration;
public class ClientModeController extends StandardModeController {
@@ -34,7 +33,12 @@ public class ClientModeController extends StandardModeController {
}
@Override
- protected ClassGenerationAction newGenerator() {
- return new ClientClassGenerationAction();
+ public CgenConfiguration createConfiguration() {
+ return super.createConfiguration();
+ }
+
+ @Override
+ public void updateConfiguration(CgenConfiguration cgenConfiguration) {
+ cgenConfiguration.setClient(true);
}
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/52ea45b5/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 db6edb4..f4ab6bc 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
@@ -19,7 +19,9 @@
package org.apache.cayenne.modeler.editor.cgen;
+import org.apache.cayenne.gen.CgenConfiguration;
import org.apache.cayenne.gen.ClassGenerationAction;
+import org.apache.cayenne.gen.ClientClassGenerationAction;
import org.apache.cayenne.map.DataMap;
import org.apache.cayenne.modeler.ProjectController;
import org.apache.cayenne.modeler.dialog.ErrorDebugDialog;
@@ -31,6 +33,8 @@ import org.slf4j.LoggerFactory;
import javax.swing.*;
import java.awt.*;
import java.util.Collections;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
import java.util.function.Predicate;
/**
@@ -46,12 +50,14 @@ public class CodeGeneratorController extends CodeGeneratorControllerBase {
protected ClassesTabController classesSelector;
protected GeneratorTabController generatorSelector;
+ private ConcurrentMap<DataMap, GeneratorController> prevGeneratorController;
public CodeGeneratorController(CayenneController parent, ProjectController projectController) {
super(parent, projectController);
this.classesSelector = new ClassesTabController(this);
this.generatorSelector = new GeneratorTabController(this);
view = new CodeGeneratorPane(generatorSelector.getView(), classesSelector.getView());
+ this.prevGeneratorController = new ConcurrentHashMap<>();
initBindings();
initListeners();
}
@@ -59,10 +65,14 @@ public class CodeGeneratorController extends CodeGeneratorControllerBase {
public void startup(DataMap dataMap) {
super.startup(dataMap);
classesSelectedAction();
- GeneratorController modeController = generatorSelector.getGeneratorController();
- ClassGenerationAction classGenerationAction = modeController.createGenerator();
- modeController.initForm(classGenerationAction);
+ GeneratorController modeController = prevGeneratorController.get(dataMap) != null ? prevGeneratorController.get(dataMap) : generatorSelector.getStandartController();
+ CgenConfiguration cgenConfiguration = modeController.createConfiguration();
+ if(cgenConfiguration.isClient()) {
+ modeController = generatorSelector.getClientGeneratorController();
+ }
classesSelector.startup();
+ prevGeneratorController.put(dataMap, modeController);
+ generatorSelector.setSelectedController(modeController);
}
private void initListeners(){
@@ -141,21 +151,26 @@ public class CodeGeneratorController extends CodeGeneratorControllerBase {
}
public void generateAction() {
- ClassGenerationAction generator = generatorSelector.getGenerator();
-
- if (generator != null) {
- try {
- generator.prepareArtifacts();
- generator.execute();
- JOptionPane.showMessageDialog(
- this.getView(),
- "Class generation finished");
- } catch (Exception e) {
- logObj.error("Error generating classes", e);
- JOptionPane.showMessageDialog(
- this.getView(),
- "Error generating classes - " + e.getMessage());
- }
+ CgenConfiguration cgenConfiguration = generatorSelector.getConfiguration();
+ ClassGenerationAction generator = cgenConfiguration.isClient() ?
+ new ClientClassGenerationAction(cgenConfiguration) :
+ new ClassGenerationAction(cgenConfiguration);
+
+ try {
+ generator.prepareArtifacts();
+ generator.execute();
+ JOptionPane.showMessageDialog(
+ this.getView(),
+ "Class generation finished");
+ } catch (Exception e) {
+ logObj.error("Error generating classes", e);
+ JOptionPane.showMessageDialog(
+ this.getView(),
+ "Error generating classes - " + e.getMessage());
}
}
+
+ public ConcurrentMap<DataMap, GeneratorController> getPrevGeneratorController() {
+ return prevGeneratorController;
+ }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/52ea45b5/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 e9c2965..35ba15e 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
@@ -19,7 +19,7 @@
package org.apache.cayenne.modeler.editor.cgen;
-import org.apache.cayenne.gen.ClassGenerationAction;
+import org.apache.cayenne.gen.CgenConfiguration;
import org.apache.cayenne.map.DataMap;
import org.apache.cayenne.map.Embeddable;
import org.apache.cayenne.map.ObjEntity;
@@ -67,11 +67,14 @@ public abstract class CodeGeneratorControllerBase extends CayenneController {
public void startup(DataMap dataMap){
this.dataMap = dataMap;
+ prepareClasses(dataMap);
+ }
+
+ private void prepareClasses(DataMap dataMap) {
classes.clear();
this.classes.add(dataMap);
this.classes.addAll(dataMap.getObjEntities());
this.classes.addAll(dataMap.getEmbeddables());
-
initCollectionsForSelection(dataMap);
}
@@ -277,11 +280,11 @@ public abstract class CodeGeneratorControllerBase extends CayenneController {
private void updateArtifactGenerationMode(Object classObj, boolean selected) {
DataMap dataMap = (DataMap) classObj;
- ClassGenerationAction generator = projectController.getApplication().getMetaData().get(dataMap, ClassGenerationAction.class);
+ CgenConfiguration cgenConfiguration = projectController.getApplication().getMetaData().get(dataMap, CgenConfiguration.class);
if(selected) {
- generator.setArtifactsGenerationMode("all");
+ cgenConfiguration.setArtifactsGenerationMode("all");
} else {
- generator.setArtifactsGenerationMode("entity");
+ cgenConfiguration.setArtifactsGenerationMode("entity");
}
}
@@ -307,32 +310,30 @@ public abstract class CodeGeneratorControllerBase extends CayenneController {
public void updateEntities(){
DataMap map = getProjectController().getCurrentDataMap();
- ClassGenerationAction generator = projectController.getApplication().getMetaData().get(map, ClassGenerationAction.class);
- if(generator != null) {
- generator.resetCollections();
+ CgenConfiguration cgenConfiguration = projectController.getApplication().getMetaData().get(map, CgenConfiguration.class);
+ if(cgenConfiguration != null) {
+ cgenConfiguration.resetCollections();
for(ObjEntity entity: getSelectedEntities()) {
if(!entity.isGeneric()) {
- generator.loadEntity(entity.getName());
+ cgenConfiguration.loadEntity(entity.getName());
}
}
for(Embeddable embeddable : getSelectedEmbeddables()) {
- generator.loadEmbeddable(embeddable.getClassName());
+ cgenConfiguration.loadEmbeddable(embeddable.getClassName());
}
}
}
- public void addToSelectedEntities(DataMap dataMap, Collection<String> entities) {
- if(selectedEntities == null) {
- initCollectionsForSelection(dataMap);
- }
+ void addToSelectedEntities(DataMap dataMap, Collection<String> entities) {
+ prepareClasses(dataMap);
selectedEntities.addAll(entities);
+ updateEntities();
}
- public void addToSelectedEmbeddables(DataMap dataMap, Collection<String> embeddables) {
- if(selectedEmbeddables == null) {
- initCollectionsForSelection(dataMap);
- }
+ void addToSelectedEmbeddables(DataMap dataMap, Collection<String> embeddables) {
+ prepareClasses(dataMap);
selectedEmbeddables.addAll(embeddables);
+ updateEntities();
}
public int getSelectedEntitiesSize() {
http://git-wip-us.apache.org/repos/asf/cayenne/blob/52ea45b5/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 6a081a5..5626a38 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
@@ -19,6 +19,7 @@
package org.apache.cayenne.modeler.editor.cgen;
+import org.apache.cayenne.gen.CgenConfiguration;
import org.apache.cayenne.gen.ClassGenerationAction;
import org.apache.cayenne.modeler.CodeTemplateManager;
import org.apache.cayenne.modeler.dialog.pref.PreferenceDialog;
@@ -85,57 +86,70 @@ public class CustomModeController extends GeneratorController {
}
private void updateComboBoxes() {
- view.getSubclassTemplate().setItem(getApplication().getCodeTemplateManager().getNameByPath(classGenerationAction.getTemplate()));
- view.getSuperclassTemplate().setItem(getApplication().getCodeTemplateManager().getNameByPath(classGenerationAction.getSuperclassTemplate()));
+ view.getSubclassTemplate().setItem(getApplication().getCodeTemplateManager().getNameByPath(cgenConfiguration.getTemplate()));
+ view.getSuperclassTemplate().setItem(getApplication().getCodeTemplateManager().getNameByPath(cgenConfiguration.getSuperTemplate()));
view.setDisableSuperComboBoxes(view.getPairs().isSelected());
}
@Override
- protected ClassGenerationAction newGenerator() {
- ClassGenerationAction action = new ClassGenerationAction();
- getApplication().getInjector().injectMembers(action);
- return action;
+ public CgenConfiguration createConfiguration() {
+ return super.createConfiguration();
}
private void initListeners(){
view.getPairs().addActionListener(val -> {
- classGenerationAction.setMakePairs(view.getPairs().isSelected());
+ cgenConfiguration.setMakePairs(view.getPairs().isSelected());
+ if(!view.getPairs().isSelected()) {
+ cgenConfiguration.setTemplate(ClassGenerationAction.SINGLE_CLASS_TEMPLATE);
+ cgenConfiguration.setEmbeddableTemplate(ClassGenerationAction.EMBEDDABLE_SINGLE_CLASS_TEMPLATE);
+ cgenConfiguration.setQueryTemplate(ClassGenerationAction.DATAMAP_SINGLE_CLASS_TEMPLATE);
+ } else {
+ cgenConfiguration.setTemplate(ClassGenerationAction.SUBCLASS_TEMPLATE);
+ cgenConfiguration.setEmbeddableTemplate(ClassGenerationAction.EMBEDDABLE_SUBCLASS_TEMPLATE);
+ cgenConfiguration.setQueryTemplate(ClassGenerationAction.DATAMAP_SUBCLASS_TEMPLATE);
+ }
+ initForm(cgenConfiguration);
getParentController().getProjectController().setDirty(true);
});
view.getOverwrite().addActionListener(val -> {
- classGenerationAction.setOverwrite(view.getOverwrite().isSelected());
+ cgenConfiguration.setOverwrite(view.getOverwrite().isSelected());
getParentController().getProjectController().setDirty(true);
});
view.getCreatePropertyNames().addActionListener(val -> {
- classGenerationAction.setCreatePropertyNames(view.getCreatePropertyNames().isSelected());
+ cgenConfiguration.setCreatePropertyNames(view.getCreatePropertyNames().isSelected());
getParentController().getProjectController().setDirty(true);
});
view.getUsePackagePath().addActionListener(val -> {
- classGenerationAction.setUsePkgPath(view.getUsePackagePath().isSelected());
+ cgenConfiguration.setUsePkgPath(view.getUsePackagePath().isSelected());
getParentController().getProjectController().setDirty(true);
});
view.getPkProperties().addActionListener(val -> {
- classGenerationAction.setCreatePKProperties(view.getPkProperties().isSelected());
+ cgenConfiguration.setCreatePKProperties(view.getPkProperties().isSelected());
getParentController().getProjectController().setDirty(true);
});
}
- public void initForm(ClassGenerationAction classGenerationAction){
- 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.getPkProperties().setSelected(classGenerationAction.isCreatePKProperties());
- if(classGenerationAction.getArtifactsGenerationMode().equalsIgnoreCase("all")) {
- ((CodeGeneratorControllerBase)parent).setCurrentClass(classGenerationAction.getDataMap());
- ((CodeGeneratorControllerBase)parent).setSelected(true);
+ public void initForm(CgenConfiguration cgenConfiguration){
+ super.initForm(cgenConfiguration);
+ view.getOutputPattern().setText(cgenConfiguration.getOutputPattern());
+ view.getPairs().setSelected(cgenConfiguration.isMakePairs());
+ view.getUsePackagePath().setSelected(cgenConfiguration.isUsePkgPath());
+ view.getOverwrite().setSelected(cgenConfiguration.isOverwrite());
+ view.getCreatePropertyNames().setSelected(cgenConfiguration.isCreatePropertyNames());
+ view.getPkProperties().setSelected(cgenConfiguration.isCreatePKProperties());
+ if(cgenConfiguration.getArtifactsGenerationMode().equalsIgnoreCase("all")) {
+ ((CodeGeneratorControllerBase) parent).setCurrentClass(cgenConfiguration.getDataMap());
+ ((CodeGeneratorControllerBase) parent).setSelected(true);
}
updateComboBoxes();
}
+
+ @Override
+ public void updateConfiguration(CgenConfiguration cgenConfiguration) {
+ cgenConfiguration.setClient(false);
+ }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/52ea45b5/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 6b8db21..31aec74 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
@@ -20,13 +20,14 @@
package org.apache.cayenne.modeler.editor.cgen;
import org.apache.cayenne.gen.ArtifactsGenerationMode;
-import org.apache.cayenne.gen.ClassGenerationAction;
+import org.apache.cayenne.gen.CgenConfiguration;
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.FSPath;
import org.apache.cayenne.modeler.util.CayenneController;
import org.apache.cayenne.modeler.util.CodeValidationUtil;
+import org.apache.cayenne.modeler.util.ModelerUtil;
import org.apache.cayenne.modeler.util.TextAdapter;
import org.apache.cayenne.swing.BindingBuilder;
import org.apache.cayenne.util.Util;
@@ -52,7 +53,7 @@ import java.util.stream.Collectors;
public abstract class GeneratorController extends CayenneController {
protected String mode = ArtifactsGenerationMode.ENTITY.getLabel();
- protected ClassGenerationAction classGenerationAction;
+ protected CgenConfiguration cgenConfiguration;
public GeneratorController(CodeGeneratorControllerBase parent) {
super(parent);
@@ -72,36 +73,31 @@ public abstract class GeneratorController extends CayenneController {
protected abstract GeneratorControllerPanel createView();
- /**
- * Creates an appropriate subclass of {@link ClassGenerationAction},
- * returning it in an unconfigured state. Configuration is performed by
- * {@link #createGenerator()} method.
- */
- protected abstract ClassGenerationAction newGenerator();
-
- protected void initForm(ClassGenerationAction classGenerationAction) {
- this.classGenerationAction = classGenerationAction;
- classGenerationAction.setRootPath(Paths.get(initOutputFolder()));
- ((GeneratorControllerPanel)getView()).getOutputFolder().setText(classGenerationAction.getDir());
+ protected void initForm(CgenConfiguration cgenConfiguration) {
+ this.cgenConfiguration = cgenConfiguration;
+ ((GeneratorControllerPanel)getView()).getOutputFolder().setText(cgenConfiguration.getDir());
}
+ public abstract void updateConfiguration(CgenConfiguration cgenConfiguration);
+
/**
* Creates a class generator for provided selections.
*/
- public ClassGenerationAction createGenerator() {
+ public CgenConfiguration createConfiguration() {
DataMap map = getParentController().getProjectController().getCurrentDataMap();
- ClassGenerationAction generator = getParentController().projectController.getApplication().getMetaData().get(map, ClassGenerationAction.class);
- if(generator != null){
- getParentController().addToSelectedEntities(generator.getDataMap(), generator.getEntities());
- getParentController().addToSelectedEmbeddables(generator.getDataMap(), generator.getEmbeddables());
- return generator;
+ CgenConfiguration cgenConfiguration = getParentController().projectController.getApplication().getMetaData().get(map, CgenConfiguration.class);
+ if(cgenConfiguration != null){
+ getParentController().addToSelectedEntities(cgenConfiguration.getDataMap(), cgenConfiguration.getEntities());
+ getParentController().addToSelectedEmbeddables(cgenConfiguration.getDataMap(), cgenConfiguration.getEmbeddables());
+ cgenConfiguration.setRootPath(Paths.get(ModelerUtil.initOutputFolder()));
+ return cgenConfiguration;
}
try {
- generator = newGenerator();
- generator.setDataMap(map);
+ cgenConfiguration = new CgenConfiguration();
+ cgenConfiguration.setDataMap(map);
- Path basePath = Paths.get(initOutputFolder());
+ Path basePath = Paths.get(ModelerUtil.initOutputFolder());
// no destination folder
if (basePath == null) {
@@ -120,10 +116,10 @@ public abstract class GeneratorController extends CayenneController {
return null;
}
- generator.setRootPath(basePath);
+ cgenConfiguration.setRootPath(basePath);
Preferences preferences = application.getPreferencesNode(GeneralPreferences.class, "");
if (preferences != null) {
- generator.setEncoding(preferences.get(GeneralPreferences.ENCODING_PREFERENCE, null));
+ cgenConfiguration.setEncoding(preferences.get(GeneralPreferences.ENCODING_PREFERENCE, null));
}
getParentController().addToSelectedEntities(map, map.getObjEntities()
.stream()
@@ -133,14 +129,14 @@ public abstract class GeneratorController extends CayenneController {
.stream()
.map(Embeddable::getClassName)
.collect(Collectors.toList()));
- getParentController().projectController.getApplication().getMetaData().add(map, generator);
+ getParentController().projectController.getApplication().getMetaData().add(map, cgenConfiguration);
} catch (IOException exception) {
JOptionPane.showMessageDialog(this.getView(), "Can't create directory. " +
". Select a different one.");
return null;
}
- return generator;
+ return cgenConfiguration;
}
public void validateEmbeddable(ValidationResult validationBuffer, Embeddable embeddable) {
@@ -449,44 +445,4 @@ public abstract class GeneratorController extends CayenneController {
((GeneratorControllerPanel) getView()).getOutputFolder().updateModel();
}
}
-
- 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) {
- String path = lastPath.getPath();
- String resourcePath = buildFilePath("src", dirType, "resources");
- int idx = path.indexOf(resourcePath);
- if (idx < 0) {
- return null;
- }
- return path.substring(0, idx) + buildFilePath("src", dirType, "java");
- }
-
- private static String buildFilePath(String... pathElements) {
- if (pathElements.length == 0) {
- return "";
- }
- StringBuilder path = new StringBuilder(pathElements[0]);
- for (int i = 1; i < pathElements.length; i++) {
- path.append(File.separator).append(pathElements[i]);
- }
- return path.toString();
- }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/52ea45b5/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 98e7841..21bd223 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorControllerPanel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorControllerPanel.java
@@ -19,7 +19,7 @@
package org.apache.cayenne.modeler.editor.cgen;
-import org.apache.cayenne.gen.ClassGenerationAction;
+import org.apache.cayenne.gen.CgenConfiguration;
import org.apache.cayenne.map.DataMap;
import org.apache.cayenne.modeler.ProjectController;
import org.apache.cayenne.modeler.util.TextAdapter;
@@ -61,8 +61,8 @@ public class GeneratorControllerPanel extends JPanel {
return selectOutputFolder;
}
- public ClassGenerationAction getCgenByDataMap() {
+ public CgenConfiguration getCgenByDataMap() {
DataMap dataMap = projectController.getCurrentDataMap();
- return projectController.getApplication().getMetaData().get(dataMap, ClassGenerationAction.class);
+ return projectController.getApplication().getMetaData().get(dataMap, CgenConfiguration.class);
}
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/52ea45b5/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabController.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabController.java
index ef290a6..16aebae 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabController.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabController.java
@@ -19,12 +19,9 @@
package org.apache.cayenne.modeler.editor.cgen;
-import org.apache.cayenne.gen.ClassGenerationAction;
+import org.apache.cayenne.gen.CgenConfiguration;
import org.apache.cayenne.modeler.util.CayenneController;
-import org.apache.cayenne.pref.CayenneProjectPreferences;
import org.apache.cayenne.pref.PreferenceDetail;
-import org.apache.cayenne.swing.BindingBuilder;
-import org.apache.cayenne.util.Util;
import java.awt.*;
import java.util.HashMap;
@@ -77,39 +74,39 @@ public class GeneratorTabController extends CayenneController {
}
protected void initBindings() {
-
- // bind actions
- BindingBuilder builder = new BindingBuilder(
- getApplication().getBindingFactory(),
- this);
-
- CayenneProjectPreferences cayPrPref = application.getCayenneProjectPreferences();
-
- this.preferences = (PreferenceDetail) cayPrPref.getProjectDetailObject(
- PreferenceDetail.class,
- getViewPreferences().node("controller"));
-
- if (Util.isEmptyString(preferences.getProperty("mode"))) {
- preferences.setProperty("mode", STANDARD_OBJECTS_MODE);
- }
-
- builder.bindToComboSelection(
- view.getGenerationMode(),
- "preferences.property['mode']").updateView();
-
view.getGenerationMode().addActionListener(action -> {
String name = (String)view.getGenerationMode().getSelectedItem();
- controllers.get(name).initForm(getGenerator());
+ GeneratorController modeController = getGeneratorController();
+ CgenConfiguration cgenConfiguration = modeController.createConfiguration();
+ modeController.updateConfiguration(cgenConfiguration);
+ controllers.get(name).initForm(cgenConfiguration);
+ ((CodeGeneratorController)getParentController()).getPrevGeneratorController().put(cgenConfiguration.getDataMap(), modeController);
});
}
+ public void setSelectedController(GeneratorController generatorController) {
+ for(String key : controllers.keySet()) {
+ if(generatorController.equals(controllers.get(key))) {
+ ((GeneratorTabPanel)getView()).getGenerationMode().setSelectedItem(key);
+ }
+ }
+ }
+
GeneratorController getGeneratorController() {
String name = (String)view.getGenerationMode().getSelectedItem();
return controllers.get(name);
}
- public ClassGenerationAction getGenerator() {
+ GeneratorController getStandartController() {
+ return controllers.get(STANDARD_OBJECTS_MODE);
+ }
+
+ GeneratorController getClientGeneratorController() {
+ return controllers.get(CLIENT_OBJECTS_MODE);
+ }
+
+ public CgenConfiguration getConfiguration() {
GeneratorController modeController = getGeneratorController();
- return (modeController != null) ? modeController.createGenerator() : null;
+ return (modeController != null) ? modeController.createConfiguration() : null;
}
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cayenne/blob/52ea45b5/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/StandardModeController.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/StandardModeController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/StandardModeController.java
index 6985896..69cb19f 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/StandardModeController.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/StandardModeController.java
@@ -19,7 +19,7 @@
package org.apache.cayenne.modeler.editor.cgen;
-import org.apache.cayenne.gen.ClassGenerationAction;
+import org.apache.cayenne.gen.CgenConfiguration;
import org.apache.cayenne.modeler.pref.DataMapDefaults;
import java.awt.*;
@@ -43,19 +43,18 @@ public class StandardModeController extends GeneratorController {
}
@Override
- protected ClassGenerationAction newGenerator() {
- ClassGenerationAction action = new ClassGenerationAction();
- getApplication().getInjector().injectMembers(action);
- return action;
+ public CgenConfiguration createConfiguration() {
+ return super.createConfiguration();
}
@Override
- protected void initForm(ClassGenerationAction classGenerationAction) {
- super.initForm(classGenerationAction);
+ protected void initForm(CgenConfiguration cgenConfiguration) {
+ super.initForm(cgenConfiguration);
}
@Override
- public ClassGenerationAction createGenerator() {
- return super.createGenerator();
+ public void updateConfiguration(CgenConfiguration cgenConfiguration) {
+ cgenConfiguration.setClient(false);
}
+
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/52ea45b5/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/domain/CgenPanel.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/domain/CgenPanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/domain/CgenPanel.java
new file mode 100644
index 0000000..cf9b27a8
--- /dev/null
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/domain/CgenPanel.java
@@ -0,0 +1,59 @@
+package org.apache.cayenne.modeler.editor.cgen.domain;
+
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+import com.jgoodies.forms.layout.FormLayout;
+import org.apache.cayenne.configuration.xml.DataChannelMetaData;
+import org.apache.cayenne.gen.CgenConfiguration;
+import org.apache.cayenne.map.DataMap;
+import org.apache.cayenne.modeler.Application;
+import org.apache.cayenne.modeler.util.ModelerUtil;
+
+import javax.swing.*;
+import java.awt.*;
+
+public class CgenPanel extends JPanel {
+
+ private JCheckBox checkConfig;
+ private JLabel dataMapLabel;
+ private JButton toConfigButton;
+ private DataMap dataMap;
+
+ public CgenPanel(DataMap dataMap) {
+ setLayout(new BorderLayout());
+ FormLayout layout = new FormLayout(
+ "left:pref, 4dlu, fill:50dlu, 3dlu, fill:120", "");
+ DefaultFormBuilder builder = new DefaultFormBuilder(layout);
+ builder.setDefaultDialogBorder();
+
+ this.dataMap = dataMap;
+ this.checkConfig = new JCheckBox();
+ this.dataMapLabel = new JLabel(dataMap.getName());
+ DataChannelMetaData metaData = Application.getInstance().getMetaData();
+ this.toConfigButton = new JButton();
+ if(metaData.get(dataMap, CgenConfiguration.class) != null) {
+ this.toConfigButton.setText("Edit Config");
+ } else {
+ this.toConfigButton.setText("Create Config");
+ }
+ this.toConfigButton.setIcon(ModelerUtil.buildIcon("icon-datamap.png"));
+
+ builder.append(checkConfig, dataMapLabel, toConfigButton);
+ this.add(builder.getPanel(), BorderLayout.CENTER);
+ }
+
+ public JCheckBox getCheckConfig() {
+ return checkConfig;
+ }
+
+ public JButton getToConfigButton() {
+ return toConfigButton;
+ }
+
+ public JLabel getDataMapLabel() {
+ return dataMapLabel;
+ }
+
+ public DataMap getDataMap() {
+ return dataMap;
+ }
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/52ea45b5/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/domain/CgenTab.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/domain/CgenTab.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/domain/CgenTab.java
new file mode 100644
index 0000000..87a7cc4
--- /dev/null
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/domain/CgenTab.java
@@ -0,0 +1,89 @@
+package org.apache.cayenne.modeler.editor.cgen.domain;
+
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+import com.jgoodies.forms.layout.FormLayout;
+import org.apache.cayenne.map.DataMap;
+import org.apache.cayenne.modeler.ProjectController;
+import org.apache.cayenne.modeler.util.ModelerUtil;
+
+import javax.swing.*;
+import java.awt.*;
+import java.util.SortedSet;
+import java.util.TreeSet;
+import java.util.concurrent.ConcurrentMap;
+
+public class CgenTab extends JPanel {
+
+ protected ProjectController projectController;
+ private CgenTabController cgenTabController;
+
+ private JCheckBox selectAll;
+ private JButton generateAll;
+
+ public CgenTab(ProjectController projectController, CgenTabController cgenTabController) {
+ this.projectController = projectController;
+ this.cgenTabController = cgenTabController;
+ this.selectAll = new JCheckBox();
+ generateAll = new JButton("Generate");
+ generateAll.setEnabled(false);
+ generateAll.setIcon(ModelerUtil.buildIcon("icon-gen_java.png"));
+ generateAll.setPreferredSize(new Dimension(120, 30));
+ generateAll.addActionListener(action -> cgenTabController.runGenerators(cgenTabController.getSelectedDataMaps()));
+ setLayout(new BorderLayout());
+ }
+
+ public void initView() {
+ removeAll();
+ cgenTabController.createPanels();
+ FormLayout layout = new FormLayout(
+ "left:pref, 4dlu, 50dlu", "");
+ DefaultFormBuilder builder = new DefaultFormBuilder(layout);
+ builder.setDefaultDialogBorder();
+ ConcurrentMap<DataMap, CgenPanel> panels = cgenTabController.getGeneratorsPanels();
+
+ if(panels.isEmpty()) {
+ this.add(new JLabel("There are no cgen configs."), BorderLayout.NORTH);
+ return;
+ }
+
+ JPanel selectAllPanel = new JPanel(new FlowLayout());
+ selectAllPanel.add(new JLabel("Select All"), FlowLayout.LEFT);
+ selectAllPanel.add(selectAll, FlowLayout.CENTER);
+ builder.append(selectAllPanel);
+ builder.nextLine();
+
+ SortedSet<DataMap> keys = new TreeSet<>(panels.keySet());
+ for(DataMap dataMap : keys) {
+ builder.append(panels.get(dataMap));
+ builder.nextLine();
+ }
+ builder.append(generateAll);
+ this.add(builder.getPanel(), BorderLayout.CENTER);
+ }
+
+ void showSuccessMessage() {
+ JOptionPane.showMessageDialog(
+ this,
+ "Class generation finished");
+ }
+
+ void showErrorMessage(String msg) {
+ JOptionPane.showMessageDialog(
+ this,
+ "Error generating classes - " + msg);
+ }
+
+ void showEmptyMessage() {
+ JOptionPane.showMessageDialog(
+ this,
+ "Nothing to generate - ");
+ }
+
+ public JCheckBox getSelectAll() {
+ return selectAll;
+ }
+
+ public JButton getGenerateAll() {
+ return generateAll;
+ }
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/52ea45b5/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/domain/CgenTabController.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/domain/CgenTabController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/domain/CgenTabController.java
new file mode 100644
index 0000000..daeb677
--- /dev/null
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/domain/CgenTabController.java
@@ -0,0 +1,197 @@
+package org.apache.cayenne.modeler.editor.cgen.domain;
+
+import org.apache.cayenne.configuration.DataChannelDescriptor;
+import org.apache.cayenne.configuration.xml.DataChannelMetaData;
+import org.apache.cayenne.gen.CgenConfiguration;
+import org.apache.cayenne.gen.ClassGenerationAction;
+import org.apache.cayenne.gen.ClientClassGenerationAction;
+import org.apache.cayenne.map.DataMap;
+import org.apache.cayenne.modeler.Application;
+import org.apache.cayenne.modeler.ProjectController;
+import org.apache.cayenne.modeler.dialog.ErrorDebugDialog;
+import org.apache.cayenne.modeler.dialog.pref.GeneralPreferences;
+import org.apache.cayenne.modeler.event.DataMapDisplayEvent;
+import org.apache.cayenne.modeler.util.ModelerUtil;
+import org.apache.cayenne.project.Project;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.swing.*;
+import java.awt.event.ItemEvent;
+import java.io.IOException;
+import java.net.URL;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+import java.util.prefs.Preferences;
+
+public class CgenTabController {
+
+ private static Logger logObj = LoggerFactory.getLogger(ErrorDebugDialog.class);
+
+ private ProjectController projectController;
+ private CgenTab view;
+
+ private ConcurrentMap<DataMap, CgenPanel> generatorsPanels;
+ private Set<DataMap> selectedDataMaps;
+
+ public CgenTabController(ProjectController projectController) {
+ this.projectController = projectController;
+ this.view = new CgenTab(projectController, this);
+ this.generatorsPanels = new ConcurrentHashMap<>();
+ this.selectedDataMaps = new HashSet<>();
+ }
+
+ void createPanels() {
+ Collection<DataMap> dataMaps = getDataMaps();
+ generatorsPanels.clear();
+ for(DataMap dataMap : dataMaps) {
+ CgenPanel cgenPanel = new CgenPanel(dataMap);
+ initListenersForPanel(cgenPanel);
+ generatorsPanels.put(dataMap, cgenPanel);
+ }
+ selectedDataMaps.forEach(dataMap -> {
+ if(generatorsPanels.get(dataMap) != null) {
+ CgenPanel currPanel = generatorsPanels.get(dataMap);
+ currPanel.getCheckConfig().setSelected(true);
+ }
+ });
+ }
+
+ private void initListenersForPanel(CgenPanel cgenPanel) {
+ cgenPanel.getCheckConfig().addItemListener(e -> {
+ if(e.getStateChange() == ItemEvent.SELECTED) {
+ selectedDataMaps.add(cgenPanel.getDataMap());
+ } else if(e.getStateChange() == ItemEvent.DESELECTED) {
+ selectedDataMaps.remove(cgenPanel.getDataMap());
+ }
+ setGenerateButtonDisabled();
+ });
+
+ cgenPanel.getToConfigButton().addActionListener(action -> showConfig(cgenPanel.getDataMap()));
+
+ view.getSelectAll().addItemListener(e -> {
+ if(e.getStateChange() == ItemEvent.SELECTED) {
+ getGeneratorsPanels().forEach((key, value) -> value.getCheckConfig().setSelected(true));
+ } else if(e.getStateChange() == ItemEvent.DESELECTED) {
+ getGeneratorsPanels().forEach((key, value) -> value.getCheckConfig().setSelected(false));
+ }
+ setGenerateButtonDisabled();
+ });
+ }
+
+ private void setGenerateButtonDisabled() {
+ if(selectedDataMaps.size() == 0) {
+ view.getGenerateAll().setEnabled(false);
+ } else {
+ view.getGenerateAll().setEnabled(true);
+ }
+ }
+
+ private Collection<DataMap> getDataMaps() {
+ Project project = projectController.getProject();
+ return ((DataChannelDescriptor) project.getRootNode()).getDataMaps();
+ }
+
+ public CgenTab getView() {
+ return view;
+ }
+
+ void runGenerators(Set<DataMap> dataMaps) {
+ DataChannelMetaData metaData = Application.getInstance().getMetaData();
+ if(dataMaps.isEmpty()) {
+ view.showEmptyMessage();
+ return;
+ }
+ boolean generationFail = false;
+ for(DataMap dataMap : dataMaps) {
+ try {
+ CgenConfiguration cgenConfiguration = metaData.get(dataMap, CgenConfiguration.class);
+ if(cgenConfiguration == null) {
+ cgenConfiguration = createConfiguration(dataMap);
+ }
+ if(cgenConfiguration.getRootPath() == null) {
+ URL url = projectController.getProject().getConfigurationResource().getURL();
+ Path resourcePath = Paths.get(url.getPath());
+ if(Files.isRegularFile(resourcePath)) {
+ resourcePath = resourcePath.getParent();
+ }
+ cgenConfiguration.setRootPath(resourcePath);
+ }
+ ClassGenerationAction classGenerationAction = cgenConfiguration.isClient() ? new ClientClassGenerationAction(cgenConfiguration) :
+ new ClassGenerationAction(cgenConfiguration);
+ classGenerationAction.prepareArtifacts();
+ classGenerationAction.execute();
+ } catch (Exception e) {
+ logObj.error("Error generating classes", e);
+ generationFail = true;
+ view.showErrorMessage(e.getMessage());
+ }
+ }
+ if(!generationFail) {
+ view.showSuccessMessage();
+ }
+ }
+
+ private CgenConfiguration createConfiguration(DataMap dataMap) {
+ CgenConfiguration cgenConfiguration = new CgenConfiguration();
+ Application.getInstance().getInjector().injectMembers(cgenConfiguration);
+ cgenConfiguration.setDataMap(dataMap);
+ Path basePath = Paths.get(ModelerUtil.initOutputFolder());
+
+ // no destination folder
+ if (basePath == null) {
+ JOptionPane.showMessageDialog(this.getView(), "Select directory for source files.");
+ return null;
+ }
+
+ // no such folder
+ if (!Files.exists(basePath)) {
+ try {
+ Files.createDirectories(basePath);
+ } catch (IOException e) {
+ JOptionPane.showMessageDialog(this.getView(), "Can't create directory. " +
+ ". Select a different one.");
+ return null;
+ }
+ }
+
+ // not a directory
+ if (!Files.isDirectory(basePath)) {
+ JOptionPane.showMessageDialog(this.getView(), basePath + " is not a valid directory.");
+ return null;
+ }
+
+ cgenConfiguration.setRootPath(basePath);
+ Preferences preferences = Application.getInstance().getPreferencesNode(GeneralPreferences.class, "");
+ if (preferences != null) {
+ cgenConfiguration.setEncoding(preferences.get(GeneralPreferences.ENCODING_PREFERENCE, null));
+ }
+ cgenConfiguration.resolveExcludeEntities();
+ cgenConfiguration.resolveExcludeEmbeddables();
+ return cgenConfiguration;
+ }
+
+ private void showConfig(DataMap dataMap) {
+ if (dataMap != null) {
+ projectController.fireDataMapDisplayEvent(new DataMapDisplayEvent(this.getView(), dataMap, dataMap.getDataChannelDescriptor()));
+ }
+ }
+
+ public ProjectController getProjectController() {
+ return projectController;
+ }
+
+ ConcurrentMap<DataMap, CgenPanel> getGeneratorsPanels() {
+ return generatorsPanels;
+ }
+
+ public Set<DataMap> getSelectedDataMaps() {
+ return selectedDataMaps;
+ }
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/52ea45b5/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/ModelerUtil.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/ModelerUtil.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/ModelerUtil.java
index f750752..90c6d19 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/ModelerUtil.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/ModelerUtil.java
@@ -28,6 +28,7 @@ import org.apache.cayenne.modeler.ModelerConstants;
import org.apache.cayenne.modeler.ProjectController;
import org.apache.cayenne.modeler.action.ActionManager;
import org.apache.cayenne.modeler.action.MultipleObjectsAction;
+import org.apache.cayenne.modeler.pref.FSPath;
import org.apache.cayenne.reflect.PropertyUtils;
import org.apache.cayenne.util.CayenneMapEntry;
@@ -36,6 +37,7 @@ import javax.swing.ImageIcon;
import java.awt.Dimension;
import java.awt.Point;
import java.awt.Window;
+import java.io.File;
import java.io.Serializable;
import java.math.BigDecimal;
import java.math.BigInteger;
@@ -212,4 +214,45 @@ public final class ModelerUtil {
child.setLocation(x, y);
}
+
+ public static 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 static String checkDefaultMavenResourceDir(FSPath lastPath, String dirType) {
+ String path = lastPath.getPath();
+ String resourcePath = buildFilePath("src", dirType, "resources");
+ int idx = path.indexOf(resourcePath);
+ if (idx < 0) {
+ return null;
+ }
+ return path.substring(0, idx) + buildFilePath("src", dirType, "java");
+ }
+
+ private static String buildFilePath(String... pathElements) {
+ if (pathElements.length == 0) {
+ return "";
+ }
+ StringBuilder path = new StringBuilder(pathElements[0]);
+ for (int i = 1; i < pathElements.length; i++) {
+ path.append(File.separator).append(pathElements[i]);
+ }
+ return path.toString();
+ }
+
}
[18/32] cayenne git commit: Cgen tab, cgen configuration,
cgen in maven, ant, gradle.
Posted by nt...@apache.org.
Cgen tab, cgen configuration, cgen in maven, ant, gradle.
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/52ea45b5
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/52ea45b5
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/52ea45b5
Branch: refs/heads/master
Commit: 52ea45b5d72b5a6b1466e7779e03753c74ebaf3b
Parents: 6a43436
Author: Arseni Bulatski <an...@gmail.com>
Authored: Wed Oct 31 16:33:52 2018 +0300
Committer: Arseni Bulatski <an...@gmail.com>
Committed: Thu Nov 8 17:08:08 2018 +0300
----------------------------------------------------------------------
.../cayenne/tools/CayenneGeneratorTask.java | 141 ++-
.../cayenne/tools/CgenWithConfigTest.java | 41 +-
cayenne-ant/src/test/resources/cgenTest.map.xml | 19 +-
.../apache/cayenne/gen/CgenConfiguration.java | 363 ++++++
.../cayenne/gen/ClassGenerationAction.java | 669 +++--------
.../gen/ClientClassGenerationAction.java | 39 +-
.../cayenne/gen/xml/CgenConfigHandler.java | 32 +-
.../cayenne/gen/xml/CgenSaverDelegate.java | 14 +-
.../CayenneGeneratorEmbeddableFilterAction.java | 29 +
.../CayenneGeneratorEntityFilterAction.java | 22 +-
.../cayenne/gen/ClassGenerationActionTest.java | 37 +-
.../java/org/apache/cayenne/tools/CgenTask.java | 137 ++-
.../org/apache/cayenne/tools/CgenTaskIT.java | 60 +-
.../org/apache/cayenne/tools/CgenTaskTest.java | 43 +-
.../cayenne/tools/CgenTaskWithConfigIT.java | 71 --
.../org/apache/cayenne/tools/cgenConfig.map.xml | 22 +
.../org/apache/cayenne/tools/cgenMap.map.xml | 19 +-
.../cayenne/tools/cgen_with_config.gradle | 3 +-
.../cayenne/tools/cgen_with_configs.gradle | 32 +
.../cayenne/tools/CayenneGeneratorMojo.java | 135 ++-
.../cayenne/tools/CayenneGeneratorMojoTest.java | 48 +
.../cayenne/tools/CgenWithConfigMojoTest.java | 51 -
.../resources/cgen/project-to-test/cgen-pom.xml | 2 -
.../cgen/project-to-test/datamap-and-pom.xml | 54 +
.../src/test/resources/cgen/testCgen.map.xml | 22 +
.../src/test/resources/cgen/testCgenMap.map.xml | 19 +-
.../modeler/action/GenerateCodeAction.java | 12 +-
.../dialog/codegen/ClassesTabController.java | 406 +++----
.../modeler/dialog/codegen/ClassesTabPanel.java | 282 ++---
.../dialog/codegen/ClientModeController.java | 162 +--
.../dialog/codegen/CodeGeneratorController.java | 338 +++---
.../codegen/CodeGeneratorControllerBase.java | 760 ++++++------
.../dialog/codegen/CodeGeneratorDialog.java | 198 +--
.../dialog/codegen/CustomModeController.java | 470 ++++----
.../modeler/dialog/codegen/CustomModePanel.java | 274 ++---
.../codegen/CustomPreferencesUpdater.java | 418 +++----
.../dialog/codegen/GeneratorController.java | 1123 +++++++++---------
.../codegen/GeneratorControllerPanel.java | 110 +-
.../dialog/codegen/GeneratorTabController.java | 230 ++--
.../dialog/codegen/GeneratorTabPanel.java | 130 +-
.../dialog/codegen/StandardModeController.java | 164 +--
.../dialog/codegen/StandardModePanel.java | 84 +-
.../dialog/codegen/StandardPanelComponent.java | 162 +--
.../modeler/editor/DataDomainTabbedView.java | 183 +--
.../modeler/editor/DataMapTabbedView.java | 12 +-
.../editor/cgen/ClientModeController.java | 12 +-
.../editor/cgen/CodeGeneratorController.java | 51 +-
.../cgen/CodeGeneratorControllerBase.java | 37 +-
.../editor/cgen/CustomModeController.java | 58 +-
.../editor/cgen/GeneratorController.java | 88 +-
.../editor/cgen/GeneratorControllerPanel.java | 6 +-
.../editor/cgen/GeneratorTabController.java | 51 +-
.../editor/cgen/StandardModeController.java | 17 +-
.../modeler/editor/cgen/domain/CgenPanel.java | 59 +
.../modeler/editor/cgen/domain/CgenTab.java | 89 ++
.../editor/cgen/domain/CgenTabController.java | 197 +++
.../cayenne/modeler/util/ModelerUtil.java | 43 +
57 files changed, 4547 insertions(+), 3803 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cayenne/blob/52ea45b5/cayenne-ant/src/main/java/org/apache/cayenne/tools/CayenneGeneratorTask.java
----------------------------------------------------------------------
diff --git a/cayenne-ant/src/main/java/org/apache/cayenne/tools/CayenneGeneratorTask.java b/cayenne-ant/src/main/java/org/apache/cayenne/tools/CayenneGeneratorTask.java
index a82931e..02cc0bf 100644
--- a/cayenne-ant/src/main/java/org/apache/cayenne/tools/CayenneGeneratorTask.java
+++ b/cayenne-ant/src/main/java/org/apache/cayenne/tools/CayenneGeneratorTask.java
@@ -24,6 +24,7 @@ import org.apache.cayenne.dbsync.filter.NamePatternMatcher;
import org.apache.cayenne.dbsync.reverse.configuration.ToolsModule;
import org.apache.cayenne.di.DIBootstrap;
import org.apache.cayenne.di.Injector;
+import org.apache.cayenne.gen.CgenConfiguration;
import org.apache.cayenne.gen.CgenModule;
import org.apache.cayenne.gen.ClassGenerationAction;
import org.apache.cayenne.gen.ClientClassGenerationAction;
@@ -34,6 +35,8 @@ import org.apache.velocity.VelocityContext;
import org.slf4j.LoggerFactory;
import java.io.File;
+import java.nio.file.Files;
+import java.nio.file.Paths;
/**
* An Ant task to perform class generation based on CayenneDataMap.
@@ -44,6 +47,7 @@ public class CayenneGeneratorTask extends CayenneTask {
protected String includeEntitiesPattern;
protected String excludeEntitiesPattern;
+ protected String excludeEmbeddablesPattern;
protected VPPConfig vppConfig;
protected File map;
@@ -63,7 +67,11 @@ public class CayenneGeneratorTask extends CayenneTask {
protected String querytemplate;
protected String querysupertemplate;
protected Boolean usepkgpath;
- protected Boolean createpropertynames;
+ protected boolean createpropertynames;
+
+ private boolean force;
+
+ private boolean useConfigFromDataMap;
private transient Injector injector;
@@ -82,36 +90,6 @@ public class CayenneGeneratorTask extends CayenneTask {
return vppConfig.getVelocityContext();
}
- protected ClassGenerationAction createGeneratorAction(DataMap dataMap) {
- ClassGenerationAction action = injector.getInstance(DataChannelMetaData.class).get(dataMap, ClassGenerationAction.class);
-
- if (client) {
- action = new ClientClassGenerationAction();
- } else {
- if(action == null) {
- action = new ClassGenerationAction();
- }
- }
-
- action.setContext(getVppContext());
- action.setDestDir(destDir);
- action.setEncoding(encoding != null ? encoding : action.getEncoding());
- action.setMakePairs(makepairs != null ? makepairs : action.isMakePairs());
- action.setArtifactsGenerationMode(mode != null ? mode : action.getArtifactsGenerationMode());
- action.setOutputPattern(outputPattern != null ? outputPattern : action.getOutputPattern());
- action.setOverwrite(overwrite != null ? overwrite : action.isOverwrite());
- action.setSuperPkg(superpkg != null ? superpkg : action.getSuperPkg());
- action.setSuperTemplate(supertemplate != null ? supertemplate : action.getSuperclassTemplate());
- action.setTemplate(template != null ? template : action.getTemplate());
- action.setEmbeddableSuperTemplate(embeddablesupertemplate != null ? embeddablesupertemplate : action.getEmbeddableSuperTemplate());
- action.setEmbeddableTemplate(embeddabletemplate != null ? embeddabletemplate : action.getEmbeddableTemplate());
- action.setUsePkgPath(usepkgpath != null ? usepkgpath : action.isUsePkgPath());
- action.setCreatePropertyNames(createpropertynames != null ? createpropertynames : action.isCreatePropertyNames());
- action.setQueryTemplate(querytemplate != null ? querytemplate : action.getQueryTemplate());
- action.setQuerySuperTemplate(querysupertemplate != null ? querysupertemplate : action.getQuerySuperTemplate());
- return action;
- }
-
/**
* Executes the task. It will be called by ant framework.
*/
@@ -127,23 +105,28 @@ public class CayenneGeneratorTask extends CayenneTask {
loadAction.setMainDataMapFile(map);
loadAction.setAdditionalDataMapFiles(additionalMaps);
- CayenneGeneratorEntityFilterAction filterAction = new CayenneGeneratorEntityFilterAction();
- filterAction.setClient(client);
- filterAction.setNameFilter(NamePatternMatcher.build(logger, includeEntitiesPattern, excludeEntitiesPattern));
+ CayenneGeneratorEntityFilterAction filterEntityAction = new CayenneGeneratorEntityFilterAction();
+ filterEntityAction.setClient(client);
+ filterEntityAction.setNameFilter(NamePatternMatcher.build(logger, includeEntitiesPattern, excludeEntitiesPattern));
+ CayenneGeneratorEmbeddableFilterAction filterEmbeddableAction = new CayenneGeneratorEmbeddableFilterAction();
+ filterEmbeddableAction.setNameFilter(NamePatternMatcher.build(logger, null, excludeEmbeddablesPattern));
try {
DataMap dataMap = loadAction.getMainDataMap();
- ClassGenerationAction generatorAction = createGeneratorAction(dataMap);
+ ClassGenerationAction generatorAction = createGenerator(dataMap);
generatorAction.setLogger(logger);
- generatorAction.setTimestamp(map.lastModified());
- generatorAction.setDataMap(dataMap);
- if(!generatorAction.getEntities().isEmpty() || !generatorAction.getEmbeddables().isEmpty()){
+ if(force) {
+ // will (re-)generate all files
+ generatorAction.getCgenConfiguration().setForce(true);
+ }
+ generatorAction.getCgenConfiguration().setTimestamp(map.lastModified());
+ if(!hasConfig() && useConfigFromDataMap) {
generatorAction.prepareArtifacts();
} else {
- generatorAction.addEntities(filterAction.getFilteredEntities(dataMap));
- generatorAction.addEmbeddables(filterAction.getFilteredEmbeddables(dataMap));
+ generatorAction.addEntities(filterEntityAction.getFilteredEntities(dataMap));
+ generatorAction.addEmbeddables(filterEmbeddableAction.getFilteredEmbeddables(dataMap));
generatorAction.addQueries(dataMap.getQueryDescriptors());
}
generatorAction.execute();
@@ -153,6 +136,76 @@ public class CayenneGeneratorTask extends CayenneTask {
}
}
+ private ClassGenerationAction createGenerator(DataMap dataMap) {
+ CgenConfiguration cgenConfiguration = buildConfiguration(dataMap);
+ ClassGenerationAction classGenerationAction = cgenConfiguration.isClient() ? new ClientClassGenerationAction(cgenConfiguration) :
+ new ClassGenerationAction(cgenConfiguration);
+ injector.injectMembers(classGenerationAction);
+
+ return classGenerationAction;
+ }
+
+ private boolean hasConfig() {
+ return destDir != null || encoding != null || client || excludeEntitiesPattern != null || excludeEmbeddablesPattern != null || includeEntitiesPattern != null ||
+ makepairs != null || mode != null || outputPattern != null || overwrite != null || superpkg != null ||
+ supertemplate != null || template != null || embeddabletemplate != null || embeddablesupertemplate != null ||
+ usepkgpath != null || createpropertynames || querytemplate != null ||
+ querysupertemplate != null || createpkproperties || force;
+ }
+
+ private CgenConfiguration buildConfiguration(DataMap dataMap) {
+ CgenConfiguration cgenConfiguration = injector.getInstance(DataChannelMetaData.class).get(dataMap, CgenConfiguration.class);
+ if(hasConfig()) {
+ return cgenConfigFromPom(dataMap);
+ } else if(cgenConfiguration != null) {
+ useConfigFromDataMap = true;
+ java.nio.file.Path resourcePath = Paths.get(map.getPath());
+ if(Files.isRegularFile(resourcePath)) {
+ resourcePath = resourcePath.getParent();
+ }
+ cgenConfiguration.setRelPath(resourcePath.resolve(cgenConfiguration.getRelPath()));
+ return cgenConfiguration;
+ } else {
+ cgenConfiguration = new CgenConfiguration();
+ cgenConfiguration.setDataMap(dataMap);
+ return cgenConfiguration;
+ }
+ }
+
+ private CgenConfiguration cgenConfigFromPom(DataMap dataMap){
+ CgenConfiguration cgenConfiguration = new CgenConfiguration();
+ cgenConfiguration.setDataMap(dataMap);
+ cgenConfiguration.setRelPath(destDir != null ? destDir.getPath() : cgenConfiguration.getRelPath());
+ cgenConfiguration.setEncoding(encoding != null ? encoding : cgenConfiguration.getEncoding());
+ cgenConfiguration.setMakePairs(makepairs != null ? makepairs : cgenConfiguration.isMakePairs());
+ cgenConfiguration.setArtifactsGenerationMode(mode != null ? mode : cgenConfiguration.getArtifactsGenerationMode());
+ cgenConfiguration.setOutputPattern(outputPattern != null ? outputPattern : cgenConfiguration.getOutputPattern());
+ cgenConfiguration.setOverwrite(overwrite != null ? overwrite : cgenConfiguration.isOverwrite());
+ cgenConfiguration.setSuperPkg(superpkg != null ? superpkg : cgenConfiguration.getSuperPkg());
+ cgenConfiguration.setSuperTemplate(supertemplate != null ? supertemplate : cgenConfiguration.getSuperTemplate());
+ cgenConfiguration.setTemplate(template != null ? template : cgenConfiguration.getTemplate());
+ cgenConfiguration.setEmbeddableSuperTemplate(embeddablesupertemplate != null ? embeddablesupertemplate : cgenConfiguration.getEmbeddableSuperTemplate());
+ cgenConfiguration.setEmbeddableTemplate(embeddabletemplate != null ? embeddabletemplate : cgenConfiguration.getEmbeddableTemplate());
+ cgenConfiguration.setUsePkgPath(usepkgpath != null ? usepkgpath : cgenConfiguration.isUsePkgPath());
+ cgenConfiguration.setCreatePropertyNames(createpropertynames);
+ cgenConfiguration.setQueryTemplate(querytemplate != null ? querytemplate : cgenConfiguration.getQueryTemplate());
+ cgenConfiguration.setQuerySuperTemplate(querysupertemplate != null ? querysupertemplate : cgenConfiguration.getQuerySuperTemplate());
+ cgenConfiguration.setCreatePKProperties(createpkproperties);
+ cgenConfiguration.setClient(client);
+ if(!cgenConfiguration.isMakePairs()) {
+ if(template == null) {
+ cgenConfiguration.setTemplate(client ? ClientClassGenerationAction.SINGLE_CLASS_TEMPLATE : ClassGenerationAction.SINGLE_CLASS_TEMPLATE);
+ }
+ if(embeddabletemplate == null) {
+ cgenConfiguration.setEmbeddableTemplate(ClassGenerationAction.EMBEDDABLE_SINGLE_CLASS_TEMPLATE);
+ }
+ if(querytemplate == null) {
+ cgenConfiguration.setQueryTemplate(client ? ClientClassGenerationAction.DATAMAP_SINGLE_CLASS_TEMPLATE : ClassGenerationAction.DATAMAP_SINGLE_CLASS_TEMPLATE);
+ }
+ }
+ return cgenConfiguration;
+ }
+
/**
* Validates attributes that are not related to internal DefaultClassGenerator. Throws
* BuildException if attributes are invalid.
@@ -278,6 +331,10 @@ public class CayenneGeneratorTask extends CayenneTask {
this.includeEntitiesPattern = includeEntitiesPattern;
}
+ public void setExcludeEmbeddablesPattern(String excludeEmbeddablesPattern) {
+ this.excludeEmbeddablesPattern = excludeEmbeddablesPattern;
+ }
+
/**
* Sets <code>outputPattern</code> property.
*/
@@ -314,6 +371,10 @@ public class CayenneGeneratorTask extends CayenneTask {
this.createpkproperties = createpkproperties;
}
+ public void setForce(boolean force) {
+ this.force = force;
+ }
+
/**
* Provides a <code>VPPConfig</code> object to configure. (Written with createConfig()
* instead of addConfig() to avoid run-time dependency on VPP).
http://git-wip-us.apache.org/repos/asf/cayenne/blob/52ea45b5/cayenne-ant/src/test/java/org/apache/cayenne/tools/CgenWithConfigTest.java
----------------------------------------------------------------------
diff --git a/cayenne-ant/src/test/java/org/apache/cayenne/tools/CgenWithConfigTest.java b/cayenne-ant/src/test/java/org/apache/cayenne/tools/CgenWithConfigTest.java
index cdccd49..4241105 100644
--- a/cayenne-ant/src/test/java/org/apache/cayenne/tools/CgenWithConfigTest.java
+++ b/cayenne-ant/src/test/java/org/apache/cayenne/tools/CgenWithConfigTest.java
@@ -64,25 +64,58 @@ public class CgenWithConfigTest {
File mapDir = new File(baseDir, "cgenConfigTest");
assertTrue(mapDir.mkdirs());
+ task.setMap(map);
+
+ // run task
+ task.execute();
+
+ // check results
+ File entity = new File(mapDir, convertPath("ObjEntity1.txt"));
+ assertTrue(entity.isFile());
+
+ File datamap = new File(mapDir, convertPath("Antmap_cgen_xml.txt"));
+ assertTrue(datamap.isFile());
+
+ File notIncludedEntity = new File(mapDir, "ObjEntity.txt");
+ assertFalse(notIncludedEntity.exists());
+
+ File notIncludeSuperDatamap = new File("_Antmap_cgen_xml.txt");
+ assertFalse(notIncludeSuperDatamap.exists());
+ }
+
+ @Test
+ public void testCgenWithDmAndPomConfigs() throws Exception {
+ File mapDir = new File(baseDir, "cgenDmPomTest");
+ assertTrue(mapDir.mkdirs());
+
task.setDestDir(mapDir);
task.setMap(map);
+ task.setExcludeEntities("ObjEntity1");
task.setMode("entity");
+ task.setMakepairs(false);
+ task.setOutputPattern("*.txt");
// run task
task.execute();
// check results
- File entity = new File(mapDir, convertPath("ObjEntity1.txt"));
+ File entity = new File(mapDir, convertPath("ObjEntity.txt"));
assertTrue(entity.isFile());
- File datamap = new File(mapDir, convertPath("TestCgenMap.txt"));
+ File embeddable = new File(mapDir, convertPath("Embeddable.txt"));
+ assertTrue(embeddable.isFile());
+
+ File datamap = new File(mapDir, convertPath("Antmap_cgen_xml.txt"));
assertFalse(datamap.exists());
- File notIncludedEntity = new File(mapDir, "ObjEntity.txt");
+ File notIncludedEntity = new File(mapDir, "ObjEntity1.txt");
assertFalse(notIncludedEntity.exists());
- File notIncludeSuperDatamap = new File("_TestCgenMap.txt");
+ File notIncludeSuperDatamap = new File("_Antmap_cgen_xml.txt");
assertFalse(notIncludeSuperDatamap.exists());
+
+ File notIncludedSuperEntity = new File(mapDir, convertPath("_ObjEntity.txt"));
+ assertFalse(notIncludedSuperEntity.exists());
}
private String convertPath(String unixPath) {
http://git-wip-us.apache.org/repos/asf/cayenne/blob/52ea45b5/cayenne-ant/src/test/resources/cgenTest.map.xml
----------------------------------------------------------------------
diff --git a/cayenne-ant/src/test/resources/cgenTest.map.xml b/cayenne-ant/src/test/resources/cgenTest.map.xml
index 930acbc..d249f0f 100644
--- a/cayenne-ant/src/test/resources/cgenTest.map.xml
+++ b/cayenne-ant/src/test/resources/cgenTest.map.xml
@@ -7,21 +7,16 @@
<obj-entity name="ObjEntity" className="ObjEntity"/>
<obj-entity name="ObjEntity1" className="ObjEntity1"/>
<cgen xmlns="http://cayenne.apache.org/schema/10/cgen">
- <objEntity>
- <name>ObjEntity1</name>
- </objEntity>
- <generationMode>all</generationMode>
- <dataMapTemplate>templates/v4_1/datamap-subclass.vm</dataMapTemplate>
- <dataMapSuperclassTemplate>templates/v4_1/datamap-superclass.vm</dataMapSuperclassTemplate>
- <subclassTemplate>templates/v4_1/subclass.vm</subclassTemplate>
- <superclassTemplate>templates/v4_1/superclass.vm</superclassTemplate>
- <embeddableTemplate>templates/v4_1/embeddable-subclass.vm</embeddableTemplate>
- <embeddableSuperclassTemplate>templates/v4_1/embeddable-superclass.vm</embeddableSuperclassTemplate>
+ <destDir>cgenConfigTest</destDir>
+ <excludeEntities>ObjEntity</excludeEntities>
+ <excludeEmbeddables>Embeddable</excludeEmbeddables>
+ <mode>all</mode>
+ <template>templates/v4_1/subclass.vm</template>
+ <superTemplate>templates/v4_1/superclass.vm</superTemplate>
<outputPattern>*.txt</outputPattern>
<makePairs>false</makePairs>
<usePkgPath>true</usePkgPath>
- <overwriteSubclasses>false</overwriteSubclasses>
+ <overwrite>false</overwrite>
<createPropertyNames>false</createPropertyNames>
- <encoding>UTF-8</encoding>
</cgen>
</data-map>
http://git-wip-us.apache.org/repos/asf/cayenne/blob/52ea45b5/cayenne-cgen/src/main/java/org/apache/cayenne/gen/CgenConfiguration.java
----------------------------------------------------------------------
diff --git a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/CgenConfiguration.java b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/CgenConfiguration.java
new file mode 100644
index 0000000..8d4157d
--- /dev/null
+++ b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/CgenConfiguration.java
@@ -0,0 +1,363 @@
+package org.apache.cayenne.gen;
+
+import org.apache.cayenne.configuration.ConfigurationNodeVisitor;
+import org.apache.cayenne.gen.xml.CgenExtension;
+import org.apache.cayenne.map.DataMap;
+import org.apache.cayenne.map.Embeddable;
+import org.apache.cayenne.map.ObjEntity;
+import org.apache.cayenne.util.XMLEncoder;
+import org.apache.cayenne.util.XMLSerializable;
+
+import java.io.Serializable;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.stream.Collectors;
+
+public class CgenConfiguration implements Serializable, XMLSerializable {
+
+ private Collection<Artifact> artifacts;
+ private Collection<String> entityArtifacts;
+ private Collection<String> excludeEntityArtifacts;
+ private Collection<String> embeddableArtifacts;
+ private Collection<String> excludeEmbeddableArtifacts;
+
+ private String superPkg;
+ private DataMap dataMap;
+
+ private ArtifactsGenerationMode artifactsGenerationMode;
+ private boolean makePairs;
+
+ private Path rootPath;
+ private Path relPath;
+ private boolean overwrite;
+ private boolean usePkgPath;
+
+ private String template;
+ private String superTemplate;
+ private String embeddableTemplate;
+ private String embeddableSuperTemplate;
+ private String queryTemplate;
+ private String querySuperTemplate;
+ private long timestamp;
+ private String outputPattern;
+ private String encoding;
+ private boolean createPropertyNames;
+ private boolean force; // force run generator
+ /**
+ * @since 4.1
+ */
+ private boolean createPKProperties;
+
+ private boolean client;
+
+ public CgenConfiguration() {
+ this.outputPattern = "*.java";
+ this.timestamp = 0L;
+ this.usePkgPath = true;
+ this.makePairs = true;
+
+ this.artifacts = new ArrayList<>();
+ this.entityArtifacts = new ArrayList<>();
+ this.excludeEntityArtifacts = new ArrayList<>();
+ this.embeddableArtifacts = new ArrayList<>();
+ this.excludeEmbeddableArtifacts = new ArrayList<>();
+ this.artifactsGenerationMode = ArtifactsGenerationMode.ENTITY;
+
+ this.template = ClassGenerationAction.SUBCLASS_TEMPLATE;
+ this.superTemplate = ClassGenerationAction.SUPERCLASS_TEMPLATE;
+ this.embeddableTemplate = ClassGenerationAction.EMBEDDABLE_SUBCLASS_TEMPLATE;
+ this.embeddableSuperTemplate = ClassGenerationAction.EMBEDDABLE_SUPERCLASS_TEMPLATE;
+ this.queryTemplate = ClassGenerationAction.DATAMAP_SUBCLASS_TEMPLATE;
+ this.querySuperTemplate = ClassGenerationAction.DATAMAP_SUPERCLASS_TEMPLATE;
+ }
+
+ public void resetCollections(){
+ embeddableArtifacts.clear();
+ entityArtifacts.clear();
+ }
+
+ public String getSuperPkg() {
+ return superPkg;
+ }
+
+ public void setSuperPkg(String superPkg) {
+ this.superPkg = superPkg;
+ }
+
+ public DataMap getDataMap() {
+ return dataMap;
+ }
+
+ public void setDataMap(DataMap dataMap) {
+ this.dataMap = dataMap;
+ }
+
+ public void setArtifactsGenerationMode(String mode) {
+ if (ArtifactsGenerationMode.ENTITY.getLabel().equalsIgnoreCase(mode)) {
+ this.artifactsGenerationMode = ArtifactsGenerationMode.ENTITY;
+ } else {
+ this.artifactsGenerationMode = ArtifactsGenerationMode.ALL;
+ }
+ }
+
+ public String getArtifactsGenerationMode(){
+ return artifactsGenerationMode.getLabel();
+ }
+
+
+ public boolean isMakePairs() {
+ return makePairs;
+ }
+
+ public void setMakePairs(boolean makePairs) {
+ this.makePairs = makePairs;
+ }
+
+ public Path getRootPath() {
+ return rootPath;
+ }
+
+ public void setRootPath(Path rootPath) {
+ this.rootPath = rootPath;
+ }
+
+ public void setRelPath(Path relPath) {
+ this.relPath = relPath;
+ }
+
+ public void setRelPath(String path) {
+ this.relPath = rootPath != null ? rootPath.relativize(Paths.get(path)) : Paths.get(path);
+ }
+
+ public boolean isOverwrite() {
+ return overwrite;
+ }
+
+ public void setOverwrite(boolean overwrite) {
+ this.overwrite = overwrite;
+ }
+
+ public boolean isUsePkgPath() {
+ return usePkgPath;
+ }
+
+ public void setUsePkgPath(boolean usePkgPath) {
+ this.usePkgPath = usePkgPath;
+ }
+
+ public String getTemplate() {
+ return template;
+ }
+
+ public void setTemplate(String template) {
+ this.template = template;
+ }
+
+ public String getSuperTemplate() {
+ return superTemplate;
+ }
+
+ public void setSuperTemplate(String superTemplate) {
+ this.superTemplate = superTemplate;
+ }
+
+ public String getEmbeddableTemplate() {
+ return embeddableTemplate;
+ }
+
+ public void setEmbeddableTemplate(String embeddableTemplate) {
+ this.embeddableTemplate = embeddableTemplate;
+ }
+
+ public String getEmbeddableSuperTemplate() {
+ return embeddableSuperTemplate;
+ }
+
+ public void setEmbeddableSuperTemplate(String embeddableSuperTemplate) {
+ this.embeddableSuperTemplate = embeddableSuperTemplate;
+ }
+
+ public String getQueryTemplate() {
+ return queryTemplate;
+ }
+
+ public void setQueryTemplate(String queryTemplate) {
+ this.queryTemplate = queryTemplate;
+ }
+
+ public String getQuerySuperTemplate() {
+ return querySuperTemplate;
+ }
+
+ public void setQuerySuperTemplate(String querySuperTemplate) {
+ this.querySuperTemplate = querySuperTemplate;
+ }
+
+ public long getTimestamp() {
+ return timestamp;
+ }
+
+ public void setTimestamp(long timestamp) {
+ this.timestamp = timestamp;
+ }
+
+ public String getOutputPattern() {
+ return outputPattern;
+ }
+
+ public void setOutputPattern(String outputPattern) {
+ this.outputPattern = outputPattern;
+ }
+
+ public String getEncoding() {
+ return encoding;
+ }
+
+ public void setEncoding(String encoding) {
+ this.encoding = encoding;
+ }
+
+ public boolean isCreatePropertyNames() {
+ return createPropertyNames;
+ }
+
+ public void setCreatePropertyNames(boolean createPropertyNames) {
+ this.createPropertyNames = createPropertyNames;
+ }
+
+ public boolean isForce() {
+ return force;
+ }
+
+ public void setForce(boolean force) {
+ this.force = force;
+ }
+
+ public boolean isCreatePKProperties() {
+ return createPKProperties;
+ }
+
+ public void setCreatePKProperties(boolean createPKProperties) {
+ this.createPKProperties = createPKProperties;
+ }
+
+ public String getRelPath() {
+ if(relPath == null || relPath.toString().isEmpty()) {
+ return ".";
+ }
+ return relPath.toString();
+ }
+
+ public String getDir(){
+ return rootPath != null ? relPath != null ? rootPath.resolve(relPath).toAbsolutePath().normalize().toString() : rootPath.toString() : null;
+ }
+
+ public Collection<Artifact> getArtifacts() {
+ return artifacts;
+ }
+
+ public Collection<String> getEntities() {
+ return entityArtifacts;
+ }
+
+ public Collection<String> getEmbeddables() {
+ return embeddableArtifacts;
+ }
+
+ public Path buildPath() {
+ return rootPath != null ? relPath != null ? rootPath.resolve(relPath).toAbsolutePath().normalize() : rootPath : relPath;
+ }
+
+ /**
+ * @since 4.1
+ */
+ public void loadEntity(String name) {
+ entityArtifacts.add(name);
+ }
+
+ /**
+ * @since 4.1
+ */
+ public void loadEmbeddable(String name) {
+ embeddableArtifacts.add(name);
+ }
+
+ public void loadEntities(String entities) {
+ excludeEntityArtifacts.addAll(Arrays.asList(entities.split(",")));
+ }
+
+ private String getExcludeEntites() {
+ Collection<String> excludeEntities = dataMap.getObjEntities()
+ .stream()
+ .filter(entity -> !entityArtifacts.contains(entity.getName()))
+ .map(ObjEntity::getName)
+ .collect(Collectors.toList());
+ return org.apache.commons.lang3.StringUtils.join(excludeEntities, ",");
+ }
+
+ public void loadEmbeddables(String embeddables) {
+ excludeEmbeddableArtifacts.addAll(Arrays.asList(embeddables.split(",")));
+ }
+
+ private String getExcludeEmbeddables() {
+ Collection<String> excludeEmbeddable = dataMap.getEmbeddables()
+ .stream()
+ .filter(embeddable -> !embeddableArtifacts.contains(embeddable.getClassName()))
+ .map(Embeddable::getClassName)
+ .collect(Collectors.toList());
+ return org.apache.commons.lang3.StringUtils.join(excludeEmbeddable, ",");
+ }
+
+ public void resolveExcludeEntities() {
+ entityArtifacts = dataMap.getObjEntities()
+ .stream()
+ .filter(entity -> !excludeEntityArtifacts.contains(entity.getName()))
+ .map(ObjEntity::getName)
+ .collect(Collectors.toList());
+ }
+
+ public void resolveExcludeEmbeddables() {
+ embeddableArtifacts = dataMap.getEmbeddables()
+ .stream()
+ .filter(embeddable -> !excludeEmbeddableArtifacts.contains(embeddable.getClassName()))
+ .map(Embeddable::getClassName)
+ .collect(Collectors.toList());
+ }
+
+ public boolean isClient() {
+ return client;
+ }
+
+ public void setClient(boolean client) {
+ this.client = client;
+ }
+
+ public void addArtifact(Artifact artifact) {
+ artifacts.add(artifact);
+ }
+
+ @Override
+ public void encodeAsXML(XMLEncoder encoder, ConfigurationNodeVisitor delegate) {
+ encoder.start("cgen")
+ .attribute("xmlns", CgenExtension.NAMESPACE)
+ .simpleTag("excludeEntities", getExcludeEntites())
+ .simpleTag("excludeEmbeddables",getExcludeEmbeddables())
+ .simpleTag("destDir", getRelPath())
+ .simpleTag("mode", this.artifactsGenerationMode.getLabel())
+ .simpleTag("template", this.template)
+ .simpleTag("superTemplate", this.superTemplate)
+ .simpleTag("outputPattern", this.outputPattern)
+ .simpleTag("makePairs", Boolean.toString(this.makePairs))
+ .simpleTag("usePkgPath", Boolean.toString(this.usePkgPath))
+ .simpleTag("overwrite", Boolean.toString(this.overwrite))
+ .simpleTag("createPropertyNames", Boolean.toString(this.createPropertyNames))
+ .simpleTag("superPkg", this.superPkg)
+ .simpleTag("createPKProperties", Boolean.toString(this.createPKProperties))
+ .simpleTag("client", Boolean.toString(client))
+ .end();
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/52ea45b5/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 434421f..36ba514 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
@@ -20,14 +20,9 @@
package org.apache.cayenne.gen;
import org.apache.cayenne.CayenneRuntimeException;
-import org.apache.cayenne.configuration.ConfigurationNodeVisitor;
-import org.apache.cayenne.gen.xml.CgenExtension;
-import org.apache.cayenne.map.DataMap;
import org.apache.cayenne.map.Embeddable;
import org.apache.cayenne.map.ObjEntity;
import org.apache.cayenne.map.QueryDescriptor;
-import org.apache.cayenne.util.XMLEncoder;
-import org.apache.cayenne.util.XMLSerializable;
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.VelocityEngine;
@@ -36,12 +31,12 @@ import org.slf4j.Logger;
import java.io.*;
import java.nio.file.Files;
import java.nio.file.Path;
-import java.nio.file.Paths;
import java.util.*;
import java.util.stream.Collectors;
-public class ClassGenerationAction implements Serializable, XMLSerializable {
- static final String TEMPLATES_DIR_NAME = "templates/v4_1/";
+public class ClassGenerationAction {
+
+ private static final String TEMPLATES_DIR_NAME = "templates/v4_1/";
public static final String SINGLE_CLASS_TEMPLATE = TEMPLATES_DIR_NAME + "singleclass.vm";
public static final String SUBCLASS_TEMPLATE = TEMPLATES_DIR_NAME + "subclass.vm";
@@ -58,159 +53,105 @@ public class ClassGenerationAction implements Serializable, XMLSerializable {
public static final String SUPERCLASS_PREFIX = "_";
private static final String WILDCARD = "*";
- Collection<Artifact> artifacts;
- private Collection<String> entityArtifacts;
- private Collection<String> excludeEntityArtifacts;
- private Collection<String> embeddableArtifacts;
- private Collection<String> excludeEmbeddableArtifacts;
-
- protected String superPkg;
- protected DataMap dataMap;
-
- protected ArtifactsGenerationMode artifactsGenerationMode;
- protected boolean makePairs;
-
+ protected CgenConfiguration cgenConfiguration;
protected Logger logger;
- protected Path rootPath;
- protected Path relPath;
+ // runtime ivars
+ protected VelocityContext context;
+ protected Map<String, Template> templateCache;
- protected boolean overwrite;
- protected boolean usePkgPath;
-
- protected String template;
- protected String superTemplate;
- protected String embeddableTemplate;
- protected String embeddableSuperTemplate;
- protected String queryTemplate;
- protected String querySuperTemplate;
- protected long timestamp;
- protected String outputPattern;
- protected String encoding;
- protected boolean createPropertyNames;
- protected boolean force; // force run generator
-
- /**
- * @since 4.1
- */
- protected boolean createPKProperties;
-
- // runtime ivars
- protected VelocityContext context;
- protected Map<String, Template> templateCache;
-
-
- public ClassGenerationAction() {
- this.outputPattern = "*.java";
- this.timestamp = 0L;
- this.usePkgPath = true;
- this.makePairs = true;
- this.context = new VelocityContext();
- this.templateCache = new HashMap<>(5);
-
- this.artifacts = new ArrayList<>();
- this.entityArtifacts = new ArrayList<>();
- this.excludeEntityArtifacts = new ArrayList<>();
- this.embeddableArtifacts = new ArrayList<>();
- this.excludeEmbeddableArtifacts = new ArrayList<>();
- this.artifactsGenerationMode = ArtifactsGenerationMode.ENTITY;
-
- this.overwrite = false;
- this.template = SUBCLASS_TEMPLATE;
- this.superTemplate = SUPERCLASS_TEMPLATE;
- this.embeddableTemplate = EMBEDDABLE_SUBCLASS_TEMPLATE;
- this.embeddableSuperTemplate = EMBEDDABLE_SUPERCLASS_TEMPLATE;
-
- this.queryTemplate = DATAMAP_SUBCLASS_TEMPLATE;
- this.querySuperTemplate = DATAMAP_SUPERCLASS_TEMPLATE;
+ public ClassGenerationAction(CgenConfiguration cgenConfiguration) {
+ this.context = new VelocityContext();
+ this.templateCache = new HashMap<>(5);
+ this.cgenConfiguration = cgenConfiguration;
}
- protected String defaultTemplateName(TemplateType type) {
+ public String defaultTemplateName(TemplateType type) {
switch (type) {
- case ENTITY_SINGLE_CLASS:
- return ClassGenerationAction.SINGLE_CLASS_TEMPLATE;
- case ENTITY_SUBCLASS:
- return ClassGenerationAction.SUBCLASS_TEMPLATE;
- case ENTITY_SUPERCLASS:
- return ClassGenerationAction.SUPERCLASS_TEMPLATE;
- case EMBEDDABLE_SUBCLASS:
- return ClassGenerationAction.EMBEDDABLE_SUBCLASS_TEMPLATE;
- case EMBEDDABLE_SUPERCLASS:
- return ClassGenerationAction.EMBEDDABLE_SUPERCLASS_TEMPLATE;
- case EMBEDDABLE_SINGLE_CLASS:
- return ClassGenerationAction.EMBEDDABLE_SINGLE_CLASS_TEMPLATE;
- case DATAMAP_SINGLE_CLASS:
- return ClassGenerationAction.DATAMAP_SINGLE_CLASS_TEMPLATE;
- case DATAMAP_SUPERCLASS:
- return ClassGenerationAction.DATAMAP_SUPERCLASS_TEMPLATE;
- case DATAMAP_SUBCLASS:
- return ClassGenerationAction.DATAMAP_SUBCLASS_TEMPLATE;
- default:
- throw new IllegalArgumentException("Invalid template type: " + type);
+ case ENTITY_SINGLE_CLASS:
+ return SINGLE_CLASS_TEMPLATE;
+ case ENTITY_SUBCLASS:
+ return SUBCLASS_TEMPLATE;
+ case ENTITY_SUPERCLASS:
+ return SUPERCLASS_TEMPLATE;
+ case EMBEDDABLE_SUBCLASS:
+ return EMBEDDABLE_SUBCLASS_TEMPLATE;
+ case EMBEDDABLE_SUPERCLASS:
+ return EMBEDDABLE_SUPERCLASS_TEMPLATE;
+ case EMBEDDABLE_SINGLE_CLASS:
+ return EMBEDDABLE_SINGLE_CLASS_TEMPLATE;
+ case DATAMAP_SINGLE_CLASS:
+ return DATAMAP_SINGLE_CLASS_TEMPLATE;
+ case DATAMAP_SUPERCLASS:
+ return DATAMAP_SUPERCLASS_TEMPLATE;
+ case DATAMAP_SUBCLASS:
+ return DATAMAP_SUBCLASS_TEMPLATE;
+ default:
+ throw new IllegalArgumentException("Invalid template type: " + type);
}
}
- private String customTemplateName(TemplateType type) {
+ public String customTemplateName(TemplateType type) {
switch (type) {
- case ENTITY_SINGLE_CLASS:
- return template;
- case ENTITY_SUBCLASS:
- return template;
- case ENTITY_SUPERCLASS:
- return superTemplate;
- case EMBEDDABLE_SINGLE_CLASS:
- return embeddableTemplate;
- case EMBEDDABLE_SUBCLASS:
- return embeddableTemplate;
- case EMBEDDABLE_SUPERCLASS:
- return embeddableSuperTemplate;
- case DATAMAP_SINGLE_CLASS:
- return queryTemplate;
- case DATAMAP_SUPERCLASS:
- return querySuperTemplate;
- case DATAMAP_SUBCLASS:
- return queryTemplate;
- default:
- throw new IllegalArgumentException("Invalid template type: " + type);
+ case ENTITY_SINGLE_CLASS:
+ return cgenConfiguration.getTemplate();
+ case ENTITY_SUBCLASS:
+ return cgenConfiguration.getTemplate();
+ case ENTITY_SUPERCLASS:
+ return cgenConfiguration.getSuperTemplate();
+ case EMBEDDABLE_SINGLE_CLASS:
+ return cgenConfiguration.getEmbeddableTemplate();
+ case EMBEDDABLE_SUBCLASS:
+ return cgenConfiguration.getEmbeddableTemplate();
+ case EMBEDDABLE_SUPERCLASS:
+ return cgenConfiguration.getEmbeddableSuperTemplate();
+ case DATAMAP_SINGLE_CLASS:
+ return cgenConfiguration.getQueryTemplate();
+ case DATAMAP_SUPERCLASS:
+ return cgenConfiguration.getQuerySuperTemplate();
+ case DATAMAP_SUBCLASS:
+ return cgenConfiguration.getQueryTemplate();
+ default:
+ throw new IllegalArgumentException("Invalid template type: " + type);
}
}
- /**
- * VelocityContext initialization method called once per artifact.
- */
- private void resetContextForArtifact(Artifact artifact) {
- StringUtils stringUtils = StringUtils.getInstance();
+ /**
+ * VelocityContext initialization method called once per artifact.
+ */
+ public void resetContextForArtifact(Artifact artifact) {
+ StringUtils stringUtils = StringUtils.getInstance();
- String qualifiedClassName = artifact.getQualifiedClassName();
- String packageName = stringUtils.stripClass(qualifiedClassName);
- String className = stringUtils.stripPackageName(qualifiedClassName);
+ String qualifiedClassName = artifact.getQualifiedClassName();
+ String packageName = stringUtils.stripClass(qualifiedClassName);
+ String className = stringUtils.stripPackageName(qualifiedClassName);
- String qualifiedBaseClassName = artifact.getQualifiedBaseClassName();
- String basePackageName = stringUtils.stripClass(qualifiedBaseClassName);
- String baseClassName = stringUtils.stripPackageName(qualifiedBaseClassName);
+ String qualifiedBaseClassName = artifact.getQualifiedBaseClassName();
+ String basePackageName = stringUtils.stripClass(qualifiedBaseClassName);
+ String baseClassName = stringUtils.stripPackageName(qualifiedBaseClassName);
- String superClassName = getSuperclassPrefix() + stringUtils.stripPackageName(qualifiedClassName);
+ String superClassName = SUPERCLASS_PREFIX + stringUtils.stripPackageName(qualifiedClassName);
- String superPackageName = this.superPkg;
- if (superPackageName == null) {
- superPackageName = packageName + ".auto";
- }
+ String superPackageName = cgenConfiguration.getSuperPkg();
+ if (superPackageName == null) {
+ superPackageName = packageName + ".auto";
+ }
- context.put(Artifact.BASE_CLASS_KEY, baseClassName);
- context.put(Artifact.BASE_PACKAGE_KEY, basePackageName);
+ context.put(Artifact.BASE_CLASS_KEY, baseClassName);
+ context.put(Artifact.BASE_PACKAGE_KEY, basePackageName);
- context.put(Artifact.SUB_CLASS_KEY, className);
- context.put(Artifact.SUB_PACKAGE_KEY, packageName);
+ context.put(Artifact.SUB_CLASS_KEY, className);
+ context.put(Artifact.SUB_PACKAGE_KEY, packageName);
- context.put(Artifact.SUPER_CLASS_KEY, superClassName);
- context.put(Artifact.SUPER_PACKAGE_KEY, superPackageName);
+ context.put(Artifact.SUPER_CLASS_KEY, superClassName);
+ context.put(Artifact.SUPER_PACKAGE_KEY, superPackageName);
- context.put(Artifact.OBJECT_KEY, artifact.getObject());
- context.put(Artifact.STRING_UTILS_KEY, stringUtils);
+ context.put(Artifact.OBJECT_KEY, artifact.getObject());
+ context.put(Artifact.STRING_UTILS_KEY, stringUtils);
- context.put(Artifact.CREATE_PROPERTY_NAMES, createPropertyNames);
- context.put(Artifact.CREATE_PK_PROPERTIES, createPKProperties);
- }
+ context.put(Artifact.CREATE_PROPERTY_NAMES, cgenConfiguration.isCreatePropertyNames());
+ context.put(Artifact.CREATE_PK_PROPERTIES, cgenConfiguration.isCreatePKProperties());
+ }
/**
* VelocityContext initialization method called once per each artifact and
@@ -221,11 +162,50 @@ public class ClassGenerationAction implements Serializable, XMLSerializable {
artifact.postInitContext(context);
}
+ /**
+ * Adds entities to the internal entity list.
+ * @param entities collection
+ *
+ * @since 4.0 throws exception
+ */
+ public void addEntities(Collection<ObjEntity> entities) {
+ if (entities != null) {
+ for (ObjEntity entity : entities) {
+ cgenConfiguration.addArtifact(new EntityArtifact(entity));
+ }
+ }
+ }
+
+ public void addEmbeddables(Collection<Embeddable> embeddables) {
+ if (embeddables != null) {
+ for (Embeddable embeddable : embeddables) {
+ cgenConfiguration.addArtifact(new EmbeddableArtifact(embeddable));
+ }
+ }
+ }
+
+ public void addQueries(Collection<QueryDescriptor> queries) {
+ if (cgenConfiguration.getArtifactsGenerationMode().equals(ArtifactsGenerationMode.ALL.getLabel())) {
+ // TODO: andrus 10.12.2010 - why not also check for empty query list??
+ // Or create a better API for enabling DataMapArtifact
+ if (queries != null) {
+ Artifact artifact = new DataMapArtifact(cgenConfiguration.getDataMap(), queries);
+ if(!cgenConfiguration.getArtifacts().contains(artifact)) {
+ cgenConfiguration.addArtifact(artifact);
+ }
+ }
+ }
+ }
+
public void prepareArtifacts() {
- this.artifacts.clear();
- addAllEntities();
- addAllEmbeddables();
- addQueries(dataMap.getQueryDescriptors());
+ cgenConfiguration.getArtifacts().clear();
+ addEntities(cgenConfiguration.getEntities().stream()
+ .map(entity -> cgenConfiguration.getDataMap().getObjEntity(entity))
+ .collect(Collectors.toList()));
+ addEmbeddables(cgenConfiguration.getEmbeddables().stream()
+ .map(embeddable -> cgenConfiguration.getDataMap().getEmbeddable(embeddable))
+ .collect(Collectors.toList()));
+ addQueries(cgenConfiguration.getDataMap().getQueryDescriptors());
}
/**
@@ -236,14 +216,14 @@ public class ClassGenerationAction implements Serializable, XMLSerializable {
validateAttributes();
try {
- for (Artifact artifact : artifacts) {
+ for (Artifact artifact : cgenConfiguration.getArtifacts()) {
execute(artifact);
}
} finally {
// must reset engine at the end of class generator run to avoid
// memory
// leaks and stale templates
- this.templateCache.clear();
+ templateCache.clear();
}
}
@@ -254,7 +234,7 @@ public class ClassGenerationAction implements Serializable, XMLSerializable {
resetContextForArtifact(artifact);
- ArtifactGenerationMode artifactMode = makePairs ? ArtifactGenerationMode.GENERATION_GAP
+ ArtifactGenerationMode artifactMode = cgenConfiguration.isMakePairs() ? ArtifactGenerationMode.GENERATION_GAP
: ArtifactGenerationMode.SINGLE_CLASS;
TemplateType[] templateTypes = artifact.getTemplateTypes(artifactMode);
@@ -307,10 +287,17 @@ public class ClassGenerationAction implements Serializable, XMLSerializable {
* Called internally from "execute".
*/
private void validateAttributes() {
- Path dir = buildPath();
+ Path dir = cgenConfiguration.buildPath();
if (dir == null) {
throw new CayenneRuntimeException("'rootPath' attribute is missing.");
}
+ if(Files.notExists(dir)) {
+ try {
+ Files.createDirectories(dir);
+ } catch (IOException e) {
+ throw new CayenneRuntimeException("can't create directory");
+ }
+ }
if (!Files.isDirectory(dir)) {
throw new CayenneRuntimeException("'destDir' is not a directory.");
@@ -343,7 +330,7 @@ public class ClassGenerationAction implements Serializable, XMLSerializable {
// return writer with specified encoding
FileOutputStream out = new FileOutputStream(outFile);
- return (encoding != null) ? new OutputStreamWriter(out, encoding) : new OutputStreamWriter(out);
+ return (cgenConfiguration.getEncoding() != null) ? new OutputStreamWriter(out, cgenConfiguration.getEncoding()) : new OutputStreamWriter(out);
}
/**
@@ -355,10 +342,10 @@ public class ClassGenerationAction implements Serializable, XMLSerializable {
String packageName = (String) context.get(Artifact.SUPER_PACKAGE_KEY);
String className = (String) context.get(Artifact.SUPER_CLASS_KEY);
- String filename = StringUtils.getInstance().replaceWildcardInStringWithString(WILDCARD, outputPattern, className);
- File dest = new File(mkpath(new File(getDir()), packageName), filename);
+ String filename = StringUtils.getInstance().replaceWildcardInStringWithString(WILDCARD, cgenConfiguration.getOutputPattern(), className);
+ File dest = new File(mkpath(new File(cgenConfiguration.buildPath().toString()), packageName), filename);
- if (dest.exists() && !fileNeedUpdate(dest, superTemplate)) {
+ if (dest.exists() && !fileNeedUpdate(dest, cgenConfiguration.getSuperTemplate())) {
return null;
}
@@ -374,21 +361,21 @@ public class ClassGenerationAction implements Serializable, XMLSerializable {
String packageName = (String) context.get(Artifact.SUB_PACKAGE_KEY);
String className = (String) context.get(Artifact.SUB_CLASS_KEY);
- String filename = StringUtils.getInstance().replaceWildcardInStringWithString(WILDCARD, outputPattern, className);
- File dest = new File(mkpath(new File(Objects.requireNonNull(buildPath()).toString()), packageName), filename);
+ String filename = StringUtils.getInstance().replaceWildcardInStringWithString(WILDCARD, cgenConfiguration.getOutputPattern(), className);
+ File dest = new File(mkpath(new File(Objects.requireNonNull(cgenConfiguration.buildPath()).toString()), packageName), filename);
if (dest.exists()) {
// no overwrite of subclasses
- if (makePairs) {
+ if (cgenConfiguration.isMakePairs()) {
return null;
}
// skip if said so
- if (!overwrite) {
+ if (!cgenConfiguration.isOverwrite()) {
return null;
}
- if (!fileNeedUpdate(dest, template)) {
+ if (!fileNeedUpdate(dest, cgenConfiguration.getTemplate())) {
return null;
}
}
@@ -402,7 +389,7 @@ public class ClassGenerationAction implements Serializable, XMLSerializable {
* last saved AND the template is older than the destination file
*/
protected boolean fileNeedUpdate(File dest, String templateFileName) {
- if(force) {
+ if(cgenConfiguration.isForce()) {
return true;
}
@@ -421,7 +408,7 @@ public class ClassGenerationAction implements Serializable, XMLSerializable {
* Is file modified after internal timestamp (usually equal to mtime of datamap file)
*/
protected boolean isOld(File file) {
- return file.lastModified() > timestamp;
+ return file.lastModified() > cgenConfiguration.getTimestamp();
}
/**
@@ -431,7 +418,7 @@ public class ClassGenerationAction implements Serializable, XMLSerializable {
*/
private File mkpath(File dest, String pkgName) throws Exception {
- if (!usePkgPath || pkgName == null) {
+ if (!cgenConfiguration.isUsePkgPath() || pkgName == null) {
return dest;
}
@@ -445,242 +432,6 @@ public class ClassGenerationAction implements Serializable, XMLSerializable {
}
/**
- * Adds entities to the internal entity list.
- * @param entities collection
- *
- * @since 4.0 throws exception
- */
- public void addEntities(Collection<ObjEntity> entities) {
- if (entities != null) {
- for (ObjEntity entity : entities) {
- artifacts.add(new EntityArtifact(entity));
- }
- }
- }
-
- public void addEmbeddables(Collection<Embeddable> embeddables) {
- if (embeddables != null) {
- for (Embeddable embeddable : embeddables) {
- artifacts.add(new EmbeddableArtifact(embeddable));
- }
- }
- }
-
- public void addQueries(Collection<QueryDescriptor> queries) {
- if (artifactsGenerationMode == ArtifactsGenerationMode.ALL) {
- // TODO: andrus 10.12.2010 - why not also check for empty query list??
- // Or create a better API for enabling DataMapArtifact
- if (queries != null) {
- Artifact artifact = new DataMapArtifact(dataMap, queries);
- if(!artifacts.contains(artifact)) {
- artifacts.add(artifact);
- }
- }
- }
- }
-
- private void addAllEntities() {
- entityArtifacts.forEach(val -> {
- Artifact artifact = new EntityArtifact(dataMap.getObjEntity(val));
- if(!artifacts.contains(artifact)) {
- artifacts.add(artifact);
- }
- });
- }
-
- private void addAllEmbeddables() {
- embeddableArtifacts.forEach(val -> {
- Artifact artifact = new EmbeddableArtifact(dataMap.getEmbeddable(val));
- if(!artifacts.contains(artifact)) {
- artifacts.add(artifact);
- }
- });
- }
-
- /**
- * @since 4.1
- */
- public void loadEntity(String name) {
- entityArtifacts.add(name);
- }
-
- /**
- * @since 4.1
- */
- public void loadEmbeddable(String name) {
- embeddableArtifacts.add(name);
- }
-
- public void setArtifactsGenerationMode(String mode) {
- if (ArtifactsGenerationMode.ENTITY.getLabel().equalsIgnoreCase(mode)) {
- this.artifactsGenerationMode = ArtifactsGenerationMode.ENTITY;
- } else {
- this.artifactsGenerationMode = ArtifactsGenerationMode.ALL;
- }
- }
-
- public Path buildPath() {
- return rootPath != null ? relPath != null ? rootPath.resolve(relPath).toAbsolutePath().normalize() : rootPath : null;
- }
-
- public void loadEntities(String entities) {
- excludeEntityArtifacts.addAll(Arrays.asList(entities.split(",")));
- }
-
- public void resolveExcludeEntities() {
- entityArtifacts = dataMap.getObjEntities()
- .stream()
- .filter(entity -> !excludeEntityArtifacts.contains(entity.getName()))
- .map(ObjEntity::getName)
- .collect(Collectors.toList());
- }
-
- public void loadEmbeddables(String embeddables) {
- excludeEmbeddableArtifacts.addAll(Arrays.asList(embeddables.split(",")));
- }
-
- public void resolveExcludeEmbeddables() {
- embeddableArtifacts = dataMap.getEmbeddables()
- .stream()
- .filter(embeddable -> !excludeEmbeddableArtifacts.contains(embeddable.getClassName()))
- .map(Embeddable::getClassName)
- .collect(Collectors.toList());
- }
-
- public void resetCollections(){
- this.embeddableArtifacts.clear();
- this.entityArtifacts.clear();
- }
-
- private String getExcludeEntites() {
- Collection<String> excludeEntities = dataMap.getObjEntities()
- .stream()
- .filter(entity -> !entityArtifacts.contains(entity.getName()))
- .map(ObjEntity::getName)
- .collect(Collectors.toList());
- return org.apache.commons.lang3.StringUtils.join(excludeEntities, ",");
- }
-
- private String getExcludeEmbeddables() {
- Collection<String> excludeEmbeddable = dataMap.getEmbeddables()
- .stream()
- .filter(embeddable -> !embeddableArtifacts.contains(embeddable.getClassName()))
- .map(Embeddable::getClassName)
- .collect(Collectors.toList());
- return org.apache.commons.lang3.StringUtils.join(excludeEmbeddable, ",");
- }
-
- /**
- * Returns a String used to prefix class name to create a generated
- * superclass. Default value is "_".
- */
- private String getSuperclassPrefix() {
- return ClassGenerationAction.SUPERCLASS_PREFIX;
- }
-
- public Collection<String> getEmbeddables() {
- return embeddableArtifacts;
- }
-
- /**
- * @since 4.1
- */
- public boolean isCreatePKProperties() {
- return createPKProperties;
- }
-
- public boolean isMakePairs() {
- return makePairs;
- }
-
- public boolean isOverwrite() {
- return overwrite;
- }
-
- public boolean isUsePkgPath() {
- return usePkgPath;
- }
-
- public boolean isCreatePropertyNames() {
- return createPropertyNames;
- }
-
- public String getOutputPattern() {
- return outputPattern;
- }
-
- public String getSuperclassTemplate(){
- return superTemplate;
- }
-
- public DataMap getDataMap() {
- return dataMap;
- }
-
- public String getDir(){
- return rootPath != null ? relPath != null ? rootPath.resolve(relPath).toAbsolutePath().normalize().toString() : rootPath.toString() : null;
- }
-
- public String getTemplate() {
- return template;
- }
-
- public String getSuperPkg(){
- return superPkg;
- }
-
- public Collection<String> getEntities() {
- return entityArtifacts;
- }
-
- public String getRelPath() {
- if(relPath == null || relPath.toString().isEmpty()) {
- return ".";
- }
- return relPath.toString();
- }
-
- public String getArtifactsGenerationMode(){
- return artifactsGenerationMode.getLabel();
- }
-
- public boolean isForce() {
- return force;
- }
-
- public void setForce(boolean force) {
- this.force = force;
- }
-
- public String getEncoding() {
- return encoding;
- }
-
- public String getEmbeddableTemplate() {
- return embeddableTemplate;
- }
-
- public String getEmbeddableSuperTemplate() {
- return embeddableSuperTemplate;
- }
-
- public String getQueryTemplate() {
- return queryTemplate;
- }
-
- public String getQuerySuperTemplate() {
- return querySuperTemplate;
- }
-
- /**
- * Sets an optional shared nVelocityContext. Useful with tools like VPP that
- * can set custom values in the context, not known to Cayenne.
- */
- public void setContext(VelocityContext context) {
- this.context = context;
- }
-
- /**
* Injects an optional logger that will be used to trace generated files at
* the info level.
*/
@@ -688,132 +439,20 @@ public class ClassGenerationAction implements Serializable, XMLSerializable {
this.logger = logger;
}
- public void setTimestamp(long timestamp) {
- this.timestamp = timestamp;
+ public CgenConfiguration getCgenConfiguration() {
+ return cgenConfiguration;
}
/**
- * Sets file encoding. If set to null, default system encoding will be used.
- */
- public void setEncoding(String encoding) {
- this.encoding = encoding;
- }
-
- /**
- * Sets "superPkg" property value.
- */
- public void setSuperPkg(String superPkg) {
- this.superPkg = superPkg;
- }
-
- /**
- * @param dataMap The dataMap to set.
- */
- public void setDataMap(DataMap dataMap) {
- this.dataMap = dataMap;
- }
-
- public void setEmbeddableTemplate(String embeddableTemplate) {
- this.embeddableTemplate = embeddableTemplate;
- }
-
- public void setEmbeddableSuperTemplate(String embeddableSuperTemplate) {
- this.embeddableSuperTemplate = embeddableSuperTemplate;
- }
-
- /**
- * Sets <code>overwrite</code> property.
- */
- public void setOverwrite(boolean overwrite) {
- this.overwrite = overwrite;
- }
-
- /**
- * Sets <code>makepairs</code> property.
- */
- public void setMakePairs(boolean makePairs) {
- this.makePairs = makePairs;
- }
-
- /**
- * Sets <code>template</code> property.
- */
- public void setTemplate(String template) {
- this.template = template;
- }
-
- /**
- * Sets <code>superTemplate</code> property.
- */
- public void setSuperTemplate(String superTemplate) {
- this.superTemplate = superTemplate;
- }
-
- public void setQueryTemplate(String queryTemplate) {
- this.queryTemplate = queryTemplate;
- }
-
- public void setQuerySuperTemplate(String querySuperTemplate) {
- this.querySuperTemplate = querySuperTemplate;
- }
-
- /**
- * Sets <code>usepkgpath</code> property.
- */
- public void setUsePkgPath(boolean usePkgPath) {
- this.usePkgPath = usePkgPath;
- }
-
- /**
- * Sets <code>outputPattern</code> property.
- */
- public void setOutputPattern(String outputPattern) {
- this.outputPattern = outputPattern;
- }
-
- /**
- * Sets <code>createPropertyNames</code> property.
- */
- public void setCreatePropertyNames(boolean createPropertyNames) {
- this.createPropertyNames = createPropertyNames;
- }
-
- /**
- * @since 4.1
+ * Sets an optional shared VelocityContext. Useful with tools like VPP that
+ * can set custom values in the context, not known to Cayenne.
*/
- public void setCreatePKProperties(boolean createPKProperties) {
- this.createPKProperties = createPKProperties;
- }
-
- public void setRootPath(Path rootPath) {
- this.rootPath = rootPath;
- }
-
- public void setRelPath(Path relPath) {
- this.relPath = relPath;
+ public void setContext(VelocityContext context) {
+ this.context = context;
}
- public void setRelPath(String path) {
- this.relPath = rootPath.relativize(Paths.get(path));
+ public void setCgenConfiguration(CgenConfiguration cgenConfiguration) {
+ this.cgenConfiguration = cgenConfiguration;
}
- @Override
- public void encodeAsXML(XMLEncoder encoder, ConfigurationNodeVisitor delegate) {
- encoder.start("cgen")
- .attribute("xmlns", CgenExtension.NAMESPACE)
- .simpleTag("excludeEntities", getExcludeEntites())
- .simpleTag("excludeEmbeddables",getExcludeEmbeddables())
- .simpleTag("outputDirectory", getRelPath())
- .simpleTag("generationMode", this.artifactsGenerationMode.getLabel())
- .simpleTag("subclassTemplate", this.template)
- .simpleTag("superclassTemplate", this.superTemplate)
- .simpleTag("outputPattern", this.outputPattern)
- .simpleTag("makePairs", Boolean.toString(this.makePairs))
- .simpleTag("usePkgPath", Boolean.toString(this.usePkgPath))
- .simpleTag("overwriteSubclasses", Boolean.toString(this.overwrite))
- .simpleTag("createPropertyNames", Boolean.toString(this.createPropertyNames))
- .simpleTag("superPkg", this.superPkg)
- .simpleTag("createPKProperties", Boolean.toString(this.createPKProperties))
- .end();
- }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/52ea45b5/cayenne-cgen/src/main/java/org/apache/cayenne/gen/ClientClassGenerationAction.java
----------------------------------------------------------------------
diff --git a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/ClientClassGenerationAction.java b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/ClientClassGenerationAction.java
index c8880aa..b823c85 100644
--- a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/ClientClassGenerationAction.java
+++ b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/ClientClassGenerationAction.java
@@ -30,18 +30,27 @@ import java.util.Collection;
*/
public class ClientClassGenerationAction extends ClassGenerationAction {
+ private static final String TEMPLATES_DIR_NAME = "templates/v4_1/";
public static final String SUBCLASS_TEMPLATE = TEMPLATES_DIR_NAME + "client-subclass.vm";
public static final String SUPERCLASS_TEMPLATE = TEMPLATES_DIR_NAME + "client-superclass.vm";
public static final String SINGLE_CLASS_TEMPLATE = TEMPLATES_DIR_NAME + "client-singleclass.vm";
-
+
public static final String DMAP_SUBCLASS_TEMPLATE = TEMPLATES_DIR_NAME + "client-datamap-subclass.vm";
public static final String DMAP_SUPERCLASS_TEMPLATE = TEMPLATES_DIR_NAME + "client-datamap-superclass.vm";
- public static final String DMAP_SINGLE_CLASS_TEMPLATE = TEMPLATES_DIR_NAME + "client-datamap-singleclass.vm";
+ public static final String DATAMAP_SINGLE_CLASS_TEMPLATE = TEMPLATES_DIR_NAME + "client-datamap-singleclass.vm";
public static final String CLIENT_SUPERCLASS_PREFIX = "_Client";
+ public ClientClassGenerationAction(CgenConfiguration cgenConfiguration) {
+ super(cgenConfiguration);
+ cgenConfiguration.setTemplate(SUBCLASS_TEMPLATE);
+ cgenConfiguration.setSuperTemplate(SUPERCLASS_TEMPLATE);
+ cgenConfiguration.setQueryTemplate(DMAP_SUBCLASS_TEMPLATE);
+ cgenConfiguration.setQuerySuperTemplate(DMAP_SUPERCLASS_TEMPLATE);
+ }
+
@Override
- protected String defaultTemplateName(TemplateType type) {
+ public String defaultTemplateName(TemplateType type) {
switch (type) {
case ENTITY_SUBCLASS:
return SUBCLASS_TEMPLATE;
@@ -51,18 +60,18 @@ public class ClientClassGenerationAction extends ClassGenerationAction {
return SINGLE_CLASS_TEMPLATE;
case EMBEDDABLE_SUBCLASS:
- return EMBEDDABLE_SUBCLASS_TEMPLATE;
+ return ClassGenerationAction.EMBEDDABLE_SUBCLASS_TEMPLATE;
case EMBEDDABLE_SUPERCLASS:
- return EMBEDDABLE_SUPERCLASS_TEMPLATE;
+ return ClassGenerationAction.EMBEDDABLE_SUPERCLASS_TEMPLATE;
case EMBEDDABLE_SINGLE_CLASS:
- return EMBEDDABLE_SINGLE_CLASS_TEMPLATE;
-
+ return ClassGenerationAction.EMBEDDABLE_SINGLE_CLASS_TEMPLATE;
+
case DATAMAP_SUPERCLASS:
- return ClientClassGenerationAction.DMAP_SUPERCLASS_TEMPLATE;
+ return DMAP_SUPERCLASS_TEMPLATE;
case DATAMAP_SUBCLASS:
- return ClientClassGenerationAction.DMAP_SUBCLASS_TEMPLATE;
+ return DMAP_SUBCLASS_TEMPLATE;
case DATAMAP_SINGLE_CLASS:
- return DMAP_SINGLE_CLASS_TEMPLATE;
+ return DATAMAP_SINGLE_CLASS_TEMPLATE;
default:
throw new IllegalArgumentException("Unsupported template type: " + type);
@@ -73,14 +82,14 @@ public class ClientClassGenerationAction extends ClassGenerationAction {
* @since 4.0 throws exception
*/
@Override
- public void addEntities(Collection<ObjEntity> entities) throws CayenneRuntimeException {
- if (!dataMap.isClientSupported()) {
+ public void addEntities(Collection<ObjEntity> entities) {
+ if (!cgenConfiguration.getDataMap().isClientSupported()) {
throw new CayenneRuntimeException("Can't create client classes. Check client supported option on DataMap configuration.");
}
if (entities != null) {
for (ObjEntity entity : entities) {
if (!entity.isServerOnly()) {
- artifacts.add(new ClientEntityArtifact(entity));
+ cgenConfiguration.addArtifact(new ClientEntityArtifact(entity));
}
}
}
@@ -88,9 +97,9 @@ public class ClientClassGenerationAction extends ClassGenerationAction {
@Override
public void addQueries(Collection<QueryDescriptor> queries) {
- if (artifactsGenerationMode == ArtifactsGenerationMode.ALL) {
+ if (cgenConfiguration.getArtifactsGenerationMode().equals(ArtifactsGenerationMode.ALL.getLabel())) {
if (queries != null) {
- artifacts.add(new ClientDataMapArtifact(dataMap, queries));
+ cgenConfiguration.addArtifact(new ClientDataMapArtifact(cgenConfiguration.getDataMap(), queries));
}
}
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/52ea45b5/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenConfigHandler.java
----------------------------------------------------------------------
diff --git a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenConfigHandler.java b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenConfigHandler.java
index 7883ca2..1f4dd5e 100644
--- a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenConfigHandler.java
+++ b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenConfigHandler.java
@@ -20,7 +20,7 @@ package org.apache.cayenne.gen.xml;
import org.apache.cayenne.configuration.xml.DataChannelMetaData;
import org.apache.cayenne.configuration.xml.NamespaceAwareNestedTagHandler;
-import org.apache.cayenne.gen.ClassGenerationAction;
+import org.apache.cayenne.gen.CgenConfiguration;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
@@ -33,23 +33,24 @@ public class CgenConfigHandler extends NamespaceAwareNestedTagHandler{
public static final String CONFIG_TAG = "cgen";
- private static final String OUTPUT_DIRECTORY_TAG = "outputDirectory";
- private static final String GENERATION_MODE_TAG = "generationMode";
- private static final String SUBCLASS_TEMPLATE_TAG = "subclassTemplate";
+ private static final String OUTPUT_DIRECTORY_TAG = "destDir";
+ private static final String GENERATION_MODE_TAG = "mode";
+ private static final String SUBCLASS_TEMPLATE_TAG = "template";
private static final String SUPERCLASS_TEMPLATE_TAG = "superclassTemplate";
private static final String OUTPUT_PATTERN_TAG = "outputPattern";
private static final String MAKE_PAIRS_TAG = "makePairs";
private static final String USE_PKG_PATH_TAG = "usePkgPath";
- private static final String OVERWRITE_SUBCLASSES_TAG = "overwriteSubclasses";
+ private static final String OVERWRITE_SUBCLASSES_TAG = "overwrite";
private static final String CREATE_PROPERTY_NAMES_TAG = "createPropertyNames";
private static final String EXCLUDE_ENTITIES_TAG = "excludeEntities";
private static final String EXCLUDE_EMBEDDABLES_TAG = "excludeEmbeddables";
private static final String CREATE_PK_PROPERTIES = "createPKProperties";
+ private static final String CLIENT_TAG = "client";
public static final String TRUE = "true";
private DataChannelMetaData metaData;
- private ClassGenerationAction configuration;
+ private CgenConfiguration configuration;
CgenConfigHandler(NamespaceAwareNestedTagHandler parentHandler, DataChannelMetaData metaData) {
super(parentHandler);
@@ -106,6 +107,9 @@ public class CgenConfigHandler extends NamespaceAwareNestedTagHandler{
case CREATE_PK_PROPERTIES:
createPkPropertiesTag(data);
break;
+ case CLIENT_TAG:
+ createClient(data);
+ break;
}
}
@@ -249,8 +253,22 @@ public class CgenConfigHandler extends NamespaceAwareNestedTagHandler{
}
}
+ private void createClient(String data) {
+ if(data.trim().length() == 0) {
+ return;
+ }
+
+ if(configuration != null) {
+ if(data.equals(TRUE)) {
+ configuration.setClient(true);
+ } else {
+ configuration.setClient(false);
+ }
+ }
+ }
+
private void createConfig() {
- configuration = new ClassGenerationAction();
+ configuration = new CgenConfiguration();
loaderContext.addDataMapListener(dataMap -> {
configuration.setDataMap(dataMap);
configuration.resolveExcludeEntities();
http://git-wip-us.apache.org/repos/asf/cayenne/blob/52ea45b5/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenSaverDelegate.java
----------------------------------------------------------------------
diff --git a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenSaverDelegate.java b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenSaverDelegate.java
index fc23e50..aa008b1 100644
--- a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenSaverDelegate.java
+++ b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenSaverDelegate.java
@@ -19,7 +19,7 @@
package org.apache.cayenne.gen.xml;
import org.apache.cayenne.configuration.xml.DataChannelMetaData;
-import org.apache.cayenne.gen.ClassGenerationAction;
+import org.apache.cayenne.gen.CgenConfiguration;
import org.apache.cayenne.map.DataMap;
import org.apache.cayenne.project.extension.BaseSaverDelegate;
@@ -41,7 +41,7 @@ public class CgenSaverDelegate extends BaseSaverDelegate{
@Override
public Void visitDataMap(DataMap dataMap) {
- ClassGenerationAction cgen = metaData.get(dataMap, ClassGenerationAction.class);
+ CgenConfiguration cgen = metaData.get(dataMap, CgenConfiguration.class);
if(cgen != null){
resolveOutputDir(cgen);
encoder.nested(cgen, getParentDelegate());
@@ -49,8 +49,11 @@ public class CgenSaverDelegate extends BaseSaverDelegate{
return null;
}
- private void resolveOutputDir(ClassGenerationAction classGenerationAction) {
- Path prevPath = classGenerationAction.buildPath();
+ private void resolveOutputDir(CgenConfiguration cgenConfiguration) {
+ if(cgenConfiguration.getRootPath() == null) {
+ return;
+ }
+ Path prevPath = cgenConfiguration.buildPath();
URL url = getBaseDirectory().getURL();
if(url != null) {
Path resourcePath = Paths.get(url.getPath());
@@ -59,9 +62,8 @@ public class CgenSaverDelegate extends BaseSaverDelegate{
}
if(prevPath != null && resourcePath.compareTo(prevPath) != 0) {
- classGenerationAction.setRootPath(resourcePath);
Path relPath = resourcePath.relativize(prevPath);
- classGenerationAction.setRelPath(relPath);
+ cgenConfiguration.setRelPath(relPath);
}
}
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/52ea45b5/cayenne-cgen/src/main/java/org/apache/cayenne/tools/CayenneGeneratorEmbeddableFilterAction.java
----------------------------------------------------------------------
diff --git a/cayenne-cgen/src/main/java/org/apache/cayenne/tools/CayenneGeneratorEmbeddableFilterAction.java b/cayenne-cgen/src/main/java/org/apache/cayenne/tools/CayenneGeneratorEmbeddableFilterAction.java
new file mode 100644
index 0000000..00ab16a
--- /dev/null
+++ b/cayenne-cgen/src/main/java/org/apache/cayenne/tools/CayenneGeneratorEmbeddableFilterAction.java
@@ -0,0 +1,29 @@
+package org.apache.cayenne.tools;
+
+import org.apache.cayenne.dbsync.filter.NameFilter;
+import org.apache.cayenne.map.DataMap;
+import org.apache.cayenne.map.Embeddable;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+class CayenneGeneratorEmbeddableFilterAction {
+
+ private NameFilter nameFilter;
+
+ Collection<Embeddable> getFilteredEmbeddables(DataMap mainDataMap) {
+ Collection<Embeddable> embeddables = new ArrayList<>(mainDataMap.getEmbeddables());
+
+ // filter out excluded entities...
+
+ // note that unlike entity, embeddable is matched by class name as it doesn't
+ // have a symbolic name...
+ embeddables.removeIf(e -> !nameFilter.isIncluded(e.getClassName()));
+
+ return embeddables;
+ }
+
+ public void setNameFilter(NameFilter nameFilter) {
+ this.nameFilter = nameFilter;
+ }
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/52ea45b5/cayenne-cgen/src/main/java/org/apache/cayenne/tools/CayenneGeneratorEntityFilterAction.java
----------------------------------------------------------------------
diff --git a/cayenne-cgen/src/main/java/org/apache/cayenne/tools/CayenneGeneratorEntityFilterAction.java b/cayenne-cgen/src/main/java/org/apache/cayenne/tools/CayenneGeneratorEntityFilterAction.java
index 4d068d8..7d53536 100644
--- a/cayenne-cgen/src/main/java/org/apache/cayenne/tools/CayenneGeneratorEntityFilterAction.java
+++ b/cayenne-cgen/src/main/java/org/apache/cayenne/tools/CayenneGeneratorEntityFilterAction.java
@@ -26,7 +26,6 @@ import org.apache.cayenne.map.ObjEntity;
import java.net.MalformedURLException;
import java.util.ArrayList;
import java.util.Collection;
-import java.util.Iterator;
/**
* Performs entity filtering to build a collection of entities that should be used in
@@ -43,17 +42,10 @@ class CayenneGeneratorEntityFilterAction {
Collection<Embeddable> embeddables = new ArrayList<>(mainDataMap.getEmbeddables());
// filter out excluded entities...
- Iterator<Embeddable> it = embeddables.iterator();
- while (it.hasNext()) {
- Embeddable e = it.next();
-
- // note that unlike entity, embeddable is matched by class name as it doesn't
- // have a symbolic name...
- if (!nameFilter.isIncluded(e.getClassName())) {
- it.remove();
- }
- }
+ // note that unlike entity, embeddable is matched by class name as it doesn't
+ // have a symbolic name...
+ embeddables.removeIf(e -> !nameFilter.isIncluded(e.getClassName()));
return embeddables;
}
@@ -64,13 +56,7 @@ class CayenneGeneratorEntityFilterAction {
Collection<ObjEntity> entities = new ArrayList<>(mainDataMap.getObjEntities());
// filter out excluded entities...
- Iterator<ObjEntity> it = entities.iterator();
- while (it.hasNext()) {
- ObjEntity e = it.next();
- if (e.isGeneric() || client && !e.isClientAllowed() || !nameFilter.isIncluded(e.getName())) {
- it.remove();
- }
- }
+ entities.removeIf(e -> e.isGeneric() || client && !e.isClientAllowed() || !nameFilter.isIncluded(e.getName()));
return entities;
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/52ea45b5/cayenne-cgen/src/test/java/org/apache/cayenne/gen/ClassGenerationActionTest.java
----------------------------------------------------------------------
diff --git a/cayenne-cgen/src/test/java/org/apache/cayenne/gen/ClassGenerationActionTest.java b/cayenne-cgen/src/test/java/org/apache/cayenne/gen/ClassGenerationActionTest.java
index 721a129..89dfaaa 100644
--- a/cayenne-cgen/src/test/java/org/apache/cayenne/gen/ClassGenerationActionTest.java
+++ b/cayenne-cgen/src/test/java/org/apache/cayenne/gen/ClassGenerationActionTest.java
@@ -48,10 +48,13 @@ public class ClassGenerationActionTest {
protected ClassGenerationAction action;
protected Collection<StringWriter> writers;
+ protected CgenConfiguration cgenConfiguration;
+
@Before
public void setUp() throws Exception {
writers = new ArrayList<>(3);
- action = new ClassGenerationAction() {
+ cgenConfiguration = new CgenConfiguration();
+ action = new ClassGenerationAction(cgenConfiguration) {
@Override
protected Writer openWriter(TemplateType templateType) throws Exception {
@@ -74,8 +77,8 @@ public class ClassGenerationActionTest {
ObjEntity testEntity1 = new ObjEntity("TE1");
testEntity1.setClassName("org.example.TestClass1");
- action.setMakePairs(true);
- action.setSuperPkg("org.example.auto");
+ cgenConfiguration.setMakePairs(true);
+ cgenConfiguration.setSuperPkg("org.example.auto");
List<String> generated = execute(new EntityArtifact(testEntity1));
assertNotNull(generated);
@@ -116,7 +119,7 @@ public class ClassGenerationActionTest {
relationship.setCollectionType("java.util.Map");
testEntity1.addRelationship(relationship);
- action.setMakePairs(true);
+ cgenConfiguration.setMakePairs(true);
List<String> generated = execute(new EntityArtifact(testEntity1));
assertNotNull(generated);
@@ -143,7 +146,7 @@ public class ClassGenerationActionTest {
testEntity1.addAttribute(attr);
testEntity1.addAttribute(attr1);
- action.setMakePairs(true);
+ cgenConfiguration.setMakePairs(true);
List<String> generated = execute(new EntityArtifact(testEntity1));
assertNotNull(generated);
@@ -213,7 +216,7 @@ public class ClassGenerationActionTest {
if (isClient) {
- action = new ClientClassGenerationAction() {
+ action = new ClientClassGenerationAction(cgenConfiguration) {
@Override
protected Writer openWriter(TemplateType templateType) throws Exception {
StringWriter writer = new StringWriter();
@@ -225,7 +228,7 @@ public class ClassGenerationActionTest {
}
- action.setMakePairs(true);
+ cgenConfiguration.setMakePairs(true);
List<String> generated = execute(new EntityArtifact(testEntity1));
assertNotNull(generated);
@@ -261,10 +264,10 @@ public class ClassGenerationActionTest {
File file = mock(File.class);
when(file.lastModified()).thenReturn(1000L);
- action.setTimestamp(0);
+ cgenConfiguration.setTimestamp(0);
assertTrue(action.isOld(file));
- action.setTimestamp(2000L);
+ cgenConfiguration.setTimestamp(2000L);
assertFalse(action.isOld(file));
}
@@ -273,23 +276,23 @@ public class ClassGenerationActionTest {
File file = mock(File.class);
when(file.lastModified()).thenReturn(1000L);
- action.setTimestamp(0);
- action.setForce(false);
+ cgenConfiguration.setTimestamp(0);
+ cgenConfiguration.setForce(false);
assertFalse(action.fileNeedUpdate(file, null));
- action.setTimestamp(2000L);
- action.setForce(false);
+ cgenConfiguration.setTimestamp(2000L);
+ cgenConfiguration.setForce(false);
assertTrue(action.fileNeedUpdate(file, null));
- action.setTimestamp(0);
- action.setForce(true);
+ cgenConfiguration.setTimestamp(0);
+ cgenConfiguration.setForce(true);
assertTrue(action.fileNeedUpdate(file, null));
- action.setTimestamp(2000L);
- action.setForce(true);
+ cgenConfiguration.setTimestamp(2000L);
+ cgenConfiguration.setForce(true);
assertTrue(action.fileNeedUpdate(file, null));
}