/*******************************************************************************
* Copyright (c) 1998, 2015 Oracle and/or its affiliates. All rights reserved.
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
* which accompanies this distribution.
* The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
* and the Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* Contributors:
* Oracle - initial API and implementation from Oracle TopLink
******************************************************************************/
package org.eclipse.persistence.tools.workbench.mappingsplugin.ui.db;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.util.Iterator;
import javax.swing.Action;
import javax.swing.ComboBoxModel;
import javax.swing.JButton;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ListCellRenderer;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.TableCellEditor;
import javax.swing.table.TableColumn;
import javax.swing.table.TableModel;
import org.eclipse.persistence.tools.workbench.framework.action.AbstractFrameworkAction;
import org.eclipse.persistence.tools.workbench.framework.action.FrameworkAction;
import org.eclipse.persistence.tools.workbench.framework.context.WorkbenchContextHolder;
import org.eclipse.persistence.tools.workbench.framework.resources.ResourceRepository;
import org.eclipse.persistence.tools.workbench.framework.ui.dialog.NewNameDialog;
import org.eclipse.persistence.tools.workbench.framework.ui.view.ScrollablePropertiesPage;
import org.eclipse.persistence.tools.workbench.framework.uitools.SwingComponentFactory;
import org.eclipse.persistence.tools.workbench.mappingsmodel.db.MWColumn;
import org.eclipse.persistence.tools.workbench.mappingsmodel.db.MWDatabase;
import org.eclipse.persistence.tools.workbench.mappingsmodel.db.MWTable;
import org.eclipse.persistence.tools.workbench.platformsmodel.DatabasePlatform;
import org.eclipse.persistence.tools.workbench.platformsmodel.DatabaseType;
import org.eclipse.persistence.tools.workbench.uitools.app.CollectionAspectAdapter;
import org.eclipse.persistence.tools.workbench.uitools.app.CollectionListValueModelAdapter;
import org.eclipse.persistence.tools.workbench.uitools.app.CollectionValueModel;
import org.eclipse.persistence.tools.workbench.uitools.app.ItemPropertyListValueModelAdapter;
import org.eclipse.persistence.tools.workbench.uitools.app.ListValueModel;
import org.eclipse.persistence.tools.workbench.uitools.app.PropertyAspectAdapter;
import org.eclipse.persistence.tools.workbench.uitools.app.PropertyValueModel;
import org.eclipse.persistence.tools.workbench.uitools.app.SimplePropertyValueModel;
import org.eclipse.persistence.tools.workbench.uitools.app.SortedListValueModelAdapter;
import org.eclipse.persistence.tools.workbench.uitools.app.TransformationPropertyValueModel;
import org.eclipse.persistence.tools.workbench.uitools.app.ValueModel;
import org.eclipse.persistence.tools.workbench.uitools.app.swing.ColumnAdapter;
import org.eclipse.persistence.tools.workbench.uitools.app.swing.ComboBoxModelAdapter;
import org.eclipse.persistence.tools.workbench.uitools.app.swing.ListModelAdapter;
import org.eclipse.persistence.tools.workbench.uitools.app.swing.NumberSpinnerModelAdapter;
import org.eclipse.persistence.tools.workbench.uitools.app.swing.ObjectListSelectionModel;
import org.eclipse.persistence.tools.workbench.uitools.app.swing.TableModelAdapter;
import org.eclipse.persistence.tools.workbench.uitools.cell.CheckBoxTableCellRenderer;
import org.eclipse.persistence.tools.workbench.uitools.cell.ComboBoxTableCellRenderer;
import org.eclipse.persistence.tools.workbench.uitools.cell.SimpleListCellRenderer;
import org.eclipse.persistence.tools.workbench.uitools.cell.SpinnerTableCellRenderer;
import org.eclipse.persistence.tools.workbench.uitools.cell.TableCellEditorAdapter;
import org.eclipse.persistence.tools.workbench.utility.CollectionTools;
import org.eclipse.persistence.tools.workbench.utility.NameTools;
import org.eclipse.persistence.tools.workbench.utility.iterators.TransformationIterator;
public class ColumnsPropertiesPage extends ScrollablePropertiesPage {
private ListValueModel databaseTypesHolder;
private ListValueModel sortedColumnsAdapter;
private TableModel tableModel;
private ObjectListSelectionModel rowSelectionModel;
private PropertyValueModel selectedColumnHolder;
private Action removeAction;
private Action renameAction;
private JTable table;
public ColumnsPropertiesPage(PropertyValueModel tableNodeHolder, WorkbenchContextHolder contextHolder) {
super(tableNodeHolder, contextHolder);
}
protected void initialize(PropertyValueModel nodeHolder) {
super.initialize(nodeHolder);
this.databaseTypesHolder = buildDatabaseTypesListHolder();
this.sortedColumnsAdapter = buildSortedColumnsAdapter();
this.tableModel = buildTableModel();
this.selectedColumnHolder = buildSelectedColumnHolder();
this.rowSelectionModel = buildRowSelectionModel();
}
private ListValueModel buildDatabaseTypesListHolder() {
return new CollectionListValueModelAdapter(buildDatabaseTypesHolder());
}
private CollectionValueModel buildDatabaseTypesHolder() {
return new CollectionAspectAdapter(this.buildDatabasePlatformAdapter(), DatabasePlatform.DATABASE_TYPES_COLLECTION) {
protected Iterator getValueFromSubject() {
return ((DatabasePlatform) this.subject).databaseTypes();
}
protected int sizeFromSubject() {
return ((DatabasePlatform) this.subject).databaseTypesSize();
}
};
}
private PropertyValueModel buildDatabasePlatformAdapter() {
return new PropertyAspectAdapter(this.buildDatabaseAdapter(), MWDatabase.DATABASE_PLATFORM_PROPERTY) {
protected Object getValueFromSubject() {
return ((MWDatabase) this.subject).getDatabasePlatform();
}
};
}
private ValueModel buildDatabaseAdapter() {
return new TransformationPropertyValueModel(this.getSelectionHolder()) {
protected Object transform(Object value) {
return (value == null) ? null : ((MWTable) value).getDatabase();
}
protected Object reverseTransform(Object value) {
throw new UnsupportedOperationException();
}
};
}
private ListValueModel buildSortedColumnsAdapter() {
return new SortedListValueModelAdapter(this.buildColumnNameAdapter());
}
// the list will need to be re-sorted if a name changes
private ListValueModel buildColumnNameAdapter() {
return new ItemPropertyListValueModelAdapter(this.buildColumnsAdapter(), MWColumn.NAME_PROPERTY);
}
private CollectionValueModel buildColumnsAdapter() {
return new CollectionAspectAdapter(getSelectionHolder(), MWTable.COLUMNS_COLLECTION) {
protected Iterator getValueFromSubject() {
return ((MWTable) this.subject).columns();
}
protected int sizeFromSubject() {
return ((MWTable) this.subject).columnsSize();
}
};
}
private TableModel buildTableModel() {
return new TableModelAdapter(this.sortedColumnsAdapter, this.buildColumnAdapter());
}
private ColumnAdapter buildColumnAdapter() {
return new ColumnsColumnAdapter(resourceRepository());
}
private PropertyValueModel buildSelectedColumnHolder() {
return new SimplePropertyValueModel(null);
}
private ObjectListSelectionModel buildRowSelectionModel() {
ObjectListSelectionModel model = new ObjectListSelectionModel(new ListModelAdapter(this.sortedColumnsAdapter));
model.addListSelectionListener(this.buildRowSelectionListener());
return model;
}
private ListSelectionListener buildRowSelectionListener() {
return new ListSelectionListener() {
public void valueChanged(ListSelectionEvent e) {
if (!e.getValueIsAdjusting()) {
ColumnsPropertiesPage.this.rowSelectionChanged(e);
}
}
};
}
void rowSelectionChanged(ListSelectionEvent e) {
if (e.getValueIsAdjusting())
return;
Object selection = this.rowSelectionModel.getSelectedValue();
this.selectedColumnHolder.setValue(selection);
boolean fieldSelected = (selection != null);
this.removeAction.setEnabled(fieldSelected);
this.renameAction.setEnabled(fieldSelected);
}
protected Component buildPage() {
JPanel mainPanel = new JPanel(new GridBagLayout());
GridBagConstraints constraints = new GridBagConstraints();
// Create the button panel first
JPanel buttonPanel = buildButtonPanel();
constraints.gridx = 1;
constraints.gridy = 0;
constraints.gridwidth = 1;
constraints.gridheight = 1;
constraints.weightx = 0;
constraints.weighty = 0;
constraints.fill = GridBagConstraints.NONE;
constraints.anchor = GridBagConstraints.FIRST_LINE_START;
constraints.insets = new Insets(5, 0, 5, 5);
mainPanel.add(buttonPanel, constraints);
this.table = this.buildTable();
JScrollPane scrollPane = new JScrollPane(this.table);
scrollPane.getViewport().setPreferredSize(new Dimension(50, 50));
scrollPane.getViewport().setBackground(this.table.getBackground());
constraints.gridx = 0;
constraints.gridy = 0;
constraints.gridwidth = 1;
constraints.gridheight = 1;
constraints.weightx = 1;
constraints.weighty = 1;
constraints.fill = GridBagConstraints.BOTH;
constraints.anchor = GridBagConstraints.FIRST_LINE_START;
constraints.insets = new Insets(5, 5, 5, 5);
mainPanel.add(scrollPane, constraints);
addHelpTopicId(mainPanel, helpTopicId());
return mainPanel;
}
private JTable buildTable() {
JTable t = SwingComponentFactory.buildTable(this.tableModel, this.rowSelectionModel);
t.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
t.getTableHeader().setReorderingAllowed(false);
SwingComponentFactory.attachTableEditorCanceler(t, getSelectionHolder());
updateTableColumns(t);
return t;
}
private void updateTableColumns(JTable t) {
int rowHeight = 20; // start with minimum of 20
// name column
TableColumn column = t.getColumnModel().getColumn(ColumnsColumnAdapter.NAME_COLUMN);
column.setPreferredWidth(100);
// database type column (combo-box)
column = t.getColumnModel().getColumn(ColumnsColumnAdapter.TYPE_COLUMN);
column.setPreferredWidth(100);
ComboBoxTableCellRenderer typeRenderer = this.buildDatabaseTypeComboBoxRenderer();
column.setCellRenderer(typeRenderer);
column.setCellEditor(new TableCellEditorAdapter(this.buildDatabaseTypeComboBoxRenderer()));
rowHeight = Math.max(rowHeight, typeRenderer.getPreferredHeight());
// size column (spinner)
column = t.getColumnModel().getColumn(ColumnsColumnAdapter.SIZE_COLUMN);
SpinnerTableCellRenderer sizeRenderer = this.buildSizeRenderer();
column.setCellRenderer(sizeRenderer);
column.setCellEditor(this.buildSizeEditor());
rowHeight = Math.max(rowHeight, sizeRenderer.getPreferredHeight());
// sub-size column (spinner)
column = t.getColumnModel().getColumn(ColumnsColumnAdapter.SUB_SIZE_COLUMN);
SpinnerTableCellRenderer subSizeRenderer = this.buildSubSizeRenderer();
column.setCellRenderer(subSizeRenderer);
column.setCellEditor(this.buildSubSizeEditor());
rowHeight = Math.max(rowHeight, subSizeRenderer.getPreferredHeight());
// allows null column (check box)
column = t.getColumnModel().getColumn(ColumnsColumnAdapter.ALLOWS_NULL_COLUMN);
CheckBoxTableCellRenderer allowsNullRenderer = this.buildAllowsNullRenderer();
column.setCellRenderer(allowsNullRenderer);
column.setCellEditor(this.buildAllowsNullEditor());
rowHeight = Math.max(rowHeight, allowsNullRenderer.getPreferredHeight());
// unique column (check box)
column = t.getColumnModel().getColumn(ColumnsColumnAdapter.UNIQUE_COLUMN);
CheckBoxTableCellRenderer uniqueRenderer = new CheckBoxTableCellRenderer();
column.setCellRenderer(uniqueRenderer);
column.setCellEditor(new TableCellEditorAdapter(new CheckBoxTableCellRenderer()));
rowHeight = Math.max(rowHeight, uniqueRenderer.getPreferredHeight());
// primary key column (check box)
column = t.getColumnModel().getColumn(ColumnsColumnAdapter.PRIMARY_KEY_COLUMN);
CheckBoxTableCellRenderer primaryKeyRenderer = new CheckBoxTableCellRenderer();
column.setCellRenderer(primaryKeyRenderer);
column.setCellEditor(new TableCellEditorAdapter(new CheckBoxTableCellRenderer()));
rowHeight = Math.max(rowHeight, primaryKeyRenderer.getPreferredHeight());
// identity column (check box)
column = t.getColumnModel().getColumn(ColumnsColumnAdapter.IDENTITY_COLUMN);
CheckBoxTableCellRenderer identityRenderer = this.buildIdentityRenderer();
column.setCellRenderer(identityRenderer);
column.setCellEditor(this.buildIdentityEditor());
rowHeight = Math.max(rowHeight, identityRenderer.getPreferredHeight());
t.setRowHeight(rowHeight);
}
private SpinnerTableCellRenderer buildNumberSpinnerRenderer() {
return new SpinnerTableCellRenderer(new NumberSpinnerModelAdapter(new SimplePropertyValueModel(), new Integer(0), null, new Integer(1), new Integer(0)));
}
private SpinnerTableCellRenderer buildSizeRenderer() {
return new SpinnerTableCellRenderer(new NumberSpinnerModelAdapter(new SimplePropertyValueModel(), new Integer(0), null, new Integer(1), new Integer(0))) {
public Component getTableCellRendererComponent(JTable t, Object value, boolean selected, boolean hasFocus, int row, int column) {
if (ColumnsPropertiesPage.this.column(row).getDatabaseType().allowsSize()) {
return super.getTableCellRendererComponent(t, value, selected, hasFocus, row, column);
}
return null;
}
};
}
private TableCellEditor buildSizeEditor() {
return new TableCellEditorAdapter(this.buildNumberSpinnerRenderer()) {
public Component getTableCellEditorComponent(JTable t, Object value, boolean selected, int row, int column) {
if (ColumnsPropertiesPage.this.column(row).getDatabaseType().allowsSize()) {
return super.getTableCellEditorComponent(t, value, selected, row, column);
}
return null;
}
};
}
private SpinnerTableCellRenderer buildSubSizeRenderer() {
return new SpinnerTableCellRenderer(new NumberSpinnerModelAdapter(new SimplePropertyValueModel(), new Integer(0), null, new Integer(1), new Integer(0))) {
public Component getTableCellRendererComponent(JTable t, Object value, boolean selected, boolean hasFocus, int row, int column) {
if (ColumnsPropertiesPage.this.column(row).getDatabaseType().allowsSubSize()) {
return super.getTableCellRendererComponent(t, value, selected, hasFocus, row, column);
}
return null;
}
};
}
private TableCellEditor buildSubSizeEditor() {
return new TableCellEditorAdapter(this.buildNumberSpinnerRenderer()) {
public Component getTableCellEditorComponent(JTable t, Object value, boolean selected, int row, int column) {
if (ColumnsPropertiesPage.this.column(row).getDatabaseType().allowsSubSize()) {
return super.getTableCellEditorComponent(t, value, selected, row, column);
}
return null;
}
};
}
private CheckBoxTableCellRenderer buildAllowsNullRenderer() {
return new CheckBoxTableCellRenderer() {
public Component getTableCellRendererComponent(JTable t, Object value, boolean selected, boolean hasFocus, int row, int column) {
if (ColumnsPropertiesPage.this.column(row).getDatabaseType().allowsNull()) {
return super.getTableCellRendererComponent(t, value, selected, hasFocus, row, column);
}
return null;
}
};
}
private TableCellEditor buildAllowsNullEditor() {
return new TableCellEditorAdapter(new CheckBoxTableCellRenderer()) {
public Component getTableCellEditorComponent(JTable t, Object value, boolean selected, int row, int column) {
if (ColumnsPropertiesPage.this.column(row).getDatabaseType().allowsNull()) {
return super.getTableCellEditorComponent(t, value, selected, row, column);
}
return null;
}
};
}
private CheckBoxTableCellRenderer buildIdentityRenderer() {
return new CheckBoxTableCellRenderer() {
public Component getTableCellRendererComponent(JTable t, Object value, boolean selected, boolean hasFocus, int row, int column) {
if (ColumnsPropertiesPage.this.column(row).supportsIdentityClause()) {
return super.getTableCellRendererComponent(t, value, selected, hasFocus, row, column);
}
return null;
}
};
}
private TableCellEditor buildIdentityEditor() {
return new TableCellEditorAdapter(new CheckBoxTableCellRenderer()) {
public Component getTableCellEditorComponent(JTable t, Object value, boolean selected, int row, int column) {
if (ColumnsPropertiesPage.this.column(row).supportsIdentityClause()) {
return super.getTableCellEditorComponent(t, value, selected, row, column);
}
return null;
}
};
}
private JPanel buildButtonPanel() {
JPanel buttonPanel = new JPanel(new GridLayout(0, 1, 5, 5));
buttonPanel.add(this.buildAddButton());
buttonPanel.add(this.buildRemoveButton());
buttonPanel.add(this.buildRenameButton());
return buttonPanel;
}
// ********** add **********
private JButton buildAddButton() {
return new JButton(this.buildAddAction());
}
private Action buildAddAction() {
FrameworkAction action = new AbstractFrameworkAction(getApplicationContext()) {
protected void initialize() {
initializeText("ADD_DATABASE_FIELD_BUTTON_TEXT");
initializeMnemonic("ADD_DATABASE_FIELD_BUTTON_TEXT");
}
public void actionPerformed(ActionEvent event) {
ColumnsPropertiesPage.this.addColumn();
}
};
action.setEnabled(true);
return action;
}
void addColumn() {
if (this.table.isEditing()) {
this.table.getCellEditor().stopCellEditing();
}
String name = this.promptUserForColumnName();
if (name != null) {
this.setSelectedColumn(this.table().addColumn(name));
}
}
// ********** remove **********
private JButton buildRemoveButton() {
return new JButton(this.buildRemoveAction());
}
private Action buildRemoveAction() {
this.removeAction = new AbstractFrameworkAction(getApplicationContext()) {
protected void initialize() {
initializeText("REMOVE_DATABASE_FIELD_BUTTON_TEXT");
initializeMnemonic("REMOVE_DATABASE_FIELD_BUTTON_TEXT");
}
public void actionPerformed(ActionEvent event) {
ColumnsPropertiesPage.this.removeColumn();
}
};
this.removeAction.setEnabled(false);
return this.removeAction;
}
void removeColumn() {
if (this.table.isEditing()) {
this.table.getCellEditor().stopCellEditing();
}
int option = JOptionPane.showConfirmDialog(currentWindow(),
resourceRepository().getString("removeField.message"),
resourceRepository().getString("removeField.title"),
JOptionPane.YES_NO_OPTION,
JOptionPane.QUESTION_MESSAGE);
if (option == JOptionPane.YES_OPTION) {
this.table().removeColumns(selectedColumns());
}
}
// ********** rename **********
private JButton buildRenameButton() {
return new JButton(this.buildRenameAction());
}
private Action buildRenameAction() {
this.renameAction = new AbstractFrameworkAction(getApplicationContext()) {
protected void initialize() {
initializeText("RENAME_DATABASE_FIELD_BUTTON_TEXT");
initializeMnemonic("RENAME_DATABASE_FIELD_BUTTON_TEXT");
}
public void actionPerformed(ActionEvent event) {
ColumnsPropertiesPage.this.renameColumn();
}
};
this.renameAction.setEnabled(false);
return this.renameAction;
}
void renameColumn() {
for (Iterator i = selectedColumns(); i.hasNext(); ) {
MWColumn column = (MWColumn) i.next();
String name = this.promptUserForColumnName(column.getName(), "RENAME_FIELD_DIALOG", "dialog.dbFieldRename");
if (name != null) {
column.setName(name);
this.setSelectedColumn(column);
}
}
}
// ********** new name dialog **********
private String promptUserForColumnName() {
String originalName = NameTools.uniqueNameFor(resourceRepository().getString("NEW_FIELD_DEFAULT_NAME"), columnNames());
return this.promptUserForColumnName(originalName, "ADD_NEW_FIELD_DIALOG", "dialog.dbFieldAdd");
}
private String promptUserForColumnName(String originalName, String messageKey, String helpTopicId) {
NewNameDialog dialog = this.buildNewNameDialog(originalName, messageKey, helpTopicId);
dialog.show();
return (dialog.wasConfirmed()) ? dialog.getNewName() : null;
}
protected String helpTopicId() {
return "table.columns";
}
private NewNameDialog buildNewNameDialog(String originalName, String messageKey, String helpTopicId) {
NewNameDialog.Builder builder = new NewNameDialog.Builder();
builder.setExistingNames(this.columnNames());
builder.setOriginalName(originalName);
builder.setTextFieldDescription(resourceRepository().getString(messageKey + ".message"));
builder.setTitle(resourceRepository().getString(messageKey + ".title"));
builder.setHelpTopicId(helpTopicId);
return builder.buildDialog(getWorkbenchContext());
}
private Iterator columnNames() {
return new TransformationIterator(table().columns()) {
protected Object transform(Object next) {
return ((MWColumn) next).getName();
}
};
}
// ********** database type **********
private ComboBoxTableCellRenderer buildDatabaseTypeComboBoxRenderer() {
return new ComboBoxTableCellRenderer(this.buildDatabaseTypeComboBoxModel(), this.buildDatabaseTypeListCellRenderer());
}
private ComboBoxModel buildDatabaseTypeComboBoxModel() {
return new ComboBoxModelAdapter(this.databaseTypesHolder, new SimplePropertyValueModel());
}
private ListCellRenderer buildDatabaseTypeListCellRenderer() {
return new SimpleListCellRenderer() {
protected String buildText(Object value) {
return ((DatabaseType) value).getName();
}
};
}
// ********** queries **********
private Iterator selectedColumns() {
return CollectionTools.iterator(this.rowSelectionModel.getSelectedValues());
}
void setSelectedColumn(MWColumn field) {
this.rowSelectionModel.setSelectedValue(field);
}
MWColumn column(int rowIndex) {
return (MWColumn) this.sortedColumnsAdapter.getItem(rowIndex);
}
private MWTable table() {
return (MWTable) getSelectionHolder().getValue();
}
// ********** classes **********
public static class ColumnsColumnAdapter implements ColumnAdapter {
private ResourceRepository resourceRepository;
public static final int COLUMN_COUNT = 8;
public static final int NAME_COLUMN = 0;
public static final int TYPE_COLUMN = 1;
public static final int SIZE_COLUMN = 2;
public static final int SUB_SIZE_COLUMN = 3;
public static final int ALLOWS_NULL_COLUMN = 4;
public static final int UNIQUE_COLUMN = 5;
public static final int PRIMARY_KEY_COLUMN = 6;
public static final int IDENTITY_COLUMN = 7;
private static final String[] COLUMN_NAME_KEYS = new String[] {
"NAME_COLUMN_HEADER",
"TYPE_COLUMN_HEADER",
"SIZE_COLUMN_HEADER",
"SUB_SIZE_COLUMN_HEADER",
"ALLOWS_NULL_COLUMN_HEADER",
"UNIQUE_COLUMN_HEADER",
"PRIMARY_KEY_COLUMN_HEADER",
"IDENTITY_COLUMN_HEADER"
};
protected ColumnsColumnAdapter(ResourceRepository repository) {
super();
this.resourceRepository = repository;
}
public int getColumnCount() {
return COLUMN_COUNT;
}
public String getColumnName(int index) {
return this.resourceRepository.getString(COLUMN_NAME_KEYS[index]);
}
public Class getColumnClass(int index) {
switch (index) {
case NAME_COLUMN: return Object.class;
case TYPE_COLUMN: return Object.class;
case SIZE_COLUMN: return Integer.class;
case SUB_SIZE_COLUMN: return Integer.class;
case ALLOWS_NULL_COLUMN: return Boolean.class;
case PRIMARY_KEY_COLUMN: return Boolean.class;
case UNIQUE_COLUMN: return Boolean.class;
default: return Object.class;
}
}
public boolean isColumnEditable(int index) {
return index != NAME_COLUMN;
}
public PropertyValueModel[] cellModels(Object subject) {
MWColumn field = (MWColumn) subject;
PropertyValueModel[] result = new PropertyValueModel[COLUMN_COUNT];
result[NAME_COLUMN] = this.buildNameAdapter(field);
result[TYPE_COLUMN] = this.buildTypeAdapter(field);
result[SIZE_COLUMN] = this.buildSizeAdapter(field);
result[SUB_SIZE_COLUMN] = this.buildSubSizeAdapter(field);
result[ALLOWS_NULL_COLUMN] = this.buildAllowsNullAdapter(field);
result[PRIMARY_KEY_COLUMN] = this.buildPrimaryKeyAdapter(field);
result[IDENTITY_COLUMN] = this.buildIdentityAdapter(field);
result[UNIQUE_COLUMN] = this.buildUniqueAdapter(field);
return result;
}
private PropertyValueModel buildNameAdapter(MWColumn field) {
return new PropertyAspectAdapter(MWColumn.NAME_PROPERTY, field) {
protected Object getValueFromSubject() {
return ((MWColumn) this.subject).getName();
}
protected void setValueOnSubject(Object value) {
((MWColumn) this.subject).setName((String) value);
}
};
}
private PropertyValueModel buildTypeAdapter(MWColumn table) {
return new PropertyAspectAdapter(MWColumn.DATABASE_TYPE_PROPERTY, table) {
protected Object getValueFromSubject() {
return ((MWColumn) this.subject).getDatabaseType();
}
protected void setValueOnSubject(Object value) {
((MWColumn) this.subject).setDatabaseType((DatabaseType) value);
}
};
}
private PropertyValueModel buildSizeAdapter(MWColumn field) {
return new PropertyAspectAdapter(MWColumn.SIZE_PROPERTY, field) {
protected Object getValueFromSubject() {
return new Integer(((MWColumn) this.subject).getSize());
}
protected void setValueOnSubject(Object value) {
((MWColumn) this.subject).setSize(((Integer) value).intValue());
}
};
}
private PropertyValueModel buildSubSizeAdapter(MWColumn field) {
return new PropertyAspectAdapter(MWColumn.SUB_SIZE_PROPERTY, field) {
protected Object getValueFromSubject() {
return new Integer(((MWColumn) this.subject).getSubSize());
}
protected void setValueOnSubject(Object value) {
((MWColumn) this.subject).setSubSize(((Integer) value).intValue());
}
};
}
private PropertyValueModel buildAllowsNullAdapter(MWColumn field) {
return new PropertyAspectAdapter(MWColumn.ALLOWS_NULL_PROPERTY, field) {
protected Object getValueFromSubject() {
return Boolean.valueOf(((MWColumn) this.subject).allowsNull());
}
protected void setValueOnSubject(Object value) {
((MWColumn) this.subject).setAllowsNull(((Boolean) value).booleanValue());
}
};
}
private PropertyValueModel buildPrimaryKeyAdapter(MWColumn field) {
return new PropertyAspectAdapter(MWColumn.PRIMARY_KEY_PROPERTY, field) {
protected Object getValueFromSubject() {
return Boolean.valueOf(((MWColumn) this.subject).isPrimaryKey());
}
protected void setValueOnSubject(Object value) {
((MWColumn) this.subject).setPrimaryKey(((Boolean) value).booleanValue());
}
};
}
private PropertyValueModel buildIdentityAdapter(MWColumn field) {
return new PropertyAspectAdapter(MWColumn.IDENTITY_PROPERTY, field) {
protected Object getValueFromSubject() {
return Boolean.valueOf(((MWColumn) this.subject).isIdentity());
}
protected void setValueOnSubject(Object value) {
((MWColumn) this.subject).setIdentity(((Boolean) value).booleanValue());
}
};
}
private PropertyValueModel buildUniqueAdapter(MWColumn field) {
return new PropertyAspectAdapter(MWColumn.UNIQUE_PROPERTY, field) {
protected Object getValueFromSubject() {
return Boolean.valueOf(((MWColumn) this.subject).isUnique());
}
protected void setValueOnSubject(Object value) {
((MWColumn) this.subject).setUnique(((Boolean) value).booleanValue());
}
};
}
}
}