summaryrefslogtreecommitdiff
path: root/src/plugins/android.codeutils/src/com/motorola/studio/android/codeutils/codegeneration/CreateSampleDatabaseActivityColumnsPage.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/android.codeutils/src/com/motorola/studio/android/codeutils/codegeneration/CreateSampleDatabaseActivityColumnsPage.java')
-rw-r--r--src/plugins/android.codeutils/src/com/motorola/studio/android/codeutils/codegeneration/CreateSampleDatabaseActivityColumnsPage.java382
1 files changed, 382 insertions, 0 deletions
diff --git a/src/plugins/android.codeutils/src/com/motorola/studio/android/codeutils/codegeneration/CreateSampleDatabaseActivityColumnsPage.java b/src/plugins/android.codeutils/src/com/motorola/studio/android/codeutils/codegeneration/CreateSampleDatabaseActivityColumnsPage.java
new file mode 100644
index 0000000..97520c5
--- /dev/null
+++ b/src/plugins/android.codeutils/src/com/motorola/studio/android/codeutils/codegeneration/CreateSampleDatabaseActivityColumnsPage.java
@@ -0,0 +1,382 @@
+/*
+ * 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();
+
+ }
+
+ }
+}