mlaccetti/JavaPNS

View on GitHub
src/main/java/javapns/devices/Devices.java

Summary

Maintainability
B
5 hrs
Test Coverage
package javapns.devices;

import javapns.devices.implementations.basic.BasicDevice;
import javapns.notification.PayloadPerDevice;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Devices {

  private Devices() {}

  public static List<Device> asDevices(final Object rawList) {
    final List<Device> list = new ArrayList<>();
    if (rawList == null) {
      return list;
    }

    if (rawList instanceof List) {
      final List devices = (List) rawList;
      if (devices.isEmpty()) {
        return list;
      }

      final Object firstDevice = devices.get(0);
      if (firstDevice instanceof Device) {
        //noinspection unchecked
        return devices;
      } else if (firstDevice instanceof String) {
        for (final Object token : devices) {
          final BasicDevice device = new BasicDevice();
          device.setToken((String) token);
          list.add(device);
        }
      }
    } else if (rawList instanceof String[]) {
      final String[] tokens = (String[]) rawList;
      for (final String token : tokens) {
        final BasicDevice device = new BasicDevice();
        device.setToken(token);
        list.add(device);
      }
    } else if (rawList instanceof Device[]) {
      final Device[] dvs = (Device[]) rawList;
      return Arrays.asList(dvs);
    } else if (rawList instanceof String) {
      final BasicDevice device = new BasicDevice();
      device.setToken((String) rawList);
      list.add(device);
    } else if (rawList instanceof Device) {
      list.add((Device) rawList);
    } else {
      throw new IllegalArgumentException("Device list type not supported. Supported types are: String[], List<String>, Device[], List<Device>, String and Device");
    }
    return list;
  }

  public static List<PayloadPerDevice> asPayloadsPerDevices(final Object rawList) {
    final List<PayloadPerDevice> list = new ArrayList<>();
    if (rawList == null) {
      return list;
    }
    if (rawList instanceof List) {
      final List devices = (List) rawList;
      if (devices.isEmpty()) {
        return list;
      }
      //noinspection unchecked
      return devices;
    } else if (rawList instanceof PayloadPerDevice[]) {
      final PayloadPerDevice[] dvs = (PayloadPerDevice[]) rawList;
      return Arrays.asList(dvs);
    } else if (rawList instanceof PayloadPerDevice) {
      list.add((PayloadPerDevice) rawList);
    } else {
      throw new IllegalArgumentException("PayloadPerDevice list type not supported. Supported types are: PayloadPerDevice[], List<PayloadPerDevice> and PayloadPerDevice");
    }
    return list;
  }
}