package tudu.web.mvc;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
import tudu.domain.model.User;
import tudu.service.ConfigurationManager;
import tudu.service.UserManager;
import java.util.List;
/**
* Application administration actions.
*
* @author Julien Dubois
*/
@Controller
@RequestMapping("/secure/admin/administration.action")
public class AdministrationAction {
@Autowired
private ConfigurationManager configurationManager;
@Autowired
private UserManager userManager;
/**
* Show the administration page action.
*/
@RequestMapping(method = RequestMethod.GET)
public ModelAndView display(@RequestParam(required = false) String page) {
ModelAndView mv = new ModelAndView();
AdministrationModel model = new AdministrationModel();
if (page == null || page.equals("")) {
page = "configuration";
}
if (page.equals("configuration")) {
mv.addObject("page", "configuration");
String propertyStaticPath = this.configurationManager.getProperty(
"application.static.path").getValue();
model.setPropertyStaticPath(propertyStaticPath);
String googleAnalyticsKey = configurationManager.getProperty(
"google.analytics.key").getValue();
model.setGoogleAnalyticsKey(googleAnalyticsKey);
String smtpHost = configurationManager.getProperty("smtp.host")
.getValue();
model.setSmtpHost(smtpHost);
String smtpPort = configurationManager.getProperty("smtp.port")
.getValue();
model.setSmtpPort(smtpPort);
String smtpUser = configurationManager.getProperty("smtp.user")
.getValue();
model.setSmtpUser(smtpUser);
String smtpPassword = configurationManager.getProperty(
"smtp.password").getValue();
model.setSmtpPassword(smtpPassword);
String smtpFrom = configurationManager.getProperty("smtp.from")
.getValue();
model.setSmtpFrom(smtpFrom);
} else if (page.equals("users")) {
mv.addObject("page", "users");
model.setSearchLogin("");
mv.addObject("numberOfUsers", this.userManager
.getNumberOfUsers());
}
mv.addObject("administrationModel", model);
mv.setViewName("administration");
return mv;
}
/**
* Update the application configuration.
*/
@RequestMapping(method = RequestMethod.POST)
public ModelAndView update(@ModelAttribute AdministrationModel model) {
ModelAndView mv = new ModelAndView();
if ("configuration".equals(model.getAction())) {
this.configurationManager.updateApplicationProperties(model.getPropertyStaticPath(),
model.getGoogleAnalyticsKey());
this.configurationManager.updateEmailProperties(model.getSmtpHost(), model.getSmtpPort(),
model.getSmtpUser(), model.getSmtpPassword(), model.getSmtpFrom());
mv = this.display("configuration");
mv.addObject("success", "true");
} else {
if ("disableUser".equals(model.getAction())) {
String login = model.getLogin();
this.userManager.disableUser(login);
}
if ("enableUser".equals(model.getAction())) {
String login = model.getLogin();
this.userManager.enableUser(login);
}
if (model.getSearchLogin() == null) {
model.setSearchLogin("");
}
List<User> users = this.userManager.findUsersByLogin(model.getSearchLogin());
mv.addObject("users", users);
mv.addObject("page", "users");
mv.addObject("administrationModel", model);
mv.setViewName("administration");
}
return mv;
}
}