@RequestMapping("TMA/{id}/**")
  public void downloadTMA(@PathVariable("id") Long id, HttpServletResponse response)
      throws IOException {
    TinggiMukaAir tma = tinggiMukaAirService.findById(id);
    if (tma == null) return;

    response.setContentType(contentTypeUtils.getContentType(tma.getFilename()));
    tinggiMukaAirService.getBlob(id, response.getOutputStream());
  }
  @RequestMapping(value = "{wsId}/{dasId}/edit/{id}.html", method = RequestMethod.GET)
  public ModelAndView editTMA(
      @PathVariable("wsId") Long wsId,
      @PathVariable("dasId") Long dasId,
      @PathVariable("id") Long id,
      @ModelAttribute("form") TinggiMukaAirForm form) {
    TinggiMukaAir tma = tinggiMukaAirService.findById(id);
    form.setDescription(tma.getDescription());
    if (tma.getYear() != null) {
      form.setYear(tma.getYear().getId());
    }

    return createTMAFormView(wsId, dasId);
  }
  private void saveTMAForm(Long id, TinggiMukaAirForm form, Long dasId) throws IOException {
    TinggiMukaAir tma = (id == null ? new TinggiMukaAir() : tinggiMukaAirService.findById(id));

    tma.setDescription(form.getDescription());

    Year year = yearService.findById(form.getYear());
    tma.setYear(year);

    Das das = dasService.findById(dasId);
    tma.setDas(das);

    if (form.getFile() == null || form.getFile().isEmpty()) {
      tinggiMukaAirService.save(tma);
    } else {
      tma.setFilename(form.getFile().getOriginalFilename());
      tinggiMukaAirService.save(tma, form.getFile().getInputStream());
    }
  }