X-Git-Url: http://wamblee.org/gitweb/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Forg%2Fwamblee%2Fphotos%2Fwicket%2FAdminPage.java;h=95b25665442aca8e7475f9dd775838d07b495c5b;hb=HEAD;hp=30737d9e7f029fa67108dccd1538e09174424675;hpb=cf32509dac2f9fa4d44bedf7743f159c5795b7d8;p=photos diff --git a/src/main/java/org/wamblee/photos/wicket/AdminPage.java b/src/main/java/org/wamblee/photos/wicket/AdminPage.java index 30737d9..95b2566 100644 --- a/src/main/java/org/wamblee/photos/wicket/AdminPage.java +++ b/src/main/java/org/wamblee/photos/wicket/AdminPage.java @@ -15,9 +15,25 @@ */ 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 @@ -28,6 +44,11 @@ public class AdminPage extends BasePage { 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. * @@ -35,10 +56,232 @@ public class AdminPage extends BasePage { */ 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(); + } + } } \ No newline at end of file