package org.hyperic.hq.ui.action.admin.user; import java.util.Map; import javax.annotation.Resource; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts2.interceptor.validation.SkipValidation; import org.hyperic.hq.authz.server.session.AuthzSubject; import org.hyperic.hq.authz.shared.AuthzSubjectValue; import org.hyperic.hq.bizapp.shared.AuthBoss; import org.hyperic.hq.bizapp.shared.AuthzBoss; import org.hyperic.hq.common.shared.HQConstants; import org.hyperic.hq.ui.Constants; import org.hyperic.hq.ui.action.BaseActionNG; import org.hyperic.hq.ui.util.RequestUtils; import org.hyperic.util.pager.PageControl; import org.hyperic.util.pager.PageList; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ModelDriven; @Component(value = "userAdminPortalActionNG") @Scope(value = "prototype") public class UserAdminPortalActionNG extends BaseActionNG implements ModelDriven<UserNG> { protected final Log log = LogFactory.getLog(UserAdminPortalActionNG.class .getName()); @Resource private AuthBoss authBoss; @Resource private AuthzBoss authzBoss; private UserNG user = new UserNG(); private String userId; public String getUserId() { return userId; } public void setUserId(String userId) { this.userId = userId; } @SkipValidation public String view() throws Exception { setUser(); setHeaderResources(); return "displayUser"; } @SkipValidation public String startNew() throws Exception { setHeaderResources(); return "newUserForm"; } @SkipValidation public String cancel() throws Exception { setHeaderResources(); clearErrorsAndMessages(); return "cancel"; } @SkipValidation public String reset() throws Exception { setHeaderResources(); user.reset(); clearErrorsAndMessages(); return "reset"; } public String create() throws Exception { setHeaderResources(); if ( !validatePasswordNoSpaces(user.getNewPassword()) ) { addFieldError("newPassword", getText("admin.user.changePassword.NoSpaces")); return INPUT; } String checkResult = checkSubmit(user); if (checkResult != null) { return checkResult; } String userName = user.getName(); // add both a subject and a principal as normal log.trace("creating subject [" + userName + "]"); Integer sessionId = RequestUtils.getSessionId(getServletRequest()); AuthzSubject checkUser = authzBoss.findSubjectByName(sessionId, userName ); if (checkUser != null) { log.error("User name '" + userName + "' already exists"); String msg = getText("exception.user.alreadyExists"); this.addFieldError("name", msg); return INPUT; } authzBoss.createSubject(sessionId, user.getName(), "yes".equals(user.getEnableLogin()), HQConstants.ApplicationName, user.getDepartment(), user.getEmailAddress(), user.getFirstName(), user.getLastName(), user.getPhoneNumber(), user.getSmsAddress(), user.isHtmlEmail()); log.trace("adding user [" + userName + "]"); authBoss.addUser(sessionId.intValue(), userName, user.getNewPassword()); log.trace("finding subject [" + userName + "]"); AuthzSubject newUser = authzBoss.findSubjectByName(sessionId, userName); getServletRequest().setAttribute(Constants.USER_PARAM, newUser.getId()); ActionContext.getContext().put(Constants.USER_PARAM, newUser.getId()); userId = newUser.getId().toString(); return "showCreated"; } @SkipValidation public String list() throws Exception { setHeaderResources(); Integer sessionId = RequestUtils.getSessionId(getServletRequest()); PageControl pc = RequestUtils.getPageControl(getServletRequest()); if (log.isTraceEnabled()) { log.trace("getting all subjects"); } PageList<AuthzSubjectValue> users = authzBoss.getAllSubjects(sessionId, null, pc); getServletRequest().setAttribute(Constants.ALL_USERS_ATTR, users); ActionContext.getContext().put(Constants.ALL_USERS_ATTR, users); return "listUsers"; } @SkipValidation public String register() throws Exception { setHeaderResources(); return "registerUser"; } @SuppressWarnings("unchecked") public int getTotalSize() { return ((PageList<AuthzSubjectValue>) ActionContext.getContext().get( Constants.ALL_USERS_ATTR)).getTotalSize(); } public Map<Integer, String> getPaggingList() { return getPaggingList(getTotalSize()); } public String execute() throws Exception { return null; } public UserNG getUser() { return user; } public void setUser(UserNG user) { this.user = user; } public UserNG getModel() { return user; } public static boolean validatePasswordNoSpaces(String password){ return !password.contains(" "); } }