package org.objectstyle.wolips.eomodeler.actions; import java.util.List; import java.util.Set; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.viewers.ComboViewer; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.StructuredSelection; 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.Control; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; import org.objectstyle.wolips.baseforuiplugins.utils.ErrorUtils; import org.objectstyle.wolips.eomodeler.actions.GenerateSQLDialog.DatabaseConfigContentProvider; import org.objectstyle.wolips.eomodeler.actions.GenerateSQLDialog.DatabaseConfigLabelProvider; import org.objectstyle.wolips.eomodeler.core.model.EODatabaseConfig; import org.objectstyle.wolips.eomodeler.core.model.EOEntity; import org.objectstyle.wolips.eomodeler.core.model.EOModel; import org.objectstyle.wolips.eomodeler.core.sql.MigrationGenerator; public class GenerateMigrationDialog extends Dialog { private Button _createSelectedEntitiesButton; private Text _migrationText; private EOModel _model; private List<EOEntity> _entities; private Set<EODatabaseConfig> _databaseConfigs; private ComboViewer _databaseConfigComboViewer; private FlagChangedHandler _flagChangeHander; public GenerateMigrationDialog(Shell parentShell, EOModel model, List<EOEntity> entities) { super(parentShell); setShellStyle(getShellStyle() | SWT.RESIZE); _model = model; _entities = entities; _flagChangeHander = new FlagChangedHandler(); } protected void configureShell(Shell newShell) { super.configureShell(newShell); newShell.setText("Migration Generation"); } protected Control createDialogArea(Composite parent) { Composite control = (Composite) super.createDialogArea(parent); GridLayout layout = new GridLayout(1, true); layout.marginTop = 10; layout.marginLeft = 10; layout.marginRight = 10; layout.numColumns = 1; control.setLayout(layout); _databaseConfigs = _model.getDatabaseConfigs(); if (_databaseConfigs.size() > 1) { _databaseConfigComboViewer = new ComboViewer(control, SWT.READ_ONLY); GridData extraInfoData = new GridData(GridData.FILL_HORIZONTAL); // extraInfoData.horizontalSpan = 2; _databaseConfigComboViewer.setContentProvider(new DatabaseConfigContentProvider()); _databaseConfigComboViewer.setLabelProvider(new DatabaseConfigLabelProvider()); _databaseConfigComboViewer.setInput(_databaseConfigs); _databaseConfigComboViewer.getCombo().setLayoutData(extraInfoData); EODatabaseConfig activeDatabaseConfig = _model.getActiveDatabaseConfig(); if (activeDatabaseConfig != null) { _databaseConfigComboViewer.setSelection(new StructuredSelection(activeDatabaseConfig)); } else { _databaseConfigComboViewer.setSelection(new StructuredSelection(_databaseConfigs.iterator().next())); } _databaseConfigComboViewer.addSelectionChangedListener(_flagChangeHander); } int entityCount = (_entities != null) ? _entities.size() : 0; _createSelectedEntitiesButton = new Button(control, SWT.CHECK); _createSelectedEntitiesButton.setText("Create Only Selected Entities"); _createSelectedEntitiesButton.setSelection(entityCount > 0); _createSelectedEntitiesButton.addSelectionListener(_flagChangeHander); _createSelectedEntitiesButton.setEnabled(entityCount > 0); // new Label(control, SWT.NONE); _migrationText = new Text(control, SWT.BORDER | SWT.MULTI | SWT.READ_ONLY | SWT.V_SCROLL); GridData sqlTextData = new GridData(GridData.FILL_BOTH); sqlTextData.heightHint = 300; sqlTextData.widthHint = 700; sqlTextData.verticalIndent = 10; sqlTextData.horizontalSpan = 2; _migrationText.setLayoutData(sqlTextData); _migrationText.setText("Generating Migration. Please Wait ..."); generateMigration(); return control; } protected Control createButtonBar(Composite parent) { Composite composite = new Composite(parent, SWT.NONE); GridLayout layout = new GridLayout(); layout.numColumns = 1; layout.makeColumnsEqualWidth = true; layout.marginWidth = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN); layout.marginHeight = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN); layout.horizontalSpacing = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING); layout.verticalSpacing = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_SPACING); composite.setLayout(layout); GridData data = new GridData(GridData.HORIZONTAL_ALIGN_END | GridData.VERTICAL_ALIGN_CENTER); composite.setLayoutData(data); composite.setFont(parent.getFont()); Button closeButton = new Button(composite, SWT.PUSH); closeButton.setText("Close"); closeButton.addSelectionListener(new CloseHandler()); getShell().setDefaultButton(closeButton); return composite; } protected String yesNo(Button button) { return (button.getSelection()) ? "YES" : "NO"; } protected Text getMigrationText() { return _migrationText; } protected EODatabaseConfig getSelectedDatabaseConfig() { EODatabaseConfig selectedDatabaseConfig = null; if (_databaseConfigComboViewer != null) { IStructuredSelection selection = (IStructuredSelection) _databaseConfigComboViewer.getSelection(); selectedDatabaseConfig = (EODatabaseConfig) selection.getFirstElement(); } else { selectedDatabaseConfig = _model.getActiveDatabaseConfig(); } return selectedDatabaseConfig; } public void generateMigration() { try { List<EOEntity> entities = _createSelectedEntitiesButton.getSelection() ? _entities : null; String migrationText = MigrationGenerator.generate(_model, entities); getMigrationText().setText(migrationText); } catch (final Throwable t) { Display.getDefault().syncExec(new Runnable() { public void run() { getMigrationText().setText("Migration Failed."); } }); ErrorUtils.openErrorDialog(getShell(), t); } } protected String getMigrationString() { return _migrationText.getText(); } public class FlagChangedHandler implements SelectionListener, ISelectionChangedListener { public void widgetDefaultSelected(SelectionEvent event) { widgetSelected(event); } public void widgetSelected(SelectionEvent event) { GenerateMigrationDialog.this.generateMigration(); } public void selectionChanged(SelectionChangedEvent event) { GenerateMigrationDialog.this.generateMigration(); } } public class CloseHandler implements SelectionListener { public void widgetDefaultSelected(SelectionEvent event) { widgetSelected(event); } public void widgetSelected(SelectionEvent event) { GenerateMigrationDialog.this.close(); } } }