diff options
Diffstat (limited to 'jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/JoinTableComposite.java')
-rw-r--r-- | jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/JoinTableComposite.java | 743 |
1 files changed, 365 insertions, 378 deletions
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/JoinTableComposite.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/JoinTableComposite.java index 1f2f436c05..9bbe104cf8 100644 --- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/JoinTableComposite.java +++ b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/JoinTableComposite.java @@ -3,470 +3,457 @@ * This program and the accompanying materials are made available under the terms of * the Eclipse Public License v1.0, which accompanies this distribution and is available at * http://www.eclipse.org/legal/epl-v10.html. - * + * * Contributors: * Oracle - initial API and implementation ******************************************************************************/ package org.eclipse.jpt.ui.internal.mappings.details; -import java.util.List; - -import org.eclipse.emf.common.command.CommandStack; -import org.eclipse.emf.common.notify.Adapter; -import org.eclipse.emf.common.notify.Notification; -import org.eclipse.emf.common.notify.impl.AdapterImpl; -import org.eclipse.emf.ecore.EObject; -import org.eclipse.jface.window.Window; -import org.eclipse.jpt.core.internal.IJpaProject; -import org.eclipse.jpt.core.internal.JpaEObject; -import org.eclipse.jpt.core.internal.mappings.IJoinColumn; -import org.eclipse.jpt.core.internal.mappings.IJoinTable; -import org.eclipse.jpt.core.internal.mappings.JpaCoreMappingsPackage; -import org.eclipse.jpt.db.internal.ConnectionListener; -import org.eclipse.jpt.db.internal.ConnectionProfile; -import org.eclipse.jpt.db.internal.Database; +import java.util.Collection; +import java.util.Iterator; +import java.util.ListIterator; +import org.eclipse.jpt.core.internal.context.base.IJoinColumn; +import org.eclipse.jpt.core.internal.context.base.IJoinTable; import org.eclipse.jpt.db.internal.Schema; import org.eclipse.jpt.db.internal.Table; import org.eclipse.jpt.ui.internal.IJpaHelpContextIds; -import org.eclipse.jpt.ui.internal.details.BaseJpaComposite; import org.eclipse.jpt.ui.internal.mappings.JptUiMappingsMessages; -import org.eclipse.jpt.ui.internal.mappings.details.JoinColumnsComposite.Owner; -import org.eclipse.swt.SWT; +import org.eclipse.jpt.ui.internal.mappings.db.TableCombo; +import org.eclipse.jpt.ui.internal.mappings.details.JoinColumnsComposite.IJoinColumnsEditor; +import org.eclipse.jpt.ui.internal.widgets.AbstractFormPane; +import org.eclipse.jpt.ui.internal.widgets.PostExecution; +import org.eclipse.jpt.utility.internal.iterators.EmptyIterator; +import org.eclipse.jpt.utility.internal.model.value.PropertyValueModel; +import org.eclipse.jpt.utility.internal.model.value.SimplePropertyValueModel; +import org.eclipse.jpt.utility.internal.model.value.WritablePropertyValueModel; +import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; -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.Display; -import org.eclipse.ui.PlatformUI; -import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory; +import org.eclipse.swt.widgets.Group; -public class JoinTableComposite extends BaseJpaComposite +/** + * Here the layout of this pane: + * <pre> + * ----------------------------------------------------------------------------- + * | --------------------------------------------------------------- | + * | Name: | |v| | + * | --------------------------------------------------------------- | + * | | + * | x Override Default Join Columns | + * | | + * | ------------------------------------------------------------------------- | + * | | | | + * | | JoinColumnsComposite | | + * | | | | + * | ------------------------------------------------------------------------- | + * | | + * | x Override Default Inverse Join Columns | + * | | + * | ------------------------------------------------------------------------- | + * | | | | + * | | JoinColumnsComposite | | + * | | | | + * | ------------------------------------------------------------------------- | + * -----------------------------------------------------------------------------</pre> + * + * @see IJoinTable + * @see OneToManyMappingComposite - A container of this pane + * @see ManyToManyMappingComposite - A container of this pane + * @see JoinColumnsComposite + * + * @version 2.0 + * @since 1.0 + */ +public class JoinTableComposite extends AbstractFormPane<IJoinTable> { - - private IJoinTable joinTable; - private final Adapter joinTableListener; + private Button overrideDefaultInverseJoinColumnsCheckBox; + private Button overrideDefaultJoinColumnsCheckBox; - protected TableCombo tableCombo; + /** + * Creates a new <code>JoinTableComposite</code>. + * + * @param parentPane The parent container of this one + * @param subjectHolder The holder of this pane's subject + * @param parent The parent container + */ + public JoinTableComposite(AbstractFormPane<?> parentPane, + PropertyValueModel<? extends IJoinTable> subjectHolder, + Composite parent) { - private ConnectionProfile connectionProfile; - private ConnectionListener connectionListener; - - private Button overrideDefaultJoinColumnsCheckBox; - private JoinColumnsComposite joinColumnsComposite; - - private Button overrideDefaultInverseJoinColumnsCheckBox; - private JoinColumnsComposite inverseJoinColumnsComposite; + super(parentPane, subjectHolder, parent); + } - public JoinTableComposite(Composite parent, CommandStack commandStack, TabbedPropertySheetWidgetFactory widgetFactory) { - super(parent, SWT.NULL, commandStack, widgetFactory); - this.joinTableListener = buildJoinTableListener(); - this.connectionListener = buildConnectionListener(); + /** + * Creates a new <code>JoinTableComposite</code>. + * + * @param subjectHolder The holder of the subject <code>IJoinTable</code> + * @param parent The parent container + * @param widgetFactory The factory used to create various common widgets + */ + public JoinTableComposite(PropertyValueModel<? extends IJoinTable> subjectHolder, + Composite parent, + IWidgetFactory widgetFactory) { + + super(subjectHolder, parent, widgetFactory); } - - private Adapter buildJoinTableListener() { - return new AdapterImpl() { - public void notifyChanged(Notification notification) { - joinTableChanged(notification); - } - }; + + private void addInverseJoinColumn(IJoinTable joinTable) { + + InverseJoinColumnDialog dialog = new InverseJoinColumnDialog(shell(), joinTable); + dialog.openDialog(buildAddInverseJoinColumnPostExecution()); } - - private ConnectionListener buildConnectionListener() { - return new ConnectionListener() { - public void aboutToClose(ConnectionProfile profile) { - // not interested to this event. - } + private void addInverseJoinColumnFromDialog(JoinColumnInJoinTableStateObject stateObject) { - public void closed(ConnectionProfile profile) { - getControl().getDisplay().asyncExec( new Runnable() { - public void run() { - JoinTableComposite.this.tableCombo.populate(); - } - }); - } + int index = subject().specifiedInverseJoinColumnsSize(); + IJoinColumn joinColumn = subject().addSpecifiedInverseJoinColumn(index); + joinColumn.setSpecifiedName(stateObject.getSelectedName()); + joinColumn.setSpecifiedReferencedColumnName(stateObject.getSpecifiedReferencedColumnName()); + } - public void modified(ConnectionProfile profile) { - getControl().getDisplay().asyncExec( new Runnable() { - public void run() { - JoinTableComposite.this.tableCombo.populate(); - } - }); - } + private void addJoinColumn(IJoinTable joinTable) { - public boolean okToClose(ConnectionProfile profile) { - // not interested to this event. - return true; - } + JoinColumnInJoinTableDialog dialog = new JoinColumnInJoinTableDialog(shell(), joinTable); + dialog.openDialog(buildAddJoinColumnPostExecution()); + } - public void opened(ConnectionProfile profile) { - getControl().getDisplay().asyncExec( new Runnable() { - public void run() { - JoinTableComposite.this.tableCombo.populate(); - } - }); + private void addJoinColumnFromDialog(JoinColumnInJoinTableStateObject stateObject) { + + int index = subject().specifiedJoinColumnsSize(); + IJoinColumn joinColumn = subject().addSpecifiedJoinColumn(index); + joinColumn.setSpecifiedName(stateObject.getSelectedName()); + joinColumn.setSpecifiedReferencedColumnName(stateObject.getSpecifiedReferencedColumnName()); + } + + private PostExecution<InverseJoinColumnDialog> buildAddInverseJoinColumnPostExecution() { + return new PostExecution<InverseJoinColumnDialog>() { + public void execute(InverseJoinColumnDialog dialog) { + if (dialog.wasConfirmed()) { + addInverseJoinColumnFromDialog(dialog.subject()); + } } + }; + } - public void databaseChanged(ConnectionProfile profile, final Database database) { - getControl().getDisplay().asyncExec( new Runnable() { - public void run() { - if(database == JoinTableComposite.this.tableCombo.getDatabase()) { - if (!getControl().isDisposed()) { - JoinTableComposite.this.tableCombo.populate(); - } - } - } - }); + private PostExecution<JoinColumnInJoinTableDialog> buildAddJoinColumnPostExecution() { + return new PostExecution<JoinColumnInJoinTableDialog>() { + public void execute(JoinColumnInJoinTableDialog dialog) { + if (dialog.wasConfirmed()) { + addJoinColumnFromDialog(dialog.subject()); + } } - - public void schemaChanged(ConnectionProfile profile, final Schema schema) { - getControl().getDisplay().asyncExec( new Runnable() { - public void run() { - if(schema == JoinTableComposite.this.tableCombo.getTableSchema()) { - if (!getControl().isDisposed()) { - JoinTableComposite.this.tableCombo.populate(); - } - } - } - }); + }; + } + + private PostExecution<JoinColumnInJoinTableDialog> buildEditInverseJoinColumnPostExecution() { + return new PostExecution<JoinColumnInJoinTableDialog>() { + public void execute(JoinColumnInJoinTableDialog dialog) { + if (dialog.wasConfirmed()) { + editJoinColumn(dialog.subject()); + } } + }; + } - public void tableChanged(ConnectionProfile profile, final Table table) { - // not interested to this event. + private PostExecution<JoinColumnInJoinTableDialog> buildEditJoinColumnPostExecution() { + return new PostExecution<JoinColumnInJoinTableDialog>() { + public void execute(JoinColumnInJoinTableDialog dialog) { + if (dialog.wasConfirmed()) { + editJoinColumn(dialog.subject()); + } } }; - } + } - private ConnectionProfile getConnectionProfile() { - if(this.connectionProfile == null) { - IJpaProject jpaProject = this.joinTable.getJpaProject(); - this.connectionProfile = jpaProject.connectionProfile(); - } - return this.connectionProfile; + private InverseJoinColumnsProvider buildInverseJoinColumnsEditor() { + return new InverseJoinColumnsProvider(); } - - private void addConnectionListener() { - this.getConnectionProfile().addConnectionListener(this.connectionListener); + + private JoinColumnsProvider buildJoinColumnsEditor() { + return new JoinColumnsProvider(); } - - private void removeConnectionListener() { - this.getConnectionProfile().removeConnectionListener(this.connectionListener); + + private WritablePropertyValueModel<Boolean> buildOverrideDefaultHolder() { + // TODO + return new SimplePropertyValueModel<Boolean>(); } - - @Override - protected void initializeLayout(Composite composite) { - GridLayout layout = new GridLayout(2, false); - layout.marginWidth = 0; - composite.setLayout(layout); - - getWidgetFactory().createLabel(composite, JptUiMappingsMessages.JoinTableComposite_name); - - this.tableCombo = new TableCombo(composite, this.commandStack, getWidgetFactory()); - GridData gridData = new GridData(); - gridData.horizontalAlignment = SWT.FILL; - gridData.verticalAlignment = SWT.BEGINNING; - gridData.grabExcessHorizontalSpace = true; - this.tableCombo.getCombo().setLayoutData(gridData); - PlatformUI.getWorkbench().getHelpSystem().setHelp(this.tableCombo.getCombo(), IJpaHelpContextIds.MAPPING_JOIN_TABLE_NAME); - - this.overrideDefaultJoinColumnsCheckBox = - getWidgetFactory().createButton( - composite, - JptUiMappingsMessages.JoinTableComposite_overrideDefaultJoinColumns, - SWT.CHECK); - this.overrideDefaultJoinColumnsCheckBox.addSelectionListener(new SelectionListener() { - public void widgetDefaultSelected(SelectionEvent e) { - // do nothing - } - + + private SelectionListener buildOverrideDefaultInverseSelectionListener() { + return new SelectionAdapter() { + @Override public void widgetSelected(SelectionEvent e) { - if (JoinTableComposite.this.overrideDefaultJoinColumnsCheckBox.getSelection()) { - IJoinColumn defaultJoinColumn = JoinTableComposite.this.joinTable.getDefaultJoinColumns().get(0); + Button button = (Button) e.widget; + IJoinTable joinTable = subject(); + + if (button.getSelection()) { + IJoinColumn defaultJoinColumn = joinTable.defaultInverseJoinColumns().next(); String columnName = defaultJoinColumn.getDefaultName(); String referencedColumnName = defaultJoinColumn.getDefaultReferencedColumnName(); - IJoinColumn joinColumn = JoinTableComposite.this.joinTable.createJoinColumn(0); - JoinTableComposite.this.joinTable.getSpecifiedJoinColumns().add(joinColumn); + + IJoinColumn joinColumn = joinTable.addSpecifiedInverseJoinColumn(0); joinColumn.setSpecifiedName(columnName); joinColumn.setSpecifiedReferencedColumnName(referencedColumnName); - } else { - JoinTableComposite.this.joinTable.getSpecifiedJoinColumns().clear(); + } + else { + for (int index = joinTable.specifiedInverseJoinColumnsSize(); --index >= 0; ) { + joinTable.removeSpecifiedJoinColumn(index); + } } } - }); - - this.joinColumnsComposite = new JoinColumnsComposite(composite, this.commandStack, getWidgetFactory(), JptUiMappingsMessages.JoinTableComposite_joinColumn); - gridData = new GridData(); - gridData.horizontalAlignment = GridData.FILL; - gridData.verticalAlignment = GridData.FILL; - gridData.grabExcessHorizontalSpace = true; - gridData.grabExcessVerticalSpace = true; - gridData.horizontalSpan = 2; - this.joinColumnsComposite.getControl().setLayoutData(gridData); - - this.overrideDefaultInverseJoinColumnsCheckBox = getWidgetFactory().createButton(composite, JptUiMappingsMessages.JoinTableComposite_overrideDefaultInverseJoinColumns, SWT.CHECK); - this.overrideDefaultInverseJoinColumnsCheckBox.addSelectionListener(new SelectionListener() { - public void widgetDefaultSelected(SelectionEvent e) { - // do nothing - } - + }; + } + + private SelectionListener buildOverrideDefaultSelectionListener() { + return new SelectionAdapter() { + @Override public void widgetSelected(SelectionEvent e) { - if (JoinTableComposite.this.overrideDefaultInverseJoinColumnsCheckBox.getSelection()) { - IJoinColumn defaultJoinColumn = JoinTableComposite.this.joinTable.getDefaultInverseJoinColumns().get(0); + Button button = (Button) e.widget; + IJoinTable joinTable = subject(); + + if (button.getSelection()) { + IJoinColumn defaultJoinColumn = joinTable.defaultJoinColumns().next(); String columnName = defaultJoinColumn.getDefaultName(); String referencedColumnName = defaultJoinColumn.getDefaultReferencedColumnName(); - IJoinColumn joinColumn = JoinTableComposite.this.joinTable.createInverseJoinColumn(0); - JoinTableComposite.this.joinTable.getSpecifiedInverseJoinColumns().add(joinColumn); + + IJoinColumn joinColumn = joinTable.addSpecifiedJoinColumn(0); joinColumn.setSpecifiedName(columnName); joinColumn.setSpecifiedReferencedColumnName(referencedColumnName); - } else { - JoinTableComposite.this.joinTable.getSpecifiedInverseJoinColumns().clear(); + } + else { + for (int index = joinTable.specifiedJoinColumnsSize(); --index >= 0; ) { + joinTable.removeSpecifiedJoinColumn(index); + } } } - }); - this.inverseJoinColumnsComposite = new JoinColumnsComposite(composite, this.commandStack, getWidgetFactory(), JptUiMappingsMessages.JoinTableComposite_inverseJoinColumn); - gridData = new GridData(); - gridData.horizontalAlignment = GridData.FILL; - gridData.verticalAlignment = GridData.FILL; - gridData.grabExcessHorizontalSpace = true; - gridData.grabExcessVerticalSpace = true; - gridData.horizontalSpan = 2; - this.inverseJoinColumnsComposite.getControl().setLayoutData(gridData); - } - - void addJoinColumn() { - JoinColumnInJoinTableDialog dialog = new JoinColumnInJoinTableDialog(this.getControl().getShell(), this.joinTable); - this.addJoinColumnFromDialog(dialog); - } - - private void addJoinColumnFromDialog(JoinColumnInJoinTableDialog dialog) { - if (dialog.open() != Window.OK) { - return; - } - int index = this.joinTable.getJoinColumns().size(); - IJoinColumn joinColumn = this.joinTable.createJoinColumn(index); - this.joinTable.getSpecifiedJoinColumns().add(joinColumn); - joinColumn.setSpecifiedName(dialog.getSelectedName()); - joinColumn.setSpecifiedReferencedColumnName(dialog.getReferencedColumnName()); + }; } - - void addInverseJoinColumn() { - InverseJoinColumnDialog dialog = new InverseJoinColumnDialog(this.getControl().getShell(), this.joinTable); - this.addInverseJoinColumnFromDialog(dialog); + + private Composite buildPane(Composite container, int groupBoxMargin) { + return buildSubPane(container, groupBoxMargin, 0, groupBoxMargin, 0, groupBoxMargin); } - - private void addInverseJoinColumnFromDialog(InverseJoinColumnDialog dialog) { - if (dialog.open() != Window.OK) { - return; - } - int index = this.joinTable.getInverseJoinColumns().size(); - IJoinColumn joinColumn = this.joinTable.createInverseJoinColumn(index); - this.joinTable.getSpecifiedInverseJoinColumns().add(joinColumn); - joinColumn.setSpecifiedName(dialog.getSelectedName()); - joinColumn.setSpecifiedReferencedColumnName(dialog.getReferencedColumnName()); + + + private TableCombo<IJoinTable> buildTableCombo(Composite container) { + + return new TableCombo<IJoinTable>(this, container) { + + @Override + protected void addPropertyNames(Collection<String> propertyNames) { + super.addPropertyNames(propertyNames); + propertyNames.add(IJoinTable.DEFAULT_NAME_PROPERTY); + propertyNames.add(IJoinTable.SPECIFIED_NAME_PROPERTY); + } + + @Override + protected String defaultValue() { + return subject().getDefaultName(); + } + + @Override + protected void setValue(String value) { + subject().setSpecifiedName(value); + } + + @Override + protected Table table() { + return subject().dbTable(); + } + + private Schema tableSchema() { + return database().schemaNamed(subject().getSchema()); + } + + @Override + protected String value() { + return subject().getSpecifiedName(); + } + + @Override + protected Iterator<String> values() { + Schema schema = tableSchema(); + + if (schema != null) { + return schema.tableNames(); + } + + return EmptyIterator.instance(); + } + }; } - void editJoinColumn(IJoinColumn joinColumn) { - JoinColumnInJoinTableDialog dialog = new JoinColumnInJoinTableDialog(this.getControl().getShell(), joinColumn); - editJoinColumnFromDialog(dialog, joinColumn); + private void editInverseJoinColumn(IJoinColumn joinColumn) { + + InverseJoinColumnDialog dialog = + new InverseJoinColumnDialog(shell(), joinColumn); + + dialog.openDialog(buildEditInverseJoinColumnPostExecution()); } - - private void editJoinColumnFromDialog(JoinColumnInJoinTableDialog dialog, IJoinColumn joinColumn) { - if (dialog.open() == Window.OK) { - editJoinColumnDialogOkd(dialog, joinColumn); - } + + private void editJoinColumn(IJoinColumn joinColumn) { + + JoinColumnInJoinTableDialog dialog = + new JoinColumnInJoinTableDialog(shell(), joinColumn); + + dialog.openDialog(buildEditJoinColumnPostExecution()); } - - private void editJoinColumnDialogOkd(JoinColumnInJoinTableDialog dialog, IJoinColumn joinColumn) { - String name = dialog.getSelectedName(); - String referencedColumnName = dialog.getReferencedColumnName(); - if (dialog.isDefaultNameSelected()) { + private void editJoinColumn(JoinColumnInJoinTableStateObject stateObject) { + + IJoinColumn joinColumn = stateObject.getJoinColumn(); + String name = stateObject.getSelectedName(); + String referencedColumnName = stateObject.getSpecifiedReferencedColumnName(); + + if (stateObject.isDefaultNameSelected()) { if (joinColumn.getSpecifiedName() != null) { joinColumn.setSpecifiedName(null); } } - else if (joinColumn.getSpecifiedName() == null || !joinColumn.getSpecifiedName().equals(name)){ + else if (joinColumn.getSpecifiedName() == null || + !joinColumn.getSpecifiedName().equals(name)){ + joinColumn.setSpecifiedName(name); } - - if (dialog.isDefaultReferencedColumnNameSelected()) { + + if (stateObject.isDefaultReferencedColumnNameSelected()) { if (joinColumn.getSpecifiedReferencedColumnName() != null) { joinColumn.setSpecifiedReferencedColumnName(null); } } - else if (joinColumn.getSpecifiedReferencedColumnName() == null || !joinColumn.getSpecifiedReferencedColumnName().equals(referencedColumnName)){ - joinColumn.setSpecifiedReferencedColumnName(referencedColumnName); - } - } - - - void editInverseJoinColumn(IJoinColumn joinColumn) { - InverseJoinColumnDialog dialog = new InverseJoinColumnDialog(getControl().getShell(), joinColumn); - editJoinColumnFromDialog(dialog, joinColumn); - } - - protected void joinTableChanged(Notification notification) { - if (notification.getFeatureID(IJoinTable.class) == JpaCoreMappingsPackage.IJOIN_TABLE__SPECIFIED_JOIN_COLUMNS) { - Display.getDefault().asyncExec(new Runnable() { - public void run() { - if (getControl().isDisposed()) { - return; - } - overrideDefaultJoinColumnsCheckBox.setSelection(joinTable.containsSpecifiedJoinColumns()); - } - }); - } - else if (notification.getFeatureID(IJoinTable.class) == JpaCoreMappingsPackage.IJOIN_TABLE__SPECIFIED_INVERSE_JOIN_COLUMNS) { + else if (joinColumn.getSpecifiedReferencedColumnName() == null || + !joinColumn.getSpecifiedReferencedColumnName().equals(referencedColumnName)){ - Display.getDefault().asyncExec(new Runnable() { - public void run() { - if (getControl().isDisposed()) { - return; - } - overrideDefaultInverseJoinColumnsCheckBox.setSelection(joinTable.containsSpecifiedInverseJoinColumns()); - } - }); - } - } - - protected void engageListeners() { - if (this.joinTable != null) { - this.joinTable.eAdapters().add(this.joinTableListener); - this.addConnectionListener(); - } - } - - protected void disengageListeners() { - if (this.joinTable != null) { - this.joinTable.eAdapters().remove(this.joinTableListener); - this.removeConnectionListener(); - } - } - - public void doPopulate(EObject obj) { - this.joinTable = (IJoinTable) obj; - if (this.joinTable == null) { - this.joinColumnsComposite.populate(null); - this.inverseJoinColumnsComposite.populate(null); - this.connectionProfile = null; - return; + joinColumn.setSpecifiedReferencedColumnName(referencedColumnName); } - - this.tableCombo.populate(this.joinTable); - this.joinColumnsComposite.populate(new JoinColumnsOwner(this.joinTable)); - this.inverseJoinColumnsComposite.populate(new InverseJoinColumnsOwner(this.joinTable)); - - this.overrideDefaultJoinColumnsCheckBox.setSelection(this.joinTable.containsSpecifiedJoinColumns()); - this.overrideDefaultInverseJoinColumnsCheckBox.setSelection(this.joinTable.containsSpecifiedInverseJoinColumns()); } + /* + * (non-Javadoc) + */ @Override - protected void doPopulate() { - this.tableCombo.populate(); - this.joinColumnsComposite.populate(); - this.inverseJoinColumnsComposite.populate(); - } - - @Override - public void dispose() { - this.tableCombo.dispose(); - this.joinColumnsComposite.dispose(); - this.inverseJoinColumnsComposite.dispose(); - super.dispose(); + protected void initializeLayout(Composite container) { + + int groupBoxMargin = groupBoxMargin(); + + // Name widgets + TableCombo<IJoinTable> tableCombo = buildTableCombo(container); + + buildLabeledComposite( + buildPane(container, groupBoxMargin), + JptUiMappingsMessages.JoinTableComposite_name, + tableCombo.getControl(), + IJpaHelpContextIds.MAPPING_JOIN_TABLE_NAME + ); + + // Override Default Join Columns check box + overrideDefaultJoinColumnsCheckBox = buildCheckBox( + buildPane(container, groupBoxMargin), + JptUiMappingsMessages.JoinTableComposite_overrideDefaultJoinColumns, + buildOverrideDefaultHolder() + ); + + overrideDefaultJoinColumnsCheckBox.addSelectionListener( + buildOverrideDefaultSelectionListener() + ); + + // Join Columns widgets + Group joinColumnGroupPane = buildTitledPane( + container, + JptUiMappingsMessages.JoinTableComposite_joinColumn + ); + + new JoinColumnsComposite<IJoinTable>( + this, + joinColumnGroupPane, + buildJoinColumnsEditor() + ); + + // Override Default Inverse Join Columns check box + overrideDefaultInverseJoinColumnsCheckBox = buildCheckBox( + buildPane(container, groupBoxMargin), + JptUiMappingsMessages.JoinTableComposite_overrideDefaultInverseJoinColumns, + buildOverrideDefaultHolder() + ); + + overrideDefaultInverseJoinColumnsCheckBox.addSelectionListener( + buildOverrideDefaultInverseSelectionListener() + ); + + // Inverse Join Columns widgets + Group inverseJoinColumnGroupPane = buildTitledPane( + container, + JptUiMappingsMessages.JoinTableComposite_inverseJoinColumn + ); + + new JoinColumnsComposite<IJoinTable>( + this, + inverseJoinColumnGroupPane, + buildInverseJoinColumnsEditor() + ); } - private class JoinColumnsOwner extends JpaEObject implements Owner { - - private IJoinTable joinTable; - - public JoinColumnsOwner(IJoinTable joinTable) { - super(); - this.joinTable = joinTable; - } - - public void addJoinColumn() { - JoinTableComposite.this.addJoinColumn(); - } - - public boolean containsSpecifiedJoinColumns() { - return this.joinTable.containsSpecifiedJoinColumns(); - } - - public IJoinColumn createJoinColumn(int index) { - return this.joinTable.createJoinColumn(index); - } - - public List<IJoinColumn> getJoinColumns() { - return this.joinTable.getJoinColumns(); + private class InverseJoinColumnsProvider implements IJoinColumnsEditor<IJoinTable> { + + public void addJoinColumn(IJoinTable subject) { + JoinTableComposite.this.addInverseJoinColumn(subject); } - - public List<IJoinColumn> getSpecifiedJoinColumns() { - return this.joinTable.getSpecifiedJoinColumns(); + + public void editJoinColumn(IJoinTable subject, IJoinColumn joinColumn) { + JoinTableComposite.this.editInverseJoinColumn(joinColumn); } - - public int specifiedJoinColumnsFeatureId() { - return JpaCoreMappingsPackage.IJOIN_TABLE__SPECIFIED_JOIN_COLUMNS; + + public boolean hasSpecifiedJoinColumns(IJoinTable subject) { + return subject.containsSpecifiedInverseJoinColumns(); } - - public Class owningFeatureClass() { - return IJoinTable.class; + + public ListIterator<IJoinColumn> joinColumns(IJoinTable subject) { + return subject.inverseJoinColumns(); } - - public void editJoinColumn(IJoinColumn joinColumn) { - JoinTableComposite.this.editJoinColumn(joinColumn); + + public String[] propertyNames() { + return new String[] { + IJoinTable.DEFAULT_INVERSE_JOIN_COLUMNS_LIST, + IJoinTable.SPECIFIED_INVERSE_JOIN_COLUMNS_LIST + }; } - - public EObject getEObject() { - return this.joinTable; + + public void removeJoinColumns(IJoinTable subject, int[] selectedIndices) { + for (int index = selectedIndices.length; --index >= 0; ) { + subject.removeSpecifiedInverseJoinColumn(selectedIndices[index]); + } } } - - private class InverseJoinColumnsOwner extends JpaEObject implements Owner { - - private IJoinTable joinTable; - - public InverseJoinColumnsOwner(IJoinTable joinTable) { - super(); - this.joinTable = joinTable; - } - - public void addJoinColumn() { - JoinTableComposite.this.addInverseJoinColumn(); - } - - public boolean containsSpecifiedJoinColumns() { - return this.joinTable.containsSpecifiedInverseJoinColumns(); - } - - public IJoinColumn createJoinColumn(int index) { - return this.joinTable.createJoinColumn(index); - } - - public List<IJoinColumn> getJoinColumns() { - return this.joinTable.getInverseJoinColumns(); + + private class JoinColumnsProvider implements IJoinColumnsEditor<IJoinTable> { + + public void addJoinColumn(IJoinTable subject) { + JoinTableComposite.this.addJoinColumn(subject); } - - public List<IJoinColumn> getSpecifiedJoinColumns() { - return this.joinTable.getSpecifiedInverseJoinColumns(); + + public void editJoinColumn(IJoinTable subject, IJoinColumn joinColumn) { + JoinTableComposite.this.editJoinColumn(joinColumn); } - - public int specifiedJoinColumnsFeatureId() { - return JpaCoreMappingsPackage.IJOIN_TABLE__SPECIFIED_INVERSE_JOIN_COLUMNS; + + public boolean hasSpecifiedJoinColumns(IJoinTable subject) { + return subject.containsSpecifiedJoinColumns(); } - - public Class owningFeatureClass() { - return IJoinTable.class; + + public ListIterator<IJoinColumn> joinColumns(IJoinTable subject) { + return subject.joinColumns(); } - - public void editJoinColumn(IJoinColumn joinColumn) { - JoinTableComposite.this.editInverseJoinColumn(joinColumn); + + public String[] propertyNames() { + return new String[] { + IJoinTable.DEFAULT_JOIN_COLUMNS_LIST, + IJoinTable.SPECIFIED_JOIN_COLUMNS_LIST + }; } - - public EObject getEObject() { - return this.joinTable; + + public void removeJoinColumns(IJoinTable subject, int[] selectedIndices) { + for (int index = selectedIndices.length; --index >= 0; ) { + subject.removeSpecifiedJoinColumn(selectedIndices[index]); + } } } - }
\ No newline at end of file |