diff options
Diffstat (limited to 'src/plugins/android/src/com/motorola/studio/android/devices/DevicesManager.java')
-rw-r--r-- | src/plugins/android/src/com/motorola/studio/android/devices/DevicesManager.java | 284 |
1 files changed, 284 insertions, 0 deletions
diff --git a/src/plugins/android/src/com/motorola/studio/android/devices/DevicesManager.java b/src/plugins/android/src/com/motorola/studio/android/devices/DevicesManager.java new file mode 100644 index 0000000..18cd92a --- /dev/null +++ b/src/plugins/android/src/com/motorola/studio/android/devices/DevicesManager.java @@ -0,0 +1,284 @@ +/* + * 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.devices; + +import java.util.Collection; +import java.util.Comparator; +import java.util.HashSet; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.TreeSet; + +import org.eclipse.core.runtime.NullProgressMonitor; +import org.eclipse.sequoyah.device.common.utilities.exception.SequoyahException; +import org.eclipse.sequoyah.device.framework.DeviceUtils; +import org.eclipse.sequoyah.device.framework.factory.DeviceTypeRegistry; +import org.eclipse.sequoyah.device.framework.factory.InstanceRegistry; +import org.eclipse.sequoyah.device.framework.manager.InstanceManager; +import org.eclipse.sequoyah.device.framework.model.IDeviceType; +import org.eclipse.sequoyah.device.framework.model.IInstance; +import org.eclipse.sequoyah.device.framework.model.IInstanceBuilder; +import org.eclipse.sequoyah.device.framework.model.IService; +import org.eclipse.sequoyah.device.framework.model.handler.IServiceHandler; + +import com.motorola.studio.android.adt.DDMSFacade; +import com.motorola.studio.android.adt.ISerialNumbered; + +/** + * This manager provides information about device instances + * It shall work with TmL to be able to provide these information + */ +public class DevicesManager +{ + + // instance + private static DevicesManager instance; + + /** + * Singleton + * + * @return a unique DevicesManager instance + */ + public static DevicesManager getInstance() + { + if (instance == null) + { + instance = new DevicesManager(); + } + return instance; + } + + /** + * Get all devices registered in TmL + * + * @return all devices registered in TmL + */ + public Collection<ISerialNumbered> getAllDevices() + { + Collection<ISerialNumbered> devicesCollection = new LinkedHashSet<ISerialNumbered>(); + + List<IInstance> tmlDevices = InstanceRegistry.getInstance().getInstances(); + + for (IInstance tmlInstance : tmlDevices) + { + if (tmlInstance instanceof ISerialNumbered) + { + devicesCollection.add((ISerialNumbered) tmlInstance); + } + } + return devicesCollection; + } + + /** + * Get all devices registered in TmL, sorted using the comparator passed as a parameter + * + * @param comparator the comparator that will be used to sort the devices list + * @return all devices registered in TmL, sorted using the comparator passed as a parameter + */ + public Collection<ISerialNumbered> getAllDevices(Comparator<ISerialNumbered> comparator) + { + Collection<ISerialNumbered> sortedDevices = new TreeSet<ISerialNumbered>(comparator); + sortedDevices.addAll(getAllDevices()); + return sortedDevices; + } + + /** + * Get all devices registered in TmL, sorted using the default comparator + * + * @return all devices registered in TmL, sorted using the default comparator + */ + public Collection<ISerialNumbered> getAllDevicesSorted() + { + return getAllDevices(getDefaultComparator()); + } + + /** + * Get the device, given its name + * + * @param name the device name + * @return a device instance + */ + public ISerialNumbered getDeviceByName(String name) + { + ISerialNumbered instanceToReturn = null; + + for (ISerialNumbered device : getAllDevices()) + { + if (device.getDeviceName().equals(name)) + { + instanceToReturn = device; + break; + } + } + return instanceToReturn; + + } + + /** + * Get the device, given its serial number + * + * @param serial the device serial name + * @return a device instance + */ + public ISerialNumbered getDeviceBySerialNumber(String serial) + { + ISerialNumbered instanceToReturn = null; + + String serialNumber = ""; + for (ISerialNumbered device : getAllDevices()) + { + if ((serialNumber = device.getSerialNumber()) != null) + { + if (serialNumber.equals(serial)) + { + instanceToReturn = device; + break; + } + } + } + return instanceToReturn; + + } + + /** + * Get all devices of certain type + * + * @param type the device type + * @return all devices of the device passed as a parameter + */ + @SuppressWarnings("unchecked") + public Collection<ISerialNumbered> getInstancesByType(Class type) + { + Collection<ISerialNumbered> instancesToReturn = new LinkedHashSet<ISerialNumbered>(); + + for (ISerialNumbered device : getAllDevices()) + { + if (device.getClass().equals(type)) + { + instancesToReturn.add(device); + } + } + return instancesToReturn; + + } + + /** + * Get all online devices of certain type + * + * @param type the device type + * @return all online devices of the device passed as a parameter + */ + @SuppressWarnings("unchecked") + public Collection<ISerialNumbered> getOnlineDevicesByType(Class type) + { + Collection<ISerialNumbered> instancesToReturn = new HashSet<ISerialNumbered>(); + + String serialNumber = null; + for (ISerialNumbered device : getInstancesByType(type)) + { + if (((serialNumber = device.getSerialNumber()) != null) + && (DDMSFacade.isDeviceOnline(serialNumber))) + { + instancesToReturn.add(device); + } + } + return instancesToReturn; + + } + + /** + * The default comparator to be used to sort ISerialNumbered instances + * It considers if the devices are online and after that it compares their names + * Online devices shall be placed in the beginning of the list + * + * @return a Comparator instance + */ + public static Comparator<ISerialNumbered> getDefaultComparator() + { + return new Comparator<ISerialNumbered>() + { + public int compare(ISerialNumbered serial1, ISerialNumbered serial2) + { + int compareResult; + + String name1 = serial1.getDeviceName(); + String name2 = serial2.getDeviceName(); + boolean dev1online = serial1.getSerialNumber() != null; + boolean dev2online = serial2.getSerialNumber() != null; + + if ((dev1online && dev2online) || (!dev1online && !dev2online)) + { + compareResult = name1.compareToIgnoreCase(name2); + } + else if (dev1online) + { + compareResult = -1; + } + else + // dev2online + { + compareResult = 1; + } + + return compareResult; + } + }; + } + + /** + * Creates a TmL instance + * + * @param serialNumber The serial number of the device to create a TmL instance for + * @throws TmLException + */ + public void createInstanceForDevice(String serialNumber, String deviceTypeID, + IInstanceBuilder instanceBuilder, String initServiceID) throws SequoyahException + { + + ISerialNumbered instance = getDeviceBySerialNumber(serialNumber); + if (instance == null) + { + IDeviceType tmlDeviceType = + DeviceTypeRegistry.getInstance().getDeviceTypeById(deviceTypeID); + + InstanceManager + .createProject(tmlDeviceType, instanceBuilder, new NullProgressMonitor()); + + IInstance newInstance = (IInstance) getDeviceBySerialNumber(serialNumber); + IService service = DeviceUtils.getServiceById(tmlDeviceType, initServiceID); + IServiceHandler handler = service.getHandler(); + handler.run(newInstance); + } + + } + + /** + * Destroys the TmL instance + * + * @param device The device to delete the correspondent TmL instance + */ + public void deleteInstanceOfDevice(String serialNumber) + { + + IInstance instanceToDelete = (IInstance) getDeviceBySerialNumber(serialNumber); + if (instanceToDelete != null) + { + InstanceManager.deleteInstance(instanceToDelete); + } + + } + +} |