quartzPro/.svn/pristine/dc/dc9568b9c8f006a4af2c6400b3c...

149 lines
5.2 KiB
Plaintext

package com.ifish.jpush.push.model.audience;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonPrimitive;
import com.ifish.jpush.push.model.PushModel;
import com.ifish.jpush.utils.Preconditions;
public class Audience implements PushModel {
private static final String ALL = "all";
private final boolean all;
private final Set<AudienceTarget> targets;
private Audience(boolean all, Set<AudienceTarget> targets) {
this.all = all;
this.targets = targets;
}
public static Builder newBuilder() {
return new Builder();
}
public static Audience all() {
return newBuilder().setAll(true).build();
}
public static Audience tag(String... tagValue) {
AudienceTarget target = AudienceTarget.newBuilder()
.setAudienceType(AudienceType.TAG)
.addAudienceTargetValues(tagValue).build();
return newBuilder().addAudienceTarget(target).build();
}
public static Audience tag(Collection<String> tagValues) {
AudienceTarget target = AudienceTarget.newBuilder()
.setAudienceType(AudienceType.TAG)
.addAudienceTargetValues(tagValues).build();
return newBuilder().addAudienceTarget(target).build();
}
public static Audience tag_and(String... tagValue) {
AudienceTarget target = AudienceTarget.newBuilder()
.setAudienceType(AudienceType.TAG_AND)
.addAudienceTargetValues(tagValue).build();
return newBuilder().addAudienceTarget(target).build();
}
public static Audience tag_and(Collection<String> tagValues) {
AudienceTarget target = AudienceTarget.newBuilder()
.setAudienceType(AudienceType.TAG_AND)
.addAudienceTargetValues(tagValues).build();
return newBuilder().addAudienceTarget(target).build();
}
public static Audience alias(String... alias) {
AudienceTarget target = AudienceTarget.newBuilder()
.setAudienceType(AudienceType.ALIAS)
.addAudienceTargetValues(alias).build();
return newBuilder().addAudienceTarget(target).build();
}
public static Audience alias(Collection<String> aliases) {
AudienceTarget target = AudienceTarget.newBuilder()
.setAudienceType(AudienceType.ALIAS)
.addAudienceTargetValues(aliases).build();
return newBuilder().addAudienceTarget(target).build();
}
public static Audience segment(String... segment) {
AudienceTarget target = AudienceTarget.newBuilder()
.setAudienceType(AudienceType.SEGMENT)
.addAudienceTargetValues(segment).build();
return newBuilder().addAudienceTarget(target).build();
}
public static Audience segment(Collection<String> segments) {
AudienceTarget target = AudienceTarget.newBuilder()
.setAudienceType(AudienceType.SEGMENT)
.addAudienceTargetValues(segments).build();
return newBuilder().addAudienceTarget(target).build();
}
public static Audience registrationId(String... registrationId) {
AudienceTarget target = AudienceTarget.newBuilder()
.setAudienceType(AudienceType.REGISTRATION_ID)
.addAudienceTargetValues(registrationId).build();
return newBuilder().addAudienceTarget(target).build();
}
public static Audience registrationId(Collection<String> registrationIds) {
AudienceTarget target = AudienceTarget.newBuilder()
.setAudienceType(AudienceType.REGISTRATION_ID)
.addAudienceTargetValues(registrationIds).build();
return newBuilder().addAudienceTarget(target).build();
}
public boolean isAll() {
return this.all;
}
public JsonElement toJSON() {
if (all) {
return new JsonPrimitive(ALL);
}
// if not all, there will be target be set.
JsonObject json = new JsonObject();
if (null != targets) {
for (AudienceTarget target : targets) {
json.add(target.getAudienceTypeValue(), target.toJSON());
}
}
return json;
}
public static class Builder {
private boolean all = false;
private Set<AudienceTarget> audienceBuilder = null;
public Builder setAll(boolean all) {
this.all = all;
return this;
}
public Builder addAudienceTarget(AudienceTarget target) {
if (null == audienceBuilder) {
audienceBuilder = new HashSet<AudienceTarget>();
}
audienceBuilder.add(target);
return this;
}
public Audience build() {
Preconditions.checkArgument(! (all && null != audienceBuilder), "If audience is all, no any other audience may be set.");
Preconditions.checkArgument(! (all == false && null == audienceBuilder), "No any audience target is set.");
return new Audience(all, audienceBuilder);
}
}
}