2 * Copyright 2005-2010 the original author or authors.
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
16 package org.wamblee.photos.wicket;
18 import java.util.List;
19 import java.util.logging.Logger;
20 import javax.inject.Inject;
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.DropDownChoice;
26 import org.apache.wicket.markup.html.form.Form;
27 import org.apache.wicket.markup.html.form.IChoiceRenderer;
28 import org.apache.wicket.markup.html.form.PasswordTextField;
29 import org.apache.wicket.markup.html.form.TextField;
30 import org.apache.wicket.markup.html.link.Link;
31 import org.apache.wicket.markup.repeater.RepeatingView;
32 import org.apache.wicket.model.IModel;
33 import org.apache.wicket.model.LoadableDetachableModel;
34 import org.apache.wicket.model.Model;
35 import org.wamblee.security.authentication.UserAdministration;
36 import org.wamblee.security.authentication.UserMgtException;
41 public class AdminPage extends BasePage {
43 private static final Logger LOGGER = Logger.getLogger(AdminPage.class.getName());
45 private static final long serialVersionUID = 1L;
48 private transient UserAdministration _userAdmin;
50 private TextField _groupName;
53 * Constructor that is invoked when page is invoked without a session.
55 * @param parameters Page parameters
57 public AdminPage(final PageParameters parameters) throws Exception {
60 RepeatingView groupDelete = new RepeatingView("groupDelete") {
62 protected void onPopulate() {
64 List<String> groups = _userAdmin.getGroups();
65 for (final String group : groups) {
66 WebMarkupContainer container = new WebMarkupContainer(newChildId());
68 container.add(new Label("groupName", group));
69 container.add(new Link("groupDelete") {
71 public void onClick() {
73 _userAdmin.removeGroup(group);
74 info("Group '" + group + "' removed");
76 catch (UserMgtException e) {
77 error("Could not remove group '" + group + "'");
82 public boolean isVisible() {
83 return _userAdmin.getUsers(group).isEmpty();
91 Form groupCreate = new Form("groupCreate") {
93 protected void onSubmit() {
94 String name = _groupName.getValue();
95 if (name == null || name.length() == 0) {
99 _userAdmin.createGroup(name);
100 _groupName.setModel(new Model(""));
101 info("Group '" + name + "' created");
103 catch (UserMgtException e) {
104 error("Group '" + name + "' could not be created");
109 _groupName = new TextField("groupName", new Model(""));
110 groupCreate.add(_groupName);
112 RepeatingView user = new RepeatingView("user") {
114 protected void onPopulate() {
116 List<String> users = _userAdmin.getUsers();
117 for (final String user : users) {
118 WebMarkupContainer nameContainer = new WebMarkupContainer(newChildId());
119 nameContainer.add(new Label("name", user));
121 RepeatingView groups = new RepeatingView("groups") {
123 protected void onPopulate() {
125 List<String> groups = _userAdmin.getGroups(user);
126 for (final String group : groups) {
127 WebMarkupContainer groupContainer = new WebMarkupContainer(newChildId());
128 groupContainer.add(new Label("group", group));
129 groupContainer.add(new Link("remove") {
131 public void onClick() {
133 _userAdmin.removeUserFromGroup(user, group);
135 catch (UserMgtException e) {
136 error("Error removing group: " + e.getMessage());
144 nameContainer.add(groups);
145 nameContainer.add(new Link("delete") {
147 public void onClick() {
149 _userAdmin.removeUser(user);
150 info("Deleted user '" + user + "'");
152 catch (UserMgtException e) {
153 error("Could not delete user '" + user + "'");
158 final PasswordTextField password = new PasswordTextField("password", new Model(""));
159 Form changePassword = new Form("changePasswordForm") {
161 protected void onSubmit() {
162 String value = password.getValue();
163 if (value == null || value.length() == 0) {
166 _userAdmin.setPassword(user, value);
167 info("password for user '" + user + "' changed");
170 changePassword.add(password);
171 nameContainer.add(changePassword);
178 final TextField newUser = new TextField("user", new Model(""));
179 final PasswordTextField passwordNewUser = new PasswordTextField("password", new Model(""));
181 Form createUserForm = new Form("createUserForm") {
183 protected void onSubmit() {
184 //System.out.println("Create user " + newUser.getValue() + " " + passwordNewUser.getValue() + " " +
185 // "'" + groupChoice.getValue() + "'");
186 String user = newUser.getValue();
187 String pw = passwordNewUser.getValue();
189 //String group = groupChoice.getValue();
190 // if (!_userAdmin.getGroups().contains(group)) {
191 // info("No group selected");
194 if (user.length() == 0) {
195 info("No username specified");
199 _userAdmin.createUser(user, pw);
200 // _userAdmin.addUserToGroup(user, group);
201 info("User '" + user + "' created");
202 newUser.setModel(new Model(""));
204 catch (UserMgtException e) {
205 error("Problem creating user '" + user + "': " + e.getMessage());
210 createUserForm.add(newUser);
211 createUserForm.add(passwordNewUser);
212 // createUserForm.add(groupChoice);
216 IModel<List<String>> users = new LoadableDetachableModel<List<String>>() {
218 protected List<String> load() {
219 return _userAdmin.getUsers();
222 final DropDownChoice userChoice =
223 new DropDownChoice("userChoice", new Model(""), users, new MyChoiceRenderer());
225 IModel<List<String>> groups = new LoadableDetachableModel<List<String>>() {
227 protected List<String> load() {
228 return _userAdmin.getGroups();
231 final DropDownChoice groupChoice =
232 new DropDownChoice("groupChoice", new Model(""), groups, new MyChoiceRenderer());
234 Form userToGroupForm = new Form("userToGroupForm") {
236 protected void onSubmit() {
237 String user = userChoice.getValue();
238 String group = groupChoice.getValue();
239 if (!_userAdmin.getUsers().contains(user)) {
242 if (!_userAdmin.getGroups().contains(group)) {
245 if (_userAdmin.isInGroup(user, group)) {
246 info("User '" + user + "' is already in group '" + group + "'");
251 _userAdmin.addUserToGroup(user, group);
252 info("Added user '" + user + "' to group '" + group + "'");
254 catch (UserMgtException e) {
255 error("Could not add user '" + user + "' to group '" + group + "': " + e.getMessage());
261 userToGroupForm.add(userChoice);
262 userToGroupForm.add(groupChoice);
263 add(userToGroupForm);
268 protected boolean isAdminPage() {
272 private static class MyChoiceRenderer implements IChoiceRenderer {
275 public Object getDisplayValue(Object object) {
276 return object.toString();
280 public String getIdValue(Object object, int index) {
284 return object.toString();