summaryrefslogtreecommitdiff
path: root/src/plugins/common/src/com/motorola/studio/android/common/utilities/PluginUtils.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/common/src/com/motorola/studio/android/common/utilities/PluginUtils.java')
-rw-r--r--src/plugins/common/src/com/motorola/studio/android/common/utilities/PluginUtils.java631
1 files changed, 631 insertions, 0 deletions
diff --git a/src/plugins/common/src/com/motorola/studio/android/common/utilities/PluginUtils.java b/src/plugins/common/src/com/motorola/studio/android/common/utilities/PluginUtils.java
new file mode 100644
index 0000000..2389f43
--- /dev/null
+++ b/src/plugins/common/src/com/motorola/studio/android/common/utilities/PluginUtils.java
@@ -0,0 +1,631 @@
+/*
+* 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.common.utilities;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
+import java.util.Map;
+
+import org.eclipse.core.runtime.FileLocator;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.Plugin;
+import org.eclipse.osgi.util.NLS;
+import org.osgi.framework.Bundle;
+
+import com.motorola.studio.android.common.exception.AndroidException;
+import com.motorola.studio.android.common.log.StudioLogger;
+import com.motorola.studio.android.common.utilities.i18n.UtilitiesNLS;
+
+/**
+ * DESCRIPTION: This class serves as an utility class containing only static methods such as getters
+ * for plugin attributes, plugin resources, installation path etc
+ *
+ * USAGE: Import this class then use the static methods.
+ */
+public class PluginUtils
+{
+ public static final int OS_WINDOWS = 0;
+
+ public static final int OS_LINUX = 1;
+
+ /**
+ * Returns a plugin attribute using the extension as parameter.
+ *
+ * @param fromExtension
+ * the extension from which the attribute should be collected
+ * @param element
+ * the extension element
+ * @param attribute
+ * the extension attribute
+ *
+ * @return
+ * the value of the extension attribute
+ *
+ * @throws MotodevExtensionException if the executable cannot be created for any reason
+ */
+ public static Object getExecutable(String extensionId, String elementName, String executableName)
+ throws Exception
+
+ {
+ Object executable = null;
+
+ IExtension fromExtension = getExtension(extensionId);
+
+ if ((fromExtension != null) && (elementName != null))
+ {
+ IConfigurationElement[] elements = fromExtension.getConfigurationElements();
+
+ for (IConfigurationElement element : elements)
+ {
+ if (elementName.equals(element.getName()))
+ {
+ try
+ {
+ executable = element.createExecutableExtension(executableName);
+ }
+ catch (Exception e)
+ {
+ String errMsg =
+ NLS.bind(
+ UtilitiesNLS.EXC_PluginUtils_ErrorGettingTheExecutableFromExtensionPoint,
+ new Object[]
+ {
+ executableName, elementName, extensionId
+ });
+ StudioLogger.error(PluginUtils.class, errMsg, e);
+
+ throw new Exception(errMsg, e);
+ }
+ }
+ }
+ }
+
+ return executable;
+ }
+
+ /**
+ * Returns a plugin attribute using the extension as parameter.
+ *
+ * @param fromExtension
+ * the extension from which the attribute should be collected
+ * @param element
+ * the extension element
+ * @param attribute
+ * the extension attribute
+ *
+ * @return
+ * the value of the extension attribute
+ *
+ * @throws MotodevExtensionException if the executable cannot be created for any reason
+ */
+ public static Object getExecutable(String extensionId, String elementName) throws Exception
+ {
+ return getExecutable(extensionId, elementName, "class");
+ }
+
+ /**
+ * Returns the extension using as parameters the id of the extension
+ * and the id of its extension point.
+ *
+ * @param extensionPointId
+ * the id of the extension point
+ * @param extensionId
+ * the id of the extension
+ *
+ * @return
+ * the extension
+ */
+ public static IExtension getExtension(String extensionPointId, String extensionId)
+ {
+ IExtensionRegistry registry = Platform.getExtensionRegistry();
+ IExtension extension = registry.getExtension(extensionPointId, extensionId);
+
+ return extension;
+ }
+
+ /**
+ * Returns the extension using as parameter only the id of the extension.
+ *
+ * @param extensionId
+ * the id of the extension
+ *
+ * @return
+ * the extension
+ */
+ public static IExtension getExtension(String extensionId)
+ {
+ IExtensionRegistry registry = Platform.getExtensionRegistry();
+ IExtension extension = registry.getExtension(extensionId);
+
+ return extension;
+ }
+
+ /**
+ * Returns the label for the extension (extension name) using as parameters
+ * the id of the extension and the id of its extension point.
+ *
+ * @param extensionPointId
+ * the id of the extension point
+ * @param extensionId
+ * the id of the extension
+ *
+ * @return
+ * the extension label
+ */
+ public static String getExtensionLabel(String extensionPointId, String extensionId)
+ {
+ IExtension extension = getExtension(extensionPointId, extensionId);
+ String extensionLabel;
+
+ if (extension != null)
+ {
+ extensionLabel = extension.getLabel();
+ }
+ else
+ {
+ extensionLabel = extensionId;
+ }
+
+ return extensionLabel;
+ }
+
+ /**
+ * Returns the label for the extension (extension name) using as parameter only
+ * the id of the extension.
+ *
+ * @param extensionId
+ * the id of the extension
+ *
+ * @return
+ * the extension label
+ */
+ public static String getExtensionLabel(String extensionId)
+ {
+ IExtension extension = getExtension(extensionId);
+ String extensionLabel;
+
+ if (extension != null)
+ {
+ extensionLabel = extension.getLabel();
+ }
+ else
+ {
+ extensionLabel = extensionId;
+ }
+
+ return extensionLabel;
+ }
+
+ /**
+ * Returns a collection of strings containing the ids of installed plugins.
+ *
+ * @param extensionPointId
+ * the id of the extension point
+ *
+ * @return
+ * a collection object containing the ids of the installed plugins
+ */
+ public static Collection<String> getInstalledPlugins(String extensionPointId)
+ {
+ IExtensionRegistry registry = Platform.getExtensionRegistry();
+ IExtensionPoint extensionPoint = registry.getExtensionPoint(extensionPointId);
+ Collection<String> pluginIds = new LinkedHashSet<String>();
+
+ if (extensionPoint != null)
+ {
+ for (IExtension extension : extensionPoint.getExtensions())
+ {
+ pluginIds.add(extension.getUniqueIdentifier());
+ }
+ }
+
+ return pluginIds;
+ }
+
+ /**
+ * Fills an array object with the ids contained in the collection object returned by
+ * {@link #getInstalledPlugins(String)}.
+ *
+ * @param extensionPointId
+ * the id of the extension point
+ *
+ * @return
+ * an array object containing the ids of the installed plugins
+ */
+ public static String[] getInstalledPluginsAsArray(String extensionPointId)
+ {
+ Collection<String> sampleAppPluginIds = getInstalledPlugins(extensionPointId);
+ String[] sampleAppPluginIdsArray = new String[sampleAppPluginIds.size()];
+
+ return sampleAppPluginIds.toArray(sampleAppPluginIdsArray);
+ }
+
+ /**
+ * Retrieves the namespaces used by the platform.
+ *
+ *
+ * @return a collection with the namespaces used by the platform
+ */
+ public static Collection<String> getPlatformNamespaces()
+ {
+ IExtensionRegistry extensionRegistry = Platform.getExtensionRegistry();
+ String[] namespaces = extensionRegistry.getNamespaces();
+
+ return Arrays.asList(namespaces);
+ }
+
+ /**
+ * Returns a plugin attribute using the extension id and the extension point id as parameters.
+ *
+ * @param extensionPointId
+ * the id of the extension point of the exten sion
+ * @param extensionId
+ * the id of the extension
+ * @param element
+ * the extension element
+ * @param attribute
+ * the extension attribute
+ *
+ * @return
+ * the value of the extension attribute
+ */
+ public static String getPluginAttribute(String extensionPointId, String extensionId,
+ String element, String attribute)
+ {
+ IExtension fromPlugin = getExtension(extensionPointId, extensionId);
+
+ return getPluginAttribute(fromPlugin, element, attribute);
+ }
+
+ /**
+ * Returns a plugin attribute using the extension id and the extension point id as parameters.
+ *
+ * @param extensionId
+ * the id of the extension
+ * @param element
+ * the extension element
+ * @param attribute
+ * the extension attribute
+ *
+ * @return
+ * the value of the extension attribute
+ */
+ public static String getPluginAttribute(String extensionId, String element, String attribute)
+ {
+ IExtension fromPlugin = getExtension(extensionId);
+
+ return getPluginAttribute(fromPlugin, element, attribute);
+ }
+
+ /**
+ * Returns a plugin attribute using the extension as parameter.
+ *
+ * @param fromExtension
+ * the extension from which the attribute should be collected
+ * @param element
+ * the extension element
+ * @param attribute
+ * the extension attribute
+ *
+ * @return
+ * the value of the extension attribute
+ */
+ public static String getPluginAttribute(IExtension fromExtension, String element,
+ String attribute)
+ {
+ String attributeValue = null;
+
+ if (fromExtension != null)
+ {
+ IConfigurationElement[] ceArray = fromExtension.getConfigurationElements();
+
+ for (IConfigurationElement ce : ceArray)
+ {
+ if ((ce != null) && ce.getName().equals(element))
+ {
+ attributeValue = ce.getAttribute(attribute);
+ }
+ }
+ }
+
+ return attributeValue;
+ }
+
+ /**
+ * DOCUMENT ME
+ *
+ * @param extensionId DOCUMENT ME!
+ * @param element DOCUMENT ME!
+ *
+ * @return DOCUMENT ME!
+ */
+ public static Collection<Map<String, String>> getPluginAttributes(String extensionId,
+ String element)
+ {
+ IExtension fromExtension = getExtension(extensionId);
+
+ return getPluginAttributes(fromExtension, element);
+ }
+
+ /**
+ * DOCUMENT ME
+ *
+ * @param fromExtension DOCUMENT ME!
+ * @param element DOCUMENT ME!
+ *
+ * @return DOCUMENT ME!
+ */
+ public static Collection<Map<String, String>> getPluginAttributes(IExtension fromExtension,
+ String element)
+ {
+ Collection<Map<String, String>> elementValues = new LinkedHashSet<Map<String, String>>();
+
+ if (fromExtension != null)
+ {
+ IConfigurationElement[] ceArray = fromExtension.getConfigurationElements();
+
+ for (IConfigurationElement ce : ceArray)
+ {
+ if ((ce != null) && ce.getName().equals(element))
+ {
+ String[] attributes = ce.getAttributeNames();
+
+ if ((attributes != null) && (attributes.length > 0))
+ {
+ int attributesLenght = attributes.length;
+ Map<String, String> attributesMap =
+ new LinkedHashMap<String, String>(attributesLenght,
+ attributesLenght);
+
+ for (String attribute : attributes)
+ {
+ String attributeValue = ce.getAttribute(attribute);
+
+ if ((attributeValue != null) && (!attributeValue.equals("")))
+ {
+ attributesMap.put(attribute, attributeValue);
+ }
+ }
+
+ // only add to elementValues if all values were read correctly
+ if (attributesMap.size() == attributesLenght)
+ {
+ elementValues.add(attributesMap);
+ }
+ }
+ }
+ }
+ }
+
+ return elementValues;
+ }
+
+ /**
+ * Returns the absolute path of installation as a file object using the plugin as parameter.
+ *
+ * @param plugin
+ * the plugin installed
+ *
+ * @return
+ * a file object pointing to the installation path of the plugin
+ */
+ public static File getPluginInstallationPath(Plugin plugin)
+ {
+ Bundle pluginBundle = plugin.getBundle();
+
+ return getPluginInstallationPath(pluginBundle);
+ }
+
+ /**
+ * Returns the absolute path of installation as a file object using the ids of the extension
+ * and extension point as parameters.
+ *
+ * @param extensionPointId
+ * the id of the extension point
+ * @param extensionId
+ * the id of the extension
+ *
+ * @return
+ * a file object pointing to the installation path of the plugin
+ */
+ public static File getPluginInstallationPath(String extensionPointId, String extensionId)
+ {
+ IExtension extension = getExtension(extensionPointId, extensionId);
+
+ return getPluginInstallationPath(extension);
+ }
+
+ /**
+ * Returns the absolute path of installation as a file object using the extension as parameter.
+ *
+ * @param extension
+ * the extension object
+ *
+ * @return
+ * a file object pointing to the installation path of the plugin
+ */
+ public static File getPluginInstallationPath(IExtension extension)
+ {
+ String pluginId = extension.getNamespaceIdentifier();
+ Bundle pluginBundle = Platform.getBundle(pluginId);
+
+ return getPluginInstallationPath(pluginBundle);
+ }
+
+ /**
+ * Returns the absolute path of installation as a file object using the plugin bundle as parameter.
+ *
+ * @param pluginBundle
+ * the plugin bundle
+ *
+ * @return
+ * a file object pointing to the installation path of the plugin
+ */
+ public static File getPluginInstallationPath(Bundle pluginBundle)
+ {
+ //get file using FileLocator
+ File relativeInstalationPath = null;
+ try
+ {
+ relativeInstalationPath =
+ new File(FileLocator.toFileURL(pluginBundle.getEntry("")).getFile());
+ }
+ catch (IOException e)
+ {
+ StudioLogger.warn("Illegal state while getting plugin installation path ("
+ + e.getMessage() + ").");
+ }
+
+ //if failed to get the file using FileLocator
+ if (relativeInstalationPath == null)
+ {
+ String platformPath = Platform.getInstallLocation().getURL().getPath();
+ String pluginPath = pluginBundle.getLocation();
+ int removeIndex = pluginPath.indexOf("@");
+ pluginPath = pluginPath.substring(removeIndex + 1);
+
+ relativeInstalationPath = new File(platformPath, pluginPath);
+ }
+
+ return FileUtil.getCanonicalFile(relativeInstalationPath);
+ }
+
+ /**
+ * Returns a file object from the path: $installationPath\resource
+ *
+ * @param plugin
+ * the plugin object
+ *
+ * @param resource
+ * the plugin resource
+ *
+ * @return
+ * a file object pointing to the path of the resource
+ *
+ * @throws MotodevResourceNotAvailable
+ * throws an exception if it occurs an I/O exception with the path $installationPath\resource
+ */
+ public static File getPluginResource(Plugin plugin, String resource) throws Exception
+ {
+ File pluginPath = getPluginInstallationPath(plugin);
+ File resourceFile = new File(pluginPath, resource);
+ File canonicalFile = null;
+
+ canonicalFile = FileUtil.getCanonicalFile(resourceFile);
+
+ return canonicalFile;
+ }
+
+ /**
+ * Checks if an extension is installed using the extension point id and extension id as parameters.
+ *
+ * @param extensionPointId
+ * the id of the extension point
+ * @param extensionId
+ * the id of the extension
+ *
+ * @return
+ * true if the extension is installed or false otherwise
+ */
+ public static boolean isInstalled(String extensionPointId, String extensionId)
+ {
+ return getExtension(extensionPointId, extensionId) != null;
+ }
+
+ /**
+ * Checks if an extension is installed using the extension id as parameter.
+ *
+ * @param extensionId
+ * the id of the extension
+ *
+ * @return
+ * true if the extension is installed or false otherwise
+ */
+ public static boolean isInstalled(String extensionId)
+ {
+ return getExtension(extensionId) != null;
+ }
+
+ /**
+ * Returns which is the OS.
+ * @return
+ * a code corresponding to the proper OS
+ */
+ public static int getOS()
+ {
+ int result = -1;
+
+ String osName = System.getProperty("os.name").toLowerCase();
+
+ if (osName.indexOf("linux") > -1)
+ {
+ result = OS_LINUX;
+ }
+
+ else if (osName.indexOf("windows") > -1)
+ {
+ result = OS_WINDOWS;
+ }
+
+ return result;
+ }
+
+ /**
+ * Retrieves the File object representing a file stored into the
+ * preferences area of the given plugin
+ *
+ * @return the File inside the given plugin preferences area.
+ * @throws MotodevException if it fails to determine the preferences directory of the given plugin
+ */
+ public final static File getFileOnPreferenceDirectory(Plugin plugin, String filename)
+ throws Exception
+ {
+ File targetXmlFile = null;
+
+ try
+ {
+ IPath path = plugin.getStateLocation();
+
+ if (path != null)
+ {
+ path = path.append(filename);
+ targetXmlFile = path.toFile().getAbsoluteFile();
+ }
+ }
+ catch (IllegalStateException e)
+ {
+ StudioLogger.warn("Illegal state while getting file on preferences directory ("
+ + e.getMessage() + ").");
+ }
+
+ if (targetXmlFile == null)
+ {
+ throw new AndroidException("Could use file " + filename + " on preferences plug-in "
+ + plugin.getBundle().getBundleId());
+ }
+
+ return targetXmlFile;
+ }
+}