package com.robonobo.midas.controller;
import static com.robonobo.common.util.TimeUtil.*;
import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import com.robonobo.core.api.proto.CoreApi.StreamMsg;
import com.robonobo.midas.model.MidasStream;
import com.robonobo.midas.model.MidasUser;
@Controller
@RequestMapping("/streams/{streamId}")
public class StreamController extends BaseController {
@RequestMapping(method=RequestMethod.GET)
public void getStream(@PathVariable("streamId") String streamId, HttpServletRequest req, HttpServletResponse resp) throws IOException {
MidasStream stream;
if("test".equals(streamId)) {
stream = new MidasStream();
stream.setDescription("A Test stream");
stream.setTitle("Test");
stream.setMimeType("audio/mpeg");
stream.setStreamId("test");
} else
stream = midas.getStreamById(streamId);
if(stream == null) {
send404(req, resp);
return;
}
log.debug("Returning stream " + stream.getStreamId());
writeToOutput(stream.toMsg(), resp);
}
@RequestMapping(method=RequestMethod.PUT)
public void putStream(@PathVariable("streamId") String streamId, HttpServletRequest req, HttpServletResponse resp) throws IOException {
MidasUser authUser = getAuthUser(req);
if(authUser == null) {
send401(req, resp);
return;
}
StreamMsg.Builder smb = StreamMsg.newBuilder();
readFromInput(smb, req);
MidasStream stream = new MidasStream(smb.build());
if(!stream.getStreamId().equals(streamId))
throw new IOException("streamIds don't match");
MidasStream currentStream = midas.getStreamById(streamId);
if(currentStream != null) {
// TODO Check for fingerprinty stuff - for now just return ok
} else {
stream.setPublished(now());
stream.setModified(now());
log.info("Creating new stream " + stream.getStreamId());
midas.saveStream(stream);
}
}
}