/* * Copyright (C) 2012 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.motorolamobility.studio.android.db.core.ui.wizards; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.viewers.DoubleClickEvent; import org.eclipse.jface.viewers.IDoubleClickListener; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.TableViewerColumn; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.layout.FillLayout; 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; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.PlatformUI; import com.motorolamobility.studio.android.db.core.DbCoreActivator; import com.motorolamobility.studio.android.db.core.i18n.DbCoreNLS; import com.motorolamobility.studio.android.db.core.model.Field; import com.motorolamobility.studio.android.db.core.model.TableModel; public class CreateTableWizardPage extends WizardPage { private TableViewer viewer; private Text tableName; private TableModel table = null; private final String TABLE_CONTEXT_HELP_ID = DbCoreActivator.PLUGIN_ID + ".create_table_wizard"; //$NON-NLS-1$ protected CreateTableWizardPage() { super(DbCoreNLS.CreateTableWizardPage_UI_PageTitle); setTitle(DbCoreNLS.CreateTableWizardPage_UI_CreateNewTable); setMessage(DbCoreNLS.CreateTableWizardPage_UI_CreateNewTableAddingItsFields); } /* * (non-Javadoc) * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite) */ public void createControl(Composite parent) { Composite composite = new Composite(parent, SWT.FILL); composite.setLayout(new GridLayout(2, false)); GridData layoutData = new GridData(SWT.FILL, SWT.NONE, true, false); Composite nameComposite = new Composite(composite, SWT.FILL); nameComposite.setLayout(new GridLayout(2, false)); nameComposite.setLayoutData(layoutData); layoutData = new GridData(SWT.LEFT, SWT.NONE, false, false); Label tableNameLabel = new Label(nameComposite, SWT.NONE); tableNameLabel.setLayoutData(layoutData); tableNameLabel.setText(DbCoreNLS.CreateTableWizardPage_UI_TableName); layoutData = new GridData(SWT.FILL, SWT.NONE, true, false); tableName = new Text(nameComposite, SWT.BORDER | SWT.SINGLE); tableName.setLayoutData(layoutData); tableName.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { if (viewer != null) { viewer.refresh(); validatePage(); ((TableModel) viewer.getInput()).setName(tableName.getText()); } } }); if ((table != null) && (table.getName() != null)) { tableName.setText(table.getName()); } Composite emptyComposite = new Composite(composite, SWT.RIGHT); emptyComposite.setLayout(new GridLayout(1, false)); emptyComposite.layout(); viewer = new TableViewer(composite, SWT.BORDER | SWT.MULTI | SWT.READ_ONLY | SWT.FULL_SELECTION); layoutData = new GridData(SWT.FILL, SWT.FILL, true, true); TableViewerColumn column = new TableViewerColumn(viewer, SWT.NONE); column.getColumn().setText(DbCoreNLS.CreateTableWizardPage_UI_Name); column.getColumn().setResizable(true); column.getColumn().setWidth(100); column = new TableViewerColumn(viewer, SWT.NONE); column.getColumn().setText(DbCoreNLS.CreateTableWizardPage_UI_Type); column.getColumn().setResizable(true); column.getColumn().setWidth(100); column = new TableViewerColumn(viewer, SWT.NONE); column.getColumn().setText(DbCoreNLS.CreateTableWizardPage_UI_Default); column.getColumn().setResizable(true); column.getColumn().setWidth(100); column = new TableViewerColumn(viewer, SWT.NONE); column.getColumn().setText(DbCoreNLS.CreateTableWizardPage_UI_Primary); column.getColumn().setResizable(true); column.getColumn().setWidth(100); viewer.getTable().setHeaderVisible(true); viewer.getTable().setLinesVisible(true); viewer.getTable().setLayoutData(layoutData); viewer.setContentProvider(new TableWizardContentProvider()); viewer.setLabelProvider(new TableWizardLabelProvider()); Composite buttonBar = new Composite(composite, SWT.NONE); layoutData = new GridData(SWT.RIGHT, SWT.TOP, false, true); buttonBar.setLayoutData(layoutData); buttonBar.setLayout(new FillLayout(SWT.VERTICAL)); Button add = new Button(buttonBar, SWT.PUSH); add.setText(DbCoreNLS.CreateTableWizardPage_UI_Add); add.addSelectionListener(new SelectionListener() { public void widgetSelected(SelectionEvent e) { AddTableFieldDialog diag = new AddTableFieldDialog(getShell()); if (diag.open() == Dialog.OK) { ((TableModel) viewer.getInput()).addField(diag.getField()); viewer.refresh(); validatePage(); } } public void widgetDefaultSelected(SelectionEvent e) { } }); final Button edit = new Button(buttonBar, SWT.PUSH); edit.setText(DbCoreNLS.CreateTableWizardPage_UI_Edit); edit.setEnabled(false); edit.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { if (viewer.getTable().getSelectionCount() == 1) { AddTableFieldDialog diag = new AddTableFieldDialog(getShell(), ((TableModel) viewer.getInput()) .getFields().get(viewer.getTable().getSelectionIndex())); if (diag.open() == Dialog.OK) { viewer.update(diag.getField(), null); validatePage(); } } } }); final Button remove = new Button(buttonBar, SWT.PUSH); remove.setText(DbCoreNLS.CreateTableWizardPage_UI_Remove); remove.setEnabled(false); remove.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { ISelection selection = viewer.getSelection(); if (selection instanceof IStructuredSelection) { IStructuredSelection structuredSelection = (IStructuredSelection) selection; for (Object obj : structuredSelection.toList()) { if (obj instanceof Field) { ((TableModel) viewer.getInput()).removeField(((Field) obj)); } } viewer.refresh(); validatePage(); } } }); if (table == null) { table = new TableModel(); } viewer.setInput(table); viewer.addSelectionChangedListener(new ISelectionChangedListener() { public void selectionChanged(SelectionChangedEvent event) { int selectionCount = viewer.getTable().getSelectionCount(); remove.setEnabled(selectionCount > 0); edit.setEnabled(selectionCount == 1); } }); viewer.addDoubleClickListener(new IDoubleClickListener() { public void doubleClick(DoubleClickEvent event) { if (viewer.getTable().getSelectionCount() == 1) { AddTableFieldDialog diag = new AddTableFieldDialog(getShell(), ((TableModel) viewer.getInput()) .getFields().get(viewer.getTable().getSelectionIndex())); if (diag.open() == Dialog.OK) { viewer.update(diag.getField(), null); validatePage(); } } } }); viewer.refresh(); composite.pack(); composite.layout(); setPageComplete(false); setErrorMessage(null); setControl(composite); //table fields will be not empty at this point when user is editing a table, so page must be validated to enable finish button if (!table.getFields().isEmpty()) { validatePage(); } PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, TABLE_CONTEXT_HELP_ID); PlatformUI.getWorkbench().getHelpSystem().setHelp(composite, TABLE_CONTEXT_HELP_ID); } public void setTable(TableModel table) { this.table = table; } public TableModel getTable() { return table; } public String getTableName() { return tableName.getText(); } private void validatePage() { String errMsg = null; if (tableName.getText().trim().length() == 0) { errMsg = DbCoreNLS.CreateTableWizardPage_UI_TableNameCannotBeEmpty; } if (((errMsg == null) && (tableName.getText().trim().contains(" ")))) //$NON-NLS-1$ { errMsg = DbCoreNLS.CreateTableWizardPage_UI_InvalidTableName; } // Validate table name to don't use sqlite keyword if (!TableModel.validateName(tableName.getText())) { errMsg = DbCoreNLS.CreateTableWizardPage_UI_InvalidTableName; } if ((errMsg == null) && (viewer.getTable().getItemCount() == 0)) { errMsg = DbCoreNLS.CreateTableWizardPage_UI_YouMustSupplyAtLeastOneField; } if (errMsg == null) { errMsg = ((TableModel) viewer.getInput()).getErrorMessage(); } setErrorMessage(errMsg); setPageComplete(errMsg == null); } }