package org.springframework.samples.petportal.portlet;
import java.util.SortedSet;
import org.springframework.samples.petportal.domain.Pet;
import org.springframework.samples.petportal.domain.PetDescription;
import org.springframework.samples.petportal.service.PetService;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.support.ByteArrayMultipartFileEditor;
/**
* This Controller demonstrates multipart file uploads. In this case,
* an uploaded text file will be used as the description for a Pet.
*
* @author John A. Lewis
* @author Mark Fisher
* @author Juergen Hoeller
*/
@Controller
@RequestMapping("VIEW")
public class PetDescriptionUploadController {
private PetService petService;
public void setPetService(PetService petService) {
this.petService = petService;
}
@ModelAttribute("pets")
public SortedSet getPets() {
return this.petService.getAllPets();
}
/**
* Register the PropertyEditor for converting from a MultipartFile to an array of bytes.
*/
@InitBinder
public void registerMultipartEditor(WebDataBinder binder) {
binder.registerCustomEditor(byte[].class, new ByteArrayMultipartFileEditor());
}
/**
* If there are no Pets, display the 'noPetsForUpload' view.
* Otherwise show the upload form.
*/
@RequestMapping // default render
public String showUploadForm() {
if (this.petService.getPetCount() > 0) {
return "upload";
}
else {
return "noPetsForUpload";
}
}
/**
* On submit, set the description property for the selected Pet as a String.
*/
@RequestMapping // default action
public void processUpload(PetDescription upload, @RequestParam("selectedPet") int petKey) {
byte[] file = upload.getFile();
String description = new String(file);
Pet pet = this.petService.getPet(petKey);
pet.setDescription(description);
this.petService.savePet(pet);
}
}