package org.opennaas.extensions.roadm.wonesys.actionsets.actions.alarms;
import java.util.Properties;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.opennaas.core.events.EventFilter;
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.protocol.IProtocolSession;
import org.opennaas.core.resources.protocol.IProtocolSessionManager;
import org.opennaas.core.resources.protocol.ProtocolException;
import org.opennaas.extensions.roadm.wonesys.actionsets.ActionConstants;
import org.opennaas.extensions.roadm.wonesys.actionsets.Activator;
import org.opennaas.extensions.roadm.wonesys.protocols.alarms.WonesysAlarm;
import org.osgi.service.event.EventHandler;
public class RegisterAsListenerAction extends Action {
static Log log = LogFactory.getLog(RegisterAsListenerAction.class);
public RegisterAsListenerAction() {
super();
initialize();
}
protected void initialize() {
this.setActionID(ActionConstants.REGISTER);
}
@Override
public ActionResponse execute(IProtocolSessionManager protocolSessionManager) throws ActionException {
try {
log.info("Registering as WonesysAlarm listener");
Object[] newParams = (Object[]) params;
EventHandler handler = (EventHandler) newParams[1];
IProtocolSession session = protocolSessionManager.obtainSessionByProtocol("wonesys", false);
// create filter to listen for WonesysAlarms coming from given wonesys session of given protocolSessionManager
Properties filterProperties = new Properties();
filterProperties.setProperty(WonesysAlarm.SESSION_ID_PROPERTY, session.getSessionId());
EventFilter filter = new EventFilter(new String[] { WonesysAlarm.TOPIC }, filterProperties);
// register alarmListener
IEventManager eventManager = Activator.getEventManagerService();
eventManager.registerEventHandler(handler, filter);
log.info("Registered as WonesysAlarm listener!");
return ActionResponse.okResponse(getActionID());
} catch (ProtocolException e) {
return ActionResponse.errorResponse(actionID, "Could not obtain wonesys session: " + e.getLocalizedMessage());
} catch (ActivatorException e) {
return ActionResponse.errorResponse(actionID, "Could not register handler: " + e.getLocalizedMessage());
}
}
@Override
public boolean checkParams(Object params) throws ActionException {
if (params instanceof Object[]) {
Object[] newParams = (Object[]) params;
if (newParams.length == 2) {
if (newParams[1] instanceof EventHandler)
return true;
}
}
return false;
}
}