package org.ourgrid.peer.business.requester;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.ourgrid.common.internal.IResponseTO;
import org.ourgrid.common.internal.RequesterIF;
import org.ourgrid.common.statistics.control.WorkerControl;
import org.ourgrid.peer.business.dao.PeerDAOFactory;
import org.ourgrid.peer.request.StopPeerRequestTO;
import org.ourgrid.peer.response.LeaveCommunityResponseTO;
import org.ourgrid.peer.response.SaveRankingResponseTO;
public class StopPeerRequester implements RequesterIF<StopPeerRequestTO> {
public List<IResponseTO> execute(StopPeerRequestTO request) {
List<IResponseTO> responses = new ArrayList<IResponseTO>();
saveRanking(responses);
leaveCommunity(responses, request);
disconnectActiveWorkers(responses, request);
return responses;
}
private void saveRanking(List<IResponseTO> responses) {
responses.add(new SaveRankingResponseTO());
}
private void leaveCommunity(List<IResponseTO> responses, StopPeerRequestTO request) {
if (request.isDAOStarted() && request.shouldJoinCommunity()) {
String discoverServiceAddress = PeerDAOFactory.getInstance().getDiscoveryServiceClientDAO().getAliveDiscoveryServiceAddress();
if (discoverServiceAddress != null) {
LeaveCommunityResponseTO to = new LeaveCommunityResponseTO();
to.setDsAddress(discoverServiceAddress);
}
}
}
private void disconnectActiveWorkers(List<IResponseTO> responses, StopPeerRequestTO request) {
if (request.canStatusBeUsed()) {
Collection<String> localWorkersUserAtServer = WorkerControl.getInstance().getLocalWorkersUserAtServer(responses, request.getMyUserAtServer());
for (String workerUserAtServer : localWorkersUserAtServer) {
RemoveWorkerRequester.removeWorker(responses, workerUserAtServer);
}
}
}
}