0449028594ccf7216fd60e57b805ff645eaae21c
[photos] / src / main / java / org / wamblee / photos / wicket / AdminPage.java
1 /*
2  * Copyright 2005-2010 the original author or authors.
3  * 
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  * 
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  * 
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package org.wamblee.photos.wicket;
17
18 import java.util.List;
19 import java.util.logging.Logger;
20 import javax.inject.Inject;
21
22 import org.apache.wicket.PageParameters;
23 import org.apache.wicket.markup.html.WebMarkupContainer;
24 import org.apache.wicket.markup.html.basic.Label;
25 import org.apache.wicket.markup.html.form.Form;
26 import org.apache.wicket.markup.html.form.PasswordTextField;
27 import org.apache.wicket.markup.html.form.TextField;
28 import org.apache.wicket.markup.html.link.Link;
29 import org.apache.wicket.markup.repeater.RepeatingView;
30 import org.apache.wicket.model.IModel;
31 import org.apache.wicket.model.LoadableDetachableModel;
32 import org.apache.wicket.model.Model;
33 import org.wamblee.security.authentication.UserAdministration;
34 import org.wamblee.security.authentication.UserMgtException;
35
36 /**
37  * Homepage
38  */
39 public class AdminPage extends BasePage {
40
41     private static final Logger LOGGER = Logger.getLogger(AdminPage.class.getName());
42
43     private static final long serialVersionUID = 1L;
44
45     @Inject
46     private transient UserAdministration _userAdmin;
47
48     private TextField _groupName;
49
50     /**
51      * Constructor that is invoked when page is invoked without a session.
52      *
53      * @param parameters Page parameters
54      */
55     public AdminPage(final PageParameters parameters) throws Exception {
56         super();
57
58         RepeatingView groupDelete = new RepeatingView("groupDelete") {
59             @Override
60             protected void onPopulate() {
61                 removeAll();
62                 List<String> groups = _userAdmin.getGroups();
63                 for (final String group : groups) {
64                     WebMarkupContainer container = new WebMarkupContainer(newChildId());
65                     add(container);
66                     container.add(new Label("groupName", group));
67                     container.add(new Link("groupDelete") {
68                         @Override
69                         public void onClick() {
70                             try {
71                                 _userAdmin.removeGroup(group);
72                                 info("Group '" + group + "' removed");
73                             }
74                             catch (UserMgtException e) {
75                                 error("Could not remove group '" + group + "'");
76                             }
77                         }
78
79                         @Override
80                         public boolean isVisible() {
81                             return _userAdmin.getUsers(group).isEmpty();
82                         }
83                     });
84                 }
85             }
86         };
87         add(groupDelete);
88
89         Form groupCreate = new Form("groupCreate") {
90             @Override
91             protected void onSubmit() {
92                 String name = _groupName.getValue();
93                 if (name == null || name.length() == 0) {
94                     return;
95                 }
96                 try {
97                     _userAdmin.createGroup(name);
98                     _groupName.setModel(new Model(""));
99                     info("Group '" + name + "' created");
100                 }
101                 catch (UserMgtException e) {
102                     error("Group '" + name + "' could not be created");
103                 }
104             }
105         };
106         add(groupCreate);
107         _groupName = new TextField("groupName", new Model(""));
108         groupCreate.add(_groupName);
109
110         RepeatingView user = new RepeatingView("user") {
111             @Override
112             protected void onPopulate() {
113                 removeAll();
114                 List<String> users = _userAdmin.getUsers();
115                 for (final String user : users) {
116                     WebMarkupContainer nameContainer = new WebMarkupContainer(newChildId());
117                     nameContainer.add(new Label("name", user));
118                     add(nameContainer);
119                     RepeatingView groups = new RepeatingView("groups") {
120                         @Override
121                         protected void onPopulate() {
122                             removeAll();
123                             List<String> groups = _userAdmin.getGroups(user);
124                             for (final String group : groups) {
125                                 WebMarkupContainer groupContainer = new WebMarkupContainer(newChildId());
126                                 groupContainer.add(new Label("group", group));
127                                 groupContainer.add(new Link("remove") {
128                                     @Override
129                                     public void onClick() {
130                                         try {
131                                             _userAdmin.removeUserFromGroup(user, group);
132                                         }
133                                         catch (UserMgtException e) {
134                                             error("Error removing group: " + e.getMessage());
135                                         }
136                                     }
137                                 });
138                                 add(groupContainer);
139                             }
140                         }
141                     };
142                     nameContainer.add(groups);
143                     nameContainer.add(new Link("delete") {
144                         @Override
145                         public void onClick() {
146                             try {
147                                 _userAdmin.removeUser(user);
148                                 info("Deleted user '" + user + "'");
149                             }
150                             catch (UserMgtException e) {
151                                 error("Could not delete user '" + user + "'");
152                             }
153                         }
154                     });
155
156                     final PasswordTextField password = new PasswordTextField("password", new Model(""));
157                     Form changePassword = new Form("changePasswordForm") {
158                         @Override
159                         protected void onSubmit() {
160                             String value = password.getValue();
161                             if (value == null || value.length() == 0) {
162                                 return;
163                             }
164                             _userAdmin.setPassword(user, value);
165                             info("password for user '" + user + "' changed");
166                         }
167                     };
168                     changePassword.add(password);
169                     nameContainer.add(changePassword);
170                 }
171             }
172         };
173         add(user);
174
175         {
176             final TextField newUser = new TextField("user", new Model(""));
177             final PasswordTextField passwordNewUser = new PasswordTextField("password", new Model(""));
178             IModel<List<String>> groups = new LoadableDetachableModel<List<String>>() {
179                 @Override
180                 protected List<String> load() {
181                     return _userAdmin.getGroups();
182                 }
183             };
184             /*
185             final DropDownChoice groupChoice =
186                     new DropDownChoice("group", new Model(""), groups, new IChoiceRenderer() {
187
188                         @Override
189                         public Object getDisplayValue(Object object) {
190                             return object.toString();
191                         }
192
193                         @Override
194                         public String getIdValue(Object object, int index) {
195                             if (index < 0) {
196                                 return "";
197                             }
198                             return object.toString();
199                         }
200                     });
201               */
202             Form createUserForm = new Form("createUserForm") {
203                 @Override
204                 protected void onSubmit() {
205                     //System.out.println("Create user " + newUser.getValue() + " " + passwordNewUser.getValue() + " " +
206                     //        "'" + groupChoice.getValue() + "'");
207                     String user = newUser.getValue();
208                     String pw = passwordNewUser.getValue();
209
210                     //String group = groupChoice.getValue();
211                     //  if (!_userAdmin.getGroups().contains(group)) {
212                     //      info("No group selected");
213                     //      return;
214                     //  }
215                     if (user.length() == 0) {
216                         info("No username specified");
217                         return;
218                     }
219                     try {
220                         _userAdmin.createUser(user, pw);
221                         //    _userAdmin.addUserToGroup(user, group);
222                         info("User '" + user + "' created");
223                         newUser.setModel(new Model(""));
224                     }
225                     catch (UserMgtException e) {
226                         error("Problem creating user '" + user + "': " + e.getMessage());
227                     }
228                 }
229             };
230             add(createUserForm);
231             createUserForm.add(newUser);
232             createUserForm.add(passwordNewUser);
233             // createUserForm.add(groupChoice);
234         }
235     }
236
237     @Override
238     protected boolean isAdminPage() {
239         return true;
240     }
241 }