| /* |
| * 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.wizards.buildingblocks; |
| |
| import java.lang.reflect.InvocationTargetException; |
| import java.util.List; |
| |
| import org.eclipse.core.resources.IResource; |
| import org.eclipse.core.resources.IncrementalProjectBuilder; |
| import org.eclipse.core.runtime.CoreException; |
| import org.eclipse.core.runtime.IProgressMonitor; |
| import org.eclipse.core.runtime.IStatus; |
| import org.eclipse.core.runtime.Status; |
| import org.eclipse.jdt.core.ICompilationUnit; |
| import org.eclipse.jdt.ui.JavaUI; |
| import org.eclipse.jface.operation.IRunnableWithProgress; |
| import org.eclipse.jface.viewers.IStructuredSelection; |
| import org.eclipse.jface.wizard.IWizardPage; |
| import org.eclipse.ui.IWorkbench; |
| |
| 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.log.StudioLogger; |
| import com.motorola.studio.android.common.utilities.EclipseUtils; |
| import com.motorola.studio.android.model.ActivityBasedOnTemplate; |
| import com.motorola.studio.android.model.BuildingBlockModel; |
| import com.motorola.studio.android.model.IDatabaseSampleActivityParametersWizardCollector; |
| |
| /** |
| * Class that implements the Activity Wizard |
| */ |
| public class NewActivityBasedOnTemplateWizard extends NewBuildingBlocksWizard |
| { |
| private static final String WIZBAN_ICON = "icons/wizban/new_activity_template_wiz.png"; //$NON-NLS-1$ |
| |
| private final ActivityBasedOnTemplate activity = new ActivityBasedOnTemplate(); |
| |
| /* |
| * IRunnableWithProgress object to create the activity |
| */ |
| private class DoSave implements IRunnableWithProgress |
| { |
| AndroidException exception = null; |
| |
| boolean saved = false; |
| |
| public void run(IProgressMonitor monitor) throws InvocationTargetException, |
| InterruptedException |
| { |
| try |
| { |
| saved = getBuildingBlock().save(getContainer(), monitor); |
| getBuildingBlock().getProject().refreshLocal(IResource.DEPTH_INFINITE, monitor); |
| getBuildingBlock().getProject().build(IncrementalProjectBuilder.INCREMENTAL_BUILD, |
| monitor); |
| } |
| catch (CoreException ce) |
| { |
| //build failed - show a warning message |
| StudioLogger.error(this.getClass(), ce.getMessage(), ce); |
| EclipseUtils |
| .showWarningDialog( |
| CodeUtilsNLS.UI_NewActivityWizard_TitleNewActivityWizard, |
| CodeUtilsNLS.NewActivityWizard_MessageSomeProblemsOccurredWhileBuildingProject); |
| } |
| catch (AndroidException e) |
| { |
| exception = e; |
| } |
| } |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.jface.wizard.Wizard#canFinish() |
| */ |
| @Override |
| public boolean canFinish() |
| { |
| return (!activity.needMoreInformation()) |
| && !(getContainer().getCurrentPage() instanceof ActivitySampleSelectionPage); |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.jface.wizard.Wizard#performFinish() |
| */ |
| @Override |
| public boolean performFinish() |
| { |
| boolean saved = false; |
| |
| try |
| { |
| DoSave doSave = new DoSave(); |
| |
| getContainer().run(false, false, doSave); |
| |
| if (doSave.exception != null) |
| { |
| throw doSave.exception; |
| } |
| else |
| { |
| saved = doSave.saved; |
| } |
| } |
| catch (Exception e) |
| { |
| IStatus status = |
| new Status(IStatus.ERROR, CodeUtilsActivator.PLUGIN_ID, e.getLocalizedMessage()); |
| EclipseUtils.showErrorDialog(CodeUtilsNLS.UI_GenericErrorDialogTitle, |
| CodeUtilsNLS.ERR_BuildingBlockCreation_ErrorMessage, status); |
| } |
| |
| if (saved) |
| { |
| ICompilationUnit javaFile = |
| getBuildingBlock().getPackageFragment().getCompilationUnit( |
| getBuildingBlock().getName() + ".java"); //$NON-NLS-1$ |
| |
| if ((javaFile != null) && javaFile.exists()) |
| { |
| try |
| { |
| JavaUI.openInEditor(javaFile); |
| } |
| catch (Exception e) |
| { |
| // Do nothing |
| StudioLogger.error(NewActivityBasedOnTemplateWizard.class, |
| "Could not open the activity " //$NON-NLS-1$ |
| + getBuildingBlock().getName() + " on an editor.", e); //$NON-NLS-1$ |
| } |
| } |
| } |
| |
| if (saved) |
| { |
| // Collecting usage data for statistical purposes |
| try |
| { |
| StudioLogger.collectUsageData(StudioLogger.WHAT_BUILDINGBLOCK_ACTIVITY, |
| StudioLogger.KIND_BUILDINGBLOCK, StudioLogger.DESCRIPTION_DEFAULT, |
| CodeUtilsActivator.PLUGIN_ID, CodeUtilsActivator.getDefault().getBundle() |
| .getVersion().toString()); |
| } |
| catch (Throwable e) |
| { |
| //Do nothing, but error on the log should never prevent app from working |
| } |
| } |
| return saved; |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.ui.IWorkbenchWizard#init(org.eclipse.ui.IWorkbench, org.eclipse.jface.viewers.IStructuredSelection) |
| */ |
| public void init(IWorkbench workbench, IStructuredSelection selection) |
| { |
| setWindowTitle(CodeUtilsNLS.UI_NewActivityWizard_TitleNewActivityBasedOnTemplateWizard); |
| setNeedsProgressMonitor(true); |
| setDefaultPageImageDescriptor(CodeUtilsActivator.getImageDescriptor(WIZBAN_ICON)); |
| activity.configure(selection); |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.jface.wizard.Wizard#addPages() |
| */ |
| @Override |
| public void addPages() |
| { |
| addPage(new ActivitySampleSelectionPage(activity)); |
| addPage(new NewActivityBasedOnTemplatePage(activity)); |
| IDatabaseSampleActivityParametersWizardCollector collector = |
| activity.getDatabaseSampleActivityParametersWizardCollector(); |
| if (collector != null) |
| { |
| List<IWizardPage> contributedPageList = collector.getWizardPages(); |
| if (contributedPageList != null) |
| { |
| for (IWizardPage page : contributedPageList) |
| { |
| if (page instanceof NewBuildingBlocksWizardPage) |
| { |
| //there is page to select parameters for activity creation |
| NewBuildingBlocksWizardPage buildBlockPage = |
| (NewBuildingBlocksWizardPage) page; |
| buildBlockPage.setBuildBlock(activity); |
| addPage(buildBlockPage); |
| } |
| } |
| } |
| } |
| addPage(new NewActivityWizardListTemplatesPage(activity)); |
| |
| } |
| |
| /* (non-Javadoc) |
| * @see com.motorola.studio.android.wizards.buildingblocks.NewBuildingBlocksWizard#getBuildingBlock() |
| */ |
| @Override |
| protected BuildingBlockModel getBuildingBlock() |
| { |
| return activity; |
| } |
| } |