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:45 UTC
[14/32] cayenne git commit: Cgen tab, cgen configuration,
cgen in maven, ant, gradle.
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();
+ }
+
}