package org.opennaas.extensions.roadm.wonesys.protocols.alarms;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.TimerTask;
import com.wonesys.emsModule.alarms.Alarm;
import com.wonesys.emsModule.alarms.AlarmsControler;
/**
* Allows periodically request of alarms
*
* @author isart
*
*/
public class WonesysAlarmRequester extends TimerTask {
/**
* EMSModule alarms controller
*/
AlarmsControler acontroller = null;
/**
* Date of reception of last alarm
*/
long lastReceptionDate = 0;
public WonesysAlarmRequester(AlarmsControler acontroller) {
this.acontroller = acontroller;
}
public void run() {
Collection<Alarm> alarms = requestAlarmsSync();
notifyAlarmsToListeners(alarms);
}
private Collection<Alarm> requestAlarmsSync() {
Collection<Alarm> alarms = acontroller.getAlarmsList();
return alarms;
}
private void notifyAlarmsToListeners(Collection<Alarm> alarms) {
if (alarms == null)
return;
Iterator<Alarm> it = alarms.iterator();
long lastReceptionDate_tmp = lastReceptionDate;
Collection<Alarm> newAlarms = new ArrayList<Alarm>();
// filter alarms by Date
while (it.hasNext()) {
Alarm alarm = it.next();
long receptionDate = alarm.getDataRecepcio();
if (receptionDate > lastReceptionDate) {
if (receptionDate > lastReceptionDate_tmp) {
lastReceptionDate_tmp = receptionDate;
}
newAlarms.add(alarm);
}
}
lastReceptionDate = lastReceptionDate_tmp;
for (Alarm alarm : newAlarms) {
// notify event
// there's no need of using same EventManager for publishing and for handling
new WonesysEventManager().publishEvent(createAlarmEvent(alarm));
}
}
private WonesysAlarmEvent createAlarmEvent(Alarm alarm) {
return new WonesysAlarmEvent(alarm);
}
}