/*******************************************************************************
* Copyright 2012 Christian Ternes and Thorsten Volland
*
* 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 org.businessmanager.web.controller.page.admin;
import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import org.businessmanager.annotation.HandlesExceptions;
import org.businessmanager.domain.security.User;
import org.businessmanager.exception.DuplicateUserException;
import org.businessmanager.service.security.UserService;
import org.businessmanager.web.bean.UserBean;
import org.businessmanager.web.controller.AbstractController;
import org.businessmanager.web.controller.model.UserGroupModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
@Component("userEditController")
@Scope("request")
public class UserEditController extends AbstractController {
private static final String DUPLICATE_USER_ERROR = "edituser_error_duplicate_user";
@Autowired
private UserGroupModel model;
@Autowired
private UserService userService;
private UserBean bean = new UserBean();
@PostConstruct
public void init() {
User selectedUser = model.getSelectedUser();
if(selectedUser != null) {
bean.copyDataFromUser(selectedUser);
}
}
public String deleteUser() {
User selectedUser = model.getSelectedUser();
if(selectedUser != null) {
userService.deleteUser(selectedUser.getId());
refreshModel();
addMessage(FacesMessage.SEVERITY_INFO, "edituser_success_user_deleted");
return navigationManager.getAdminSecuritymanagement();
}
return "#";
}
public UserGroupModel getModel() {
return model;
}
public UserBean getBean() {
return bean;
}
public String navigateBack() {
model.setSelectedUser(null);
return navigationManager.getAdminSecuritymanagement();
}
@HandlesExceptions
public String saveUser() {
if (model.getSelectedUser() == null) {
return createUser();
}
else {
return updateUser();
}
}
public String createUser() {
if(validateInput()) {
User user = new User(bean.getUsername(), bean.getPassword());
user = fillUser(user);
if(user != null) {
try {
user = userService.addUser(user, bean.getIsAdministrator());
model.refresh();
addMessage(FacesMessage.SEVERITY_INFO, "edituser_success_user_created");
return navigationManager.getAdminSecuritymanagement();
}
catch(DuplicateUserException e) {
addErrorMessage(DUPLICATE_USER_ERROR);
}
}
}
return "#";
}
private boolean validateInput() {
boolean isValid = true;
if(bean.getPassword() == null || bean.getPassword().isEmpty()) {
isValid = false;
addErrorMessage("edituser_error_missing_password");
}
return isValid;
}
private String updateUser() {
User user = fillUser(model.getSelectedUser());
boolean updatePassword = false;
if(bean.getPassword() != null && !bean.getPassword().isEmpty()) {
user.setPassword(bean.getPassword());
updatePassword = true;
}
try {
userService.updateUser(user, updatePassword, user.isAdministrator());
refreshModel();
addMessage(FacesMessage.SEVERITY_INFO, "edituser_success_user_edited");
return navigationManager.getAdminSecuritymanagement();
}
catch(DuplicateUserException e) {
addErrorMessage(DUPLICATE_USER_ERROR);
}
return "#";
}
private void refreshModel() {
//refresh model & clear selection
model.refresh();
model.setSelectedUser(null);
}
public User fillUser(User user) {
user.setUsername(bean.getUsername());
user.setEmail(bean.getMail());
user.setAdministrator(bean.getIsAdministrator());
return user;
}
/**
* Determines if a user can be deleted.
*
* @return true, if there is a user selected in the model
*/
public boolean getCanDelete() {
User selectedUser = model.getSelectedUser();
if(selectedUser != null) {
return true;
}
return false;
}
/**
* Determines if the selected user is the admin user.
*
* @return true, if the selected user is the admin user
*/
public boolean getIsAdminUser() {
User selectedUser = model.getSelectedUser();
if(selectedUser != null && selectedUser.getIsDefaultAdminUser()) {
return true;
}
return false;
}
}