package org.yamcs.web.rest;
import org.yamcs.Processor;
import org.yamcs.YamcsServer;
import org.yamcs.protobuf.YamcsManagement.MissionDatabase;
import org.yamcs.protobuf.YamcsManagement.YamcsInstance;
import org.yamcs.web.rest.RestRequest.Option;
import org.yamcs.web.rest.mdb.XtceToGpbAssembler;
import org.yamcs.web.rest.processor.ProcessorRestHandler;
import org.yamcs.xtce.SpaceSystem;
import org.yamcs.xtce.XtceDb;
import org.yamcs.xtceproc.XtceDbFactory;
public class YamcsToGpbAssembler {
public static MissionDatabase toMissionDatabase(RestRequest req, String instance, XtceDb mdb) {
YamcsInstance yamcsInstance = YamcsServer.getYamcsInstance(instance);
MissionDatabase.Builder b = MissionDatabase.newBuilder(yamcsInstance.getMissionDatabase());
if (!req.getOptions().contains(Option.NO_LINK)) {
String apiUrl = req.getApiURL();
b.setUrl(apiUrl + "/mdb/" + instance);
b.setParametersUrl(b.getUrl() + "/parameters{/namespace}{/name}");
b.setContainersUrl(b.getUrl() + "/containers{/namespace}{/name}");
b.setCommandsUrl(b.getUrl() + "/commands{/namespace}{/name}");
b.setAlgorithmsUrl(b.getUrl() + "/algorithms{/namespace}{/name}");
}
SpaceSystem ss = mdb.getRootSpaceSystem();
for (SpaceSystem sub : ss.getSubSystems()) {
b.addSpaceSystem(XtceToGpbAssembler.toSpaceSystemInfo(req, instance, sub));
}
return b.build();
}
public static YamcsInstance enrichYamcsInstance(RestRequest req, YamcsInstance yamcsInstance) {
YamcsInstance.Builder instanceb = YamcsInstance.newBuilder(yamcsInstance);
// Override MDB with a version that has URLs too
if (yamcsInstance.hasMissionDatabase()) {
XtceDb mdb = XtceDbFactory.getInstance(yamcsInstance.getName());
instanceb.setMissionDatabase(YamcsToGpbAssembler.toMissionDatabase(req, yamcsInstance.getName(), mdb));
}
if (!req.getOptions().contains(Option.NO_LINK)) {
String apiUrl = req.getApiURL();
String instanceUrl = apiUrl + "/instances/" + instanceb.getName();
instanceb.setUrl(instanceUrl);
instanceb.setEventsUrl(instanceUrl + "{/processor}/events");
instanceb.setClientsUrl(instanceUrl + "{/processor}/clients");
}
for (Processor processor : Processor.getProcessors(instanceb.getName())) {
instanceb.addProcessor(ProcessorRestHandler.toProcessorInfo(processor, req, false));
}
return instanceb.build();
}
}