package org.opennaas.extensions.ryu.alarm; /* * #%L * OpenNaaS :: Ryu Resource * %% * Copyright (C) 2007 - 2015 FundaciĆ³ Privada i2CAT, Internet i InnovaciĆ³ a Catalunya * %% * 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. * #L% */ import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.opennaas.extensions.ryu.client.monitoringmodule.IMonitoringModuleCallbackAPI; public class MonitoringModuleAlarmHandler implements IMonitoringModuleCallbackAPI, IMonitoringModuleAlarmHandler { Log log = LogFactory.getLog(MonitoringModuleAlarmHandler.class); private Map<AlarmIdentifier, IAlarmObserver> observers; public MonitoringModuleAlarmHandler() { observers = new ConcurrentHashMap<AlarmIdentifier, IAlarmObserver>(); } @Override public void alarmReceived(String dpid, String portNumber) { log.info("Received alarm : [dpid=" + dpid + ", port=" + portNumber + "]"); if (StringUtils.isEmpty(dpid) || portNumber == null) throw new NullPointerException("Dpid and port are not nullable parameters."); if (!StringUtils.isNumeric(portNumber)) throw new IllegalArgumentException("Port should be numeric."); AlarmIdentifier alarmIdentifier = new AlarmIdentifier(dpid, new Integer(portNumber)); if (!observers.containsKey(alarmIdentifier)) throw new IllegalStateException("There's no registered observer for alarms with filter [dpid=" + dpid + ",port=" + portNumber + "]"); observers.get(alarmIdentifier).alarmReceived(); } @Override public void addAlarmObserver(String dpid, Integer port, IAlarmObserver alarmObserver) { log.info("Registering alarm observer with filter [dpid=" + dpid + ", port=" + port + "]"); if (StringUtils.isEmpty(dpid) || port == null || alarmObserver == null) throw new NullPointerException("Dpid, port and alamObserver are not nullable parameters."); AlarmIdentifier alarmIdentifier = new AlarmIdentifier(dpid, port); if (observers.containsKey(alarmIdentifier)) throw new IllegalStateException("There already exists a registered alarm for dpid=" + dpid + " and port=" + port); observers.put(alarmIdentifier, alarmObserver); log.info("Registered alarm observer with filter [dpid=" + dpid + ", port=" + port + "]"); } @Override public void removeAlarmObserver(String dpid, Integer port) { log.info("Registering alarm observer with filter [dpid=" + dpid + ", port=" + port + "]"); if (StringUtils.isEmpty(dpid) || port == null) throw new NullPointerException("Dpid and port are not nullable parameters."); AlarmIdentifier alarmIdentifier = new AlarmIdentifier(dpid, port); observers.remove(alarmIdentifier); log.info("Registered alarm observer with filter [dpid=" + dpid + ", port=" + port + "]"); } }