/* | |
* 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.motorola.studio.android.codeutils.codegeneration; | |
import java.util.Arrays; | |
import java.util.Collection; | |
import org.eclipse.datatools.modelbase.sql.tables.Column; | |
import org.eclipse.emf.common.util.BasicEList; | |
import org.eclipse.emf.common.util.EList; | |
import org.eclipse.jface.dialogs.IPageChangeProvider; | |
import org.eclipse.jface.dialogs.IPageChangedListener; | |
import org.eclipse.jface.dialogs.PageChangedEvent; | |
import org.eclipse.jface.viewers.ArrayContentProvider; | |
import org.eclipse.jface.viewers.CheckStateChangedEvent; | |
import org.eclipse.jface.viewers.CheckboxTableViewer; | |
import org.eclipse.jface.viewers.ICheckStateListener; | |
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.layout.RowLayout; | |
import org.eclipse.swt.widgets.Button; | |
import org.eclipse.swt.widgets.Composite; | |
import org.eclipse.ui.PlatformUI; | |
import com.motorola.studio.android.codeutils.CodeUtilsActivator; | |
import com.motorola.studio.android.codeutils.i18n.CodeUtilsNLS; | |
import com.motorola.studio.android.common.exception.AndroidException; | |
import com.motorola.studio.android.common.utilities.AndroidUtils; | |
import com.motorola.studio.android.model.ActivityBasedOnTemplate; | |
import com.motorola.studio.android.wizards.buildingblocks.Method; | |
import com.motorola.studio.android.wizards.buildingblocks.NewLauncherWizardPage; | |
/** | |
* Wizard page to create the columns of databases under create activities based on database samples wizard page context. | |
* */ | |
public class CreateSampleDatabaseActivityColumnsPage extends NewLauncherWizardPage | |
{ | |
/** | |
* Help id of the page. | |
* */ | |
public static final String PAGE_HELP_ID = CodeUtilsActivator.PLUGIN_ID + ".selectcolumnspage"; | |
private boolean firstLoad = true; | |
private String previousSelectedTableName = ""; | |
private CheckboxTableViewer checkboxTableViewer; | |
/** | |
* Default constructor. | |
* </br></br> | |
* Creates a new instance using {@link com.motorola.studio.android.wizards.buildingblocks.NewLauncherWizardPage#NewLauncherWizardPage(com.motorola.studio.android.model.BuildingBlockModel,java.lang.String) NewLauncherWizardPage(BuildingBlockModel, String)} | |
* and passing {@code null} and {@link CodeUtilsNLS#UI_CreateSampleDatabaseActivityColumnsPageName Page name} as arguments. | |
*/ | |
public CreateSampleDatabaseActivityColumnsPage() | |
{ | |
super(null, CodeUtilsNLS.UI_CreateSampleDatabaseActivityColumnsPageName); | |
} | |
/** | |
* Creates a new instance using {@link com.motorola.studio.android.wizards.buildingblocks.NewLauncherWizardPage#NewLauncherWizardPage(com.motorola.studio.android.model.BuildingBlockModel,java.lang.String) NewLauncherWizardPage(BuildingBlockModel, String)} | |
* and passing {@code activity} and {@link CodeUtilsNLS#UI_CreateSampleDatabaseActivityColumnsPageName Page name} as arguments. | |
* | |
* @param activity an {@code com.motorola.studio.android.model.ActivityBasedOnTemplate} to be used as the building block model. | |
*/ | |
public CreateSampleDatabaseActivityColumnsPage(ActivityBasedOnTemplate activity) | |
{ | |
super(activity, CodeUtilsNLS.UI_CreateSampleDatabaseActivityColumnsPageName); | |
} | |
/* (non-Javadoc) | |
* @see com.motorola.studio.android.wizards.buildingblocks.NewBuildingBlocksWizardPage#createIntermediateControls(org.eclipse.swt.widgets.Composite) | |
*/ | |
@Override | |
protected void createExtendedControls(Composite parent) | |
{ | |
Composite mainComposite = new Composite(parent, SWT.NONE); | |
mainComposite.setLayout(new GridLayout()); | |
mainComposite.setLayoutData(new GridData(GridData.FILL_BOTH)); | |
Composite composite = new Composite(mainComposite, SWT.NONE); | |
composite.setLayout(new GridLayout()); | |
composite.setLayoutData(new GridData(GridData.FILL_BOTH)); | |
// Create a checkbox table viewer | |
checkboxTableViewer = | |
CheckboxTableViewer.newCheckList(composite, SWT.MULTI | SWT.BORDER | SWT.V_SCROLL); | |
checkboxTableViewer.getControl() | |
.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); | |
// Set a content and label provider | |
checkboxTableViewer.setLabelProvider(new SampleDatabaseActivityColumnsPageLabelProvider()); | |
checkboxTableViewer.setContentProvider(new ArrayContentProvider()); | |
// Add a listener to the table viewer | |
checkboxTableViewer.addCheckStateListener(new CheckboxTableViewerListener()); | |
// Add a listener to the wizard to listen for page changes | |
if (getContainer() instanceof IPageChangeProvider) | |
{ | |
((IPageChangeProvider) getContainer()).addPageChangedListener(new PageChangeListener()); | |
} | |
Composite buttonsComposite = new Composite(mainComposite, SWT.NONE); | |
buttonsComposite.setLayout(new RowLayout(SWT.HORIZONTAL)); | |
// Create buttons to select and deselect all items | |
Button selectAllButton = new Button(buttonsComposite, SWT.PUSH | SWT.CENTER); | |
selectAllButton | |
.setText(CodeUtilsNLS.UI_CreateSampleDatabaseActivityColumnsPage_SelectAllButton); | |
selectAllButton.addSelectionListener(new SelectAllButtonListener()); | |
Button unselectAllButton = new Button(buttonsComposite, SWT.PUSH | SWT.CENTER); | |
unselectAllButton | |
.setText(CodeUtilsNLS.UI_CreateSampleDatabaseActivityColumnsPage_DeselectAllButton); | |
unselectAllButton.addSelectionListener(new DeselectAllButtonLister()); | |
PlatformUI.getWorkbench().getHelpSystem().setHelp(mainComposite, PAGE_HELP_ID); | |
setControl(mainComposite); | |
} | |
/* (non-Javadoc) | |
* @see com.motorola.studio.android.wizards.buildingblocks.NewLauncherWizardPage#getIntentFiltersActions() | |
*/ | |
@Override | |
protected String[] getIntentFiltersActions() | |
{ | |
String[] intentFiltersActions = new String[0]; | |
try | |
{ | |
intentFiltersActions = AndroidUtils.getActivityActions(getBuildBlock().getProject()); | |
} | |
catch (AndroidException e) | |
{ | |
setErrorMessage(e.getMessage()); | |
} | |
return intentFiltersActions; | |
} | |
/* (non-Javadoc) | |
* @see com.motorola.studio.android.wizards.buildingblocks.NewBuildingBlocksWizardPage#getDefaultMessage() | |
*/ | |
@Override | |
public String getDefaultMessage() | |
{ | |
return CodeUtilsNLS.UI_CreateSampleDatabaseActivityColumnsPage_Default_Message; | |
} | |
/* (non-Javadoc) | |
* @see com.motorola.studio.android.wizards.buildingblocks.NewBuildingBlocksWizardPage#getHelpId() | |
*/ | |
@Override | |
protected String getHelpId() | |
{ | |
return PAGE_HELP_ID; | |
} | |
/* (non-Javadoc) | |
* @see com.motorola.studio.android.wizards.buildingblocks.NewBuildingBlocksWizardPage#getMethods() | |
*/ | |
@Override | |
protected Method[] getMethods() | |
{ | |
return null; | |
} | |
/* (non-Javadoc) | |
* @see com.motorola.studio.android.wizards.buildingblocks.NewBuildingBlocksWizardPage#getWizardTitle() | |
*/ | |
@Override | |
public String getWizardTitle() | |
{ | |
return CodeUtilsNLS.UI_ActivityWizard_Title; | |
} | |
/*(non-Javadoc) | |
* @see com.motorola.studio.android.wizards.buildingblocks.NewBuildingBlocksWizardPage#canFlipToNextPage() | |
* */ | |
@Override | |
public boolean canFlipToNextPage() | |
{ | |
return (getErrorMessage() == null) && (checkboxTableViewer.getCheckedElements().length > 0); | |
} | |
/** | |
* @return True if page has header. Otherwise, returns false. | |
*/ | |
@Override | |
public boolean hasHeader() | |
{ | |
return false; | |
} | |
private class CheckboxTableViewerListener implements ICheckStateListener | |
{ | |
/* (non-Javadoc) | |
* @see org.eclipse.jface.viewers.ICheckStateListener#checkStateChanged(org.eclipse.jface.viewers.CheckStateChangedEvent) | |
*/ | |
public void checkStateChanged(CheckStateChangedEvent event) | |
{ | |
// Check if there are checked elements or not | |
if (checkboxTableViewer.getCheckedElements().length > 0) | |
{ | |
// Update list of columns in the Activity according to event | |
// Get the element changed | |
if (event.getElement() instanceof Column) | |
{ | |
Column changedElement = (Column) event.getElement(); | |
if (event.getChecked()) | |
{ | |
// Add element to the list | |
((ActivityBasedOnTemplate) getBuildBlock()).getCollectorColumnList().add( | |
changedElement); | |
} | |
else | |
{ | |
// Remove element from the list | |
((ActivityBasedOnTemplate) getBuildBlock()).getCollectorColumnList() | |
.remove(changedElement); | |
} | |
// Wizard can finish | |
((ActivityBasedOnTemplate) getBuildBlock()) | |
.setUseSampleDatabaseTableSelected(true); | |
} | |
} | |
else | |
{ | |
// Wizard cannot finish | |
((ActivityBasedOnTemplate) getBuildBlock()) | |
.setUseSampleDatabaseTableSelected(false); | |
// Remove all columns from the collection | |
((ActivityBasedOnTemplate) getBuildBlock()).getCollectorColumnList().clear(); | |
} | |
getWizard().getContainer().updateButtons(); | |
} | |
} | |
/** | |
* Listener to verify when this page is visible. | |
*/ | |
private class PageChangeListener implements IPageChangedListener | |
{ | |
/* | |
* (non-Javadoc) | |
* | |
* @see | |
* org.eclipse.jface.dialogs.IPageChangedListener#pageChanged(org.eclipse | |
* .jface.dialogs.PageChangedEvent) | |
*/ | |
@SuppressWarnings("unchecked") | |
public void pageChanged(PageChangedEvent event) | |
{ | |
if ((event.getSelectedPage() == CreateSampleDatabaseActivityColumnsPage.this)) | |
{ | |
// Retrieve the collection of columns from the selected table | |
EList<Column> columnList = new BasicEList<Column>(); | |
String currentTableName = ""; | |
if (((ActivityBasedOnTemplate) getBuildBlock()).getCollectorTable() != null) | |
{ | |
currentTableName = | |
((ActivityBasedOnTemplate) getBuildBlock()).getCollectorTable() | |
.getName(); | |
columnList = | |
((ActivityBasedOnTemplate) getBuildBlock()).getCollectorTable() | |
.getColumns(); | |
} | |
checkboxTableViewer.setInput(columnList.toArray(new Column[0])); | |
if (firstLoad || (!currentTableName.equals(previousSelectedTableName))) | |
{ | |
selectAllItems(); | |
} | |
previousSelectedTableName = currentTableName; | |
firstLoad = false; | |
} | |
} | |
} | |
/** | |
* Listener for the select all button. | |
*/ | |
private class SelectAllButtonListener implements SelectionListener | |
{ | |
/* (non-Javadoc) | |
* @see org.eclipse.swt.events.SelectionListener#widgetDefaultSelected(org.eclipse.swt.events.SelectionEvent) | |
*/ | |
public void widgetDefaultSelected(SelectionEvent e) | |
{ | |
// do nothing | |
} | |
/* (non-Javadoc) | |
* @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent) | |
*/ | |
public void widgetSelected(SelectionEvent e) | |
{ | |
selectAllItems(); | |
} | |
} | |
/** | |
* Select all items in {@link CreateSampleDatabaseActivityColumnsPage#checkboxTableViewer checkboxTableViewer}. | |
*/ | |
@SuppressWarnings("unchecked") | |
private void selectAllItems() | |
{ | |
// Make all the items in the list selected | |
checkboxTableViewer.setAllChecked(true); | |
// Add elements to the list | |
((ActivityBasedOnTemplate) getBuildBlock()).getCollectorColumnList().addAll( | |
(Collection<? extends Column>) Arrays.asList(checkboxTableViewer | |
.getCheckedElements())); | |
// Wizard can finish | |
((ActivityBasedOnTemplate) getBuildBlock()).setUseSampleDatabaseTableSelected(true); | |
getWizard().getContainer().updateButtons(); | |
} | |
/** | |
* Listener for the deselect all button. | |
*/ | |
private class DeselectAllButtonLister implements SelectionListener | |
{ | |
/* (non-Javadoc) | |
* @see org.eclipse.swt.events.SelectionListener#widgetDefaultSelected(org.eclipse.swt.events.SelectionEvent) | |
*/ | |
public void widgetDefaultSelected(SelectionEvent e) | |
{ | |
// do nothing | |
} | |
/* (non-Javadoc) | |
* @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent) | |
*/ | |
public void widgetSelected(SelectionEvent e) | |
{ | |
// Make all the items in the list deselected | |
checkboxTableViewer.setAllChecked(false); | |
// Clear collection of columns | |
((ActivityBasedOnTemplate) getBuildBlock()).getCollectorColumnList().clear(); | |
// Wizard can finish | |
((ActivityBasedOnTemplate) getBuildBlock()).setUseSampleDatabaseTableSelected(false); | |
getWizard().getContainer().updateButtons(); | |
} | |
} | |
} |