Java tutorial
/** * Copyright (C) 2012 - 2013, Grass CRM Studio * * 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 com.gcrm.action.system; import java.util.ArrayList; import java.util.Collection; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.ResourceBundle; import java.util.Set; import org.springframework.security.authentication.encoding.Md5PasswordEncoder; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; import com.gcrm.action.crm.BaseEditAction; import com.gcrm.domain.Role; import com.gcrm.domain.User; import com.gcrm.domain.UserStatus; import com.gcrm.security.AuthenticationFilter; import com.gcrm.service.IBaseService; import com.gcrm.service.IOptionService; import com.gcrm.util.BeanUtil; import com.gcrm.util.CommonUtil; import com.gcrm.util.Constant; import com.gcrm.util.security.UserUtil; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.Preparable; /** * Edits User * */ public class EditUserAction extends BaseEditAction implements Preparable { private static final long serialVersionUID = -2404576552417042445L; private IBaseService<User> baseService; private IOptionService<UserStatus> userStatusService; private IBaseService<Role> roleService; private User user; private List<UserStatus> statuses; private Integer statusID = null; private Integer reportToID = null; /** * Saves the entity. * * @return the SUCCESS result */ public String save() throws Exception { saveEntity(); user = getBaseService().makePersistent(user); this.setId(user.getId()); this.setSaveFlag("true"); return SUCCESS; } /** * Gets the entity. * * @return the SUCCESS result */ public String get() throws Exception { if (this.getId() != null) { user = baseService.getEntityById(User.class, this.getId()); UserStatus status = user.getStatus(); if (status != null) { statusID = status.getId(); } User reportTo = user.getReport_to(); if (reportTo != null) { reportToID = reportTo.getId(); } Set<Role> roles = user.getRoles(); ArrayList<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>(); for (Role role : roles) { SimpleGrantedAuthority grantedAuthority = new SimpleGrantedAuthority(role.getName()); authorities.add(grantedAuthority); try { UserUtil.setAccessValue(role, user); } catch (Exception e) { throw new RuntimeException("Failed to set the Access value"); } } ResourceBundle rb = CommonUtil.getResourceBundle(); Map<Integer, String> scopeMap = new HashMap<Integer, String>(); scopeMap.put(0, rb.getString("access.notSet.value")); scopeMap.put(1, rb.getString("access.all.value")); scopeMap.put(2, rb.getString("access.owner.value")); user.setScopeMap(scopeMap); Map<Integer, String> accessMap = new HashMap<Integer, String>(); accessMap.put(0, rb.getString("access.notSet.value")); accessMap.put(1, rb.getString("access.enabled.value")); accessMap.put(2, rb.getString("access.disabled.value")); user.setAccessMap(accessMap); this.getBaseInfo(user, User.class.getSimpleName(), Constant.SYSTEM_NAMESPACE); } return SUCCESS; } /** * Mass update entity record information */ public String massUpdate() throws Exception { saveEntity(); String[] fieldNames = this.massUpdate; if (fieldNames != null) { String[] selectIDArray = this.seleteIDs.split(","); Collection<User> users = new ArrayList<User>(); User loginUser = this.getLoginUser(); User user = baseService.getEntityById(User.class, loginUser.getId()); for (String IDString : selectIDArray) { int id = Integer.parseInt(IDString); User userInstance = this.baseService.getEntityById(User.class, id); for (String fieldName : fieldNames) { Object value = BeanUtil.getFieldValue(user, fieldName); BeanUtil.setFieldValue(userInstance, fieldName, value); } userInstance.setUpdated_by(user); userInstance.setUpdated_on(new Date()); users.add(userInstance); } if (users.size() > 0) { this.baseService.batchUpdate(users); } } return SUCCESS; } /** * Saves entity field * * @throws Exception */ private void saveEntity() throws Exception { UserStatus status = null; if (statusID != null) { status = userStatusService.getEntityById(UserStatus.class, statusID); } user.setStatus(status); User reportTo = null; if (reportToID != null) { reportTo = baseService.getEntityById(User.class, reportToID); } user.setReport_to(reportTo); Md5PasswordEncoder encoder = new Md5PasswordEncoder(); if (user.getId() != null) { UserUtil.permissionCheck("update_system"); User originalUser = baseService.getEntityById(User.class, user.getId()); String oldPassword = originalUser.getPassword(); if (!oldPassword.equalsIgnoreCase(user.getPassword())) { user.setPassword(encoder.encodePassword(user.getPassword(), AuthenticationFilter.SALT)); } user.setRoles(originalUser.getRoles()); user.setTargetLists(originalUser.getTargetLists()); user.setCalls(originalUser.getCalls()); user.setMeetings(originalUser.getMeetings()); user.setCreated_on(originalUser.getCreated_on()); user.setCreated_by(originalUser.getCreated_by()); } else { UserUtil.permissionCheck("create_system"); user.setPassword(encoder.encodePassword(user.getPassword(), AuthenticationFilter.SALT)); } super.updateBaseInfo(user); } /** * Prepares the list * */ public void prepare() throws Exception { ActionContext context = ActionContext.getContext(); Map<String, Object> session = context.getSession(); String local = (String) session.get("locale"); this.statuses = userStatusService.getOptions(UserStatus.class.getSimpleName(), local); } /** * @return the baseService */ public IBaseService<User> getBaseService() { return baseService; } /** * @param baseService * the baseService to set */ public void setBaseService(IBaseService<User> baseService) { this.baseService = baseService; } /** * @return the user */ public User getUser() { return user; } /** * @param user * the user to set */ public void setUser(User user) { this.user = user; } /** * @return the statuses */ public List<UserStatus> getStatuses() { return statuses; } /** * @param statuses * the statuses to set */ public void setStatuss(List<UserStatus> statuses) { this.statuses = statuses; } /** * @return the statusID */ public Integer getStatusID() { return statusID; } /** * @param statusID * the statusID to set */ public void setStatusID(Integer statusID) { this.statusID = statusID; } /** * @return the reportToID */ public Integer getReportToID() { return reportToID; } /** * @param reportToID * the reportToID to set */ public void setReportToID(Integer reportToID) { this.reportToID = reportToID; } /** * @return the roleService */ public IBaseService<Role> getRoleService() { return roleService; } /** * @param roleService * the roleService to set */ public void setRoleService(IBaseService<Role> roleService) { this.roleService = roleService; } /** * @return the userStatusService */ public IOptionService<UserStatus> getUserStatusService() { return userStatusService; } /** * @param userStatusService * the userStatusService to set */ public void setUserStatusService(IOptionService<UserStatus> userStatusService) { this.userStatusService = userStatusService; } }