package com.robonobo.midas.controller;
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.UserConfigMsg;
import com.robonobo.midas.model.MidasUser;
import com.robonobo.midas.model.MidasUserConfig;
@Controller
@RequestMapping("/userconfig/{uIdStr}")
public class UserConfigController extends BaseController {
@RequestMapping(method = RequestMethod.GET)
public void getUserConfig(@PathVariable("uIdStr") String uIdStr, HttpServletRequest req, HttpServletResponse resp) throws IOException {
long uId = Long.parseLong(uIdStr, 16);
MidasUser authUser = getAuthUser(req);
if (authUser == null || authUser.getUserId() != uId) {
send401(req, resp);
return;
}
MidasUserConfig config = midas.getUserConfig(authUser);
if (config == null) {
config = new MidasUserConfig();
config.setUserId(authUser.getUserId());
}
writeToOutput(config.toMsg(), resp);
}
@RequestMapping(method = RequestMethod.PUT)
public void putUserConfig(@PathVariable("uIdStr") String uIdStr, HttpServletRequest req, HttpServletResponse resp) throws IOException {
long uId = Long.parseLong(uIdStr, 16);
MidasUser authUser = getAuthUser(req);
if (authUser == null || authUser.getUserId() != uId) {
send401(req, resp);
return;
}
UserConfigMsg.Builder b = UserConfigMsg.newBuilder();
readFromInput(b, req);
MidasUserConfig newCfg = new MidasUserConfig(b.build());
MidasUserConfig curCfg = midas.getUserConfig(authUser);
if (curCfg == null) {
midas.putUserConfig(newCfg);
curCfg = newCfg;
} else {
// User has existing config - add/replace items from the serialized one
for (String iName : newCfg.getItems().keySet()) {
curCfg.getItems().put(iName, newCfg.getItems().get(iName));
}
midas.putUserConfig(curCfg);
}
writeToOutput(curCfg.toMsg(), resp);
}
}