224 lines
6.7 KiB
Java
224 lines
6.7 KiB
Java
/*
|
|
* Decompiled with CFR 0.152.
|
|
*/
|
|
package com.tridium.util;
|
|
|
|
import javax.baja.status.BStatus;
|
|
import javax.baja.sys.Action;
|
|
import javax.baja.sys.BAbsTime;
|
|
import javax.baja.sys.BComponent;
|
|
import javax.baja.sys.BFacets;
|
|
import javax.baja.sys.BRelTime;
|
|
import javax.baja.sys.BValue;
|
|
import javax.baja.sys.Clock;
|
|
import javax.baja.sys.Property;
|
|
import javax.baja.sys.Sys;
|
|
import javax.baja.sys.Type;
|
|
|
|
/*
|
|
* Illegal identifiers - consider using --renameillegalidents true
|
|
*/
|
|
public abstract class BRetryableAction
|
|
extends BComponent {
|
|
public static final Property status = BRetryableAction.newProperty(3, BStatus.ok, null);
|
|
public static final Property faultCause = BRetryableAction.newProperty(3, "", BFacets.make("fieldWidth", 55));
|
|
public static final Property delay = BRetryableAction.newProperty(0, BRelTime.makeSeconds(30), BFacets.make("min", BRelTime.DEFAULT));
|
|
public static final Property retryInterval = BRetryableAction.newProperty(0, BRelTime.makeMinutes(5), BFacets.make("min", BRelTime.makeSeconds(15)));
|
|
public static final Property lastSuccess = BRetryableAction.newProperty(1, BAbsTime.NULL, BFacets.make("showSeconds", true));
|
|
public static final Property lastAttempt = BRetryableAction.newProperty(1, BAbsTime.NULL, BFacets.make("showSeconds", true));
|
|
public static final Property nextExecuteTime = BRetryableAction.newProperty(1, BAbsTime.NULL, BFacets.make("showSeconds", true));
|
|
public static final Action schedule = BRetryableAction.newAction(0, null);
|
|
public static final Action execute = BRetryableAction.newAction(16, null);
|
|
public static final Action cancel = BRetryableAction.newAction(0, null);
|
|
public static final Type TYPE;
|
|
private Clock.Ticket ticket;
|
|
static /* synthetic */ Class class$com$tridium$util$BRetryableAction;
|
|
|
|
public BStatus getStatus() {
|
|
return (BStatus)this.get(status);
|
|
}
|
|
|
|
public void setStatus(BStatus bStatus) {
|
|
this.set(status, (BValue)bStatus, null);
|
|
}
|
|
|
|
public String getFaultCause() {
|
|
return this.getString(faultCause);
|
|
}
|
|
|
|
public void setFaultCause(String string) {
|
|
this.setString(faultCause, string, null);
|
|
}
|
|
|
|
public BRelTime getDelay() {
|
|
return (BRelTime)this.get(delay);
|
|
}
|
|
|
|
public void setDelay(BRelTime bRelTime) {
|
|
this.set(delay, (BValue)bRelTime, null);
|
|
}
|
|
|
|
public BRelTime getRetryInterval() {
|
|
return (BRelTime)this.get(retryInterval);
|
|
}
|
|
|
|
public void setRetryInterval(BRelTime bRelTime) {
|
|
this.set(retryInterval, (BValue)bRelTime, null);
|
|
}
|
|
|
|
public BAbsTime getLastSuccess() {
|
|
return (BAbsTime)this.get(lastSuccess);
|
|
}
|
|
|
|
public void setLastSuccess(BAbsTime bAbsTime) {
|
|
this.set(lastSuccess, (BValue)bAbsTime, null);
|
|
}
|
|
|
|
public BAbsTime getLastAttempt() {
|
|
return (BAbsTime)this.get(lastAttempt);
|
|
}
|
|
|
|
public void setLastAttempt(BAbsTime bAbsTime) {
|
|
this.set(lastAttempt, (BValue)bAbsTime, null);
|
|
}
|
|
|
|
public BAbsTime getNextExecuteTime() {
|
|
return (BAbsTime)this.get(nextExecuteTime);
|
|
}
|
|
|
|
public void setNextExecuteTime(BAbsTime bAbsTime) {
|
|
this.set(nextExecuteTime, (BValue)bAbsTime, null);
|
|
}
|
|
|
|
public void schedule() {
|
|
this.invoke(schedule, null, null);
|
|
}
|
|
|
|
public void execute() {
|
|
this.invoke(execute, null, null);
|
|
}
|
|
|
|
public void cancel() {
|
|
this.invoke(cancel, null, null);
|
|
}
|
|
|
|
public Type getType() {
|
|
return TYPE;
|
|
}
|
|
|
|
public void stationStarted() throws Exception {
|
|
super.stationStarted();
|
|
if (this.isRetryCondition()) {
|
|
this.schedule();
|
|
}
|
|
}
|
|
|
|
public final void doSchedule() {
|
|
BAbsTime bAbsTime = Clock.time();
|
|
BAbsTime bAbsTime2 = this.getNextExecuteTime();
|
|
if (bAbsTime2.isNull() || this.ticket.isExpired()) {
|
|
this.cancelTicket();
|
|
BAbsTime bAbsTime3 = bAbsTime.add(this.getDelay());
|
|
this.ticket = Clock.schedule((BComponent)this, bAbsTime3, execute, null);
|
|
this.setNextExecuteTime(bAbsTime3);
|
|
}
|
|
}
|
|
|
|
public final void doExecute() {
|
|
try {
|
|
this.setLastAttempt(Clock.time());
|
|
this.cancelTicket();
|
|
this.doExecution();
|
|
this.configSuccess();
|
|
}
|
|
catch (Exception exception) {
|
|
this.configFail(exception);
|
|
}
|
|
}
|
|
|
|
protected abstract void doExecution() throws Exception;
|
|
|
|
public final void doCancel() {
|
|
this.stopRetrying();
|
|
this.canceled();
|
|
}
|
|
|
|
protected void canceled() {
|
|
}
|
|
|
|
protected final void configSuccess() {
|
|
this.setStatus(BStatus.ok);
|
|
this.setFaultCause("");
|
|
this.setNextExecuteTime(BAbsTime.NULL);
|
|
this.setLastSuccess(Clock.time());
|
|
}
|
|
|
|
private final void configFail(Exception exception) {
|
|
String string = exception.getMessage();
|
|
if (string == null) {
|
|
string = "Execution failed.";
|
|
exception.printStackTrace();
|
|
}
|
|
this.setStatus(BStatus.fault);
|
|
this.setFaultCause(string);
|
|
this.scheduleRetry();
|
|
}
|
|
|
|
protected void scheduleRetry() {
|
|
this.cancelTicket();
|
|
BAbsTime bAbsTime = Clock.time().add(this.getRetryInterval());
|
|
this.ticket = Clock.schedule((BComponent)this, bAbsTime, execute, null);
|
|
this.setNextExecuteTime(bAbsTime);
|
|
}
|
|
|
|
protected final void stopRetrying() {
|
|
this.cancelTicket();
|
|
this.setStatus(BStatus.ok);
|
|
this.setFaultCause("");
|
|
this.setNextExecuteTime(BAbsTime.NULL);
|
|
}
|
|
|
|
protected final void cancelTicket() {
|
|
this.ticket.cancel();
|
|
this.ticket = Clock.expiredTicket;
|
|
}
|
|
|
|
public final boolean isRetryCondition() {
|
|
boolean bl = false;
|
|
if (!this.getNextExecuteTime().isNull() || this.getLastAttempt().isAfter(this.getLastSuccess())) {
|
|
bl = true;
|
|
}
|
|
return bl;
|
|
}
|
|
|
|
static /* synthetic */ Class class(String string, boolean bl) {
|
|
try {
|
|
Class<?> clazz = Class.forName(string);
|
|
if (!bl) {
|
|
clazz = clazz.getComponentType();
|
|
}
|
|
return clazz;
|
|
}
|
|
catch (ClassNotFoundException classNotFoundException) {
|
|
throw new NoClassDefFoundError(classNotFoundException.getMessage());
|
|
}
|
|
}
|
|
|
|
private final /* synthetic */ void this() {
|
|
this.ticket = Clock.expiredTicket;
|
|
}
|
|
|
|
public BRetryableAction() {
|
|
this.this();
|
|
}
|
|
|
|
static {
|
|
Class clazz = class$com$tridium$util$BRetryableAction;
|
|
if (clazz == null) {
|
|
clazz = class$com$tridium$util$BRetryableAction = BRetryableAction.class("[Lcom.tridium.util.BRetryableAction;", false);
|
|
}
|
|
TYPE = Sys.loadType(clazz);
|
|
}
|
|
}
|
|
|