MentaTutorials

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
16 soliveira 1
package org.menta.action;
2
 
3
import org.menta.model.User;
4
import org.menta.service.UserService;
5
import org.mentawai.core.BaseAction;
6
import org.mentawai.rule.EmailRule;
7
import org.mentawai.rule.EqualRule;
8
import org.mentawai.rule.MethodRule;
9
import org.mentawai.rule.RegexRule;
10
import org.mentawai.validation.Validatable;
11
import org.mentawai.validation.Validator;
12
 
13
public class UserAction extends BaseAction implements Validatable {
14
 
15
        private final UserService userService;
16
 
17
        public UserAction(UserService userService) {
18
                this.userService = userService;
19
        }
20
 
21
        // Validate the fields for the user form...
22
        @Override
23
        public void prepareValidator(Validator val, String method) {
24
 
25
                String username_regex = "^[A-Za-z][A-Za-z0-9\\-\\_\\.]*[A-Za-z0-9]$";
26
 
27
                if (method != null && method.equals("add") && isPost()) {
28
 
29
                        val.requiredFields("required_field", "username", "password", "email", "groupId", "languageId");
30
 
31
                        val.requiredLists("required_field", "groupId", "languageId");
32
 
33
                        val.add("username", RegexRule.getInstance(username_regex), "bad_username");
34
 
35
                        val.add("username", MethodRule.getInstance(this, "checkUsernameAdd"), "username_already_exists");
36
 
37
                        val.add("email", EmailRule.getInstance(), "bad_email");
38
 
39
                        val.add("password", EqualRule.getInstance("password", "passconf"), "pass_no_match");
40
 
41
                } else if (method != null && method.equals("edit") && isPost()) {
42
 
43
                        val.requiredFields("required_field", "username", "email", "groupId");
44
 
45
                        val.requiredLists("required_field", "groupId");
46
 
47
                        val.add("username", RegexRule.getInstance(username_regex), "bad_username");
48
 
49
                        val.add("username", MethodRule.getInstance(this, "checkUsernameEdit"), "username_already_exists");
50
 
51
                        val.add("email", EmailRule.getInstance(), "bad_email");
52
                }
53
 
54
        }
55
 
56
        boolean checkUsernameAdd(String username) {
57
 
58
                return userService.findByUsername(username) == null;
59
        }
60
 
61
        boolean checkUsernameEdit(String username) {
62
 
63
                User currentUser = getSessionObj();
64
 
65
                // first check if he is actually changing his username...
66
 
67
                if (!currentUser.getUsername().equals(username)) {
68
 
69
                        return userService.findByUsername(username) == null;
70
                }
71
 
72
                return true;
73
        }
74
 
75
        public String check(String username) {
76
 
77
                if (!isPost()) return ERROR;
78
 
79
                User sessionUser = getSessionObj();
80
 
81
                String sessionUsername = null;
82
 
83
                if (sessionUser != null) sessionUsername = sessionUser.getUsername();
84
 
85
                if (isEmpty(username)) return ERROR;
86
 
87
                User u = userService.findByUsername(username);
88
 
89
                if (u == null) return SUCCESS; // username does not exist
90
 
91
                if (sessionUsername != null && u.getUsername().equals(sessionUsername)) return SUCCESS;
92
 
93
                return ALREADY;
94
        }
95
 
96
        public String add(User u) {
97
 
98
                if (!isPost()) {
99
 
100
                        // we only want to allow post to add an user...
101
 
102
                        return ERROR;
103
 
104
                } else {
105
 
106
                        userService.save(u);
107
 
108
                        setSessionObj(u);
109
                        setSessionGroup(u.getGroup());
110
                        setSessionLocale(u.getLocale());
111
 
112
                        addMessage("registration_ok");
113
 
114
                        return CREATED;
115
                }
116
        }
117
 
118
        public String edit() {
119
 
120
                if (!isPost()) {
121
 
122
                        // display user for update...
123
 
124
                        User u = getSessionObj();
125
 
126
                        output.setValue("user", u);
127
 
128
                        return SHOW;
129
 
130
                } else {
131
 
132
                        int id = input.getInt("id");
133
 
134
                        User newUser = userService.load(id);
135
 
136
                        input.inject(newUser);
137
 
138
                        userService.save(newUser);
139
 
140
                        replaceSessionObj(newUser);
141
 
142
                        setSessionGroup(newUser.getGroup());
143
 
144
                        setSessionLocale(newUser.getLocale());
145
 
146
                        addMessage("edit_ok");
147
 
148
                        return UPDATED;
149
                }
150
        }
151
}