| /******************************************************************************* |
| * Copyright (c) 2006, 2007 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.jface.dialogs.Dialog; |
| import org.eclipse.jpt.core.internal.mappings.IAbstractJoinColumn; |
| import org.eclipse.jpt.db.internal.Table; |
| import org.eclipse.jpt.ui.internal.IJpaHelpContextIds; |
| import org.eclipse.jpt.ui.internal.mappings.JptUiMappingsMessages; |
| import org.eclipse.osgi.util.NLS; |
| import org.eclipse.swt.SWT; |
| import org.eclipse.swt.layout.GridData; |
| import org.eclipse.swt.layout.GridLayout; |
| import org.eclipse.swt.widgets.Combo; |
| import org.eclipse.swt.widgets.Composite; |
| import org.eclipse.swt.widgets.Control; |
| import org.eclipse.swt.widgets.Label; |
| import org.eclipse.swt.widgets.Shell; |
| import org.eclipse.ui.PlatformUI; |
| |
| //if there is only 1 joinColumn and the user is editing it, they should be |
| //able to define defaults. otherwise, we probably shouldn't allow it. |
| public abstract class AbstractJoinColumnDialog<E extends IAbstractJoinColumn> extends Dialog { |
| |
| //if creating a new JoinColumn, this will be null, |
| //specify the JoinColumnOwner instead in the appropriate construtor |
| private E joinColumn; |
| |
| private Combo nameCombo; |
| private Combo referencedColumnNameCombo; |
| |
| private boolean defaultNameSelected; |
| private String selectedName; |
| private boolean defaultReferencedColumnNameSelected; |
| private String selectedReferencedColumnName; |
| |
| AbstractJoinColumnDialog(Shell parent) { |
| super(parent); |
| } |
| |
| AbstractJoinColumnDialog(Shell parent, E joinColumn) { |
| super(parent); |
| this.joinColumn = joinColumn; |
| } |
| |
| protected void configureShell(Shell shell) { |
| super.configureShell(shell); |
| shell.setText(getTitle()); |
| } |
| |
| protected String getTitle() { |
| return JptUiMappingsMessages.JoinColumnDialog_editJoinColumn; |
| } |
| |
| protected Control createDialogArea(Composite parent) { |
| Composite composite = (Composite) super.createDialogArea(parent); |
| GridLayout gridLayout = (GridLayout) composite.getLayout(); |
| gridLayout.numColumns = 2; |
| |
| Label nameLabel = new Label(composite, SWT.LEFT); |
| nameLabel.setText(JptUiMappingsMessages.JoinColumnDialog_name); |
| GridData gridData = new GridData(); |
| nameLabel.setLayoutData(gridData); |
| |
| this.nameCombo = new Combo(composite, SWT.LEFT); |
| gridData = new GridData(); |
| gridData.grabExcessHorizontalSpace = true; |
| gridData.horizontalAlignment = SWT.FILL; |
| this.nameCombo.setLayoutData(gridData); |
| PlatformUI.getWorkbench().getHelpSystem().setHelp(this.nameCombo, IJpaHelpContextIds.MAPPING_JOIN_COLUMN_NAME); |
| populateNameCombo(); |
| |
| Label referencedColumnNameLabel = new Label(composite, SWT.LEFT); |
| referencedColumnNameLabel.setText(JptUiMappingsMessages.JoinColumnDialog_referencedColumnName); |
| gridData = new GridData(); |
| referencedColumnNameLabel.setLayoutData(gridData); |
| |
| this.referencedColumnNameCombo = new Combo(composite, SWT.LEFT); |
| gridData = new GridData(); |
| gridData.grabExcessHorizontalSpace = true; |
| gridData.horizontalAlignment = SWT.FILL; |
| this.referencedColumnNameCombo.setLayoutData(gridData); |
| PlatformUI.getWorkbench().getHelpSystem().setHelp(this.referencedColumnNameCombo, IJpaHelpContextIds.MAPPING_JOIN_REFERENCED_COLUMN); |
| populateReferencedNameCombo(); |
| |
| return composite; |
| } |
| |
| protected void populateNameCombo() { |
| this.nameCombo.removeAll(); |
| if (getJoinColumn() != null) { |
| this.nameCombo.add(NLS.bind(JptUiMappingsMessages.JoinColumnDialog_defaultWithOneParam, getJoinColumn().getDefaultName())); |
| } |
| Table table = getNameTable(); |
| if (table != null) { |
| for (Iterator i = table.columnNames(); i.hasNext(); ) { |
| this.nameCombo.add((String) i.next()); |
| } |
| } |
| if (getJoinColumn() != null) { |
| if (getJoinColumn().getSpecifiedName() != null) { |
| this.nameCombo.setText(getJoinColumn().getSpecifiedName()); |
| } |
| else { |
| this.nameCombo.select(0); |
| } |
| } |
| } |
| |
| protected Combo getNameCombo() { |
| return this.nameCombo; |
| } |
| |
| protected Combo getReferencedColumnNameCombo() { |
| return this.referencedColumnNameCombo; |
| } |
| |
| protected abstract Table getNameTable(); |
| |
| protected abstract Table getReferencedNameTable(); |
| |
| protected void populateReferencedNameCombo() { |
| if (getJoinColumn() != null) { |
| this.referencedColumnNameCombo.add(NLS.bind(JptUiMappingsMessages.JoinColumnDialog_defaultWithOneParam, getJoinColumn().getDefaultReferencedColumnName())); |
| } |
| Table referencedNameTable = getReferencedNameTable(); |
| if (referencedNameTable != null) { |
| for (Iterator i = referencedNameTable.columnNames(); i.hasNext(); ) { |
| this.referencedColumnNameCombo.add((String) i.next()); |
| } |
| } |
| if (getJoinColumn() != null) { |
| if (getJoinColumn().getSpecifiedReferencedColumnName() != null) { |
| this.referencedColumnNameCombo.setText(getJoinColumn().getSpecifiedReferencedColumnName()); |
| } |
| else { |
| this.referencedColumnNameCombo.select(0); |
| } |
| } |
| } |
| |
| protected E getJoinColumn() { |
| return this.joinColumn; |
| } |
| |
| protected boolean isDefaultNameSelected() { |
| return this.defaultNameSelected; |
| } |
| |
| protected String getSelectedName() { |
| return this.selectedName; |
| } |
| |
| protected boolean isDefaultReferencedColumnNameSelected() { |
| return this.defaultReferencedColumnNameSelected; |
| } |
| |
| protected String getReferencedColumnName() { |
| return this.selectedReferencedColumnName; |
| } |
| |
| public boolean close() { |
| this.defaultNameSelected = this.nameCombo.getSelectionIndex() == 0; |
| this.selectedName = this.nameCombo.getText(); |
| this.defaultReferencedColumnNameSelected = this.referencedColumnNameCombo.getSelectionIndex() == 0; |
| this.selectedReferencedColumnName = this.referencedColumnNameCombo.getText(); |
| return super.close(); |
| } |
| |
| } |