package org.ourgrid.discoveryservice.business.requester;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
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.ReleaseResponseTO;
import org.ourgrid.discoveryservice.PeerStatusChangeUtil;
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.LeaveCommunityRequestTO;
import org.ourgrid.discoveryservice.response.DSHereIsRemoteWorkerProvidersListResponseTO;
/**
*
* Req 506
*
*/
public class LeaveCommunityRequester implements RequesterIF<LeaveCommunityRequestTO>{
public List<IResponseTO> execute(LeaveCommunityRequestTO request) {
List<IResponseTO> responses = new ArrayList<IResponseTO>();
DiscoveryServiceDAO dao = DiscoveryServiceDAOFactory.getInstance().getDiscoveryServiceDAO();
String clientUserAtServer = request.getClientUserAtServer();
if (!dao.isPeerUp(clientUserAtServer)) {
responses.add(new LoggerResponseTO(DiscoveryServiceControlMessages.
getClientNotJoinedToTheCommunityMessage(request.getClientAddress()), LoggerResponseTO.WARN));
ReleaseResponseTO releaseTO = new ReleaseResponseTO();
releaseTO.setStubAddress(request.getClientAddress());
responses.add(releaseTO);
return responses;
}
dao.peerIsDown(clientUserAtServer);
responses.add(new LoggerResponseTO(DiscoveryServiceControlMessages.
getPeerLeftCommunityNotificationMessage(clientUserAtServer), LoggerResponseTO.DEBUG));
//warn the network about the change in peer list
Set<DiscoveryServiceInfo> DSs = dao.getAllDiscoveryServicesInfos();
for (DiscoveryServiceInfo ds : DSs) {
DSHereIsRemoteWorkerProvidersListResponseTO to = new DSHereIsRemoteWorkerProvidersListResponseTO();
to.setStubAddress(ds.getDsAddress());
to.setWorkerProviders(dao.getMyOnlinePeers());
responses.add(to);
}
ReleaseResponseTO releaseTO = new ReleaseResponseTO();
releaseTO.setStubAddress(request.getClientAddress());
responses.add(releaseTO);
PeerStatusChangeUtil.peerIsDown(
clientUserAtServer, responses);
return responses;
}
}