package com.john.springinaction.mvc;
import com.john.springinaction.domain.Spitter;
import com.john.springinaction.domain.Spittle;
import com.john.springinaction.service.SpitterService;
import org.apache.commons.fileupload.FileUploadException;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.PathVariable;
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.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.validation.Valid;
import java.util.List;
//import org.jets3t.service.security.AWSCredentials;
@Controller
@RequestMapping("/spitters")
public class SpitterController {
@Resource(name = "spitterService")
private SpitterService spitterService;
@RequestMapping(value = "/spittles", method = RequestMethod.GET)
public String listSpittlesForSpitter(
@RequestParam("spitter") String username, Model model) {
Spitter spitter = spitterService.getSpitter(username);
List<Spittle> spittlesList = spitterService.getSpittlesForSpitter(username);
model.addAttribute("spitter", spitter);
model.addAttribute("spittlesList", spittlesList);
return "spittles/list";
}
@RequestMapping(method = RequestMethod.GET, params = "new")
public String createSpitterProfile(Model model) {
model.addAttribute("spitter", new Spitter());
return "spitters/edit";
}
@RequestMapping(method = RequestMethod.POST)
public String addSpitterFromForm(@Valid Spitter spitter,
BindingResult bindingResult,
@RequestParam(value = "image", required = false)
MultipartFile image) {
if (bindingResult.hasErrors()) {
return "spitters/edit";
}
spitterService.saveSpitter(spitter);
try {
if (!image.isEmpty()) {
validateImage(image);
saveImage(spitter.getId() + ".jpg", image);
}
} catch (FileUploadException e) {
bindingResult.reject(e.getMessage());
return "spitters/edit";
}
return "redirect:/spitters/" + spitter.getUsername();
}
@RequestMapping(value = "/{username}", method = RequestMethod.GET)
public String showSpitterProfile(@PathVariable String username,
Model model){
model.addAttribute("spitter", spitterService.getSpitter(username));
return "spitters/view";
}
private void validateImage(MultipartFile image) throws FileUploadException {
if (!image.getContentType().equals("image/jpeg")) {
throw new FileUploadException("Ony JPG images accepted");
}
}
private void saveImage(String string, MultipartFile image)
throws FileUploadException{
/*AWSCredentials awsCredentials =
new AWSCredentials("john", "ervine");
try {
File file = new File("../resources/" + filename);
FileUtils.writeByteArrayToFile(file, image.getBytes());
} catch (IOException e) {
throw new ImageUploadException("Unable to save image" + e);
}*/
}
}