| /* |
| * 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.core.devfrm; |
| |
| import java.util.ArrayList; |
| import java.util.Collection; |
| import java.util.HashSet; |
| import java.util.LinkedHashSet; |
| import java.util.Set; |
| |
| import org.eclipse.core.runtime.CoreException; |
| 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.Platform; |
| |
| import com.motorola.studio.android.emulator.EmulatorPlugin; |
| import com.motorola.studio.android.emulator.core.model.IAndroidEmulatorInstance; |
| |
| /** |
| * DESCRIPTION: |
| * This class manages the device frameworks that extend the deviceFramework |
| * extension |
| * |
| * RESPONSIBILITY: |
| * Retrieve all deviceFramework extension data and provide a compiled |
| * view of the information provided by each extension implementer |
| * |
| * COLABORATORS: |
| * None. |
| * |
| * USAGE: |
| * Use each public method to get the desired information |
| */ |
| public class DeviceFrameworkManager |
| { |
| /* |
| * Extension point related ids section |
| */ |
| private static final String DEV_FRAMEWORK_EXTENSION_POINT_ID = |
| EmulatorPlugin.PLUGIN_ID + ".deviceFramework"; |
| |
| private static final String DEV_FRAMEWORK_ELEM = "deviceFramework"; |
| |
| private static final String DEV_FRAMEWORK_IMPL_CLASS_ATTR = "class"; |
| |
| /** |
| * This is a singleton class. The instance is stored in this attribute |
| */ |
| private static DeviceFrameworkManager instance; |
| |
| /** |
| * A collection containing the classes provided by each extension |
| * implementer for retrieving framework data |
| */ |
| private Collection<IDeviceFrameworkSupport> allFrameworks = |
| new HashSet<IDeviceFrameworkSupport>(); |
| |
| /** |
| * Singleton private constructor |
| */ |
| private DeviceFrameworkManager() |
| { |
| populateModel(); |
| } |
| |
| /** |
| * Gets the instance of the class |
| * |
| * @return The instance of the class |
| */ |
| public static DeviceFrameworkManager getInstance() |
| { |
| if (instance == null) |
| { |
| instance = new DeviceFrameworkManager(); |
| } |
| |
| return instance; |
| } |
| |
| /** |
| * Retrieves all instances managed by every device framework |
| * which contributes with the deviceFramework extension point |
| * |
| * @return A collection containing all instances from all frameworks |
| */ |
| public Collection<IAndroidEmulatorInstance> getAllInstances() |
| { |
| Collection<IAndroidEmulatorInstance> allInstancesSet = |
| new LinkedHashSet<IAndroidEmulatorInstance>(); |
| for (IDeviceFrameworkSupport devFramework : allFrameworks) |
| { |
| Collection<IAndroidEmulatorInstance> devFrmInstances = devFramework.getAllInstances(); |
| if (devFrmInstances != null) |
| { |
| allInstancesSet.addAll(devFrmInstances); |
| } |
| } |
| |
| return allInstancesSet; |
| } |
| |
| /** |
| * Retrieve all registered and available instances |
| * |
| * @return List containing all registered and available instances |
| */ |
| public Collection<IAndroidEmulatorInstance> getAvailableInstances() |
| { |
| Collection<IAndroidEmulatorInstance> allInstances = getAllInstances(); |
| Collection<IAndroidEmulatorInstance> enabledInstances = |
| new ArrayList<IAndroidEmulatorInstance>(allInstances.size()); |
| |
| for (IAndroidEmulatorInstance emulatorInstance : allInstances) |
| { |
| if (emulatorInstance.isAvailable()) |
| { |
| enabledInstances.add(emulatorInstance); |
| } |
| } |
| return enabledInstances; |
| } |
| |
| /** |
| * Retrieve a collection of names of all the IAndroidEmulatorInstance |
| * of all Device frameworks... |
| * @return A collection of all instances of IAndroidEmulatorInstance. |
| */ |
| public Collection<String> getAllInstanceNames() |
| { |
| Collection<String> allInstancesNames = new LinkedHashSet<String>(); |
| for (IDeviceFrameworkSupport devFramework : allFrameworks) |
| { |
| for (IAndroidEmulatorInstance instance : devFramework.getAllInstances()) |
| { |
| allInstancesNames.add(instance.getName()); |
| } |
| } |
| |
| return allInstancesNames; |
| |
| } |
| |
| /** |
| * Retrieves the first occurrence of a IAndroidEmulatorInstance with the given name |
| * provided by any framework. |
| * @param name of the emulator instance to be retrieved. |
| * @return reference to a IAndroidEmulatorInstance with the given name or a null |
| * is there are no emulator instance with the given name. |
| */ |
| public IAndroidEmulatorInstance getInstanceByName(String name) |
| { |
| IAndroidEmulatorInstance instanceToReturn = null; |
| |
| for (IAndroidEmulatorInstance instance : getAllInstances()) |
| { |
| if (Platform.getOS().equals(Platform.WS_WIN32)) |
| { |
| if (instance.getName().toLowerCase().equals(name.toLowerCase())) |
| { |
| instanceToReturn = instance; |
| break; |
| } |
| } |
| else |
| { |
| if (instance.getName().equals(name)) |
| { |
| instanceToReturn = instance; |
| break; |
| } |
| } |
| |
| } |
| return instanceToReturn; |
| |
| } |
| |
| /** |
| * Retrieves all <b>started</b> instances managed by every device framework |
| * which contributes with the deviceFramework extension point |
| * |
| * @return A collection containing all started instances from all frameworks |
| */ |
| public Collection<IAndroidEmulatorInstance> getAllStartedInstances() |
| { |
| Collection<IAndroidEmulatorInstance> startedInstancesSet = |
| new HashSet<IAndroidEmulatorInstance>(); |
| for (IDeviceFrameworkSupport devFramework : allFrameworks) |
| { |
| Collection<IAndroidEmulatorInstance> devFrmInstances = devFramework.getAllInstances(); |
| if (devFrmInstances != null) |
| { |
| for (IAndroidEmulatorInstance instance : devFrmInstances) |
| { |
| if (instance.isStarted()) |
| { |
| startedInstancesSet.add(instance); |
| } |
| } |
| } |
| } |
| |
| return startedInstancesSet; |
| } |
| |
| /** |
| * Retrieves all <b>connected</b> instances managed by every device framework |
| * which contributes with the deviceFramework extension point |
| * |
| * @return A collection containing all connected instances from all frameworks |
| */ |
| public Collection<IAndroidEmulatorInstance> getAllConnectedInstances() |
| { |
| Collection<IAndroidEmulatorInstance> connectedInstancesSet = |
| new HashSet<IAndroidEmulatorInstance>(); |
| for (IDeviceFrameworkSupport devFramework : allFrameworks) |
| { |
| Collection<IAndroidEmulatorInstance> devFrmInstances = devFramework.getAllInstances(); |
| if (devFrmInstances != null) |
| { |
| for (IAndroidEmulatorInstance instance : devFrmInstances) |
| { |
| if (instance.isConnected()) |
| { |
| connectedInstancesSet.add(instance); |
| } |
| } |
| } |
| } |
| |
| return connectedInstancesSet; |
| } |
| |
| /** |
| * Retrieves all started instances host addresses managed by every |
| * device framework which contributes with the deviceFramework extension point |
| * |
| * @return A collection containing all instances from all frameworks |
| */ |
| public Set<String> getAllStartedInstancesHosts() |
| { |
| Set<String> hostSet = new HashSet<String>(); |
| for (IDeviceFrameworkSupport devFramework : allFrameworks) |
| { |
| Collection<IAndroidEmulatorInstance> devFrmInstances = devFramework.getAllInstances(); |
| if (devFrmInstances != null) |
| { |
| for (IAndroidEmulatorInstance instance : devFrmInstances) |
| { |
| if (instance.isStarted()) |
| { |
| hostSet.add(instance.getInstanceIdentifier()); |
| } |
| } |
| } |
| } |
| |
| return hostSet; |
| } |
| |
| /** |
| * Populates the allFrameworks collection with framework contributed |
| * classes for retrieving framework information. |
| */ |
| private void populateModel() |
| { |
| IExtensionRegistry extReg = Platform.getExtensionRegistry(); |
| IExtensionPoint extPoint = extReg.getExtensionPoint(DEV_FRAMEWORK_EXTENSION_POINT_ID); |
| IExtension[] extensions = extPoint.getExtensions(); |
| |
| for (IExtension aExtension : extensions) |
| { |
| IConfigurationElement[] configElements = aExtension.getConfigurationElements(); |
| for (IConfigurationElement aConfig : configElements) |
| { |
| if (aConfig.getName().equals(DEV_FRAMEWORK_ELEM)) |
| { |
| try |
| { |
| IDeviceFrameworkSupport devFramework = |
| (IDeviceFrameworkSupport) aConfig |
| .createExecutableExtension(DEV_FRAMEWORK_IMPL_CLASS_ATTR); |
| if (devFramework != null) |
| { |
| allFrameworks.add(devFramework); |
| } |
| } |
| catch (CoreException e) |
| { |
| // Do nothing. |
| // If a device framework cannot be instantiated, it will |
| // not be plugged to emulator core plugin. |
| } |
| } |
| } |
| } |
| } |
| } |