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.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;
39 public class AdminPage extends BasePage {
41 private static final Logger LOGGER = Logger.getLogger(AdminPage.class.getName());
43 private static final long serialVersionUID = 1L;
46 private transient UserAdministration _userAdmin;
48 private TextField _groupName;
51 * Constructor that is invoked when page is invoked without a session.
53 * @param parameters Page parameters
55 public AdminPage(final PageParameters parameters) throws Exception {
58 RepeatingView groupDelete = new RepeatingView("groupDelete") {
60 protected void onPopulate() {
62 List<String> groups = _userAdmin.getGroups();
63 for (final String group : groups) {
64 WebMarkupContainer container = new WebMarkupContainer(newChildId());
66 container.add(new Label("groupName", group));
67 container.add(new Link("groupDelete") {
69 public void onClick() {
71 _userAdmin.removeGroup(group);
72 info("Group '" + group + "' removed");
74 catch (UserMgtException e) {
75 error("Could not remove group '" + group + "'");
80 public boolean isVisible() {
81 return _userAdmin.getUsers(group).isEmpty();
89 Form groupCreate = new Form("groupCreate") {
91 protected void onSubmit() {
92 String name = _groupName.getValue();
93 if (name == null || name.length() == 0) {
97 _userAdmin.createGroup(name);
98 _groupName.setModel(new Model(""));
99 info("Group '" + name + "' created");
101 catch (UserMgtException e) {
102 error("Group '" + name + "' could not be created");
107 _groupName = new TextField("groupName", new Model(""));
108 groupCreate.add(_groupName);
110 RepeatingView user = new RepeatingView("user") {
112 protected void onPopulate() {
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));
119 RepeatingView groups = new RepeatingView("groups") {
121 protected void onPopulate() {
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") {
129 public void onClick() {
131 _userAdmin.removeUserFromGroup(user, group);
133 catch (UserMgtException e) {
134 error("Error removing group: " + e.getMessage());
142 nameContainer.add(groups);
143 nameContainer.add(new Link("delete") {
145 public void onClick() {
147 _userAdmin.removeUser(user);
148 info("Deleted user '" + user + "'");
150 catch (UserMgtException e) {
151 error("Could not delete user '" + user + "'");
156 final PasswordTextField password = new PasswordTextField("password", new Model(""));
157 Form changePassword = new Form("changePasswordForm") {
159 protected void onSubmit() {
160 String value = password.getValue();
161 if (value == null || value.length() == 0) {
164 _userAdmin.setPassword(user, value);
165 info("password for user '" + user + "' changed");
168 changePassword.add(password);
169 nameContainer.add(changePassword);
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>>() {
180 protected List<String> load() {
181 return _userAdmin.getGroups();
185 final DropDownChoice groupChoice =
186 new DropDownChoice("group", new Model(""), groups, new IChoiceRenderer() {
189 public Object getDisplayValue(Object object) {
190 return object.toString();
194 public String getIdValue(Object object, int index) {
198 return object.toString();
202 Form createUserForm = new Form("createUserForm") {
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();
210 //String group = groupChoice.getValue();
211 // if (!_userAdmin.getGroups().contains(group)) {
212 // info("No group selected");
215 if (user.length() == 0) {
216 info("No username specified");
220 _userAdmin.createUser(user, pw);
221 // _userAdmin.addUserToGroup(user, group);
222 info("User '" + user + "' created");
223 newUser.setModel(new Model(""));
225 catch (UserMgtException e) {
226 error("Problem creating user '" + user + "': " + e.getMessage());
231 createUserForm.add(newUser);
232 createUserForm.add(passwordNewUser);
233 // createUserForm.add(groupChoice);
238 protected boolean isAdminPage() {