/* * 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.wizards; import java.lang.reflect.InvocationTargetException; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.SubMonitor; import org.eclipse.jdt.ui.JavaUI; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.jface.wizard.Wizard; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.WorkbenchException; import com.motorola.studio.android.codeutils.CodeUtilsActivator; import com.motorola.studio.android.codeutils.db.utils.DatabaseUtils; import com.motorola.studio.android.codeutils.i18n.CodeUtilsNLS; import com.motorola.studio.android.common.log.StudioLogger; import com.motorola.studio.android.common.log.UsageDataConstants; import com.motorola.studio.android.common.preferences.DialogWithToggleUtils; import com.motorola.studio.android.common.utilities.EclipseUtils; /** * * Wizard to create classes which aids the database management. * */ public class DatabaseManagementClassesCreationWizard extends Wizard { private static final String SDK_SWITCH_PERSPECTIVE_TO_MOTODEV_STUDIO_ANDROID_KEY = "switch.perspective.to.motodevstudioandroid"; //$NON-NLS-1$ private static final String SDK_SWITCH_PERSPECTIVE_TO_JAVA_KEY = "switch.perspective.to.java"; //$NON-NLS-1$ /** * This listener generates Database Management classes. It has the * characteristic of displaying a progress bar. */ private final class GenerateDatabaseManagementClassesRunnableWithProgress implements IRunnableWithProgress { private final IProject project; private final IPath databaseFilePath; private final boolean isCreateSQLOpenHelper; private final boolean isCreateContentProviders; private final String sqlOpenHelperPackageName; private final String contentProvidersPackageName; private final String sqlOpenHelperClassName; private final boolean isOverrideContentProviders; /** * Constructor for assigning values * * @param project Target Project * @param databaseFilePath Database file path * @param isCreateSQLOpenHelper Creates or not SQL Open Helper class * @param isCreateContentProviders Creates or not Content Provider classes * @param sqlOpenHelperPackageName SQL Open Helper Package Name * @param contentProvidersPackageName Content Provider classes package name * @param sqlOpenHelperClassName SQL Open Helper class Name * @param isOverrideContentProviders Overrides or not existing Content Provider classes */ public GenerateDatabaseManagementClassesRunnableWithProgress(IProject project, IPath databaseFilePath, boolean isCreateSQLOpenHelper, boolean isCreateContentProviders, String sqlOpenHelperPackageName, String contentProvidersPackageName, String sqlOpenHelperClassName, boolean isOverrideContentProviders) { this.project = project; this.databaseFilePath = databaseFilePath; this.isCreateSQLOpenHelper = isCreateSQLOpenHelper; this.isCreateContentProviders = isCreateContentProviders; this.sqlOpenHelperPackageName = sqlOpenHelperPackageName; this.contentProvidersPackageName = contentProvidersPackageName; this.sqlOpenHelperClassName = sqlOpenHelperClassName; this.isOverrideContentProviders = isOverrideContentProviders; } /* * (non-Javadoc) * @see org.eclipse.jface.operation.IRunnableWithProgress#run(org.eclipse.core.runtime.IProgressMonitor) */ @Override public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { // create Database Management classes try { // sub monitor SubMonitor subMonitor = SubMonitor.convert(monitor, 10); // copy Database file to assets folder, in case it is not already there DatabaseUtils.copyDatabaseFileToAssetsFolder(databaseFilePath, project, subMonitor.newChild(4)); DatabaseUtils.createDatabaseManagementClasses(project, databaseFilePath.toFile() .getName(), isCreateSQLOpenHelper, isCreateContentProviders, sqlOpenHelperPackageName, contentProvidersPackageName, sqlOpenHelperClassName, isOverrideContentProviders, false, subMonitor .newChild(6), true); } catch (Exception e) { StudioLogger.error(DatabaseManagementClassesCreationWizard.class, CodeUtilsNLS.DATABASE_DEPLOY_ERROR_DEPLOYING_DATABASE, e); IStatus status = new Status(IStatus.ERROR, CodeUtilsActivator.PLUGIN_ID, e.getLocalizedMessage()); EclipseUtils.showErrorDialog(CodeUtilsNLS.DATABASE_DEPLOY_ERROR_DEPLOYING_DATABASE, CodeUtilsNLS.DATABASE_DEPLOY_ERROR_DEPLOYING_DATABASE, status); } } } // deployment page private DatabaseManagementClassesCreationMainPage page = null; public DatabaseManagementClassesCreationWizard(IProject selectedProject, IResource selectedDatabase) { // set title setWindowTitle(CodeUtilsNLS.UI_PersistenceWizardPageTitleDeploy); // set properties setNeedsProgressMonitor(true); setDefaultPageImageDescriptor(CodeUtilsActivator.imageDescriptorFromPlugin( CodeUtilsActivator.PLUGIN_ID, "icons/wizban/create_management_classes.png")); //$NON-NLS-1$ // set page this.page = new DatabaseManagementClassesCreationMainPage("Main Page", selectedProject, //$NON-NLS-1$ selectedDatabase); } /* * (non-Javadoc) * * @see org.eclipse.jface.wizard.Wizard#addPages() */ @Override public void addPages() { addPage(this.page); } /** * Generate the requested classes and finishes this wizard. */ @Override public boolean performFinish() { // get project IProject project = page.getSelectedProject(); // get the file name IPath databaseFilePath = page.getDatabaseFilePath(); // get package of content providers classes String contentProvidersPackageName = page.getContentProviderPackage(); // get the package of SQL Open Helper String sqlOpenHelperPackageName = page.getDatabaseOpenHelperPackage(); // get the SQL Open Helper class name String sqlOpenHelperClassName = page.getSQLOpenHelperClassName(); // create or no open helper boolean isCreateSQLOpenHelper = page.isCreateSQLOpenHelperClass(); // create or not content providers boolean isCreateContentProviders = page.isCreateContentProviders(); // override or not content providers boolean isOverrideContentProviders = page.isOverrideExistingContentProviderClasses(); try { // create database management classes getContainer().run( true, true, new GenerateDatabaseManagementClassesRunnableWithProgress(project, databaseFilePath, isCreateSQLOpenHelper, isCreateContentProviders, sqlOpenHelperPackageName, contentProvidersPackageName, sqlOpenHelperClassName, isOverrideContentProviders)); } catch (Exception e) { StudioLogger.error(DatabaseManagementClassesCreationWizard.class, CodeUtilsNLS.DATABASE_DEPLOY_ERROR_DEPLOYING_DATABASE, e); IStatus status = new Status(IStatus.ERROR, CodeUtilsActivator.PLUGIN_ID, e.getLocalizedMessage()); EclipseUtils.showErrorDialog(CodeUtilsNLS.DATABASE_DEPLOY_ERROR_DEPLOYING_DATABASE, CodeUtilsNLS.DATABASE_DEPLOY_ERROR_DEPLOYING_DATABASE, status); } try { if ((PlatformUI.getWorkbench().getActiveWorkbenchWindow() != null) && (PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage() != null)) { if (PlatformUI.getWorkbench().getPerspectiveRegistry() .findPerspectiveWithId(CodeUtilsActivator.PERSPECTIVE_ID) != null) { if (!PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage() .getPerspective().getId().equals(CodeUtilsActivator.PERSPECTIVE_ID)) { //ask users if they want to change perspective to check files created if (DialogWithToggleUtils .showQuestion( SDK_SWITCH_PERSPECTIVE_TO_MOTODEV_STUDIO_ANDROID_KEY, CodeUtilsNLS.UI_PersistenceWizard_ChangePerspectiveToMOTODEVStudioAndroid_DialogTitle, CodeUtilsNLS.UI_PersistenceWizard_ChangePerspectiveToMOTODEVStudioAndroid_DialogMessage)) { PlatformUI.getWorkbench().showPerspective( CodeUtilsActivator.PERSPECTIVE_ID, PlatformUI.getWorkbench().getActiveWorkbenchWindow()); } } } else { if (DialogWithToggleUtils .showQuestion( SDK_SWITCH_PERSPECTIVE_TO_JAVA_KEY, CodeUtilsNLS.UI_PersistenceWizard_ChangePerspectiveToJava_DialogTitle, CodeUtilsNLS.UI_PersistenceWizard_ChangePerspectiveToJava_DialogMessage)) { PlatformUI.getWorkbench().showPerspective(JavaUI.ID_PERSPECTIVE, PlatformUI.getWorkbench().getActiveWorkbenchWindow()); } } } } catch (WorkbenchException e) { StudioLogger.warn("It was not possible to change perspective to " //$NON-NLS-1$ + CodeUtilsActivator.PERSPECTIVE_ID); } // create UDC log for db file size StudioLogger .collectUsageData( UsageDataConstants.WHAT_DATABASE_MANAGMT_CLASSES, //$NON-NLS-1$ UsageDataConstants.KIND_DATABASE_MANAGMT_CLASSES, "Database classes created. Database filesize " + getDatabaseFileSize(databaseFilePath) + ".", //$NON-NLS-1$ //$NON-NLS-2$ CodeUtilsActivator.PLUGIN_ID, CodeUtilsActivator.getDefault().getBundle() .getVersion().toString()); return true; } /** * Returns a database file size string in Kb, Mb or Gb. Example: '10 Kb'. * @param databaseFilePath The database file path. * @return String containing the database file size. */ private String getDatabaseFileSize(IPath databaseFilePath) { String fileSizeStr = null; long fileSize = databaseFilePath.toFile().length(); long KBsize = fileSize / 1024; if (KBsize > 1024) { long MBSize = KBsize / 1024; if (MBSize > 1024) { long GBSize = MBSize / 1024; fileSizeStr = GBSize + " Gb"; //$NON-NLS-1$ } else { fileSizeStr = MBSize + " Mb"; //$NON-NLS-1$ } } else { fileSizeStr = KBsize + " Kb"; //$NON-NLS-1$ } return fileSizeStr; } }