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.DeployServiceResponseTO; import org.ourgrid.common.internal.response.LoggerResponseTO; import org.ourgrid.common.internal.response.RegisterInterestResponseTO; import org.ourgrid.common.statistics.util.hibernate.HibernateUtil; import org.ourgrid.discoveryservice.DiscoveryServiceConstants; 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.communication.receiver.CommunityStatusProviderReceiver; import org.ourgrid.discoveryservice.communication.receiver.DiscoveryServiceNotificationReceiver; import org.ourgrid.discoveryservice.communication.receiver.DiscoveryServiceReceiver; import org.ourgrid.discoveryservice.request.StartDiscoveryServiceRequestTO; /** * Requirement 502 */ public class StartDiscoveryServiceRequester implements RequesterIF<StartDiscoveryServiceRequestTO>{ private static final String CONF_XML_PATH = "ds-hibernate.cfg.xml"; public List<IResponseTO> execute(StartDiscoveryServiceRequestTO request) { List<IResponseTO> responses = new ArrayList<IResponseTO>(); DiscoveryServiceDAOFactory.getInstance().reset(); HibernateUtil.setUp(CONF_XML_PATH); createServices(responses); responses.add(new LoggerResponseTO(DiscoveryServiceControlMessages .getSuccessfullyStartedDiscoveryServiceMessage(), LoggerResponseTO.INFO)); killAllActivePeers(responses); registerInterestOnNetwork(responses, request.getNetworkAddresses()); return responses; } private static void createServices(List<IResponseTO> responses) { DeployServiceResponseTO to = new DeployServiceResponseTO(); to.setServiceClass(DiscoveryServiceNotificationReceiver.class); to.setServiceName(DiscoveryServiceConstants.DS_MONITOR); responses.add(to); to = new DeployServiceResponseTO(); to.setServiceClass(DiscoveryServiceReceiver.class); to.setServiceName(DiscoveryServiceConstants.DS_OBJECT_NAME); responses.add(to); to = new DeployServiceResponseTO(); to.setServiceClass(CommunityStatusProviderReceiver.class); to.setServiceName(DiscoveryServiceConstants.COMMUNITY_STATUS_PROVIDER); responses.add(to); } private static void killAllActivePeers(List<IResponseTO> responses) { PeerStatusChangeUtil.killAllActivePeers( System.currentTimeMillis(), responses); } private void registerInterestOnNetwork(List<IResponseTO> responses, List<String> networkAddress) { for (String address : networkAddress) { RegisterInterestResponseTO to = new RegisterInterestResponseTO(); to.setMonitorableAddress(address); to.setMonitorableType(DiscoveryService.class); to.setMonitorName(DiscoveryServiceConstants.DS_MONITOR); responses.add(to); DiscoveryServiceDAO dsDAO = DiscoveryServiceDAOFactory.getInstance().getDiscoveryServiceDAO(); dsDAO.addDiscoveryService(new DiscoveryServiceInfo(address), new LinkedHashSet<String>()); } } }