初始化
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
package com.ifish.jpush.common.resp;
|
||||
|
||||
/**
|
||||
* Should retry for encountering this exception basically.
|
||||
* Normally it is due to:
|
||||
* 1. Connect timed out.
|
||||
* 2. Read timed out.
|
||||
* 3. Cannot parse domain.
|
||||
*
|
||||
* For Push action, if the exception is "Read timed out" you may not want to retry it.
|
||||
*/
|
||||
public class APIConnectionException extends Exception {
|
||||
private static final long serialVersionUID = -2615370590441195647L;
|
||||
private boolean readTimedout = false;
|
||||
private int doneRetriedTimes = 0;
|
||||
|
||||
public APIConnectionException(String message, Throwable e) {
|
||||
super(message, e);
|
||||
}
|
||||
|
||||
public APIConnectionException(String message, Throwable e, int doneRetriedTimes) {
|
||||
super(message, e);
|
||||
this.doneRetriedTimes = doneRetriedTimes;
|
||||
}
|
||||
|
||||
public APIConnectionException(String message, Throwable e, boolean readTimedout) {
|
||||
super(message, e);
|
||||
this.readTimedout = readTimedout;
|
||||
}
|
||||
|
||||
public boolean isReadTimedout() {
|
||||
return readTimedout;
|
||||
}
|
||||
|
||||
public int getDoneRetriedTimes() {
|
||||
return this.doneRetriedTimes;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,175 @@
|
||||
package com.ifish.jpush.schedule.model;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.JsonArray;
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonObject;
|
||||
import com.google.gson.JsonPrimitive;
|
||||
import com.ifish.jpush.common.TimeUnit;
|
||||
import com.ifish.jpush.utils.Preconditions;
|
||||
import com.ifish.jpush.utils.StringUtils;
|
||||
import com.ifish.jpush.utils.TimeUtils;
|
||||
|
||||
|
||||
public class TriggerPayload implements IModel {
|
||||
|
||||
private static Gson gson = new Gson();
|
||||
|
||||
private Type type;
|
||||
|
||||
private String start;
|
||||
private String end;
|
||||
private String time;
|
||||
private TimeUnit time_unit;
|
||||
private int frequency;
|
||||
private String[] point;
|
||||
|
||||
private TriggerPayload(String time) {
|
||||
this.type = Type.single;
|
||||
this.time = time;
|
||||
}
|
||||
|
||||
private TriggerPayload(String start, String end, String time, TimeUnit time_unit, int frequency, String[] point) {
|
||||
this.type = Type.periodical;
|
||||
this.start = start;
|
||||
this.end = end;
|
||||
this.time = time;
|
||||
this.time_unit = time_unit;
|
||||
this.frequency = frequency;
|
||||
this.point = point;
|
||||
}
|
||||
|
||||
public static Builder newBuilder() {
|
||||
return new Builder();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return gson.toJson(toJSON());
|
||||
}
|
||||
|
||||
@Override
|
||||
public JsonElement toJSON() {
|
||||
JsonObject json = new JsonObject();
|
||||
switch (type) {
|
||||
case single:
|
||||
JsonObject s = new JsonObject();
|
||||
s.addProperty("time", time);
|
||||
json.add(Type.single.name(), s);
|
||||
break;
|
||||
case periodical:
|
||||
JsonObject p = new JsonObject();
|
||||
p.addProperty("start", start);
|
||||
p.addProperty("end", end);
|
||||
p.addProperty("time", time);
|
||||
p.addProperty("time_unit", time_unit.name().toLowerCase());
|
||||
p.addProperty("frequency", frequency);
|
||||
if( !TimeUnit.DAY.equals(time_unit) ) {
|
||||
JsonArray array = new JsonArray();
|
||||
for (String aPoint : point) {
|
||||
array.add(new JsonPrimitive(aPoint));
|
||||
}
|
||||
p.add("point", array);
|
||||
}
|
||||
json.add(Type.periodical.name(), p);
|
||||
break;
|
||||
default:
|
||||
// nothing
|
||||
}
|
||||
return json;
|
||||
}
|
||||
|
||||
public static enum Type {
|
||||
single, periodical
|
||||
}
|
||||
|
||||
public static class Builder{
|
||||
|
||||
private String start;
|
||||
private String end;
|
||||
private String time;
|
||||
private TimeUnit time_unit;
|
||||
private int frequency;
|
||||
private String[] point;
|
||||
|
||||
/**
|
||||
* Setup time for single trigger.
|
||||
* @param time The execute time, format yyyy-MM-dd HH:mm:ss
|
||||
* @return this Builder
|
||||
*/
|
||||
public Builder setSingleTime(String time) {
|
||||
this.time = time;
|
||||
return this;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Setup period for periodical trigger.
|
||||
* @param start The start time, format yyyy-MM-dd HH:mm:ss
|
||||
* @param end The end time, format yyyy-MM-dd HH:mm:ss
|
||||
* @param time The execute time, format HH:mm:ss
|
||||
* @return this Builder
|
||||
*/
|
||||
public Builder setPeriodTime(String start, String end, String time) {
|
||||
this.start = start;
|
||||
this.end = end;
|
||||
this.time = time;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Setup frequency for periodical trigger.
|
||||
* @param time_unit The time unit, can be day, week or month.
|
||||
* @param frequency The frequency cooperate with time unit, must between 1 and 100.
|
||||
* @param point The time point cooperate with time unit.
|
||||
* If time unit is day, the point should be null.
|
||||
* If time unit is week, should be the abbreviation of the days. eg. {"MON", "TUE"}
|
||||
* If time unit is month, should be the date of the days. eg. {"01", "03"}
|
||||
* @return this Builder
|
||||
*/
|
||||
public Builder setTimeFrequency(TimeUnit time_unit, int frequency, String[] point) {
|
||||
this.time_unit = time_unit;
|
||||
this.frequency = frequency;
|
||||
this.point = point;
|
||||
return this;
|
||||
}
|
||||
|
||||
public TriggerPayload buildSingle() {
|
||||
Preconditions.checkArgument(StringUtils.isNotEmpty(time), "The time must not be empty.");
|
||||
Preconditions.checkArgument(TimeUtils.isDateFormat(time), "The time format is incorrect.");
|
||||
return new TriggerPayload(time);
|
||||
}
|
||||
|
||||
public TriggerPayload buildPeriodical() {
|
||||
Preconditions.checkArgument(StringUtils.isNotEmpty(start), "The start must not be empty.");
|
||||
Preconditions.checkArgument(StringUtils.isNotEmpty(end), "The end must not be empty.");
|
||||
Preconditions.checkArgument(StringUtils.isNotEmpty(time), "The time must not be empty.");
|
||||
|
||||
Preconditions.checkArgument(TimeUtils.isDateFormat(start), "The start format is incorrect.");
|
||||
Preconditions.checkArgument(TimeUtils.isDateFormat(end), "The end format is incorrect.");
|
||||
Preconditions.checkArgument(TimeUtils.isTimeFormat(time), "The time format is incorrect.");
|
||||
|
||||
Preconditions.checkNotNull(time_unit, "The time_unit must not be null.");
|
||||
Preconditions.checkArgument(isTimeUnitOk(time_unit), "The time unit must be DAY, WEEK or MONTH.");
|
||||
|
||||
Preconditions.checkArgument(frequency > 0 && frequency < 101, "The frequency must be a int between 1 and 100.");
|
||||
|
||||
return new TriggerPayload(start, end, time, time_unit, frequency, point);
|
||||
}
|
||||
|
||||
private boolean isTimeUnitOk(TimeUnit timeUnit) {
|
||||
switch (timeUnit) {
|
||||
case HOUR:
|
||||
return false;
|
||||
case DAY:
|
||||
case WEEK:
|
||||
case MONTH:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user