/** * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.seyren.core.domain; import org.joda.time.DateTime; import org.joda.time.LocalTime; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.seyren.core.util.datetime.LocalTimeDeserializer; import com.seyren.core.util.datetime.LocalTimeSerializer; /** * This class represents something wanting to be notified of an alert * * @author mark * */ @JsonIgnoreProperties(ignoreUnknown = true) public class Subscription { private String id; private String target; private SubscriptionType type; private boolean su, mo, tu, we, th, fr, sa; private boolean ignoreWarn, ignoreError, ignoreOk; private LocalTime fromTime; private LocalTime toTime; private boolean enabled; public String getId() { return id; } public void setId(String id) { this.id = id; } public Subscription withId(String id) { setId(id); return this; } public String getTarget() { return target; } public void setTarget(String target) { this.target = target; } public Subscription withTarget(String target) { setTarget(target); return this; } public SubscriptionType getType() { return type; } public void setType(SubscriptionType type) { this.type = type; } public Subscription withType(SubscriptionType type) { setType(type); return this; } public boolean isSu() { return su; } public void setSu(boolean su) { this.su = su; } public Subscription withSu(boolean su) { setSu(su); return this; } public boolean isMo() { return mo; } public void setMo(boolean mo) { this.mo = mo; } public Subscription withMo(boolean mo) { setMo(mo); return this; } public boolean isTu() { return tu; } public void setTu(boolean tu) { this.tu = tu; } public Subscription withTu(boolean tu) { setTu(tu); return this; } public boolean isWe() { return we; } public void setWe(boolean we) { this.we = we; } public Subscription withWe(boolean we) { setWe(we); return this; } public boolean isTh() { return th; } public void setTh(boolean th) { this.th = th; } public Subscription withTh(boolean th) { setTh(th); return this; } public boolean isFr() { return fr; } public void setFr(boolean fr) { this.fr = fr; } public Subscription withFr(boolean fr) { setFr(fr); return this; } public boolean isSa() { return sa; } public void setSa(boolean sa) { this.sa = sa; } public Subscription withSa(boolean sa) { setSa(sa); return this; } public boolean isIgnoreWarn() { return ignoreWarn; } public void setIgnoreWarn(boolean ignoreWarn) { this.ignoreWarn = ignoreWarn; } public Subscription withIgnoreWarn(boolean ignoreWarn) { setIgnoreWarn(ignoreWarn); return this; } public boolean isIgnoreError() { return ignoreError; } public void setIgnoreError(boolean ignoreError) { this.ignoreError = ignoreError; } public Subscription withIgnoreError(boolean ignoreError) { setIgnoreError(ignoreError); return this; } public boolean isIgnoreOk() { return ignoreOk; } public void setIgnoreOk(boolean ignoreOk) { this.ignoreOk = ignoreOk; } public Subscription withIgnoreOk(boolean ignoreOk) { setIgnoreOk(ignoreOk); return this; } @JsonSerialize(using = LocalTimeSerializer.class) public LocalTime getFromTime() { return fromTime; } @JsonDeserialize(using = LocalTimeDeserializer.class) public void setFromTime(LocalTime fromTime) { this.fromTime = fromTime; } public Subscription withFromTime(LocalTime fromTime) { setFromTime(fromTime); return this; } @JsonSerialize(using = LocalTimeSerializer.class) public LocalTime getToTime() { return toTime; } @JsonDeserialize(using = LocalTimeDeserializer.class) public void setToTime(LocalTime toTime) { this.toTime = toTime; } public Subscription withToTime(LocalTime toTime) { setToTime(toTime); return this; } public boolean isEnabled() { return enabled; } public void setEnabled(boolean enabled) { this.enabled = enabled; } public Subscription withEnabled(boolean enabled) { setEnabled(enabled); return this; } public boolean shouldNotify(DateTime time, AlertType alertType) { if (!isEnabled()) { return false; } boolean isTimeGood = isCorrectDayOfWeek(time) && isCorrectHourOfDay(time); if (!isTimeGood) { return false; } if (alertType == AlertType.ERROR && ignoreError) { return false; } if (alertType == AlertType.WARN && ignoreWarn) { return false; } if (alertType == AlertType.OK && ignoreOk) { return false; } return true; } private boolean isCorrectHourOfDay(DateTime time) { LocalTime alertTime = new LocalTime(time.getHourOfDay(), time.getMinuteOfHour()); return alertTime.isAfter(getFromTime()) && alertTime.isBefore(getToTime()); } private boolean isCorrectDayOfWeek(DateTime time) { int day = time.getDayOfWeek(); if (day == 1 && isMo()) return true; if (day == 2 && isTu()) return true; if (day == 3 && isWe()) return true; if (day == 4 && isTh()) return true; if (day == 5 && isFr()) return true; if (day == 6 && isSa()) return true; if (day == 7 && isSu()) return true; return false; } }