easytests.admin.controllers.UsersController   A
last analyzed

Complexity

Total Complexity 17

Size/Duplication

Total Lines 129
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
dl 0
c 0
b 0
f 0
loc 129
rs 10
wmc 17

20 Methods

Rating   Name   Duplication   Size   Complexity  
A getUserUpdateUrlTemplate() 0 3 1
getUserDeleteUrlTemplate 0 3 ?
A getUsersCreateUrl() 0 3 1
A getUserDeleteUrlTemplate() 0 3 1
A getUserModel(Integer) 0 2 1
getUserUpdateUrlTemplate 0 3 ?
A getUserViewUrlTemplate() 0 3 1
getUsersListUrl 0 3 ?
getUserModel 0 6 ?
getUserViewUrlTemplate 0 3 ?
getUsersCreateUrl 0 3 ?
A getUsersListUrl() 0 3 1
A update(Model,Integer) 0 9 1
A save(Model,Integer,UserModelDto,BindingResult) 0 20 2
A getUserModel(Integer,UsersOptionsInterface) 0 6 2
A list(Model) 0 5 1
A insert(Model,UserModelDto,BindingResult) 0 15 2
A delete(Integer) 0 9 1
A create(Model) 0 7 1
A view(Model,Integer) 0 5 1
1
package easytests.admin.controllers;
2
3
import easytests.admin.dto.UserModelDto;
4
import easytests.admin.validators.UserModelDtoValidator;
5
import easytests.common.controllers.AbstractCrudController;
6
import easytests.common.exceptions.NotFoundException;
7
import easytests.core.models.UserModel;
8
import easytests.core.models.UserModelInterface;
9
import easytests.core.options.UsersOptionsInterface;
10
import easytests.core.options.builder.UsersOptionsBuilder;
11
import java.util.List;
12
import javax.validation.Valid;
13
import org.springframework.beans.factory.annotation.Autowired;
14
import org.springframework.stereotype.Controller;
15
import org.springframework.ui.Model;
16
import org.springframework.validation.BindingResult;
17
import org.springframework.web.bind.annotation.*;
18
19
20
/**
21
 * @author malinink
22
 */
23
@Controller
24
@SuppressWarnings("checkstyle:MultipleStringLiterals")
25
@RequestMapping("/admin/users/")
26
public class UsersController extends AbstractCrudController {
27
    @Autowired
28
    private UserModelDtoValidator userModelDtoValidator;
29
30
    @Autowired
31
    private UsersOptionsBuilder usersOptionsBuilder;
32
33
    @GetMapping("")
34
    public String list(Model model) {
35
        final List<UserModelInterface> users = this.usersService.findAll();
36
        model.addAttribute("users", users);
37
        return "admin/users/list";
38
    }
39
40
    @GetMapping("{userId}/")
41
    public String view(Model model, @PathVariable Integer userId) {
42
        final UserModelInterface userModel = this.getUserModel(userId);
43
        model.addAttribute("user", userModel);
44
        return "admin/users/view";
45
    }
46
47
    @GetMapping("create/")
48
    public String create(Model model) {
49
        final UserModelDto userModelDto = new UserModelDto();
50
51
        model.addAttribute("user", userModelDto);
52
        setCreateBehaviour(model);
53
        return "admin/users/form";
54
    }
55
56
    @PostMapping("create/")
57
    public String insert(Model model, @Valid UserModelDto userModelDto, BindingResult bindingResult) {
58
        this.userModelDtoValidator.validate(userModelDto, bindingResult);
59
60
        if (bindingResult.hasErrors()) {
61
            model.addAttribute("user", userModelDto);
62
            model.addAttribute("errors", bindingResult);
63
            setCreateBehaviour(model);
64
            return "admin/users/form";
65
        }
66
67
        final UserModelInterface userModel = new UserModel();
68
        userModelDto.mapInto(userModel);
69
        this.usersService.save(userModel);
70
        return "redirect:/admin/users/";
71
    }
72
73
    @GetMapping("update/{userId}/")
74
    public String update(Model model, @PathVariable Integer userId) {
75
        final UserModelInterface userModel = this.getUserModel(userId);
76
        final UserModelDto userModelDto = new UserModelDto();
77
78
        userModelDto.map(userModel);
79
        model.addAttribute("user", userModelDto);
80
        setUpdateBehaviour(model);
81
        return "admin/users/form";
82
    }
83
84
    @PostMapping("update/{userId}/")
85
    public String save(
86
            Model model,
87
            @PathVariable Integer userId,
88
            @Valid UserModelDto userModelDto,
89
            BindingResult bindingResult) {
90
        final UserModelInterface userModel = this.getUserModel(userId);
91
        userModelDto.setId(userId);
92
        this.userModelDtoValidator.validate(userModelDto, bindingResult);
93
94
        if (bindingResult.hasErrors()) {
95
            model.addAttribute("user", userModelDto);
96
            model.addAttribute("errors", bindingResult);
97
            setUpdateBehaviour(model);
98
            return "admin/users/form";
99
        }
100
101
        userModelDto.mapInto(userModel);
102
        this.usersService.save(userModel);
103
        return "redirect:/admin/users/";
104
    }
105
106
    @PostMapping("delete/{userId}/")
107
    public String delete(@PathVariable Integer userId) {
108
        this.getUserModel(userId);
109
        final UsersOptionsInterface usersOptions = this.usersOptionsBuilder.forDelete();
110
        final UserModelInterface userModel = this.usersService.find(userId, usersOptions);
111
112
        this.usersService.delete(userModel, usersOptions);
113
114
        return "redirect:/admin/users/";
115
    }
116
117
    private UserModelInterface getUserModel(Integer id, UsersOptionsInterface userOptions) {
118
        final UserModelInterface userModel = this.usersService.find(id, userOptions);
119
        if (userModel == null) {
120
            throw new NotFoundException();
121
        }
122
        return userModel;
123
    }
124
125
    private UserModelInterface getUserModel(Integer id) {
126
        return getUserModel(id, this.usersOptionsBuilder.forAuth());
127
    }
128
129
    @ModelAttribute("usersListUrl")
130
    public String getUsersListUrl() {
131
        return "/admin/users/";
132
    }
133
134
    @ModelAttribute("usersCreateUrl")
135
    public String getUsersCreateUrl() {
136
        return "/admin/users/create/";
137
    }
138
139
    @ModelAttribute("userViewUrlTemplate")
140
    public String getUserViewUrlTemplate() {
141
        return "/admin/users/%d/";
142
    }
143
144
    @ModelAttribute("userUpdateUrlTemplate")
145
    public String getUserUpdateUrlTemplate() {
146
        return "/admin/users/update/%d/";
147
    }
148
149
    @ModelAttribute("userDeleteUrlTemplate")
150
    public String getUserDeleteUrlTemplate() {
151
        return "/admin/users/delete/%d/";
152
    }
153
}
154