Package com.rupertjones.globalcron.server.web

Source Code of com.rupertjones.globalcron.server.web.EditUserAction

package com.rupertjones.globalcron.server.web;

import com.rupertjones.globalcron.common.domain.Role;
import com.rupertjones.globalcron.common.domain.Setting;
import com.rupertjones.globalcron.common.domain.SettingType;
import com.rupertjones.globalcron.common.domain.User;
import net.sourceforge.stripes.action.Before;
import net.sourceforge.stripes.action.DefaultHandler;
import net.sourceforge.stripes.action.ForwardResolution;
import net.sourceforge.stripes.action.HandlesEvent;
import net.sourceforge.stripes.action.Resolution;
import net.sourceforge.stripes.controller.LifecycleStage;
import net.sourceforge.stripes.validation.LocalizableError;
import net.sourceforge.stripes.validation.SimpleError;
import net.sourceforge.stripes.validation.Validate;
import net.sourceforge.stripes.validation.ValidateNestedProperties;
import net.sourceforge.stripes.validation.ValidationErrors;
import org.springframework.security.access.prepost.PreAuthorize;

import java.util.Collection;

/**
* <p>&copy Rupert Jones 2011,2012</p>
*
* @author rup
*/
public class EditUserAction extends AbstractFormAction {

    @ValidateNestedProperties({
        @Validate(field = "fullName", required = true, on = { "SaveOrUpdate" }),
        @Validate(field = "password", required = false, on = { "SaveOrUpdate" }),
        @Validate(field = "confirmPassword", required = false, on = { "SaveOrUpdate" })
    })
    private FormUser formUser;

    private User actualUser;

    private Setting passwordPolicy;

    @Before(stages = LifecycleStage.BindingAndValidation)
    public void loadAndBind() {
        String id = getContext().getRequest().getParameter("user.id");
        int userId = Integer.parseInt(id);
        actualUser = getUserService().findUser(userId);

        passwordPolicy = getSettingsService().find(SettingType.PASSWORD_POLICY);
        formUser = new FormUser(passwordPolicy);
        formUser.setFullName(actualUser.getFullName());
        formUser.setUsername(actualUser.getUsername());

        formUser.clearRoles();

        for (Role role : getRoles()) {
            FormRole formRole = new FormRole();
            formRole.setName(role.getName());
            formRole.setAssigned(actualUser.hasRole(role));
            formUser.addRole(formRole);
        }
    }

    @DefaultHandler
    public Resolution view() {
        return new ForwardResolution(EDIT_USER_JSP);
    }

    @PreAuthorize("hasRole('ROLE_ADMIN')")
    @HandlesEvent("SaveOrUpdate")
    public Resolution onSave() {
        formUser.unassignRoles();
        for (int index = 0; index < getRoles().size(); index++) {
            String value = getContext().getRequest().getParameter(String.format("%s_%s", "roles", String.valueOf(index)));
            if (value != null) {
                formUser.getRole(value).setAssigned(true);
            }
        }

        ValidationErrors passwordError = new ValidationErrors();

        if (formUser.hasPassword()) {
            boolean passwordMatch = this.formUser.isPasswordMatch();
            boolean compliant = this.formUser.isPasswordPolicyCompliant();

            if (!passwordMatch) {
                passwordError.add("password", new LocalizableError("password.nomatch"));
            }

            if (!compliant) {
                passwordError.add("password", new SimpleError(passwordPolicy.getDescription()));
            }
        }

        if (passwordError.size() == 0) {
            actualUser.setFullName(this.formUser.getFullName());
            actualUser.clearRoles();

            for (FormRole role : formUser.getRoles())  {
                if (role.isAssigned()) {
                    actualUser.addRole(getUserService().findRole(role.getName()));
                }
            }

            if (formUser.hasPassword()) {
                getUserService().saveWithPassword(actualUser, this.formUser.getPassword());
            } else {
                getUserService().save(actualUser);
            }
            return new ForwardResolution(INFO_USERS_ACTION);
        } else {
            getContext().setValidationErrors(passwordError);
            return getContext().getSourcePageResolution();
        }
    }

    public FormUser getUser() {
        return formUser;
    }

    private Collection<Role> getRoles() {
        return getUserService().findAllRoles();
    }
}
TOP

Related Classes of com.rupertjones.globalcron.server.web.EditUserAction

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.