/* * Copyright (C) 2006-2016 DLR, Germany * * All rights reserved * * http://www.rcenvironment.de/ */ package de.rcenvironment.core.log.internal; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.osgi.framework.BundleContext; import de.rcenvironment.core.communication.api.CommunicationService; import de.rcenvironment.core.communication.common.InstanceNodeSessionId; import de.rcenvironment.core.log.DistributedLogReaderService; import de.rcenvironment.core.log.RemotableLogReaderService; import de.rcenvironment.core.log.SerializableLogEntry; import de.rcenvironment.core.log.SerializableLogListener; import de.rcenvironment.core.utils.common.StringUtils; import de.rcenvironment.core.utils.common.rpc.RemoteOperationException; /** * Implementation of the {@link DistributedLogReaderServiceImpl}. * * @author Doreen Seider * @author Robert Mischke (7.0.0 adaptations) */ public class DistributedLogReaderServiceImpl implements DistributedLogReaderService { private static final Log LOGGER = LogFactory.getLog(DistributedLogReaderServiceImpl.class); private CommunicationService communicationService; private List<SerializableLogListener> logListeners = new ArrayList<SerializableLogListener>(); protected void activate(BundleContext bundleContext) {} protected void bindCommunicationService(CommunicationService newCommunicationService) { communicationService = newCommunicationService; } @Override public void addLogListener(SerializableLogListener logListener, InstanceNodeSessionId nodeId) { try { RemotableLogReaderService service = (RemotableLogReaderService) communicationService .getRemotableService(RemotableLogReaderService.class, nodeId); service.addLogListener(logListener); logListeners.add(logListener); } catch (RemoteOperationException e) { LOGGER.warn(StringUtils.format("Failed to add remote log listener on %s: %s", nodeId, e.getMessage())); } } @Override public List<SerializableLogEntry> getLog(InstanceNodeSessionId nodeId) { try { RemotableLogReaderService service = (RemotableLogReaderService) communicationService .getRemotableService(RemotableLogReaderService.class, nodeId); return service.getLog(); } catch (RemoteOperationException e) { LOGGER.warn(StringUtils.format("Failed to get log data from %s: %s", nodeId, e.getMessage())); return new LinkedList<SerializableLogEntry>(); } } @Override public void removeLogListener(SerializableLogListener logListener, InstanceNodeSessionId nodeId) { try { RemotableLogReaderService service = (RemotableLogReaderService) communicationService .getRemotableService(RemotableLogReaderService.class, nodeId); service.removeLogListener(logListener); logListeners.remove(logListener); } catch (RemoteOperationException e) { LOGGER.warn(StringUtils.format("Failed to remove remote log listener from %s: %s", nodeId, e.getMessage())); } } }