package org.ourgrid.discoveryservice.business.requester; import static org.ourgrid.common.interfaces.Constants.LINE_SEPARATOR; import java.util.ArrayList; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.Set; import org.ourgrid.common.config.Configuration; import org.ourgrid.common.internal.IResponseTO; import org.ourgrid.common.internal.RequesterIF; import org.ourgrid.common.internal.response.LoggerResponseTO; import org.ourgrid.common.util.CommonUtils; 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.request.GetCompleteStatusRequestTO; import org.ourgrid.discoveryservice.response.HereIsCompleteStatusResponseTO; import org.ourgrid.discoveryservice.status.DiscoveryServiceCompleteStatus; public class GetCompleteStatusRequester implements RequesterIF<GetCompleteStatusRequestTO>{ public List<IResponseTO> execute(GetCompleteStatusRequestTO request) { List<IResponseTO> responses = new ArrayList<IResponseTO>(); if (!request.canStatusBeUsed()) { responses.add(new LoggerResponseTO("Received a status request from: " + request.getClientAddress() + ", but the component is not started.", LoggerResponseTO.WARN)); return responses; } DiscoveryServiceCompleteStatus completeStatus = getCompleteStatus(request); HereIsCompleteStatusResponseTO to = new HereIsCompleteStatusResponseTO(); to.setClientAddress(request.getClientAddress()); to.setDiscoveryServiceCompleteStatus(completeStatus); responses.add(to); return responses; } private DiscoveryServiceCompleteStatus getCompleteStatus(GetCompleteStatusRequestTO request) { return new DiscoveryServiceCompleteStatus( getCompleteNetwork(request), DiscoveryServiceDAOFactory.getInstance().getDiscoveryServiceDAO().getAllOnlinePeers(), request.getUpTime(), getDescription(request.getPropConfDir(), request.getContextString()), request.getMyAddress()); } private Map<DiscoveryServiceInfo, Set<String>> getCompleteNetwork(GetCompleteStatusRequestTO request) { DiscoveryServiceDAO discoveryServiceDAO = DiscoveryServiceDAOFactory.getInstance().getDiscoveryServiceDAO(); Map<DiscoveryServiceInfo, Set<String>> network = CommonUtils.createSerializableMap(); network.putAll(discoveryServiceDAO.getNetwork()); network.put(new DiscoveryServiceInfo(request.getMyAddress(), true), new LinkedHashSet<String>(discoveryServiceDAO.getMyOnlinePeers())); return network; } private String getDescription(String propConfDir, String contextString) { StringBuilder conf = new StringBuilder(); conf.append( "\tVersion: " ).append( Configuration.VERSION ).append( LINE_SEPARATOR ); conf.append( "\tConfiguration directory: " ); conf.append( /*containerContext.getProperty(ModuleProperties.PROP_CONFDIR)*/propConfDir ); conf.append( LINE_SEPARATOR ); conf.append( /*containerContext.toString()*/contextString ); return conf.toString(); } }