Skip to content

Commit e452059

Browse files
committed
Update cgen dialog
(cherry picked from commit a799a39)
1 parent 22c2e78 commit e452059

14 files changed

+359
-298
lines changed

modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/GenerateCodeAction.java

Lines changed: 3 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
import org.apache.cayenne.project.Project;
2828

2929
import java.awt.event.ActionEvent;
30-
import java.util.ArrayList;
3130
import java.util.Collection;
3231

3332
public class GenerateCodeAction extends CayenneAction {
@@ -46,31 +45,8 @@ public String getIconName() {
4645

4746
public void performAction(ActionEvent e) {
4847
Collection<DataMap> dataMaps;
49-
DataMap dataMap = getProjectController().getCurrentDataMap();
50-
51-
if (dataMap != null) {
52-
dataMaps = new ArrayList<>();
53-
dataMaps.add(dataMap);
54-
55-
new CodeGeneratorController(getApplication().getFrameController(), dataMaps).startup();
56-
} else if (getProjectController().getCurrentDataNode() != null) {
57-
Collection<String> nodeMaps = getProjectController().getCurrentDataNode().getDataMapNames();
58-
Project project = getProjectController().getProject();
59-
dataMaps = ((DataChannelDescriptor) project.getRootNode()).getDataMaps();
60-
61-
Collection<DataMap> resultMaps = new ArrayList<>();
62-
for (DataMap map : dataMaps) {
63-
if (nodeMaps.contains(map.getName())) {
64-
resultMaps.add(map);
65-
}
66-
}
67-
68-
new CodeGeneratorController(getApplication().getFrameController(), resultMaps).startup();
69-
} else {
70-
Project project = getProjectController().getProject();
71-
dataMaps = ((DataChannelDescriptor) project.getRootNode()).getDataMaps();
72-
73-
new CodeGeneratorController(getApplication().getFrameController(), dataMaps).startup();
74-
}
48+
Project project = getProjectController().getProject();
49+
dataMaps = ((DataChannelDescriptor) project.getRootNode()).getDataMaps();
50+
new CodeGeneratorController(getApplication().getFrameController(), dataMaps).startup();
7551
}
7652
}

modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClassesTabController.java

Lines changed: 91 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -19,27 +19,56 @@
1919

2020
package org.apache.cayenne.modeler.dialog.codegen;
2121

22-
import java.awt.Component;
23-
24-
import javax.swing.JLabel;
25-
22+
import org.apache.cayenne.map.DataMap;
2623
import org.apache.cayenne.modeler.util.CayenneController;
2724
import org.apache.cayenne.swing.BindingBuilder;
2825
import org.apache.cayenne.swing.ImageRendererColumn;
2926
import org.apache.cayenne.swing.ObjectBinding;
3027
import org.apache.cayenne.swing.TableBindingBuilder;
3128

29+
import javax.swing.JCheckBox;
30+
import javax.swing.JLabel;
31+
import java.awt.Component;
32+
import java.util.ArrayList;
33+
import java.util.Arrays;
34+
import java.util.Collection;
35+
import java.util.HashMap;
36+
import java.util.Map;
37+
import java.util.List;
38+
import java.util.stream.Collectors;
39+
import java.util.stream.Stream;
40+
3241
public class ClassesTabController extends CayenneController {
3342

3443
public static final String GENERATE_PROPERTY = "generate";
3544

3645
protected ClassesTabPanel view;
37-
protected ObjectBinding tableBinding;
3846

39-
public ClassesTabController(CodeGeneratorControllerBase parent) {
47+
private Map<DataMap, ObjectBinding> objectBindings;
48+
49+
protected Collection<DataMap> dataMaps;
50+
51+
protected Map<DataMap, List<Object>> objectList;
52+
53+
private List<Object> currentCollection;
54+
55+
public ClassesTabController(CodeGeneratorControllerBase parent, Collection<DataMap> dataMaps) {
4056
super(parent);
4157

42-
this.view = new ClassesTabPanel();
58+
currentCollection = new ArrayList<>();
59+
60+
this.objectList = new HashMap<>();
61+
for(DataMap dataMap : dataMaps) {
62+
List<Object> list = new ArrayList<>(Arrays.asList(dataMap));
63+
list.addAll(Stream.concat(dataMap.getObjEntities().stream(), dataMap.getEmbeddables().stream())
64+
.collect(Collectors.toList()));
65+
objectList.put(dataMap, list);
66+
}
67+
68+
this.objectBindings = new HashMap<>();
69+
this.dataMaps = dataMaps;
70+
this.view = new ClassesTabPanel(dataMaps);
71+
4372
initBindings();
4473
}
4574

@@ -67,6 +96,7 @@ protected void initBindings() {
6796
Boolean.class,
6897
true,
6998
Boolean.TRUE);
99+
70100
tableBuilder.addColumn(
71101
"Class",
72102
"parent.getItemName(#item)",
@@ -79,10 +109,22 @@ protected void initBindings() {
79109
"parent.getProblem(#item)",
80110
String.class,
81111
false,
82-
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
83-
84-
this.tableBinding = tableBuilder.bindToTable(view.getTable(), "parent.classes");
85-
view.getTable().getColumnModel().getColumn(1).setCellRenderer(new ImageRendererColumn());
112+
"XXXXXXXXXXXXXXXXXXXXXXXXXXX");
113+
114+
for(DataMap dataMap : dataMaps) {
115+
if(view.getDataMapTables().get(dataMap) != null) {
116+
currentCollection = objectList.get(dataMap);
117+
objectBindings.put(dataMap, tableBuilder.bindToTable(view.getDataMapTables().get(dataMap), "currentCollection"));
118+
view.getDataMapTables().get(dataMap).getColumnModel().getColumn(1).setCellRenderer(new ImageRendererColumn());
119+
}
120+
if(view.getDataMapJCheckBoxMap().get(dataMap) != null) {
121+
view.getDataMapJCheckBoxMap().get(dataMap).addActionListener(val -> checkDataMap(dataMap, ((JCheckBox)val.getSource()).isSelected()));
122+
}
123+
}
124+
}
125+
126+
public List<Object> getCurrentCollection() {
127+
return currentCollection;
86128
}
87129

88130
public boolean isSelected() {
@@ -92,13 +134,21 @@ public boolean isSelected() {
92134
public void setSelected(boolean selected) {
93135
getParentController().setSelected(selected);
94136
classSelectedAction();
137+
138+
for(DataMap dataMap : dataMaps) {
139+
if(view.isAllCheckBoxesFromDataMapSelected(dataMap)) {
140+
view.getDataMapJCheckBoxMap().get(dataMap).setSelected(true);
141+
} else {
142+
view.getDataMapJCheckBoxMap().get(dataMap).setSelected(false);
143+
}
144+
}
95145
}
96146

97147
/**
98148
* A callback action that updates the state of Select All checkbox.
99149
*/
100150
public void classSelectedAction() {
101-
int selectedCount = getParentController().getSelectedEntitiesSize() + getParentController().getSelectedEmbeddablesSize() ;
151+
int selectedCount = getParentController().getSelectedEntitiesSize() + getParentController().getSelectedEmbeddablesSize() + getParentController().getSelectedDataMapsSize();
102152

103153
if (selectedCount == 0) {
104154
view.getCheckAll().setSelected(false);
@@ -114,7 +164,35 @@ else if (selectedCount == getParentController().getClasses().size()) {
114164
*/
115165
public void checkAllAction() {
116166
if (getParentController().updateSelection(view.getCheckAll().isSelected() ? o -> true : o -> false)) {
117-
tableBinding.updateView();
167+
dataMaps.forEach(dataMap -> {
168+
if(objectBindings.get(dataMap) != null) {
169+
currentCollection = objectList.get(dataMap);
170+
objectBindings.get(dataMap).updateView();
171+
}
172+
});
173+
}
174+
}
175+
176+
private void checkDataMap(DataMap dataMap, boolean selected) {
177+
if (getParentController().updateDataMapSelection(selected ? o -> true : o -> false, dataMap)){
178+
if(objectBindings.get(dataMap) != null) {
179+
currentCollection = objectList.get(dataMap);
180+
objectBindings.get(dataMap).updateView();
181+
}
182+
if(isAllMapsSelected()) {
183+
view.getCheckAll().setSelected(true);
184+
}
185+
}
186+
}
187+
188+
private boolean isAllMapsSelected() {
189+
for(DataMap dataMap : dataMaps) {
190+
if(view.getDataMapJCheckBoxMap().get(dataMap) != null) {
191+
if(!view.getDataMapJCheckBoxMap().get(dataMap).isSelected()) {
192+
return false;
193+
}
194+
}
118195
}
196+
return true;
119197
}
120198
}

modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClassesTabPanel.java

Lines changed: 72 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -19,72 +19,120 @@
1919

2020
package org.apache.cayenne.modeler.dialog.codegen;
2121

22-
import java.awt.BorderLayout;
23-
import java.awt.Dimension;
24-
import java.awt.FlowLayout;
25-
import java.awt.event.ItemEvent;
26-
import java.awt.event.ItemListener;
22+
import org.apache.cayenne.map.DataMap;
2723

24+
import javax.swing.BoxLayout;
2825
import javax.swing.JCheckBox;
2926
import javax.swing.JLabel;
3027
import javax.swing.JPanel;
3128
import javax.swing.JScrollPane;
3229
import javax.swing.JTable;
3330
import javax.swing.ScrollPaneConstants;
3431
import javax.swing.UIManager;
32+
import javax.swing.border.EmptyBorder;
33+
import java.awt.BorderLayout;
34+
import java.awt.Component;
35+
import java.awt.Dimension;
36+
import java.awt.FlowLayout;
37+
import java.util.Collection;
38+
import java.util.HashMap;
39+
import java.util.Map;
3540

3641
/**
3742
*/
3843
public class ClassesTabPanel extends JPanel {
3944

40-
protected JTable table;
4145
protected JCheckBox checkAll;
4246
protected JLabel checkAllLabel;
4347

44-
public ClassesTabPanel() {
48+
private Map<DataMap, JTable> dataMapTables;
4549

46-
this.table = new JTable();
47-
this.table.setRowHeight(22);
50+
private Map<DataMap, JCheckBox> dataMapJCheckBoxMap;
51+
52+
public ClassesTabPanel(Collection<DataMap> dataMaps) {
53+
dataMapTables = new HashMap<>();
54+
dataMapJCheckBoxMap = new HashMap<>();
4855

4956
// TODO: andrus 04/07/2006 - is there an easy way to stick that checkbox in the
5057
// table header????
5158
this.checkAll = new JCheckBox();
5259
this.checkAllLabel = new JLabel("Check All Classes");
5360

54-
checkAll.addItemListener(new ItemListener() {
55-
56-
public void itemStateChanged(ItemEvent event) {
57-
if (checkAll.isSelected()) {
58-
checkAllLabel.setText("Uncheck All Classess");
59-
}
60-
else {
61-
checkAllLabel.setText("Check All Classes");
62-
}
61+
checkAll.addItemListener(event -> {
62+
if (checkAll.isSelected()) {
63+
checkAllLabel.setText("Uncheck All Classess");
64+
dataMapJCheckBoxMap.keySet().forEach(val -> dataMapJCheckBoxMap.get(val).setSelected(true));
65+
}
66+
else {
67+
checkAllLabel.setText("Check All Classes");
68+
dataMapJCheckBoxMap.keySet().forEach(val -> dataMapJCheckBoxMap.get(val).setSelected(false));
6369
}
6470
});
6571

6672
// assemble
67-
JPanel topPanel = new JPanel(new FlowLayout(FlowLayout.LEADING));
73+
JPanel topPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
6874
topPanel.setBorder(UIManager.getBorder("ToolBar.border"));
6975
topPanel.add(checkAll);
7076
topPanel.add(checkAllLabel);
7177

78+
JPanel panel = new JPanel();
79+
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
80+
for(DataMap dataMap : dataMaps) {
81+
JTable table = new JTable();
82+
table.setRowHeight(22);
83+
dataMapTables.put(dataMap, table);
84+
JPanel scrollTable = new JPanel(new BorderLayout());
85+
scrollTable.add(dataMapTables.get(dataMap).getTableHeader(), BorderLayout.NORTH);
86+
scrollTable.add(dataMapTables.get(dataMap), BorderLayout.CENTER);
87+
scrollTable.setPreferredSize(new Dimension(dataMapTables.get(dataMap).getPreferredSize().width,
88+
(dataMap.getEmbeddables().size() + dataMap.getObjEntities().size()) * dataMapTables.get(dataMap).getRowHeight() + 45));
89+
JPanel labelPanel = new JPanel(new BorderLayout());
90+
labelPanel.setPreferredSize(new Dimension(dataMapTables.get(dataMap).getPreferredSize().width, 20));
91+
JLabel dataMapLabel = new JLabel(dataMap.getName());
92+
dataMapLabel.setAlignmentX(Component.CENTER_ALIGNMENT);
93+
dataMapLabel.setBorder(new EmptyBorder(8, 8, 8, 0));
94+
labelPanel.add(dataMapLabel, BorderLayout.CENTER);
95+
96+
JCheckBox dataMapCheckBox = new JCheckBox();
97+
dataMapJCheckBoxMap.put(dataMap, dataMapCheckBox);
98+
labelPanel.add(dataMapCheckBox, BorderLayout.WEST);
99+
100+
JPanel currPanel = new JPanel(new BorderLayout());
101+
currPanel.add(labelPanel, BorderLayout.NORTH);
102+
currPanel.add(scrollTable, BorderLayout.CENTER);
103+
104+
panel.add(currPanel);
105+
}
106+
72107
JScrollPane tablePanel = new JScrollPane(
73-
table,
108+
panel,
74109
ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
75110
ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
76111

77112
// set some minimal preferred size, so that it is smaller than other forms used in
78113
// the dialog... this way we get the right automated overall size
79-
tablePanel.setPreferredSize(new Dimension(300, 200));
80-
114+
tablePanel.setPreferredSize(new Dimension(450, 400));
81115
setLayout(new BorderLayout());
82116
add(topPanel, BorderLayout.NORTH);
83117
add(tablePanel, BorderLayout.CENTER);
84118
}
85119

86-
public JTable getTable() {
87-
return table;
120+
public boolean isAllCheckBoxesFromDataMapSelected(DataMap dataMap) {
121+
JTable table = dataMapTables.get(dataMap);
122+
for(int i = 0; i < table.getRowCount(); i++) {
123+
if(!(Boolean)table.getModel().getValueAt(i, 0)) {
124+
return false;
125+
}
126+
}
127+
return true;
128+
}
129+
130+
public Map<DataMap, JTable> getDataMapTables() {
131+
return dataMapTables;
132+
}
133+
134+
public Map<DataMap, JCheckBox> getDataMapJCheckBoxMap() {
135+
return dataMapJCheckBoxMap;
88136
}
89137

90138
public JCheckBox getCheckAll() {

modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClientModeController.java

Lines changed: 0 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -24,15 +24,11 @@
2424
import org.apache.cayenne.map.DataMap;
2525
import org.apache.cayenne.map.ObjEntity;
2626
import org.apache.cayenne.modeler.pref.DataMapDefaults;
27-
import org.apache.cayenne.swing.BindingBuilder;
2827
import org.apache.cayenne.validation.BeanValidationFailure;
2928
import org.apache.cayenne.validation.ValidationResult;
3029

3130
import java.util.ArrayList;
32-
import java.util.Map.Entry;
33-
import java.util.Set;
3431
import java.util.TreeMap;
35-
import java.util.function.Predicate;
3632

3733
public class ClientModeController extends StandardModeController {
3834

@@ -75,29 +71,9 @@ protected void createDefaults() {
7571

7672
protected GeneratorControllerPanel createView() {
7773
this.view = new StandardModePanel();
78-
79-
Set<Entry<DataMap, DataMapDefaults>> entities = getMapPreferences().entrySet();
80-
for (Entry<DataMap, DataMapDefaults> entry : entities) {
81-
StandardPanelComponent dataMapLine = createDataMapLineBy(entry.getKey(), entry.getValue());
82-
dataMapLine.getDataMapName().setText(dataMapLine.getDataMap().getName());
83-
BindingBuilder builder = new BindingBuilder(getApplication().getBindingFactory(), dataMapLine);
84-
builder.bindToTextField(
85-
dataMapLine.getSuperclassPackage(),
86-
"preferences.superclassPackage").updateView();
87-
this.view.addDataMapLine(dataMapLine);
88-
}
89-
9074
return view;
9175
}
9276

93-
private StandardPanelComponent createDataMapLineBy(DataMap dataMap, DataMapDefaults preferences) {
94-
StandardPanelComponent dataMapLine = new StandardPanelComponent();
95-
dataMapLine.setDataMap(dataMap);
96-
dataMapLine.setPreferences(preferences);
97-
98-
return dataMapLine;
99-
}
100-
10177
@Override
10278
protected ClassGenerationAction newGenerator() {
10379
return new ClientClassGenerationAction();

0 commit comments

Comments
 (0)