/* * Copyright 2005-2010 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.wamblee.photos.wicket; import java.util.List; import java.util.logging.Logger; import javax.inject.Inject; import org.apache.wicket.PageParameters; import org.apache.wicket.markup.html.WebMarkupContainer; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.form.DropDownChoice; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.markup.html.form.IChoiceRenderer; import org.apache.wicket.markup.html.form.PasswordTextField; import org.apache.wicket.markup.html.form.TextField; import org.apache.wicket.markup.html.link.Link; import org.apache.wicket.markup.repeater.RepeatingView; import org.apache.wicket.model.IModel; import org.apache.wicket.model.LoadableDetachableModel; import org.apache.wicket.model.Model; import org.wamblee.security.authentication.UserAdministration; import org.wamblee.security.authentication.UserMgtException; /** * Homepage */ public class AdminPage extends BasePage { private static final Logger LOGGER = Logger.getLogger(AdminPage.class.getName()); private static final long serialVersionUID = 1L; @Inject private transient UserAdministration _userAdmin; private TextField _groupName; /** * Constructor that is invoked when page is invoked without a session. * * @param parameters Page parameters */ public AdminPage(final PageParameters parameters) throws Exception { super(); RepeatingView groupDelete = new RepeatingView("groupDelete") { @Override protected void onPopulate() { removeAll(); List groups = _userAdmin.getGroups(); for (final String group : groups) { WebMarkupContainer container = new WebMarkupContainer(newChildId()); add(container); container.add(new Label("groupName", group)); container.add(new Link("groupDelete") { @Override public void onClick() { try { _userAdmin.removeGroup(group); info("Group '" + group + "' removed"); } catch (UserMgtException e) { error("Could not remove group '" + group + "'"); } } @Override public boolean isVisible() { return _userAdmin.getUsers(group).isEmpty(); } }); } } }; add(groupDelete); Form groupCreate = new Form("groupCreate") { @Override protected void onSubmit() { String name = _groupName.getValue(); if (name == null || name.length() == 0) { return; } try { _userAdmin.createGroup(name); _groupName.setModel(new Model("")); info("Group '" + name + "' created"); } catch (UserMgtException e) { error("Group '" + name + "' could not be created"); } } }; add(groupCreate); _groupName = new TextField("groupName", new Model("")); groupCreate.add(_groupName); RepeatingView user = new RepeatingView("user") { @Override protected void onPopulate() { removeAll(); List users = _userAdmin.getUsers(); for (final String user : users) { WebMarkupContainer nameContainer = new WebMarkupContainer(newChildId()); nameContainer.add(new Label("name", user)); add(nameContainer); RepeatingView groups = new RepeatingView("groups") { @Override protected void onPopulate() { removeAll(); List groups = _userAdmin.getGroups(user); for (final String group : groups) { WebMarkupContainer groupContainer = new WebMarkupContainer(newChildId()); groupContainer.add(new Label("group", group)); groupContainer.add(new Link("remove") { @Override public void onClick() { try { _userAdmin.removeUserFromGroup(user, group); } catch (UserMgtException e) { error("Error removing group: " + e.getMessage()); } } }); add(groupContainer); } } }; nameContainer.add(groups); nameContainer.add(new Link("delete") { @Override public void onClick() { try { _userAdmin.removeUser(user); info("Deleted user '" + user + "'"); } catch (UserMgtException e) { error("Could not delete user '" + user + "'"); } } }); final PasswordTextField password = new PasswordTextField("password", new Model("")); Form changePassword = new Form("changePasswordForm") { @Override protected void onSubmit() { String value = password.getValue(); if (value == null || value.length() == 0) { return; } _userAdmin.setPassword(user, value); info("password for user '" + user + "' changed"); } }; changePassword.add(password); nameContainer.add(changePassword); } } }; add(user); { final TextField newUser = new TextField("user", new Model("")); final PasswordTextField passwordNewUser = new PasswordTextField("password", new Model("")); Form createUserForm = new Form("createUserForm") { @Override protected void onSubmit() { //System.out.println("Create user " + newUser.getValue() + " " + passwordNewUser.getValue() + " " + // "'" + groupChoice.getValue() + "'"); String user = newUser.getValue(); String pw = passwordNewUser.getValue(); //String group = groupChoice.getValue(); // if (!_userAdmin.getGroups().contains(group)) { // info("No group selected"); // return; // } if (user.length() == 0) { info("No username specified"); return; } try { _userAdmin.createUser(user, pw); // _userAdmin.addUserToGroup(user, group); info("User '" + user + "' created"); newUser.setModel(new Model("")); } catch (UserMgtException e) { error("Problem creating user '" + user + "': " + e.getMessage()); } } }; add(createUserForm); createUserForm.add(newUser); createUserForm.add(passwordNewUser); // createUserForm.add(groupChoice); } { IModel> users = new LoadableDetachableModel>() { @Override protected List load() { return _userAdmin.getUsers(); } }; final DropDownChoice userChoice = new DropDownChoice("userChoice", new Model(""), users, new MyChoiceRenderer()); IModel> groups = new LoadableDetachableModel>() { @Override protected List load() { return _userAdmin.getGroups(); } }; final DropDownChoice groupChoice = new DropDownChoice("groupChoice", new Model(""), groups, new MyChoiceRenderer()); Form userToGroupForm = new Form("userToGroupForm") { @Override protected void onSubmit() { String user = userChoice.getValue(); String group = groupChoice.getValue(); if (!_userAdmin.getUsers().contains(user)) { return; } if (!_userAdmin.getGroups().contains(group)) { return; } if (_userAdmin.isInGroup(user, group)) { info("User '" + user + "' is already in group '" + group + "'"); return; } try { _userAdmin.addUserToGroup(user, group); info("Added user '" + user + "' to group '" + group + "'"); } catch (UserMgtException e) { error("Could not add user '" + user + "' to group '" + group + "': " + e.getMessage()); } } ; }; userToGroupForm.add(userChoice); userToGroupForm.add(groupChoice); add(userToGroupForm); } } @Override protected boolean isAdminPage() { return true; } private static class MyChoiceRenderer implements IChoiceRenderer { @Override public Object getDisplayValue(Object object) { return object.toString(); } @Override public String getIdValue(Object object, int index) { if (index < 0) { return ""; } return object.toString(); } } }