package com.ifish.jpush.push.model; import java.util.HashSet; import java.util.Set; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonPrimitive; import com.ifish.jpush.common.DeviceType; import com.ifish.jpush.utils.Preconditions; public class Platform implements PushModel { private static final String ALL = "all"; private final boolean all; private final Set deviceTypes; private Platform(boolean all, Set deviceTypes) { this.all = all; this.deviceTypes = deviceTypes; } public static Builder newBuilder() { return new Builder(); } public static Platform all() { return newBuilder().setAll(true).build(); } public static Platform android() { return newBuilder().addDeviceType(DeviceType.Android).build(); } public static Platform ios() { return newBuilder().addDeviceType(DeviceType.IOS).build(); } public static Platform winphone() { return newBuilder().addDeviceType(DeviceType.WinPhone).build(); } public static Platform android_ios() { return newBuilder() .addDeviceType(DeviceType.Android) .addDeviceType(DeviceType.IOS) .build(); } public static Platform android_winphone() { return newBuilder() .addDeviceType(DeviceType.Android) .addDeviceType(DeviceType.WinPhone) .build(); } public static Platform ios_winphone() { return newBuilder() .addDeviceType(DeviceType.IOS) .addDeviceType(DeviceType.WinPhone) .build(); } public boolean isAll() { return all; } @Override public JsonElement toJSON() { if (all) { return new JsonPrimitive(ALL); } JsonArray json = new JsonArray(); for (DeviceType deviceType : deviceTypes) { json.add(new JsonPrimitive(deviceType.value())); } return json; } public static class Builder { private boolean all; private Set deviceTypes; public Builder setAll(boolean all) { this.all = all; return this; } public Builder addDeviceType(DeviceType deviceType) { if (null == deviceTypes) { deviceTypes = new HashSet(); } deviceTypes.add(deviceType); return this; } public Platform build() { Preconditions.checkArgument(! (all && null != deviceTypes), "Since all is enabled, any platform should not be set."); Preconditions.checkArgument(! (!all && null == deviceTypes), "No any deviceType is set."); return new Platform(all, deviceTypes); } } }