package org.opennaas.extensions.roadm.wonesys.actionsets.actions.alarms;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.opennaas.core.events.IEventManager;
import org.opennaas.core.resources.ActivatorException;
import org.opennaas.core.resources.action.Action;
import org.opennaas.core.resources.action.ActionException;
import org.opennaas.core.resources.action.ActionResponse;
import org.opennaas.core.resources.alarms.CapabilityAlarm;
import org.opennaas.core.resources.alarms.ResourceAlarm;
import org.opennaas.core.resources.protocol.IProtocolSessionManager;
import org.opennaas.extensions.roadm.wonesys.actionsets.ActionConstants;
import org.opennaas.extensions.roadm.wonesys.actionsets.Activator;
import org.opennaas.extensions.roadm.wonesys.actionsets.WonesysAlarmsDriver;
import org.opennaas.extensions.roadm.wonesys.protocols.alarms.WonesysAlarm;
import org.osgi.service.event.Event;
public class ProcessAlarmAction extends Action {
static Log log = LogFactory.getLog(ProcessAlarmAction.class);
public ProcessAlarmAction() {
super();
initialize();
}
protected void initialize() {
this.setActionID(ActionConstants.PROCESSALARM);
}
@Override
public ActionResponse execute(IProtocolSessionManager protocolSessionManager) throws ActionException {
if (!(params instanceof CapabilityAlarm)) {
return ActionResponse.errorResponse(actionID, "Invalid parameters! ");
}
String resourceId = (String) ((CapabilityAlarm) params).getProperty(CapabilityAlarm.RESOURCE_ID_PROPERTY);
if (resourceId == null) {
return ActionResponse.errorResponse(actionID,
"Failed to process Capability Alarm! Missing " + CapabilityAlarm.RESOURCE_ID_PROPERTY + " property");
}
Event cause = (Event) ((CapabilityAlarm) params).getProperty(CapabilityAlarm.CAUSE_PROPERTY);
if (cause == null) {
return ActionResponse.errorResponse(actionID,
"Failed to process Capability Alarm! Missing " + CapabilityAlarm.CAUSE_PROPERTY + " property");
}
if (!isWonesysAlarm(cause)) {
return ActionResponse.errorResponse(actionID,
"Failed to process Capability Alarm! " + CapabilityAlarm.CAUSE_PROPERTY + " is unknown");
}
// transform WonesysAlarm to ResourceAlarm
processWonesysAlarm((WonesysAlarm) cause, resourceId);
return ActionResponse.okResponse(actionID);
}
@Override
public boolean checkParams(Object params) throws ActionException {
if (!(params instanceof Event)) {
return false;
}
return true;
}
private boolean isWonesysAlarm(Event event) {
return (event instanceof WonesysAlarm);
}
private void processWonesysAlarm(WonesysAlarm alarm, String resourceId) throws ActionException {
log.debug("Processing Wonesys alarm...");
ResourceAlarm resourceAlarm = WonesysAlarmsDriver.wonesysAlarmToResourceAlarm(alarm, getModelToUpdate(), resourceId);
try {
publish(resourceAlarm);
} catch (ActivatorException e) {
throw new ActionException("Failed to publish resource alarm!", e);
}
}
private void publish(Event event) throws ActivatorException {
IEventManager eventManager = Activator.getEventManagerService();
eventManager.publishEvent(event);
}
}