package org.yamcs.web.rest.mdb;
import java.io.IOException;
import java.io.ObjectOutputStream;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.yamcs.api.MediaType;
import org.yamcs.protobuf.SchemaYamcsManagement;
import org.yamcs.protobuf.YamcsManagement.MissionDatabase;
import org.yamcs.web.HttpException;
import org.yamcs.web.InternalServerErrorException;
import org.yamcs.web.rest.RestHandler;
import org.yamcs.web.rest.RestRequest;
import org.yamcs.web.rest.Route;
import org.yamcs.web.rest.YamcsToGpbAssembler;
import org.yamcs.xtce.XtceDb;
import org.yamcs.xtceproc.XtceDbFactory;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.ByteBufOutputStream;
/**
* Handles incoming requests related to parameters
*/
public class MDBRestHandler extends RestHandler {
final static Logger log = LoggerFactory.getLogger(MDBRestHandler.class);
@Route(path = "/api/mdb/:instance", method = "GET")
public void getMissionDatabase(RestRequest req) throws HttpException {
String instance = verifyInstance(req, req.getRouteParam("instance"));
XtceDb mdb = XtceDbFactory.getInstance(instance);
if (req.asksFor(MediaType.JAVA_SERIALIZED_OBJECT)) {
ByteBuf buf = req.getChannelHandlerContext().alloc().buffer();
try (ObjectOutputStream oos = new ObjectOutputStream(new ByteBufOutputStream(buf))) {
oos.writeObject(mdb);
} catch (IOException e) {
throw new InternalServerErrorException("Could not serialize MDB", e);
}
completeOK(req, MediaType.JAVA_SERIALIZED_OBJECT, buf);
} else {
MissionDatabase converted = YamcsToGpbAssembler.toMissionDatabase(req, instance, mdb);
completeOK(req, converted, SchemaYamcsManagement.MissionDatabase.WRITE);
}
}
}