| /* |
| * 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; |
| } |
| } |