/* * Copyright (C) 2006-2016 DLR, Germany * * All rights reserved * * http://www.rcenvironment.de/ */ package de.rcenvironment.components.optimizer.common; import java.io.Serializable; import java.util.List; import de.rcenvironment.core.communication.common.ResolvableNodeId; import de.rcenvironment.core.notification.DistributedNotificationService; import de.rcenvironment.core.notification.Notification; import de.rcenvironment.core.notification.NotificationService; import de.rcenvironment.core.utils.common.StringUtils; import de.rcenvironment.core.utils.common.rpc.RemoteOperationException; /** * Implementation of {@link OptimizerResultService}. * * @author Christian Weiss * @author Sascha Zur */ public class OptimizerResultServiceImpl implements OptimizerResultService { private NotificationService notificationService; private DistributedNotificationService distributedNotificationService; protected void bindNotificationService(final NotificationService newNotificationService) { notificationService = newNotificationService; } protected void bindDistributedNotificationService(final DistributedNotificationService newDistrNotificationService) { distributedNotificationService = newDistrNotificationService; } @Override public OptimizerPublisher createPublisher(final String identifier, final String title, final ResultStructure structure) { final ResultSet study = new ResultSet(identifier, title, structure); final OptimizerPublisher studyPublisher = new OptimizerPublisherImpl(study, notificationService); final String notificationId = StringUtils.format(OptimizerUtils.STRUCTURE_PATTERN, study.getIdentifier()); notificationService.setBufferSize(notificationId, 1); notificationService.send(notificationId, new Serializable[] { study.getStructure(), title }); return studyPublisher; } @Override public OptimizerReceiver createReceiver(final String identifier, final ResolvableNodeId platform) throws RemoteOperationException { final String notificationId = StringUtils.format(OptimizerUtils.STRUCTURE_PATTERN, identifier); if (distributedNotificationService != null && distributedNotificationService .getNotifications(notificationId, platform) != null) { final List<Notification> notifications = distributedNotificationService .getNotifications(notificationId, platform).get(notificationId); if (notifications != null && notifications.size() > 0) { final Notification studyNotification = notifications .get(notifications.size() - 1); final Serializable[] notificationContent = (Serializable[]) studyNotification.getBody(); final ResultStructure structure = (ResultStructure) notificationContent[0]; final String title = (String) notificationContent[1]; final ResultSet study = new ResultSet(identifier, title, structure); final OptimizerReceiver studyReceiver = new OptimizerReceiverImpl(study, platform, distributedNotificationService); return studyReceiver; } } return null; } }