package org.yamcs.tctm;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.yamcs.ConfigurationException;
import org.yamcs.YConfiguration;
import org.yamcs.api.YamcsApiException;
import org.yamcs.yarch.streamsql.ParseException;
import org.yamcs.yarch.streamsql.StreamSqlException;
import com.google.common.util.concurrent.AbstractService;
import com.google.common.util.concurrent.Service;
import com.google.common.util.concurrent.ServiceManager;
/**
* Service that initialises all the data links
*
* @author nm
*
*/
public class DataLinkInitialiser extends AbstractService {
TmDataLinkInitialiser tmDataLinkInitialiser;
TcUplinkerAdapter tcDataLinkInitialiser;
ParameterDataLinkInitialiser ppDataLinkInitialiser;
ServiceManager serviceManager;
public DataLinkInitialiser(String yamcsInstance) throws ConfigurationException, StreamSqlException, ParseException, YamcsApiException, IOException {
YConfiguration c = YConfiguration.getConfiguration("yamcs."+yamcsInstance);
List<Service> services = new ArrayList<Service>();
if(c.containsKey(TmDataLinkInitialiser.KEY_tmDataLinks)) {
tmDataLinkInitialiser = new TmDataLinkInitialiser(yamcsInstance);
services.add(tmDataLinkInitialiser);
}
if(c.containsKey(TcUplinkerAdapter.KEY_tcDataLinks)) {
tcDataLinkInitialiser = new TcUplinkerAdapter(yamcsInstance);
services.add(tcDataLinkInitialiser);
}
if(c.containsKey(ParameterDataLinkInitialiser.KEY_PARAMETER_DATA_LINKS)) {
ppDataLinkInitialiser = new ParameterDataLinkInitialiser(yamcsInstance);
services.add(ppDataLinkInitialiser);
}
if (!services.isEmpty()) {
serviceManager = new ServiceManager(services);
}
}
@Override
protected void doStart() {
if (serviceManager != null) {
serviceManager.startAsync();
serviceManager.awaitHealthy();
}
notifyStarted();
}
@Override
protected void doStop() {
if (serviceManager != null) {
serviceManager.stopAsync();
serviceManager.awaitStopped();
}
notifyStopped();
}
}