blob: e3680580c7a3bbb1b56d02fcb60c3ce923944ca4 [file] [log] [blame]
/*
* 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);
}
}