package edu.asu.spring.quadriga.web.dictionary;
import java.security.Principal;
import java.util.Arrays;
import java.util.List;
import java.util.Locale;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import edu.asu.spring.quadriga.domain.IUser;
import edu.asu.spring.quadriga.domain.dictionary.IDictionary;
import edu.asu.spring.quadriga.exceptions.QuadrigaStorageException;
import edu.asu.spring.quadriga.service.IUserManager;
import edu.asu.spring.quadriga.service.dictionary.IDictionaryManager;
@Controller
public class DeleteDictionaryController {
@Autowired
private IDictionaryManager dictionaryManager;
@Autowired
private IUserManager usermanager;
@Autowired
private MessageSource messageSource;
/**
* This method retrieves the dictionaries associated with the logged in user
* for deletion
*
* @param model
* @return
* @throws QuadrigaStorageException
*/
@RequestMapping(value = "auth/dictionaries/delete", method = RequestMethod.GET)
public String deleteDictionaryGet(Model model) throws QuadrigaStorageException {
UserDetails user = (UserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
String userId = user.getUsername();
List<IDictionary> dictionaryList = dictionaryManager.getDictionariesList(user.getUsername());
model.addAttribute("dictinarylist", dictionaryList);
model.addAttribute("userId", userId);
return "auth/dictionaries/deleteDictionary";
}
/**
* This method deletes the selected dictionaries.
*
* @param req
* @param model
* @param principal
* @return
* @throws QuadrigaStorageException
*/
@RequestMapping(value = "auth/dictionaries/delete", method = RequestMethod.POST)
public String deleteDictionary(HttpServletRequest req, ModelMap model, Principal principal, Locale locale, RedirectAttributes redirectAttrs)
throws QuadrigaStorageException {
IUser user = usermanager.getUser(principal.getName());
List<String> dictionariesToDelete = null;
String[] selected = req.getParameterValues("selected");
if (selected != null) {
dictionariesToDelete = Arrays.asList(selected);
}
if (dictionariesToDelete == null || dictionariesToDelete.isEmpty()) {
List<IDictionary> dictionaryList = dictionaryManager.getDictionariesList(user.getUserName());
model.addAttribute("dictinarylist", dictionaryList);
model.addAttribute("userId", user.getUserName());
model.addAttribute("show_error_alert", true);
model.addAttribute("error_alert_msg",
messageSource.getMessage("dictionary.delete.no_selection", new Object[] {}, locale));
return "auth/dictionaries/deleteDictionary";
}
StringBuffer errorMsg = new StringBuffer();
StringBuffer successMsg = new StringBuffer();
for (String dictId : dictionariesToDelete) {
dictId = dictId.trim();
String owner = dictionaryManager.getDictionaryOwner(dictId);
String dictName = dictionaryManager.getDictionaryName(dictId);
if (!owner.equals(principal.getName())) {
redirectAttrs.addFlashAttribute("show_error_alert", true);
errorMsg.append(messageSource.getMessage("dictionary.delete.not_owner", new String[] { dictName },
locale));
errorMsg.append("\n");
continue;
}
try {
dictionaryManager.deleteDictionary(dictId);
redirectAttrs.addFlashAttribute("show_success_alert", true);
successMsg.append(messageSource.getMessage("dictionary.delete.success", new String[] { dictName },
locale));
successMsg.append("\n");
} catch (QuadrigaStorageException ex) {
redirectAttrs.addFlashAttribute("show_error_alert", true);
errorMsg.append(messageSource.getMessage("dictionary.delete.error", new String[] { dictName }, locale));
errorMsg.append("\n");
}
}
redirectAttrs.addFlashAttribute("success_alert_msg", successMsg.toString());
redirectAttrs.addFlashAttribute("error_alert_msg", errorMsg.toString());
return "redirect:/auth/dictionaries";
}
}