001    package net.databinder.auth.components.ao;
002    
003    import java.util.Map;
004    
005    import net.databinder.auth.components.DataUserStatusPanelBase;
006    import net.databinder.auth.components.UserAdminPageBase;
007    import net.databinder.auth.data.DataUser;
008    import net.databinder.auth.data.ao.UserHelper;
009    import net.databinder.components.ao.DataForm;
010    import net.databinder.models.ao.EntityListModel;
011    import net.databinder.models.ao.EntityModel;
012    
013    import org.apache.wicket.authorization.strategies.role.Roles;
014    import org.apache.wicket.markup.html.form.Button;
015    import org.apache.wicket.markup.html.form.Form;
016    import org.apache.wicket.model.IModel;
017    
018    /**
019     * User administration page. Lists all users, allows editing usernames, passwords, and roles.
020     * Must have Role.ADMIN to view. Replaceable String resources: <pre>
021     * data.auth.user_admin
022     * data.auth.user_add
023     * data.auth.username
024     * data.auth.password
025     * data.auth.passwordConfirm
026     * data.auth.roles
027     * data.auth.save
028     * data.auth.delete</pre>
029     * @see net.databinder.auth.AuthSession
030     */
031    public class UserAdminPage extends UserAdminPageBase {
032            private DataForm form;
033            
034            @Override
035            protected Form adminForm(String id, Class<? extends DataUser> userClass) {
036                    return form = new DataForm(id, new EntityModel(userClass) {
037                            @Override
038                            protected void putDefaultProperties(
039                                            Map<String, Object> propertyStore) {
040                                    propertyStore.put("roles", new Roles(Roles.USER));
041                            }                       
042                    }) {
043                            @SuppressWarnings("unchecked")
044                            @Override
045                            protected void onSubmit() {
046                                    if (!getEntityModel().isBound()) {
047                                            Map<String, Object> map = (Map) getModelObject();
048                                            map.put("roleString", ((Roles)map.remove("roles")).toString());
049                                    }
050                                    super.onSubmit();
051                            }
052                    };
053            }
054            
055            @SuppressWarnings("unchecked")
056            @Override
057            protected void setPassword(String password) {
058                    if (form.getEntityModel().isBound())
059                            super.setPassword(password);
060                    else
061                            ((Map)form.getModelObject()).put("passwordHash", UserHelper.getHash(password));
062            }
063    
064            @Override
065            protected Button deleteButton(String id) {
066                    return form.new DeleteButton(id);
067            }
068    
069            @Override
070            protected DataUserStatusPanelBase statusPanel(String id) {
071                    return new DataUserStatusPanel(id);
072            }
073    
074            @Override
075            protected IModel userList(Class<? extends DataUser> userClass) {
076                    return new EntityListModel(userClass);
077            }
078    
079    }