Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@
import org.apache.cayenne.project.Project;

import java.awt.event.ActionEvent;
import java.util.ArrayList;
import java.util.Collection;

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

public void performAction(ActionEvent e) {
Collection<DataMap> dataMaps;
DataMap dataMap = getProjectController().getCurrentDataMap();

if (dataMap != null) {
dataMaps = new ArrayList<>();
dataMaps.add(dataMap);

new CodeGeneratorController(getApplication().getFrameController(), dataMaps).startup();
} else if (getProjectController().getCurrentDataNode() != null) {
Collection<String> nodeMaps = getProjectController().getCurrentDataNode().getDataMapNames();
Project project = getProjectController().getProject();
dataMaps = ((DataChannelDescriptor) project.getRootNode()).getDataMaps();

Collection<DataMap> resultMaps = new ArrayList<>();
for (DataMap map : dataMaps) {
if (nodeMaps.contains(map.getName())) {
resultMaps.add(map);
}
}

new CodeGeneratorController(getApplication().getFrameController(), resultMaps).startup();
} else {
Project project = getProjectController().getProject();
dataMaps = ((DataChannelDescriptor) project.getRootNode()).getDataMaps();

new CodeGeneratorController(getApplication().getFrameController(), dataMaps).startup();
}
Project project = getProjectController().getProject();
dataMaps = ((DataChannelDescriptor) project.getRootNode()).getDataMaps();
new CodeGeneratorController(getApplication().getFrameController(), dataMaps).startup();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,27 +19,56 @@

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

import java.awt.Component;

import javax.swing.JLabel;

import org.apache.cayenne.map.DataMap;
import org.apache.cayenne.modeler.util.CayenneController;
import org.apache.cayenne.swing.BindingBuilder;
import org.apache.cayenne.swing.ImageRendererColumn;
import org.apache.cayenne.swing.ObjectBinding;
import org.apache.cayenne.swing.TableBindingBuilder;

import javax.swing.JCheckBox;
import javax.swing.JLabel;
import java.awt.Component;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class ClassesTabController extends CayenneController {

public static final String GENERATE_PROPERTY = "generate";

protected ClassesTabPanel view;
protected ObjectBinding tableBinding;

public ClassesTabController(CodeGeneratorControllerBase parent) {
private Map<DataMap, ObjectBinding> objectBindings;

protected Collection<DataMap> dataMaps;

protected Map<DataMap, List<Object>> objectList;

private List<Object> currentCollection;

public ClassesTabController(CodeGeneratorControllerBase parent, Collection<DataMap> dataMaps) {
super(parent);

this.view = new ClassesTabPanel();
currentCollection = new ArrayList<>();

this.objectList = new HashMap<>();
for(DataMap dataMap : dataMaps) {
List<Object> list = new ArrayList<>(Arrays.asList(dataMap));
list.addAll(Stream.concat(dataMap.getObjEntities().stream(), dataMap.getEmbeddables().stream())
.collect(Collectors.toList()));
objectList.put(dataMap, list);
}

this.objectBindings = new HashMap<>();
this.dataMaps = dataMaps;
this.view = new ClassesTabPanel(dataMaps);

initBindings();
}

Expand Down Expand Up @@ -67,6 +96,7 @@ protected void initBindings() {
Boolean.class,
true,
Boolean.TRUE);

tableBuilder.addColumn(
"Class",
"parent.getItemName(#item)",
Expand All @@ -79,10 +109,22 @@ protected void initBindings() {
"parent.getProblem(#item)",
String.class,
false,
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");

this.tableBinding = tableBuilder.bindToTable(view.getTable(), "parent.classes");
view.getTable().getColumnModel().getColumn(1).setCellRenderer(new ImageRendererColumn());
"XXXXXXXXXXXXXXXXXXXXXXXXXXX");

for(DataMap dataMap : dataMaps) {
if(view.getDataMapTables().get(dataMap) != null) {
currentCollection = objectList.get(dataMap);
objectBindings.put(dataMap, tableBuilder.bindToTable(view.getDataMapTables().get(dataMap), "currentCollection"));
view.getDataMapTables().get(dataMap).getColumnModel().getColumn(1).setCellRenderer(new ImageRendererColumn());
}
if(view.getDataMapJCheckBoxMap().get(dataMap) != null) {
view.getDataMapJCheckBoxMap().get(dataMap).addActionListener(val -> checkDataMap(dataMap, ((JCheckBox)val.getSource()).isSelected()));
}
}
}

public List<Object> getCurrentCollection() {
return currentCollection;
}

public boolean isSelected() {
Expand All @@ -92,13 +134,21 @@ public boolean isSelected() {
public void setSelected(boolean selected) {
getParentController().setSelected(selected);
classSelectedAction();

for(DataMap dataMap : dataMaps) {
if(view.isAllCheckBoxesFromDataMapSelected(dataMap)) {
view.getDataMapJCheckBoxMap().get(dataMap).setSelected(true);
} else {
view.getDataMapJCheckBoxMap().get(dataMap).setSelected(false);
}
}
}

/**
* A callback action that updates the state of Select All checkbox.
*/
public void classSelectedAction() {
int selectedCount = getParentController().getSelectedEntitiesSize() + getParentController().getSelectedEmbeddablesSize() ;
int selectedCount = getParentController().getSelectedEntitiesSize() + getParentController().getSelectedEmbeddablesSize() + getParentController().getSelectedDataMapsSize();

if (selectedCount == 0) {
view.getCheckAll().setSelected(false);
Expand All @@ -114,7 +164,35 @@ else if (selectedCount == getParentController().getClasses().size()) {
*/
public void checkAllAction() {
if (getParentController().updateSelection(view.getCheckAll().isSelected() ? o -> true : o -> false)) {
tableBinding.updateView();
dataMaps.forEach(dataMap -> {
if(objectBindings.get(dataMap) != null) {
currentCollection = objectList.get(dataMap);
objectBindings.get(dataMap).updateView();
}
});
}
}

private void checkDataMap(DataMap dataMap, boolean selected) {
if (getParentController().updateDataMapSelection(selected ? o -> true : o -> false, dataMap)){
if(objectBindings.get(dataMap) != null) {
currentCollection = objectList.get(dataMap);
objectBindings.get(dataMap).updateView();
}
if(isAllMapsSelected()) {
view.getCheckAll().setSelected(true);
}
}
}

private boolean isAllMapsSelected() {
for(DataMap dataMap : dataMaps) {
if(view.getDataMapJCheckBoxMap().get(dataMap) != null) {
if(!view.getDataMapJCheckBoxMap().get(dataMap).isSelected()) {
return false;
}
}
}
return true;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,72 +19,120 @@

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

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import org.apache.cayenne.map.DataMap;

import javax.swing.BoxLayout;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ScrollPaneConstants;
import javax.swing.UIManager;
import javax.swing.border.EmptyBorder;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

/**
*/
public class ClassesTabPanel extends JPanel {

protected JTable table;
protected JCheckBox checkAll;
protected JLabel checkAllLabel;

public ClassesTabPanel() {
private Map<DataMap, JTable> dataMapTables;

this.table = new JTable();
this.table.setRowHeight(22);
private Map<DataMap, JCheckBox> dataMapJCheckBoxMap;

public ClassesTabPanel(Collection<DataMap> dataMaps) {
dataMapTables = new HashMap<>();
dataMapJCheckBoxMap = new HashMap<>();

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

checkAll.addItemListener(new ItemListener() {

public void itemStateChanged(ItemEvent event) {
if (checkAll.isSelected()) {
checkAllLabel.setText("Uncheck All Classess");
}
else {
checkAllLabel.setText("Check All Classes");
}
checkAll.addItemListener(event -> {
if (checkAll.isSelected()) {
checkAllLabel.setText("Uncheck All Classess");
dataMapJCheckBoxMap.keySet().forEach(val -> dataMapJCheckBoxMap.get(val).setSelected(true));
}
else {
checkAllLabel.setText("Check All Classes");
dataMapJCheckBoxMap.keySet().forEach(val -> dataMapJCheckBoxMap.get(val).setSelected(false));
}
});

// assemble
JPanel topPanel = new JPanel(new FlowLayout(FlowLayout.LEADING));
JPanel topPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
topPanel.setBorder(UIManager.getBorder("ToolBar.border"));
topPanel.add(checkAll);
topPanel.add(checkAllLabel);

JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
for(DataMap dataMap : dataMaps) {
JTable table = new JTable();
table.setRowHeight(22);
dataMapTables.put(dataMap, table);
JPanel scrollTable = new JPanel(new BorderLayout());
scrollTable.add(dataMapTables.get(dataMap).getTableHeader(), BorderLayout.NORTH);
scrollTable.add(dataMapTables.get(dataMap), BorderLayout.CENTER);
scrollTable.setPreferredSize(new Dimension(dataMapTables.get(dataMap).getPreferredSize().width,
(dataMap.getEmbeddables().size() + dataMap.getObjEntities().size()) * dataMapTables.get(dataMap).getRowHeight() + 45));
JPanel labelPanel = new JPanel(new BorderLayout());
labelPanel.setPreferredSize(new Dimension(dataMapTables.get(dataMap).getPreferredSize().width, 20));
JLabel dataMapLabel = new JLabel(dataMap.getName());
dataMapLabel.setAlignmentX(Component.CENTER_ALIGNMENT);
dataMapLabel.setBorder(new EmptyBorder(8, 8, 8, 0));
labelPanel.add(dataMapLabel, BorderLayout.CENTER);

JCheckBox dataMapCheckBox = new JCheckBox();
dataMapJCheckBoxMap.put(dataMap, dataMapCheckBox);
labelPanel.add(dataMapCheckBox, BorderLayout.WEST);

JPanel currPanel = new JPanel(new BorderLayout());
currPanel.add(labelPanel, BorderLayout.NORTH);
currPanel.add(scrollTable, BorderLayout.CENTER);

panel.add(currPanel);
}

JScrollPane tablePanel = new JScrollPane(
table,
panel,
ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);

// set some minimal preferred size, so that it is smaller than other forms used in
// the dialog... this way we get the right automated overall size
tablePanel.setPreferredSize(new Dimension(300, 200));

tablePanel.setPreferredSize(new Dimension(450, 400));
setLayout(new BorderLayout());
add(topPanel, BorderLayout.NORTH);
add(tablePanel, BorderLayout.CENTER);
}

public JTable getTable() {
return table;
public boolean isAllCheckBoxesFromDataMapSelected(DataMap dataMap) {
JTable table = dataMapTables.get(dataMap);
for(int i = 0; i < table.getRowCount(); i++) {
if(!(Boolean)table.getModel().getValueAt(i, 0)) {
return false;
}
}
return true;
}

public Map<DataMap, JTable> getDataMapTables() {
return dataMapTables;
}

public Map<DataMap, JCheckBox> getDataMapJCheckBoxMap() {
return dataMapJCheckBoxMap;
}

public JCheckBox getCheckAll() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,15 +24,11 @@
import org.apache.cayenne.map.DataMap;
import org.apache.cayenne.map.ObjEntity;
import org.apache.cayenne.modeler.pref.DataMapDefaults;
import org.apache.cayenne.swing.BindingBuilder;
import org.apache.cayenne.validation.BeanValidationFailure;
import org.apache.cayenne.validation.ValidationResult;

import java.util.ArrayList;
import java.util.Map.Entry;
import java.util.Set;
import java.util.TreeMap;
import java.util.function.Predicate;

public class ClientModeController extends StandardModeController {

Expand Down Expand Up @@ -75,29 +71,9 @@ protected void createDefaults() {

protected GeneratorControllerPanel createView() {
this.view = new StandardModePanel();

Set<Entry<DataMap, DataMapDefaults>> entities = getMapPreferences().entrySet();
for (Entry<DataMap, DataMapDefaults> entry : entities) {
StandardPanelComponent dataMapLine = createDataMapLineBy(entry.getKey(), entry.getValue());
dataMapLine.getDataMapName().setText(dataMapLine.getDataMap().getName());
BindingBuilder builder = new BindingBuilder(getApplication().getBindingFactory(), dataMapLine);
builder.bindToTextField(
dataMapLine.getSuperclassPackage(),
"preferences.superclassPackage").updateView();
this.view.addDataMapLine(dataMapLine);
}

return view;
}

private StandardPanelComponent createDataMapLineBy(DataMap dataMap, DataMapDefaults preferences) {
StandardPanelComponent dataMapLine = new StandardPanelComponent();
dataMapLine.setDataMap(dataMap);
dataMapLine.setPreferences(preferences);

return dataMapLine;
}

@Override
protected ClassGenerationAction newGenerator() {
return new ClientClassGenerationAction();
Expand Down
Loading