@RequestMapping(value = "/save", method = RequestMethod.POST)
  public String save(
      @Valid @ModelAttribute("document") Document document,
      BindingResult result,
      @RequestParam("file") MultipartFile file) {

    if (result.hasErrors()) {
      return "doc/documents.tiles";
    }

    System.out.println("Name:" + document.getName());
    System.out.println("Desc:" + document.getDescription());
    System.out.println("File:" + file.getName());
    System.out.println("ContentType:" + file.getContentType());

    try {
      Blob blob = Hibernate.createBlob(file.getInputStream());

      document.setFilename(file.getOriginalFilename());
      document.setContent(blob);
      document.setContentType(file.getContentType());
    } catch (IOException e) {
      e.printStackTrace();
    }

    try {
      documentService.save(document);
    } catch (Exception e) {
      e.printStackTrace();
    }

    return "redirect:/doc/index";
  }
  @RequestMapping("/remove/{documentId}")
  public String remove(@PathVariable("documentId") Integer documentId) {

    documentService.remove(documentId);

    return "redirect:/doc/index";
  }
  @RequestMapping("/index")
  public String index(Map<String, Object> map) {
    try {
      map.put("document", new Document());
      map.put("documentList", documentService.list());
    } catch (Exception e) {
      e.printStackTrace();
    }

    return "doc/documents.tiles";
  }
  @RequestMapping("/download/{documentId}")
  public String download(
      @PathVariable("documentId") Integer documentId, HttpServletResponse response) {

    Document doc = documentService.get(documentId);
    try {
      response.setHeader("Content-Disposition", "inline;filename=\"" + doc.getFilename() + "\"");
      OutputStream out = response.getOutputStream();
      response.setContentType(doc.getContentType());
      IOUtils.copy(doc.getContent().getBinaryStream(), out);
      out.flush();
      out.close();

    } catch (IOException e) {
      e.printStackTrace();
    } catch (SQLException e) {
      e.printStackTrace();
    }

    return null;
  }