/*******************************************************************************
* Copyright (c) 2011, 2016 Eurotech and/or its affiliates
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Eurotech
*******************************************************************************/
package org.eclipse.kura.core.data.transport.mqtt;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
import org.eclipse.kura.data.DataTransportToken;
import org.eclipse.kura.data.transport.listener.DataTransportListener;
import org.osgi.service.component.ComponentContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/*
* The following represents an exception to Semantic Versioning conventions.
* Though the class implements the org.eclipse.kura.data.transport.listener.DataTransportListener API,
* it is actually an API consumer (it calls into the API implementors).
*/
class DataTransportListenerS implements DataTransportListener {
private static final Logger s_logger = LoggerFactory.getLogger(DataTransportListenerS.class);
private static final String DATA_TRANSPORT_LISTENER_REFERENCE = "DataTransportListener";
private final ComponentContext m_ctx;
private final List<DataTransportListener> m_listeners;
public DataTransportListenerS(ComponentContext ctx) {
this.m_ctx = ctx;
this.m_listeners = new CopyOnWriteArrayList<DataTransportListener>();
}
@Override
public void onConnectionEstablished(boolean newSession) {
Object[] services = this.m_ctx.locateServices(DATA_TRANSPORT_LISTENER_REFERENCE);
if (services != null) {
for (Object service : services) {
try {
((org.eclipse.kura.data.DataTransportListener) service).onConnectionEstablished(newSession);
} catch (Throwable t) {
s_logger.warn("Unexpected Throwable", t);
}
}
} else {
s_logger.debug("No registered listener services. Ignoring onConnectionEstablished");
}
if (!this.m_listeners.isEmpty()) {
for (DataTransportListener listener : this.m_listeners) {
try {
listener.onConnectionEstablished(newSession);
} catch (Throwable t) {
s_logger.warn("Unexpected Throwable", t);
}
}
} else {
s_logger.warn("No registered listeners. Ignoring onConnectionEstablished");
}
}
@Override
public void onDisconnecting() {
Object[] services = this.m_ctx.locateServices(DATA_TRANSPORT_LISTENER_REFERENCE);
if (services != null) {
for (Object service : services) {
try {
((org.eclipse.kura.data.DataTransportListener) service).onDisconnecting();
} catch (Throwable t) {
s_logger.warn("Unexpected Throwable", t);
}
}
} else {
s_logger.debug("No registered listener services. Ignoring onDisconnecting");
}
if (!this.m_listeners.isEmpty()) {
for (DataTransportListener listener : this.m_listeners) {
try {
listener.onDisconnecting();
} catch (Throwable t) {
s_logger.warn("Unexpected Throwable", t);
}
}
} else {
s_logger.warn("No registered listeners. Ignoring onDisconnecting");
}
}
@Override
public void onDisconnected() {
Object[] services = this.m_ctx.locateServices(DATA_TRANSPORT_LISTENER_REFERENCE);
if (services != null) {
for (Object service : services) {
try {
((org.eclipse.kura.data.DataTransportListener) service).onDisconnected();
} catch (Throwable t) {
s_logger.warn("Unexpected Throwable", t);
}
}
} else {
s_logger.debug("No registered listener services. Ignoring onDisconnected");
}
if (!this.m_listeners.isEmpty()) {
for (DataTransportListener listener : this.m_listeners) {
try {
listener.onDisconnected();
} catch (Throwable t) {
s_logger.warn("Unexpected Throwable", t);
}
}
} else {
s_logger.warn("No registered listeners. Ignoring onDisconnected");
}
}
@Override
public void onConfigurationUpdating(boolean wasConnected) {
Object[] services = this.m_ctx.locateServices(DATA_TRANSPORT_LISTENER_REFERENCE);
if (services != null) {
for (Object service : services) {
try {
((org.eclipse.kura.data.DataTransportListener) service).onConfigurationUpdating(wasConnected);
} catch (Throwable t) {
s_logger.warn("Unexpected Throwable", t);
}
}
} else {
s_logger.debug("No registered listener services. Ignoring onConfigurationUpdating");
}
if (!this.m_listeners.isEmpty()) {
for (DataTransportListener listener : this.m_listeners) {
try {
listener.onConfigurationUpdating(wasConnected);
} catch (Throwable t) {
s_logger.warn("Unexpected Throwable", t);
}
}
} else {
s_logger.warn("No registered listeners. Ignoring onConfigurationUpdating");
}
}
@Override
public void onConfigurationUpdated(boolean wasConnected) {
Object[] services = this.m_ctx.locateServices(DATA_TRANSPORT_LISTENER_REFERENCE);
if (services != null) {
for (Object service : services) {
try {
((org.eclipse.kura.data.DataTransportListener) service).onConfigurationUpdated(wasConnected);
} catch (Throwable t) {
s_logger.warn("Unexpected Throwable", t);
}
}
} else {
s_logger.debug("No registered listener services. Ignoring onConfigurationUpdated");
}
if (!this.m_listeners.isEmpty()) {
for (DataTransportListener listener : this.m_listeners) {
try {
listener.onConfigurationUpdated(wasConnected);
} catch (Throwable t) {
s_logger.warn("Unexpected Throwable", t);
}
}
} else {
s_logger.warn("No registered listeners. Ignoring onConfigurationUpdated");
}
}
@Override
public void onConnectionLost(Throwable cause) {
Object[] services = this.m_ctx.locateServices(DATA_TRANSPORT_LISTENER_REFERENCE);
if (services != null) {
for (Object service : services) {
try {
((org.eclipse.kura.data.DataTransportListener) service).onConnectionLost(cause);
} catch (Throwable t) {
s_logger.warn("Unexpected Throwable", t);
}
}
} else {
s_logger.debug("No registered listener services. Ignoring onConnectionLost");
}
if (!this.m_listeners.isEmpty()) {
for (DataTransportListener listener : this.m_listeners) {
try {
listener.onConnectionLost(cause);
} catch (Throwable t) {
s_logger.warn("Unexpected Throwable", t);
}
}
} else {
s_logger.warn("No registered listeners. Ignoring onConnectionLost");
}
}
@Override
public void onMessageArrived(String topic, byte[] payload, int qos, boolean retained) {
Object[] services = this.m_ctx.locateServices(DATA_TRANSPORT_LISTENER_REFERENCE);
if (services != null) {
for (Object service : services) {
try {
((org.eclipse.kura.data.DataTransportListener) service).onMessageArrived(topic, payload, qos,
retained);
} catch (Throwable t) {
s_logger.warn("Unexpected Throwable", t);
}
}
} else {
s_logger.debug("No registered listener services. Ignoring onMessageArrived");
}
if (!this.m_listeners.isEmpty()) {
for (DataTransportListener listener : this.m_listeners) {
try {
listener.onMessageArrived(topic, payload, qos, retained);
} catch (Throwable t) {
s_logger.warn("Unexpected Throwable", t);
}
}
} else {
s_logger.warn("No registered listeners. Ignoring onMessageArrived");
}
}
@Override
public void onMessageConfirmed(DataTransportToken token) {
Object[] services = this.m_ctx.locateServices(DATA_TRANSPORT_LISTENER_REFERENCE);
if (services != null) {
for (Object service : services) {
try {
((org.eclipse.kura.data.DataTransportListener) service).onMessageConfirmed(token);
} catch (Throwable t) {
s_logger.warn("Unexpected Throwable", t);
}
}
} else {
s_logger.debug("No registered listener services. Ignoring onMessageConfirmed");
}
if (!this.m_listeners.isEmpty()) {
for (DataTransportListener listener : this.m_listeners) {
try {
listener.onMessageConfirmed(token);
} catch (Throwable t) {
s_logger.warn("Unexpected Throwable", t);
}
}
} else {
s_logger.warn("No registered listeners. Ignoring onMessageConfirmed");
}
}
public void add(DataTransportListener listener) {
this.m_listeners.add(listener);
}
public void remove(DataTransportListener listener) {
this.m_listeners.remove(listener);
}
}