Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/PrimaryKeyJoinColumnsComposite.java')
-rw-r--r--jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/PrimaryKeyJoinColumnsComposite.java402
1 files changed, 402 insertions, 0 deletions
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/PrimaryKeyJoinColumnsComposite.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/PrimaryKeyJoinColumnsComposite.java
new file mode 100644
index 0000000000..ea1ee1cd77
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/PrimaryKeyJoinColumnsComposite.java
@@ -0,0 +1,402 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Oracle. All rights reserved.
+ * 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.Iterator;
+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.viewers.IContentProvider;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.ListViewer;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.window.Window;
+import org.eclipse.jpt.core.internal.mappings.IAbstractJoinColumn;
+import org.eclipse.jpt.core.internal.mappings.IEntity;
+import org.eclipse.jpt.core.internal.mappings.INamedColumn;
+import org.eclipse.jpt.core.internal.mappings.IPrimaryKeyJoinColumn;
+import org.eclipse.jpt.core.internal.mappings.JpaCoreMappingsPackage;
+import org.eclipse.jpt.ui.internal.IJpaHelpContextIds;
+import org.eclipse.jpt.ui.internal.details.BaseJpaComposite;
+import org.eclipse.jpt.ui.internal.mappings.JpaUiMappingsMessages;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.swt.SWT;
+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.swt.widgets.Group;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
+
+public class PrimaryKeyJoinColumnsComposite extends BaseJpaComposite
+{
+ private IEntity entity;
+ private final Adapter entityListener;
+ private final Adapter pkJoinColumnListener;
+
+ ListViewer pkJoinColumnsListViewer;
+
+ private Group pkJoinColumnsGroup;
+ Button overrideDefaultJoinColumnsCheckBox;
+ private Button pkJoinColumnsRemoveButton;
+ private Button pkJoinColumnsEditButton;
+
+
+ public PrimaryKeyJoinColumnsComposite(Composite parent, CommandStack commandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
+ super(parent, SWT.NULL, commandStack, widgetFactory);
+ this.entityListener = buildEntityListener();
+ this.pkJoinColumnListener = buildPkJoinColumnListener();
+ }
+
+ private Adapter buildEntityListener() {
+ return new AdapterImpl() {
+ public void notifyChanged(Notification notification) {
+ entityChanged(notification);
+ }
+ };
+ }
+
+ private Adapter buildPkJoinColumnListener() {
+ return new AdapterImpl() {
+ public void notifyChanged(Notification notification) {
+ pkJoinColumnChanged(notification);
+ }
+ };
+ }
+
+ @Override
+ protected void initializeLayout(Composite composite) {
+ GridLayout layout = new GridLayout(2, false);
+ layout.marginWidth = 0;
+ composite.setLayout(layout);
+
+ GridData gridData = new GridData();
+ this.overrideDefaultJoinColumnsCheckBox = getWidgetFactory().createButton(
+ composite,
+ JpaUiMappingsMessages.PrimaryKeyJoinColumnsComposite_overrideDefaultPrimaryKeyJoinColumns,
+ SWT.CHECK);
+ this.overrideDefaultJoinColumnsCheckBox.addSelectionListener(new SelectionListener() {
+ public void widgetDefaultSelected(SelectionEvent e) {
+ // do nothing
+ }
+
+ public void widgetSelected(SelectionEvent e) {
+ if (PrimaryKeyJoinColumnsComposite.this.overrideDefaultJoinColumnsCheckBox.getSelection()) {
+ IPrimaryKeyJoinColumn defaultJoinColumn = PrimaryKeyJoinColumnsComposite.this.entity.getDefaultPrimaryKeyJoinColumns().get(0);
+ String columnName = defaultJoinColumn.getDefaultName();
+ String referencedColumnName = defaultJoinColumn.getDefaultReferencedColumnName();
+
+ IPrimaryKeyJoinColumn pkJoinColumn = PrimaryKeyJoinColumnsComposite.this.entity.createPrimaryKeyJoinColumn(0);
+ PrimaryKeyJoinColumnsComposite.this.entity.getSpecifiedPrimaryKeyJoinColumns().add(pkJoinColumn);
+ pkJoinColumn.setSpecifiedName(columnName);
+ pkJoinColumn.setSpecifiedReferencedColumnName(referencedColumnName);
+ } else {
+ PrimaryKeyJoinColumnsComposite.this.entity.getSpecifiedPrimaryKeyJoinColumns().clear();
+ }
+ }
+ });
+
+ this.pkJoinColumnsGroup =
+ getWidgetFactory().createGroup(
+ composite,
+ JpaUiMappingsMessages.PrimaryKeyJoinColumnsComposite_primaryKeyJoinColumn);
+ this.pkJoinColumnsGroup.setLayout(new GridLayout(2, false));
+ gridData = new GridData();
+ gridData.horizontalAlignment = GridData.FILL;
+ gridData.verticalAlignment = GridData.FILL;
+ gridData.grabExcessHorizontalSpace = true;
+ gridData.grabExcessVerticalSpace = true;
+ gridData.horizontalSpan = 2;
+ this.pkJoinColumnsGroup.setLayoutData(gridData);
+
+ this.pkJoinColumnsListViewer = new ListViewer(this.pkJoinColumnsGroup, SWT.BORDER | SWT.MULTI);
+ this.pkJoinColumnsListViewer.setContentProvider(buildJoinColumnsListContentProvider());
+ this.pkJoinColumnsListViewer.setLabelProvider(buildJoinColumnsListLabelProvider());
+ gridData = new GridData();
+ gridData.horizontalAlignment = GridData.FILL;
+ gridData.verticalAlignment = GridData.FILL;
+ gridData.verticalSpan = 3;
+ gridData.grabExcessHorizontalSpace = true;
+ gridData.grabExcessVerticalSpace = true;
+ this.pkJoinColumnsListViewer.getList().setLayoutData(gridData);
+ PlatformUI.getWorkbench().getHelpSystem().setHelp(this.pkJoinColumnsListViewer.getList(), IJpaHelpContextIds.MAPPING_JOIN_TABLE_COLUMNS);
+
+ Button addJoinColumnButton = new Button(this.pkJoinColumnsGroup, SWT.NONE);
+ addJoinColumnButton.setText(JpaUiMappingsMessages.PrimaryKeyJoinColumnsComposite_add);
+ gridData = new GridData();
+ gridData.horizontalAlignment = GridData.FILL;
+ addJoinColumnButton.setLayoutData(gridData);
+ addJoinColumnButton.addSelectionListener(new SelectionListener() {
+ public void widgetDefaultSelected(SelectionEvent e) {
+ // do nothing
+ }
+
+ public void widgetSelected(SelectionEvent e) {
+ addPrimaryKeyJoinColumn();
+ }
+ });
+
+ this.pkJoinColumnsEditButton = new Button(this.pkJoinColumnsGroup, SWT.NONE);
+ this.pkJoinColumnsEditButton.setText(JpaUiMappingsMessages.PrimaryKeyJoinColumnsComposite_edit);
+ this.pkJoinColumnsEditButton.addSelectionListener(new SelectionListener() {
+ public void widgetDefaultSelected(SelectionEvent e) {
+ // do nothing
+ }
+
+ public void widgetSelected(SelectionEvent e) {
+ editPrimaryKeyJoinColumn();
+ }
+ });
+ gridData = new GridData();
+ gridData.horizontalAlignment = GridData.FILL;
+ this.pkJoinColumnsEditButton.setLayoutData(gridData);
+
+ this.pkJoinColumnsRemoveButton = new Button(this.pkJoinColumnsGroup, SWT.NONE);
+ this.pkJoinColumnsRemoveButton.setText(JpaUiMappingsMessages.PrimaryKeyJoinColumnsComposite_remove);
+ gridData = new GridData();
+ gridData.horizontalAlignment = GridData.FILL;
+ gridData.verticalAlignment = GridData.BEGINNING;
+ this.pkJoinColumnsRemoveButton.setLayoutData(gridData);
+ this.pkJoinColumnsRemoveButton.addSelectionListener(new SelectionListener() {
+ public void widgetDefaultSelected(SelectionEvent e) {
+ // do nothing
+ }
+
+ public void widgetSelected(SelectionEvent e) {
+ removePrimaryKeyJoinColumn();
+ }
+ });
+
+ this.pkJoinColumnsListViewer.addSelectionChangedListener(new ISelectionChangedListener() {
+ public void selectionChanged(SelectionChangedEvent event) {
+ updatePrimaryKeyJoinColumnsEnablement();
+ }
+ });
+ }
+
+ private IContentProvider buildJoinColumnsListContentProvider() {
+ return new IStructuredContentProvider(){
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+ // do nothing
+ }
+
+ public void dispose() {
+ // do nothing
+ }
+
+ public Object[] getElements(Object inputElement) {
+ return ((IEntity) inputElement).getPrimaryKeyJoinColumns().toArray();
+ }
+ };
+ }
+
+ private ILabelProvider buildJoinColumnsListLabelProvider() {
+ return new LabelProvider() {
+ public String getText(Object element) {
+ IPrimaryKeyJoinColumn joinColumn = (IPrimaryKeyJoinColumn) element;
+ return (PrimaryKeyJoinColumnsComposite.this.entity.containsSpecifiedPrimaryKeyJoinColumns()) ?
+ buildJoinColumnLabel(joinColumn)
+ :
+ buildDefaultJoinColumnLabel(joinColumn);
+ }
+ };
+ }
+
+ String buildDefaultJoinColumnLabel(IPrimaryKeyJoinColumn joinColumn) {
+ return NLS.bind(JpaUiMappingsMessages.PrimaryKeyJoinColumnsComposite_mappingBetweenTwoParamsDefault, joinColumn.getName(), joinColumn.getReferencedColumnName());
+ }
+
+ String buildJoinColumnLabel(IPrimaryKeyJoinColumn joinColumn) {
+ if (joinColumn.getSpecifiedName() == null) {
+ if (joinColumn.getSpecifiedReferencedColumnName() == null) {
+ return NLS.bind(JpaUiMappingsMessages.PrimaryKeyJoinColumnsComposite_mappingBetweenTwoParamsBothDefault, joinColumn.getName(),joinColumn.getReferencedColumnName());
+ }
+ return NLS.bind(JpaUiMappingsMessages.PrimaryKeyJoinColumnsComposite_mappingBetweenTwoParamsFirstDefault, joinColumn.getName(), joinColumn.getReferencedColumnName());
+ }
+ else if (joinColumn.getSpecifiedReferencedColumnName() == null) {
+ return NLS.bind(JpaUiMappingsMessages.PrimaryKeyJoinColumnsComposite_mappingBetweenTwoParamsSecDefault, joinColumn.getName(), joinColumn.getReferencedColumnName());
+ }
+ else {
+ return NLS.bind(JpaUiMappingsMessages.PrimaryKeyJoinColumnsComposite_mappingBetweenTwoParams, joinColumn.getName(), joinColumn.getReferencedColumnName());
+ }
+ }
+
+
+ void addPrimaryKeyJoinColumn() {
+ PrimaryKeyJoinColumnDialog dialog = new PrimaryKeyJoinColumnDialog(this.getControl().getShell(), this.entity);
+ addJoinColumnFromDialog(dialog);
+ }
+
+ private void addJoinColumnFromDialog(PrimaryKeyJoinColumnDialog dialog) {
+ if (dialog.open() == Window.OK) {
+ int index = this.entity.getSpecifiedPrimaryKeyJoinColumns().size();
+ String name = dialog.getSelectedName();
+ String referencedColumnName = dialog.getReferencedColumnName();
+ IPrimaryKeyJoinColumn joinColumn = this.entity.createPrimaryKeyJoinColumn(index);
+ this.entity.getSpecifiedPrimaryKeyJoinColumns().add(joinColumn);
+ joinColumn.setSpecifiedName(name);
+ joinColumn.setSpecifiedReferencedColumnName(referencedColumnName);
+ }
+ }
+
+ private IPrimaryKeyJoinColumn getSelectedJoinColumn() {
+ return (IPrimaryKeyJoinColumn) ((StructuredSelection) this.pkJoinColumnsListViewer.getSelection()).getFirstElement();
+ }
+
+ void editPrimaryKeyJoinColumn() {
+ IPrimaryKeyJoinColumn joinColumn = getSelectedJoinColumn();
+ PrimaryKeyJoinColumnDialog dialog = new PrimaryKeyJoinColumnDialog(this.getControl().getShell(), joinColumn);
+ editJoinColumnFromDialog(dialog, joinColumn);
+ }
+
+ private void editJoinColumnFromDialog(PrimaryKeyJoinColumnDialog dialog, IPrimaryKeyJoinColumn joinColumn) {
+ if (dialog.open() == Window.OK) {
+ editJoinColumnDialogOkd(dialog, joinColumn);
+ }
+ }
+
+ private void editJoinColumnDialogOkd(PrimaryKeyJoinColumnDialog dialog, IPrimaryKeyJoinColumn joinColumn) {
+ String name = dialog.getSelectedName();
+ String referencedColumnName = dialog.getReferencedColumnName();
+
+ if (dialog.isDefaultNameSelected()) {
+ if (joinColumn.getSpecifiedName() != null) {
+ joinColumn.setSpecifiedName(null);
+ }
+ }
+ else if (joinColumn.getSpecifiedName() == null || !joinColumn.getSpecifiedName().equals(name)){
+ joinColumn.setSpecifiedName(name);
+ }
+
+ if (dialog.isDefaultReferencedColumnNameSelected()) {
+ if (joinColumn.getSpecifiedReferencedColumnName() != null) {
+ joinColumn.setSpecifiedReferencedColumnName(null);
+ }
+ }
+ else if (joinColumn.getSpecifiedReferencedColumnName() == null || !joinColumn.getSpecifiedReferencedColumnName().equals(referencedColumnName)){
+ joinColumn.setSpecifiedReferencedColumnName(referencedColumnName);
+ }
+ }
+
+ void removePrimaryKeyJoinColumn() {
+ ISelection selection = this.pkJoinColumnsListViewer.getSelection();
+ if (selection instanceof StructuredSelection) {
+ for (Iterator i = ((StructuredSelection) selection).iterator(); i.hasNext(); ) {
+ this.entity.getPrimaryKeyJoinColumns().remove(i.next());
+ }
+ }
+ }
+
+ void updatePrimaryKeyJoinColumnsEnablement() {
+ boolean groupEnabledState = this.entity.containsSpecifiedPrimaryKeyJoinColumns();
+ enableGroup(this.pkJoinColumnsGroup, groupEnabledState);
+
+ this.pkJoinColumnsRemoveButton.setEnabled(groupEnabledState && !((StructuredSelection) this.pkJoinColumnsListViewer.getSelection()).isEmpty());
+ this.pkJoinColumnsEditButton.setEnabled(groupEnabledState && ((StructuredSelection) this.pkJoinColumnsListViewer.getSelection()).size() == 1);
+ }
+
+ private void enableGroup(Group group, boolean enabled) {
+ group.setEnabled(enabled);
+ for (int i = 0; i < group.getChildren().length; i++) {
+ group.getChildren()[i].setEnabled(enabled);
+ }
+ }
+
+
+ public void doPopulate(EObject obj) {
+ this.entity = (IEntity) obj;
+ if (this.entity == null) {
+ this.pkJoinColumnsListViewer.setInput(null);
+ return;
+ }
+
+ this.pkJoinColumnsListViewer.setInput(this.entity);
+
+
+ updatePrimaryKeyJoinColumnsEnablement();
+ this.overrideDefaultJoinColumnsCheckBox.setSelection(this.entity.containsSpecifiedPrimaryKeyJoinColumns());
+ }
+
+ @Override
+ protected void doPopulate() {
+ }
+
+ protected void engageListeners() {
+ if (this.entity != null) {
+ this.entity.eAdapters().add(this.entityListener);
+ for (IPrimaryKeyJoinColumn pkJoinColumn : this.entity.getPrimaryKeyJoinColumns()) {
+ pkJoinColumn.eAdapters().add(this.pkJoinColumnListener);
+ }
+ //this.addConnectionListener();
+ }
+ }
+
+ protected void disengageListeners() {
+ if (this.entity != null) {
+ //this.removeConnectionListener();
+ for (IPrimaryKeyJoinColumn pkJoinColumn : this.entity.getPrimaryKeyJoinColumns()) {
+ pkJoinColumn.eAdapters().remove(this.pkJoinColumnListener);
+ }
+ this.entity.eAdapters().remove(this.entityListener);
+ }
+ }
+
+ protected void entityChanged(Notification notification) {
+ if (notification.getFeatureID(IEntity.class) == JpaCoreMappingsPackage.IENTITY__SPECIFIED_PRIMARY_KEY_JOIN_COLUMNS) {
+ if (notification.getEventType() == Notification.ADD) {
+ ((IPrimaryKeyJoinColumn) notification.getNewValue()).eAdapters().add(this.pkJoinColumnListener);
+ }
+ else if (notification.getEventType() == Notification.REMOVE) {
+ ((IPrimaryKeyJoinColumn) notification.getOldValue()).eAdapters().remove(this.pkJoinColumnListener);
+ }
+ Display.getDefault().asyncExec(new Runnable() {
+ public void run() {
+ pkJoinColumnsListViewer.refresh();
+ overrideDefaultJoinColumnsCheckBox.setSelection(entity.containsSpecifiedPrimaryKeyJoinColumns());
+ updatePrimaryKeyJoinColumnsEnablement();
+ }
+ });
+ }
+ }
+
+ protected void pkJoinColumnChanged(Notification notification) {
+ if (notification.getFeatureID(INamedColumn.class) == JpaCoreMappingsPackage.INAMED_COLUMN__SPECIFIED_NAME
+ || notification.getFeatureID(IAbstractJoinColumn.class) == JpaCoreMappingsPackage.IABSTRACT_JOIN_COLUMN__SPECIFIED_REFERENCED_COLUMN_NAME
+ || notification.getFeatureID(INamedColumn.class) == JpaCoreMappingsPackage.INAMED_COLUMN__DEFAULT_NAME
+ || notification.getFeatureID(IAbstractJoinColumn.class) == JpaCoreMappingsPackage.IABSTRACT_JOIN_COLUMN__DEFAULT_REFERENCED_COLUMN_NAME) {
+ Display.getDefault().asyncExec(new Runnable() {
+ public void run() {
+ if (getControl().isDisposed()) {
+ return;
+ }
+ pkJoinColumnsListViewer.refresh();
+ }
+ });
+ }
+ }
+
+
+ public void dispose() {
+ disengageListeners();
+ super.dispose();
+ }
+}

Back to the top