Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
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.java743
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

Back to the top