Skip to main content
summaryrefslogblamecommitdiffstats
blob: 45c9aad968523021e853260c377bcff6f9c28505 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12
                                                                                
                                                        









                                                                                

                                                     
                                                     
































                                                                                                             
                                                                                                                            















































































































                                                                                                                                
/*******************************************************************************
 * Copyright (c) 2007, 2009 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.wizards.gen;

import org.eclipse.jpt.gen.internal.Association;
import org.eclipse.jpt.gen.internal.ORMGenCustomizer;
import org.eclipse.jpt.ui.internal.JpaHelpContextIds;
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.Label;


public class CardinalityPage extends NewAssociationWizardPage {

	private Label mtoDescLabel;
	private Label otmDescLabel;
	private Label otoDescLabel;
	private Label mtmDescLabel;
	
	private Button[] cardinalityButtons = new Button[4];
	
	protected CardinalityPage(ORMGenCustomizer customizer) {
		super( customizer , "CardinalityPage" );
		setTitle(JptUiEntityGenMessages.GenerateEntitiesWizard_newAssoc_cardinalityPage_title);
		setDescription( JptUiEntityGenMessages.GenerateEntitiesWizard_newAssoc_cardinalityPage_desc);
	}

	public void createControl(Composite parent) {
		initializeDialogUnits(parent);
		
		Composite composite = new Composite(parent, SWT.NULL);
		int nColumns= 1 ;
		GridLayout layout = new GridLayout();
		layout.numColumns = nColumns;
		composite.setLayout(layout);
		this.getHelpSystem().setHelp(composite, JpaHelpContextIds.GENERATE_ENTITIES_WIZARD_ASSOCIATION_CARDINALITY);

		CardinalitySelectionListener selectionListener = new CardinalitySelectionListener();
		cardinalityButtons[0] = createRadioButton( composite, 1, JptUiEntityGenMessages.manyToOne);
		cardinalityButtons[0].addSelectionListener( selectionListener );
		//Default cardinality is MTO
		cardinalityButtons[0].setSelection(true);
		getWizardDataModel().put(NewAssociationWizard.ASSOCIATION_CADINALITY, Association.MANY_TO_ONE);		

		mtoDescLabel = createLabel(composite,1, JptUiEntityGenMessages.manyToOneDesc);
		
		cardinalityButtons[1] = createRadioButton( composite, 1, JptUiEntityGenMessages.oneToMany);
		cardinalityButtons[1].addSelectionListener( selectionListener );
		
		otmDescLabel = createLabel(composite,1, JptUiEntityGenMessages.manyToOneDesc);

		cardinalityButtons[2] = createRadioButton( composite, 1, JptUiEntityGenMessages.oneToOne);
		cardinalityButtons[2].addSelectionListener( selectionListener );

		otoDescLabel = createLabel(composite,1, JptUiEntityGenMessages.oneToOneDesc);

		cardinalityButtons[3] = createRadioButton( composite, 1, JptUiEntityGenMessages.manyToMany);
		mtmDescLabel= createLabel(composite,1, JptUiEntityGenMessages.manyToManyDesc);
		
		setControl(composite);
		this.setPageComplete( true );

		cardinalityButtons[0].setFocus();

	}

	public void updateWithNewTables() {
		String s1 = getReferrerTableName() ;
		String s2 = getReferencedTableName() ;
		String joinTableName = getJoinTableName();
		if( s1 == null || s2 == null )
			return ;
		
		updateDescriptionText(s1, s2);
		if( joinTableName == null ){
			cardinalityButtons[0].setEnabled(true);
			cardinalityButtons[1].setEnabled(true);
			cardinalityButtons[2].setEnabled(true);
			cardinalityButtons[3].setEnabled(false);
			mtmDescLabel.setEnabled(false);
		}else{
			cardinalityButtons[0].setEnabled(false);
			cardinalityButtons[1].setEnabled(false);
			cardinalityButtons[2].setEnabled(false);
			cardinalityButtons[3].setEnabled(true);
			cardinalityButtons[3].setSelection(true);
			mtmDescLabel.setEnabled(true);
		}
		((Composite)this.getControl()).layout() ;
	}

	private void updateDescriptionText(String s1, String s2) {
		//MTO
		String msg = String.format(JptUiEntityGenMessages.manyToOneDesc, s2, s1);
		mtoDescLabel.setText( msg );
		//OTM
		msg = String.format(JptUiEntityGenMessages.manyToOneDesc, s1, s2);
		otmDescLabel.setText( msg );
		msg = String.format(JptUiEntityGenMessages.oneToOneDesc, s1, s2);
		otoDescLabel.setText( msg );
		msg = String.format(JptUiEntityGenMessages.manyToManyDesc, s1, s2, s2, s1);
		mtmDescLabel.setText( msg );
	}

	public boolean canFlipToNextPage() {
		return false;
	}
	
	private Label createLabel(Composite container, int span, String text) {
		Label label = new Label(container, SWT.NONE);
		label.setText(text);
		GridData gd = new GridData();
		gd.horizontalSpan = span;
		gd.horizontalIndent = 30;
		label.setLayoutData(gd);
		return label;
	}
	
	
	private Button createRadioButton(Composite container, int span, String text ) {
		Button btn = new Button(container, SWT.RADIO );
		btn.setText(text);
		GridData gd = new GridData();
		gd.horizontalSpan = span;
		btn.setLayoutData(gd);
		return btn;
	}
	

	private class CardinalitySelectionListener implements SelectionListener {
		public void widgetDefaultSelected(SelectionEvent e) {}
	
		public void widgetSelected(SelectionEvent e) {
			if( e.getSource() == cardinalityButtons[0]){
				getWizardDataModel().put(NewAssociationWizard.ASSOCIATION_CADINALITY, Association.MANY_TO_ONE);
			}else if( e.getSource() == cardinalityButtons[1]){
				getWizardDataModel().put(NewAssociationWizard.ASSOCIATION_CADINALITY, Association.ONE_TO_MANY );
			}else if( e.getSource() == cardinalityButtons[2]){
				getWizardDataModel().put(NewAssociationWizard.ASSOCIATION_CADINALITY, Association.ONE_TO_ONE);
			}else{
				getWizardDataModel().put(NewAssociationWizard.ASSOCIATION_CADINALITY, Association.MANY_TO_MANY);
			}
			CardinalityPage.this.setPageComplete(true);
			
		}
	}
	
}

Back to the top