package com.github.sdbg.debug.core.internal.util; import com.github.sdbg.debug.core.SDBGDebugCorePlugin; import com.github.sdbg.debug.core.util.IDeviceChooser; import com.github.sdbg.debug.core.util.IDeviceInfo; import java.util.ArrayList; import java.util.List; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.debug.core.DebugException; public class IDFilterDeviceChooser implements IDeviceChooser { private String idFilter; private IDeviceChooser delegate; public IDFilterDeviceChooser(String idFilter, IDeviceChooser delegate) { this.delegate = delegate; this.idFilter = idFilter; } @Override public IDeviceInfo chooseDevice(List<? extends IDeviceInfo> devices) throws CoreException { if (idFilter != null && idFilter.length() > 0) { List<IDeviceInfo> newDevices = new ArrayList<IDeviceInfo>(); for (IDeviceInfo device : devices) { if (device.getId() != null && device.getId().toLowerCase().contains(idFilter.toLowerCase())) { newDevices.add(device); } } if (!devices.isEmpty() && newDevices.isEmpty()) { throw new DebugException(new Status( IStatus.ERROR, SDBGDebugCorePlugin.PLUGIN_ID, "No Android device found with ID matching \"" + idFilter + "\". Connection cancelled.")); } devices = newDevices; } if (devices.isEmpty()) { return null; } else if (devices.size() == 1) { return devices.get(0); } else if (delegate != null) { return delegate.chooseDevice(devices); } else { // Just choose the first one matching the criteria return devices.get(0); } } }