/* * 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; import static com.motorola.studio.android.common.log.StudioLogger.debug; import static com.motorola.studio.android.common.log.StudioLogger.error; import java.io.File; import java.io.IOException; import java.net.URL; import java.util.ArrayList; import java.util.List; import org.eclipse.core.runtime.FileLocator; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.IExtension; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.Platform; import org.eclipse.osgi.util.NLS; import org.eclipse.ui.IViewPart; import org.eclipse.ui.plugin.AbstractUIPlugin; import org.osgi.framework.BundleContext; import com.motorola.studio.android.common.CommonPlugin; import com.motorola.studio.android.common.log.StudioLogger; import com.motorola.studio.android.common.utilities.EclipseUtils; import com.motorola.studio.android.common.utilities.FileUtil; import com.motorolamobility.studio.android.db.core.model.DbModel; import com.motorolamobility.studio.android.db.core.ui.view.MOTODEVDatabaseExplorerView; /** * The activator class controls the plug-in life cycle */ public class DbCoreActivator extends AbstractUIPlugin { private static final String DB_PROPERTY_TESTER_ATT_PROPERTIES = "properties"; private static final String DB_PROPERTY_TESTER_ATT_NAMESPACE = "namespace"; private static final String DB_PROPERTY_TESTER_EXTENSION_ID = "com.motorolamobility.studio.android.db.core.propertyTesters"; // The plug-in ID public static final String PLUGIN_ID = "com.motorolamobility.studio.android.db.core"; //$NON-NLS-1$ private static final String DB_TEMPLATE_PATH = "res/template.db"; //$NON-NLS-1$ private static List<String> pluginProperties = null; // The shared instance private static DbCoreActivator plugin; public static final String DATATOOLS_UI_PLUGIN_ID = "org.eclipse.datatools.connectivity.sqm.core.ui"; //$NON-NLS-1$ public static final String TABLE_ICON = "icons/table.gif"; //$NON-NLS-1$ /* * (non-Javadoc) * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext) */ @Override public void start(BundleContext context) throws Exception { StudioLogger.debug(DbCoreActivator.class, "Starting MOTODEV Studio for Android Database Core Plugin..."); super.start(context); plugin = this; DbModel.assertDriverExistsAtModel(); DbModel.cleanPreviousProfiles(); StudioLogger.debug(DbCoreActivator.class, "MOTODEV Studio for Android Database Core Plugin started."); } /* * (non-Javadoc) * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext) */ @Override public void stop(BundleContext context) throws Exception { plugin = null; DbModel.deleteDriverFromModel(); super.stop(context); } /** * Returns the shared instance * * @return the shared instance */ public static DbCoreActivator getDefault() { return plugin; } /* * Returns a File object representing a path inside this plug-in */ private File getResourceFile(String pathAtPlugin) { URL location = this.getBundle().getEntry(pathAtPlugin); File file = null; try { IPath p = new Path(FileLocator.toFileURL(location).getFile()); file = p.toFile(); } catch (IOException e) { error(NLS.bind("Could not get resource file {0}", pathAtPlugin)); //$NON-NLS-1$ } return file; } /** * Retrieves the location of the SQLITE3 jdbc driver * @return */ public String getDriverPath() { return CommonPlugin.getDefault().getDriverPath(); } /* * Retrieves the templateDbFile */ private File getTemplateDbFile() { return getResourceFile(DB_TEMPLATE_PATH); } /** * Copy the template db file to a given target file * @param target * @throws IOException If file path already exists or if the copy operation failed for some reason. */ public void copyTemplateDbFile(File target, boolean overwrite) throws IOException { debug(NLS.bind("Attempting to copy db template file to {0}", target.getAbsolutePath())); //$NON-NLS-1$ File templateDbFile = getTemplateDbFile(); if (overwrite && target.exists()) { target.delete(); } if (overwrite || !target.exists()) { debug(NLS.bind("Creating parent folders for file: {0}", target.getAbsolutePath())); //$NON-NLS-1$ target.getParentFile().mkdirs(); //Create parent folder if needed. FileUtil.copyFile(templateDbFile, target); } else { throw new IOException("Target file already exists"); //$NON-NLS-1$ } debug(NLS.bind("DB template file succesfully copyed to {0}", target.getAbsolutePath())); //$NON-NLS-1$ } /** * Retrieves the {@link MOTODEVDatabaseExplorerView} instance if it's active. * @return the active instance of the {@link MOTODEVDatabaseExplorerView}, or null if there's no active db view. */ public static MOTODEVDatabaseExplorerView getMOTODEVDatabaseExplorerView() { IViewPart view = EclipseUtils.getActiveView(MOTODEVDatabaseExplorerView.VIEW_ID); if (view instanceof MOTODEVDatabaseExplorerView) { return (MOTODEVDatabaseExplorerView) view; } return null; } /** * @return all namespaced properties defined by org.eclipse.core.expressions.propertyTesters extensions in this plugin.xml file. * * */ public static List<String> getPluginProperties() { //only load properties from extension registry once if (pluginProperties == null) { pluginProperties = new ArrayList<String>(); IExtension propertyTesters = Platform.getExtensionRegistry().getExtension(DB_PROPERTY_TESTER_EXTENSION_ID); IConfigurationElement[] confElements = propertyTesters.getConfigurationElements(); for (IConfigurationElement confElement : confElements) { String namespace = confElement.getAttribute(DB_PROPERTY_TESTER_ATT_NAMESPACE); String property = confElement.getAttribute(DB_PROPERTY_TESTER_ATT_PROPERTIES); String[] properties = property.split(","); for (String prop : properties) { String namespacedProperty = namespace.concat(".").concat(prop); pluginProperties.add(namespacedProperty); } } } return pluginProperties; } }