/* * ==================================================================== * * The ObjectStyle Group Software License, Version 1.0 * * Copyright (c) 2006 The ObjectStyle Group and individual authors of the * software. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * 3. The end-user documentation included with the redistribution, if any, must * include the following acknowlegement: "This product includes software * developed by the ObjectStyle Group (http://objectstyle.org/)." Alternately, * this acknowlegement may appear in the software itself, if and wherever such * third-party acknowlegements normally appear. * * 4. The names "ObjectStyle Group" and "Cayenne" must not be used to endorse or * promote products derived from this software without prior written permission. * For written permission, please contact andrus@objectstyle.org. * * 5. Products derived from this software may not be called "ObjectStyle" nor * may "ObjectStyle" appear in their names without prior written permission of * the ObjectStyle Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * OBJECTSTYLE GROUP OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many individuals on * behalf of the ObjectStyle Group. For more information on the ObjectStyle * Group, please see <http://objectstyle.org/>. * */ package org.objectstyle.wolips.eomodeler.editors.entity; import org.eclipse.core.commands.operations.IOperationHistory; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.FontData; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.PlatformUI; import org.objectstyle.wolips.baseforplugins.util.ComparisonUtils; import org.objectstyle.wolips.baseforplugins.util.StringUtils; import org.objectstyle.wolips.baseforuiplugins.utils.ErrorUtils; import org.objectstyle.wolips.eomodeler.Messages; import org.objectstyle.wolips.eomodeler.actions.NewManyToManyRelationshipOperation; import org.objectstyle.wolips.eomodeler.actions.NewOneToManyRelationshipOperation; import org.objectstyle.wolips.eomodeler.core.model.EOEntity; import org.objectstyle.wolips.eomodeler.core.model.EOModelGroup; import org.objectstyle.wolips.eomodeler.core.model.EORelationship; import org.objectstyle.wolips.eomodeler.core.utils.EOModelUtils; import org.objectstyle.wolips.eomodeler.editors.relationship.JoinsTableEditor; public class CreateRelationshipDialog extends Dialog implements SelectionListener { private EOModelGroup _modelGroup; private EOEntity _sourceEntity; private EOEntity _destinationEntity; private EORelationship _relationship; private EORelationship _inverseRelationship; private Composite _joinsFields; private Label _sourceLabel; private Label _destinationLabel; private Label _joinsLabel; private JoinsTableEditor _joinsTableEditor; private String _originalName; private Text _nameText; private Button _toManyButton; private Button _toOneButton; private Button _createButton; private Button _createFKButton; private Text _fkNameText; private Text _fkColumnNameText; private String _originalInverseName; private Text _inverseNameText; private Button _inverseToManyButton; private Button _inverseToOneButton; private Button _createInverseButton; private Button _createInverseFKButton; private Text _inverseFKNameText; private Text _inverseFKColumnNameText; private Button _flattenButton; private Label _joinEntityNameLabel; private Text _joinEntityNameText; private Font _titleFont; private boolean _manyToMany; private boolean _createFK; private boolean _createInverseFK; private String _guessedJoinEntityName; private Label _fkColumnNameLabel; private Label _inverseFKColumnNameLabel; private Group _destinationFields; private Group _sourceFields; private String _oldFKName; private String _oldInverseFKName; public CreateRelationshipDialog(Shell shell, EOModelGroup modelGroup, EOEntity sourceEntity, EOEntity destinationEntity) { super(shell); _modelGroup = modelGroup; _sourceEntity = sourceEntity; _destinationEntity = destinationEntity; } public void setSourceEntity(EOEntity sourceEntity) { _sourceEntity = sourceEntity; _inverseFKNameText.setText(""); _inverseFKColumnNameText.setText(""); entitiesChanged(); } public EOEntity getSourceEntity() { return _sourceEntity; } public void setDestinationEntity(EOEntity destinationEntity) { _destinationEntity = destinationEntity; _fkNameText.setText(""); _fkColumnNameText.setText(""); entitiesChanged(); } public EOEntity getDestinationEntity() { return _destinationEntity; } protected void configureShell(Shell newShell) { super.configureShell(newShell); newShell.setText(Messages.getString("CreateRelationshipDialog.title")); } @Override protected Rectangle getConstrainedShellBounds(Rectangle preferredSize) { Rectangle bounds = super.getConstrainedShellBounds(preferredSize); if (_sourceEntity == null || _destinationEntity == null) { bounds.y -= 75; } return bounds; } @Override protected Control createContents(Composite parent) { Control contents = super.createContents(parent); return contents; } protected Control createDialogArea(Composite parent) { Composite relationshipDialogArea = new Composite(parent, SWT.NONE); GridLayout gridLayout = new GridLayout(2, true); gridLayout.marginBottom = 0; gridLayout.marginTop = 15; gridLayout.marginLeft = 15; gridLayout.marginRight = 15; gridLayout.horizontalSpacing = 15; relationshipDialogArea.setLayout(gridLayout); boolean showEntityPickers = _sourceEntity == null || _destinationEntity == null; if (showEntityPickers) { Label hintLabel = new Label(relationshipDialogArea, SWT.NONE); hintLabel.setText("Select the entities that this relationship will join together."); GridData hintLabelData = new GridData(GridData.FILL_HORIZONTAL); hintLabelData.horizontalSpan = 2; hintLabel.setLayoutData(hintLabelData); hintLabel.setFont(parent.getFont()); // Label sourceEntityLabel = new Label(entityPickers, SWT.NONE); // sourceEntityLabel.setText("Entity #1"); EntityPicker sourceEntityPicker = new EntityPicker(relationshipDialogArea, SWT.NONE, false); sourceEntityPicker.setModelGroup(_modelGroup); sourceEntityPicker.setEntity(_sourceEntity); GridData sourceEntityPickerData = new GridData(GridData.FILL_HORIZONTAL); // sourceEntityPickerData.horizontalSpan = 2; sourceEntityPickerData.verticalIndent = 15; sourceEntityPicker.setLayoutData(sourceEntityPickerData); sourceEntityPicker.addSelectionChangedListener(new ISelectionChangedListener() { public void selectionChanged(SelectionChangedEvent event) { EOEntity entity = (EOEntity) ((IStructuredSelection) event.getSelection()).getFirstElement(); setSourceEntity(entity); } }); EntityPicker destinationEntityPicker = new EntityPicker(relationshipDialogArea, SWT.NONE, false); destinationEntityPicker.setModelGroup(_modelGroup); destinationEntityPicker.setEntity(_destinationEntity); if (_destinationEntity == null && _sourceEntity != null) { destinationEntityPicker.setModel(_sourceEntity.getModel()); } GridData destinationEntityPickerData = new GridData(GridData.FILL_HORIZONTAL); // destinationEntityPickerData.horizontalSpan = 2; destinationEntityPickerData.verticalIndent = 15; destinationEntityPicker.setLayoutData(destinationEntityPickerData); destinationEntityPicker.addSelectionChangedListener(new ISelectionChangedListener() { public void selectionChanged(SelectionChangedEvent event) { EOEntity entity = (EOEntity) ((IStructuredSelection) event.getSelection()).getFirstElement(); setDestinationEntity(entity); } }); } // _relationshipFields = new Composite(relationshipDialogArea, // SWT.NONE); // GridLayout relationshipFieldsLayout = new GridLayout(1, false); // relationshipFieldsLayout.horizontalSpacing = 15; // _relationshipFields.setLayout(relationshipFieldsLayout); // _relationshipFields.setLayoutData(new GridData(GridData.FILL_BOTH)); _sourceLabel = new Label(relationshipDialogArea, SWT.NONE); Font originalFont = _sourceLabel.getFont(); FontData[] fontData = originalFont.getFontData(); _titleFont = new Font(originalFont.getDevice(), fontData[0].getName(), fontData[0].getHeight(), SWT.BOLD); _sourceLabel.setFont(_titleFont); GridData sourceLabelData = new GridData(GridData.FILL_HORIZONTAL); // sourceLabelData.horizontalSpan = 2; if (showEntityPickers) { sourceLabelData.verticalIndent = 15; } _sourceLabel.setLayoutData(sourceLabelData); _destinationLabel = new Label(relationshipDialogArea, SWT.NONE); _destinationLabel.setFont(_titleFont); GridData destinationLabelData = new GridData(GridData.FILL_HORIZONTAL); // destinationLabelData.horizontalSpan = 2; if (showEntityPickers) { destinationLabelData.verticalIndent = 15; } _destinationLabel.setLayoutData(destinationLabelData); _sourceFields = new Group(relationshipDialogArea, SWT.NONE); GridLayout sourceFieldsLayout = new GridLayout(2, false); sourceFieldsLayout.horizontalSpacing = 15; sourceFieldsLayout.verticalSpacing = 6; _sourceFields.setLayout(sourceFieldsLayout); _sourceFields.setLayoutData(new GridData(GridData.FILL_BOTH)); _toOneButton = new Button(_sourceFields, SWT.RADIO); _toOneButton.setSelection(true); _toOneButton.addSelectionListener(this); GridData toOneData = new GridData(GridData.FILL_HORIZONTAL); toOneData.horizontalSpan = 2; _toOneButton.setLayoutData(toOneData); _toManyButton = new Button(_sourceFields, SWT.RADIO); _toManyButton.addSelectionListener(this); GridData toManyData = new GridData(GridData.FILL_HORIZONTAL); toManyData.horizontalSpan = 2; _toManyButton.setLayoutData(toManyData); _createButton = new Button(_sourceFields, SWT.CHECK); _createButton.setSelection(true); _createButton.setLayoutData(new GridData()); _createButton.addSelectionListener(this); _nameText = new Text(_sourceFields, SWT.BORDER); GridData nameData = new GridData(GridData.FILL_HORIZONTAL); nameData.widthHint = 200; _nameText.setLayoutData(nameData); _createFKButton = new Button(_sourceFields, SWT.CHECK); _createFKButton.setSelection(true); _createFKButton.setLayoutData(new GridData()); _createFKButton.addSelectionListener(this); _fkNameText = new Text(_sourceFields, SWT.BORDER); _fkNameText.setEnabled(false); GridData fkNameData = new GridData(GridData.FILL_HORIZONTAL); fkNameData.widthHint = 200; _fkNameText.setLayoutData(fkNameData); _fkColumnNameLabel = new Label(_sourceFields, SWT.NONE); _fkColumnNameLabel.setText("and a new foreign key column named"); GridData columnNameData = new GridData(); columnNameData.horizontalIndent = 20; _fkColumnNameLabel.setLayoutData(columnNameData); _fkColumnNameText = new Text(_sourceFields, SWT.BORDER); _fkColumnNameText.setEnabled(false); GridData fkColumnNameData = new GridData(GridData.FILL_HORIZONTAL); fkColumnNameData.widthHint = 200; _fkColumnNameText.setLayoutData(fkColumnNameData); _destinationFields = new Group(relationshipDialogArea, SWT.NONE); GridLayout destinationFieldsLayout = new GridLayout(2, false); destinationFieldsLayout.horizontalSpacing = 15; destinationFieldsLayout.verticalSpacing = 6; _destinationFields.setLayout(destinationFieldsLayout); _destinationFields.setLayoutData(new GridData(GridData.FILL_BOTH)); _inverseToOneButton = new Button(_destinationFields, SWT.RADIO); _inverseToOneButton.addSelectionListener(this); GridData inverseToOneData = new GridData(GridData.FILL_HORIZONTAL); inverseToOneData.horizontalSpan = 2; _inverseToOneButton.setLayoutData(inverseToOneData); _inverseToManyButton = new Button(_destinationFields, SWT.RADIO); _inverseToManyButton.addSelectionListener(this); GridData inverseToManyData = new GridData(GridData.FILL_HORIZONTAL); inverseToManyData.horizontalSpan = 2; _inverseToManyButton.setLayoutData(inverseToManyData); _createInverseButton = new Button(_destinationFields, SWT.CHECK); _createInverseButton.setSelection(true); _createInverseButton.setLayoutData(new GridData()); _createInverseButton.addSelectionListener(this); _inverseNameText = new Text(_destinationFields, SWT.BORDER); GridData inverseNameData = new GridData(GridData.FILL_HORIZONTAL); inverseNameData.widthHint = 200; _inverseNameText.setLayoutData(inverseNameData); _createInverseFKButton = new Button(_destinationFields, SWT.CHECK); _createInverseFKButton.setSelection(true); _createInverseFKButton.setLayoutData(new GridData()); _createInverseFKButton.addSelectionListener(this); _inverseFKNameText = new Text(_destinationFields, SWT.BORDER); _inverseFKNameText.setEnabled(false); GridData inverseFKNameData = new GridData(GridData.FILL_HORIZONTAL); inverseFKNameData.widthHint = 200; _inverseFKNameText.setLayoutData(inverseFKNameData); _inverseFKColumnNameLabel = new Label(_destinationFields, SWT.NONE); _inverseFKColumnNameLabel.setText("and a new foreign key column named"); GridData inverseColumnNameData = new GridData(); inverseColumnNameData.horizontalIndent = 20; _inverseFKColumnNameLabel.setLayoutData(inverseColumnNameData); _inverseFKColumnNameText = new Text(_destinationFields, SWT.BORDER); _inverseFKColumnNameText.setEnabled(false); GridData inverseFKColumnNameData = new GridData(GridData.FILL_HORIZONTAL); inverseFKColumnNameData.widthHint = 200; _inverseFKColumnNameText.setLayoutData(inverseFKColumnNameData); _joinsLabel = new Label(relationshipDialogArea, SWT.NONE); _joinsLabel.setFont(_titleFont); _joinsLabel.setText("Joins"); GridData joinsLabelData = new GridData(GridData.FILL_HORIZONTAL); joinsLabelData.horizontalSpan = 2; joinsLabelData.verticalIndent = 15; _joinsLabel.setLayoutData(joinsLabelData); _joinsFields = new Group(relationshipDialogArea, SWT.NONE); GridLayout joinEntityFieldsLayout = new GridLayout(2, false); joinEntityFieldsLayout.horizontalSpacing = 15; _joinsFields.setLayout(joinEntityFieldsLayout); GridData joinEntityFieldsLayoutData = new GridData(GridData.FILL_BOTH); joinEntityFieldsLayoutData.horizontalSpan = 2; _joinsFields.setLayoutData(joinEntityFieldsLayoutData); _joinEntityNameLabel = new Label(_joinsFields, SWT.NONE); _joinEntityNameLabel.setText(Messages.getString("CreateRelationshipDialog.joinEntityNameLabel")); GridData joinEntityNameLabelData = new GridData(); // joinEntityNameLabelData.verticalIndent = 15; _joinEntityNameLabel.setLayoutData(joinEntityNameLabelData); _joinEntityNameText = new Text(_joinsFields, SWT.BORDER); GridData joinEntityNameData = new GridData(GridData.FILL_HORIZONTAL); // joinEntityNameData.verticalIndent = 15; joinEntityNameData.widthHint = 200; _joinEntityNameText.setLayoutData(joinEntityNameData); _flattenButton = new Button(_joinsFields, SWT.CHECK); _flattenButton.addSelectionListener(this); _flattenButton.setText(Messages.getString("CreateRelationshipDialog.flattenLabel")); _flattenButton.setSelection(true); GridData flattenData = new GridData(GridData.FILL_HORIZONTAL); flattenData.horizontalSpan = 2; _flattenButton.setLayoutData(flattenData); _joinsTableEditor = new JoinsTableEditor(_joinsFields, SWT.NONE); GridData joinsGridData = new GridData(GridData.FILL_HORIZONTAL); joinsGridData.horizontalSpan = 2; // joinsGridData.verticalIndent = 15; _joinsTableEditor.setLayoutData(joinsGridData); entitiesChanged(); _inverseFKNameText.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { String newInverseFKName = ((Text) e.widget).getText(); if (_destinationEntity != null) { String newInverseFKColumnName = _destinationEntity.getModel().getAttributeNamingConvention().format(newInverseFKName); // NameSyncUtils.newDependentName(_oldInverseFKName, // newInverseFKName, _inverseFKColumnNameText.getText(), // null); _inverseFKColumnNameText.setText(newInverseFKColumnName); _oldInverseFKName = newInverseFKName; } } }); _fkNameText.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { String newFKName = ((Text) e.widget).getText(); String newFKColumnName = _sourceEntity.getModel().getAttributeNamingConvention().format(newFKName); // NameSyncUtils.newDependentName(_oldFKName, newFKName, // _fkColumnNameText.getText(), null); _fkColumnNameText.setText(newFKColumnName); _oldFKName = newFKName; } }); return _joinsFields; } protected void setVisible(Control control, boolean visible) { control.setVisible(visible); if (visible) { ((GridData) control.getLayoutData()).heightHint = -1; } else { ((GridData) control.getLayoutData()).heightHint = 0; } } protected void entitiesChanged() { boolean relationshipFieldsVisible = _sourceEntity != null && _destinationEntity != null; setVisible(_sourceLabel, relationshipFieldsVisible); setVisible(_sourceFields, relationshipFieldsVisible); setVisible(_destinationLabel, relationshipFieldsVisible); setVisible(_destinationFields, relationshipFieldsVisible); setVisible(_joinsLabel, relationshipFieldsVisible); setVisible(_joinsFields, relationshipFieldsVisible); if (_sourceEntity != null) { _sourceLabel.setText("From " + _sourceEntity.getName() + " ..."); _createInverseButton.setText(Messages.getString("CreateRelationshipDialog.inverseNameLabel", new Object[] { _sourceEntity.getName() })); _createInverseFKButton.setText(Messages.getString("CreateRelationshipDialog.inverseFKNameLabel", new Object[] { _sourceEntity.getName() })); _inverseToOneButton.setText(Messages.getString("CreateRelationshipDialog.inverseToOneLabel", new Object[] { _sourceEntity.getName() })); _inverseToManyButton.setText(Messages.getString("CreateRelationshipDialog.inverseToManyLabel", new Object[] { StringUtils.toPlural(_sourceEntity.getName()) })); } if (_destinationEntity != null) { _createButton.setText(Messages.getString("CreateRelationshipDialog.nameLabel", new Object[] { _destinationEntity.getName() })); _createFKButton.setText(Messages.getString("CreateRelationshipDialog.fkNameLabel", new Object[] { _destinationEntity.getName() })); _toOneButton.setText(Messages.getString("CreateRelationshipDialog.toOneLabel", new Object[] { _destinationEntity.getName() })); _toManyButton.setText(Messages.getString("CreateRelationshipDialog.toManyLabel", new Object[] { StringUtils.toPlural(_destinationEntity.getName()) })); _destinationLabel.setText("From " + _destinationEntity.getName() + " ..."); _guessedJoinEntityName = _sourceEntity.getName() + _destinationEntity.getName(); _joinEntityNameText.setText(_guessedJoinEntityName); _flattenedChanged(); } if (_sourceEntity != null && _destinationEntity != null) { _relationship = _sourceEntity.createRelationshipTo(_destinationEntity, false); _joinsTableEditor.setRelationship(_relationship); } else { _relationship = null; _joinsTableEditor.setRelationship(null); } toManyChanged(null); // getButton(IDialogConstants.OK_ID).setEnabled(_sourceEntity != null && // _destinationEntity != null); } protected void okPressed() { buttonBar.forceFocus(); try { String name = _nameText.getText(); String inverseName = _inverseNameText.getText(); boolean createRelationship = _createButton.getSelection(); boolean createInverseRelationship = _createInverseButton.getSelection(); if (_manyToMany) { String joinEntityName = _joinEntityNameText.getText(); boolean flatten = _flattenButton.getSelection(); NewManyToManyRelationshipOperation operation = new NewManyToManyRelationshipOperation(_sourceEntity, _destinationEntity, createRelationship, name, createInverseRelationship, inverseName, joinEntityName, flatten); operation.addContext(EOModelUtils.getUndoContext(_sourceEntity)); IOperationHistory operationHistory = PlatformUI.getWorkbench().getOperationSupport().getOperationHistory(); operationHistory.execute(operation, null, null); // _sourceEntity.joinInManyToManyWith(_destinationEntity, // createRelationship, name, createInverseRelationship, // inverseName, joinEntityName, flatten); } else { String fkName = null; String fkColumnName = null; boolean toMany = _toManyButton.getSelection(); String inverseFKName = null; String inverseFKColumnName = null; boolean inverseToMany = _inverseToManyButton.getSelection(); if (_createFK) { fkName = _fkNameText.getText(); fkColumnName = _fkColumnNameText.getText(); } if (_createInverseFK) { inverseFKName = _inverseFKNameText.getText(); inverseFKColumnName = _inverseFKColumnNameText.getText(); } NewOneToManyRelationshipOperation operation = new NewOneToManyRelationshipOperation(_relationship, _sourceEntity, name, createRelationship, toMany, _createFK, fkName, fkColumnName, _destinationEntity, inverseName, createInverseRelationship, inverseToMany, _createInverseFK, inverseFKName, inverseFKColumnName); operation.addContext(EOModelUtils.getUndoContext(_sourceEntity)); IOperationHistory operationHistory = PlatformUI.getWorkbench().getOperationSupport().getOperationHistory(); operationHistory.execute(operation, null, null); } super.okPressed(); } catch (Throwable t) { ErrorUtils.openErrorDialog(Display.getDefault().getActiveShell(), t); } } public void toManyChanged(Button selectedButton) { if (!_toManyButton.getSelection() && !_inverseToManyButton.getSelection()) { if (selectedButton == _inverseToManyButton) { _toOneButton.setSelection(false); _toManyButton.setSelection(true); } else { _inverseToOneButton.setSelection(false); _inverseToManyButton.setSelection(true); } } _checkManyToMany(selectedButton); String name = _nameText.getText(); if ((_sourceEntity != null && _destinationEntity != null) && (_originalName == null || ComparisonUtils.equals(name, _originalName))) { String newName = _sourceEntity._findUnusedRelationshipName(_destinationEntity.getName(), _toManyButton.getSelection()); _nameText.setText(newName); _originalName = newName; } String inverseName = _inverseNameText.getText(); if ((_sourceEntity != null && _destinationEntity != null) && (_originalInverseName == null || ComparisonUtils.equals(inverseName, _originalInverseName))) { String newName = _destinationEntity._findUnusedRelationshipName(_sourceEntity.getName(), _inverseToManyButton.getSelection()); _inverseNameText.setText(newName); _originalInverseName = newName; } } protected void _checkManyToMany(Button selectedButton) { if (!_createButton.getSelection() && !_createInverseButton.getSelection()) { if (selectedButton == _createInverseButton) { _createButton.setSelection(true); } else { _createInverseButton.setSelection(true); } } if (selectedButton == _createButton) { if (!_createButton.getSelection()) { _createFKButton.setSelection(false); } else { _createFKButton.setSelection(true); } } else if (selectedButton == _createInverseButton) { if (!_createInverseButton.getSelection()) { _createInverseFKButton.setSelection(false); } else { _createInverseFKButton.setSelection(true); } } _nameText.setEnabled(_createButton.getSelection()); _inverseNameText.setEnabled(_createInverseButton.getSelection()); _manyToMany = (_toManyButton.getSelection() && _inverseToManyButton.getSelection()); // _toManyButton.setEnabled(_createButton.getSelection()); // _inverseToManyButton.setEnabled(_createInverseButton.getSelection()); _joinsTableEditor.setEnabled(!_manyToMany); _flattenButton.setEnabled(_manyToMany); _joinEntityNameText.setEnabled(_manyToMany); boolean canCreateFK = !_toManyButton.getSelection(); _createFK = canCreateFK && _createFKButton.getSelection(); _createFKButton.setEnabled(canCreateFK); _fkNameText.setEnabled(_createFK); _fkColumnNameText.setEnabled(_createFK); if (_createFK) { _fkColumnNameLabel.setForeground(_fkColumnNameLabel.getDisplay().getSystemColor(SWT.COLOR_BLACK)); } else { _fkColumnNameLabel.setForeground(_fkColumnNameLabel.getDisplay().getSystemColor(SWT.COLOR_DARK_GRAY)); } boolean canCreateInverseFK = !_inverseToManyButton.getSelection(); _createInverseFK = canCreateInverseFK && _createInverseFKButton.getSelection(); _createInverseFKButton.setEnabled(canCreateInverseFK); _inverseFKNameText.setEnabled(_createInverseFK); _inverseFKColumnNameText.setEnabled(_createInverseFK); if (_createInverseFK) { _inverseFKColumnNameLabel.setForeground(_inverseFKColumnNameLabel.getDisplay().getSystemColor(SWT.COLOR_BLACK)); } else { _inverseFKColumnNameLabel.setForeground(_inverseFKColumnNameLabel.getDisplay().getSystemColor(SWT.COLOR_DARK_GRAY)); } if (_sourceEntity != null && _destinationEntity != null) { String fkName = _fkNameText.getText(); if (fkName == null || fkName.length() == 0) { String newName = _sourceEntity.findUnusedAttributeName(StringUtils.toLowercaseFirstLetter(_destinationEntity.getName()) + "ID"); _fkNameText.setText(newName); _oldFKName = newName; _fkColumnNameText.setText(_sourceEntity.getModel().getAttributeNamingConvention().format(newName)); // EOAttribute.guessColumnNameInEntity(newName, _sourceEntity)); } String inverseFKName = _inverseFKNameText.getText(); if (inverseFKName == null || inverseFKName.length() == 0) { String newName = _destinationEntity.findUnusedAttributeName(StringUtils.toLowercaseFirstLetter(_sourceEntity.getName()) + "ID"); _inverseFKNameText.setText(newName); _oldInverseFKName = newName; _inverseFKColumnNameText.setText(_destinationEntity.getModel().getAttributeNamingConvention().format(newName)); // EOAttribute.guessColumnNameInEntity(newName, // _destinationEntity)); } } boolean joinsTableVisible = !_manyToMany && !_createFK && !_createInverseFK; boolean joinsVisible = _manyToMany || joinsTableVisible; setVisible(_joinsLabel, joinsVisible); setVisible(_joinsFields, joinsVisible); setVisible(_joinsTableEditor, joinsTableVisible); setVisible(_joinEntityNameLabel, _manyToMany); setVisible(_joinEntityNameText, _manyToMany); setVisible(_flattenButton, _manyToMany); if (getShell().isVisible()) { getShell().pack(); } } protected void _flattenedChanged() { // DO NOTHING } public void widgetDefaultSelected(SelectionEvent event) { widgetSelected(event); } public void widgetSelected(SelectionEvent event) { Object source = event.getSource(); if (source == _toManyButton) { toManyChanged(_toManyButton); } else if (source == _inverseToManyButton) { toManyChanged(_inverseToManyButton); } else if (source == _createFKButton) { _checkManyToMany(_createFKButton); } else if (source == _createInverseFKButton) { _checkManyToMany(_createInverseFKButton); } else if (source == _createButton) { _checkManyToMany(_createButton); } else if (source == _createInverseButton) { _checkManyToMany(_createInverseButton); } else if (source == _flattenButton) { _flattenedChanged(); } } public boolean close() { boolean results = super.close(); if (_titleFont != null) { _titleFont.dispose(); } return results; } }