package org.ourgrid.discoveryservice.business.requester;
import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;
import org.ourgrid.common.interfaces.DiscoveryService;
import org.ourgrid.common.internal.IResponseTO;
import org.ourgrid.common.internal.RequesterIF;
import org.ourgrid.common.internal.response.LoggerResponseTO;
import org.ourgrid.common.internal.response.RegisterInterestResponseTO;
import org.ourgrid.discoveryservice.DiscoveryServiceConstants;
import org.ourgrid.discoveryservice.business.dao.DiscoveryServiceDAO;
import org.ourgrid.discoveryservice.business.dao.DiscoveryServiceDAOFactory;
import org.ourgrid.discoveryservice.business.dao.DiscoveryServiceInfo;
import org.ourgrid.discoveryservice.business.messages.DiscoveryServiceControlMessages;
import org.ourgrid.discoveryservice.request.HereAreDiscoveryServicesRequestTO;
import org.ourgrid.discoveryservice.response.DSHereIsRemoteWorkerProvidersListResponseTO;
public class HereAreDiscoveryServicesRequester implements RequesterIF<HereAreDiscoveryServicesRequestTO>{
public List<IResponseTO> execute(HereAreDiscoveryServicesRequestTO request) {
List<IResponseTO> responses = new ArrayList<IResponseTO>();
DiscoveryServiceDAO discoveryServiceDAO = DiscoveryServiceDAOFactory.getInstance().getDiscoveryServiceDAO();
DiscoveryServiceInfo dsInfo = discoveryServiceDAO.getDSInfo(request.getSenderAddress());
if (dsInfo == null) {
responses.add((new LoggerResponseTO(DiscoveryServiceControlMessages.getUnknownSenderHereAreDiscoveryServicesMessage(request.getSenderAddress()), LoggerResponseTO.DEBUG)));
return responses;
}
if (!dsInfo.isUp()) {
responses.add((new LoggerResponseTO(DiscoveryServiceControlMessages.getDiscoveryServiceIsDownNotificationMessage(request.getSenderAddress()), LoggerResponseTO.DEBUG)));
return responses;
}
List<String> onlinePeers = discoveryServiceDAO.getMyOnlinePeers();
DSHereIsRemoteWorkerProvidersListResponseTO hereIsTo = new DSHereIsRemoteWorkerProvidersListResponseTO();
hereIsTo.setStubAddress(request.getSenderAddress());
hereIsTo.setWorkerProviders(onlinePeers);
responses.add(hereIsTo);
for (String address : request.getDiscoveryServicesAddresses()) {
if (discoveryServiceDAO.getDSInfo(address) == null &&
!address.equals(request.getMyAddress())) {
RegisterInterestResponseTO to = new RegisterInterestResponseTO();
to.setMonitorableAddress(address);
to.setMonitorableType(DiscoveryService.class);
to.setMonitorName(DiscoveryServiceConstants.DS_MONITOR);
responses.add(to);
discoveryServiceDAO.addDiscoveryService(new DiscoveryServiceInfo(address), new LinkedHashSet<String>());
}
}
return responses;
}
}