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:42 UTC
[11/32] cayenne git commit: Add cgen tab.
http://git-wip-us.apache.org/repos/asf/cayenne/blob/6a43436a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/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;
+ }
+
+}