summaryrefslogtreecommitdiff
path: root/src/plugins/emulator/src/com/motorola/studio/android/emulator/device/definition/AndroidEmuDefMgr.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/emulator/src/com/motorola/studio/android/emulator/device/definition/AndroidEmuDefMgr.java')
-rw-r--r--src/plugins/emulator/src/com/motorola/studio/android/emulator/device/definition/AndroidEmuDefMgr.java265
1 files changed, 265 insertions, 0 deletions
diff --git a/src/plugins/emulator/src/com/motorola/studio/android/emulator/device/definition/AndroidEmuDefMgr.java b/src/plugins/emulator/src/com/motorola/studio/android/emulator/device/definition/AndroidEmuDefMgr.java
new file mode 100644
index 0000000..a1eeada
--- /dev/null
+++ b/src/plugins/emulator/src/com/motorola/studio/android/emulator/device/definition/AndroidEmuDefMgr.java
@@ -0,0 +1,265 @@
+/*
+* 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.emulator.device.definition;
+
+import static com.motorola.studio.android.common.log.StudioLogger.error;
+
+import java.util.Collection;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.sequoyah.device.common.utilities.PluginUtils;
+
+import com.motorola.studio.android.common.utilities.EclipseUtils;
+import com.motorola.studio.android.emulator.core.model.IAndroidEmulatorInstance;
+import com.motorola.studio.android.emulator.core.model.IInputLogic;
+import com.motorola.studio.android.emulator.logic.AbstractStartAndroidEmulatorLogic;
+
+/**
+ * Contains methods for managing Android emulator definitions
+ *
+ */
+public class AndroidEmuDefMgr implements IAndroidEmuDefConstants
+{
+ // emulator definitions
+ private static final Map<String, AndroidEmuDefBean> emuDefs =
+ new LinkedHashMap<String, AndroidEmuDefBean>();
+
+ private final static AndroidEmuDefMgr instance = new AndroidEmuDefMgr();
+
+ /**
+ * Initialize class
+ */
+ private AndroidEmuDefMgr()
+ {
+ readExtensions();
+ }
+
+ /**
+ * Return class instance
+ *
+ * @return AndroidEmuDefMgr instance
+ */
+ public static AndroidEmuDefMgr getInstance()
+ {
+ return instance;
+ }
+
+ /**
+ * Read extension points to add emulator definitions
+ */
+ private static void readExtensions()
+ {
+ IExtension[] emuDefExtensions =
+ EclipseUtils.getInstalledPlugins(EMULATOR_DEFINITION_EXTENSION_POINT);
+
+ for (IExtension emuDefExtension : emuDefExtensions)
+ {
+ String id = emuDefExtension.getUniqueIdentifier();
+
+ // elements
+ IConfigurationElement[] elements = emuDefExtension.getConfigurationElements();
+
+ AndroidEmuDefBean bean = null;
+
+ boolean extensionOk = true;
+ for (IConfigurationElement element : elements)
+ {
+ if (element.getName().equals(ELEMENT_SKIN))
+ {
+ String skinId = element.getAttribute(ATT_SKIN_ID);
+ String skinSize = element.getAttribute(ATT_SKIN_SIZE);
+
+ if (!skinId.equals("") && !skinSize.equals(""))
+ {
+ bean = new AndroidEmuDefBean(emuDefExtension.getLabel(), skinId, skinSize);
+ }
+ else
+ {
+ extensionOk = false;
+ }
+ }
+ }
+
+ if (extensionOk)
+ {
+ emuDefs.put(id, bean);
+ }
+ }
+ }
+
+ /**
+ * Get all emulator IDs
+ *
+ * @return all emulator IDs
+ */
+ public Collection<String> getAllIds()
+ {
+ return emuDefs.keySet();
+ }
+
+ /**
+ * Retrieves the default emulator definition id, which should be initially set
+ * to the emulator devices being created
+ *
+ * @return The default emulator definition id
+ */
+ public String getDefaultId()
+ {
+ String defaultId = "";
+
+ Collection<String> ids = getAllIds();
+
+ /*
+ * NOTE: This is not considering more than one type of device
+ */
+ if (!ids.isEmpty())
+ {
+ Object[] idsArray = ids.toArray();
+ defaultId = idsArray[0].toString();
+ }
+
+ return defaultId;
+ }
+
+ /**
+ * Get all emulator names
+ *
+ * @return all emulator names
+ */
+ public String[] getAllNames()
+ {
+ String[] allNames = new String[emuDefs.size()];
+
+ int i = 0;
+ for (AndroidEmuDefBean bean : emuDefs.values())
+ {
+ allNames[i++] = bean.getName();
+ }
+
+ return allNames;
+ }
+
+ /**
+ * Get emulator name given its ID
+ *
+ * @param emuDefId emulator ID
+ * @return emulator name
+ */
+ public String getName(String emuDefId)
+ {
+ String name = emuDefId;
+ AndroidEmuDefBean bean = emuDefs.get(emuDefId);
+
+ if (bean != null)
+ {
+ name = bean.getName();
+ }
+
+ return name;
+ }
+
+ /**
+ * Get emulator skin ID given its ID
+ *
+ * @param emuDefId emulator ID
+ * @return emulator skin ID
+ */
+ public String getSkinId(String emuDefId)
+ {
+ String skinId = "";
+ AndroidEmuDefBean bean = emuDefs.get(emuDefId);
+
+ if (bean != null)
+ {
+ skinId = bean.getSkinId();
+ }
+
+ return skinId;
+ }
+
+ /**
+ * Get startup emulator command arguments
+ *
+ * @param emuDefId emulator ID
+ * @return emulator command line arguments
+ */
+ public String getCommandLineArgumentsForEmuDefinition(String emuDefId)
+ {
+ String arguments = "";
+ AndroidEmuDefBean bean = emuDefs.get(emuDefId);
+
+ if (bean != null)
+ {
+ arguments = bean.getCommandLineArguments();
+ }
+
+ return arguments;
+ }
+
+ /**
+ * Retrieve the input logic of the given emulator definition
+ * @param emuDefId id of the extension that declare emulator definitions.
+ * @return the IAndroidLogic associated to the given emulator definitions
+ */
+ public IInputLogic getInputLogic(String emuDefId, IAndroidEmulatorInstance instance)
+ {
+
+ IInputLogic inputLogic = null;
+
+ try
+ {
+ inputLogic = (IInputLogic) PluginUtils.getExecutable(emuDefId, "inputLogic");
+ inputLogic.init(instance);
+ }
+ catch (Exception e)
+ {
+ error("Could not retrieve the input logic from definition " + emuDefId);
+ }
+
+ return inputLogic;
+ }
+
+ /**
+ * Get the start logic for the given emulator definition
+ * @param emuDefId id of the extension that declare emulator definitions.
+ * @return the IAndroidLogic associated to the given emulator definitions
+ */
+ public AbstractStartAndroidEmulatorLogic getStartLogic(String emuDefId)
+ {
+
+ AbstractStartAndroidEmulatorLogic startLogic = null;
+ AndroidEmuDefBean bean = emuDefs.get(emuDefId);
+
+ try
+ {
+ if (bean.getStartLogic() == null)
+ {
+ bean.setStartLogic((AbstractStartAndroidEmulatorLogic) PluginUtils.getExecutable(
+ emuDefId, "startLogic"));
+ }
+ startLogic = bean.getStartLogic();
+ }
+ catch (Exception e)
+ {
+ error("Could not retrieve the Start logic for " + emuDefId);
+ }
+
+ return startLogic;
+ }
+}