+ @Override
+ public void addDevice(String uri) {
+ try {
+ m.addDeviceLink(new URI(uri));
+ } catch (IOException | InvalidKeyException e) {
+ throw new Error.Failure(e.getClass().getSimpleName() + " Add device link failed. " + e.getMessage());
+ } catch (URISyntaxException e) {
+ throw new Error.InvalidUri(e.getClass().getSimpleName() + " Device link uri has invalid format: " + e.getMessage());
+ }
+ }
+
+ @Override
+ public void removeDevice(int deviceId) {
+ try {
+ m.removeLinkedDevices(deviceId);
+ } catch (IOException e) {
+ throw new Error.Failure(e.getClass().getSimpleName() + ": Error while removing device: " + e.getMessage());
+ }
+ }
+
+ @Override
+ public List<String> listDevices() {
+ List<Device> devices;
+ List<String> results = new ArrayList<String>();
+
+ try {
+ devices = m.getLinkedDevices();
+ } catch (IOException | Error.Failure e) {
+ throw new Error.Failure("Failed to get linked devices: " + e.getMessage());
+ }
+
+ return devices.stream()
+ .map(d -> d.getName() == null ? "" : d.getName())
+ .collect(Collectors.toList());
+ }
+
+ @Override
+ public void updateDeviceName(String deviceName) {
+ try {
+ m.updateAccountAttributes(deviceName);
+ } catch (IOException | Signal.Error.Failure e) {
+ throw new Error.Failure("UpdateAccount error: " + e.getMessage());
+ }
+ }
+