diff options
Diffstat (limited to 'src/main/java/org/berzerkula/builddb/controllers/PkgController.java')
-rw-r--r-- | src/main/java/org/berzerkula/builddb/controllers/PkgController.java | 169 |
1 files changed, 169 insertions, 0 deletions
diff --git a/src/main/java/org/berzerkula/builddb/controllers/PkgController.java b/src/main/java/org/berzerkula/builddb/controllers/PkgController.java new file mode 100644 index 0000000..404a58b --- /dev/null +++ b/src/main/java/org/berzerkula/builddb/controllers/PkgController.java @@ -0,0 +1,169 @@ +package org.berzerkula.builddb.controllers; + + +import jakarta.persistence.OrderBy; +import jakarta.validation.Valid; +import org.berzerkula.builddb.models.Pkg; +import org.berzerkula.builddb.models.PkgDto; +import org.berzerkula.builddb.repositories.PkgRepository; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Sort; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Objects; + +@Controller +@RequestMapping("/pkgs") +public class PkgController { + + private static final Logger logger = LoggerFactory.getLogger(PkgController.class); + + @Autowired + private PkgRepository repo; + + @GetMapping({"", "/", "/index"}) + public String showPkgList(Model model, + @RequestParam(defaultValue = "sequence,asc") String[] sort, + @RequestParam(defaultValue = "") String repotable) { + try { + String sortField = sort[0]; + String sortDirection = sort[1]; + + Sort.Direction direction = sortDirection.equals("desc") ? Sort.Direction.DESC : Sort.Direction.ASC; + Sort.Order order = new Sort.Order(direction, sortField); + + List<Pkg> pkgs = repo.findAll(Sort.by(order)); + + model.addAttribute("pkgs", pkgs); + model.addAttribute("sortField", sortField); + model.addAttribute("sortDirection", sortDirection); + model.addAttribute("reverseSortDirection", sortDirection.equals("asc") ? "desc" : "asc"); + + } catch (Exception e) { + logger.error(e.getMessage()); + } + + return "pkgs/index"; + } + + @GetMapping("/add") + public String showAddPkgForm(Model model) { + PkgDto pkgDto = new PkgDto(); + model.addAttribute("pkgDto", pkgDto); + return "pkgs/add"; + } + + @PostMapping("/add") + public String addPkg( + @Valid + @ModelAttribute + PkgDto pkgDto, BindingResult result ) { + + if (result.hasErrors()) { + return "pkgs/add"; + } + + try { + + Pkg pkg = new Pkg(); + pkg.setSequence(pkgDto.getSequence()); + pkg.setName(pkgDto.getName()); + pkg.setVersion(pkgDto.getVersion()); + pkg.setConfigure(pkgDto.getConfigure()); + pkg.setBuild(pkgDto.getBuild()); + pkg.setInstall(pkgDto.getInstall()); + pkg.setSetup(pkgDto.getSetup()); + pkg.setNotes(pkgDto.getNotes()); + pkg.setUrl(pkgDto.getUrl()); + + repo.save(pkg); + + } catch (Exception e) { + logger.error(e.getMessage()); + } + + return "redirect:/pkgs"; + } + + @GetMapping("/edit") + public String showEditPkgForm(Model model, @RequestParam int id) { + + try { + Pkg pkg = repo.findById(id).get(); + model.addAttribute("pkg", pkg); + + PkgDto pkgDto = new PkgDto(); + pkgDto.setSequence(pkg.getSequence()); + pkgDto.setName(pkg.getName()); + pkgDto.setVersion(pkg.getVersion()); + pkgDto.setConfigure(pkg.getConfigure()); + pkgDto.setBuild(pkg.getBuild()); + pkgDto.setInstall(pkg.getInstall()); + pkgDto.setSetup(pkg.getSetup()); + pkgDto.setNotes(pkg.getNotes()); + pkgDto.setUrl(pkg.getUrl()); + + model.addAttribute("pkgDto", pkgDto); + + } catch(Exception ex) { + logger.error("Exception: {}", ex.getMessage()); + } + + return "pkgs/edit"; + } + + @PostMapping("/edit") + public String editPkg( + Model model, + @RequestParam int id, + @Valid + @ModelAttribute PkgDto pkgDto, BindingResult result ) { + + try { + Pkg pkg = repo.findById(id).get(); + model.addAttribute("pkg", pkg); + + if (result.hasErrors()) { + return "pkgs/edit"; + } + + pkg.setSequence(pkgDto.getSequence()); + pkg.setName(pkgDto.getName()); + pkg.setVersion(pkgDto.getVersion()); + pkg.setConfigure(pkgDto.getConfigure()); + pkg.setBuild(pkgDto.getBuild()); + pkg.setInstall(pkgDto.getInstall()); + pkg.setSetup(pkgDto.getSetup()); + pkg.setNotes(pkgDto.getNotes()); + pkg.setUrl(pkgDto.getUrl()); + + repo.save(pkg); + + } catch(Exception ex) { + logger.error("Exception: {}", ex.getMessage()); + } + return "redirect:/pkgs/#" + id; + + } + + @GetMapping("/delete") + public String deletePkg(@RequestParam int id) { + + try { + Pkg pkg = repo.findById(id).get(); + + repo.delete(pkg); + + } catch (Exception ex) { + logger.error("Exception: {}", ex.getMessage()); + } + + return "redirect:/pkgs/"; + } +} |