package org.ourgrid.discoveryservice.business.requester;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
import org.ourgrid.common.internal.IResponseTO;
import org.ourgrid.common.internal.RequesterIF;
import org.ourgrid.discoveryservice.business.controller.DiscoveryServiceController;
import org.ourgrid.discoveryservice.business.dao.DiscoveryServiceDAO;
import org.ourgrid.discoveryservice.business.dao.DiscoveryServiceDAOFactory;
import org.ourgrid.discoveryservice.request.GetRemoteWorkerProvidersRequestTO;
import org.ourgrid.discoveryservice.response.DSClientHereIsRemoteWorkerProvidersListResponseTO;
public class GetRemoteWorkerProvidersRequester implements RequesterIF<GetRemoteWorkerProvidersRequestTO>{
public List<IResponseTO> execute(GetRemoteWorkerProvidersRequestTO request) {
List<IResponseTO> responses = new ArrayList<IResponseTO>();
DiscoveryServiceController dsController = DiscoveryServiceController.getInstance();
String clientUserAtServer = request.getClientUserAtServer();
dsController.joinCommunity(responses, clientUserAtServer,
request.getClientAddress(), request.getMyAddress(),
request.getOverloadThreshold());
DiscoveryServiceDAO dsDao = DiscoveryServiceDAOFactory.getInstance().getDiscoveryServiceDAO();
if (dsDao.isPeerUp(clientUserAtServer)) {
Set<String> onlinePeers = dsController.limitAndShuffleResponse(dsDao.getAllOnlinePeers(),
Math.min(request.getMaxResponseSize(), request.getDsMaxResponse()));
DSClientHereIsRemoteWorkerProvidersListResponseTO to = new DSClientHereIsRemoteWorkerProvidersListResponseTO();
to.setStubAddress(request.getClientAddress());
to.setWorkerProviders(new LinkedList<String>(onlinePeers));
responses.add(to);
}
return responses;
}
}