package no.dusken.aranea.admin.control;
import no.dusken.aranea.model.Image;
import no.dusken.aranea.model.Page;
import no.dusken.aranea.model.PageImage;
import no.dusken.aranea.service.ImageService;
import no.dusken.aranea.service.PageService;
import no.dusken.common.service.GenericService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.ServletRequestUtils;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* @author Marvin B. Lillehaug <lillehau@underdusken.no>
*/
public class SavePageImageController extends AbstractController {
private PageService pageService;
private PageImageOnSubmit pageImageSubmit;
private ImageService imageService;
private GenericService<PageImage> genericService;
@Override
protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception {
int numberOfImages = ServletRequestUtils.getIntParameter(request, "counter", 0);
Long pageID = ServletRequestUtils.getLongParameter(request,
"pageID", 0);
Page p = pageService.getEntity(pageID);
if (numberOfImages > 0) {
for (int i = 0; i < numberOfImages; i++) {
Long imageID = ServletRequestUtils.getLongParameter(request, ("checkedImage" + i), 0);
if (imageID != 0) {
String text = ServletRequestUtils.getStringParameter(request, ("pageImageText" + i), "");
Image image = imageService.getEntity(imageID);
savePageImage(request, p, image, text);
}
}
} else {
String text = ServletRequestUtils.getStringParameter(request, "text", "");
savePageImage(request, p, null, text);
}
//assume that if pageID is present, we came from a editXXX page,
// so redirecting back instead of to the pageImage page.
//TODO this seems a bit hardcoded, is there a better way?
// redirect to the same form
StringBuffer url = new StringBuffer();
url.append("/admin/edit");
url.append(p.getClass().getSimpleName());
url.append(".do?ID=");
url.append(pageID);
request.setAttribute("no.dusken.aranea.customGenericEditRedirect", url.toString());
return new ModelAndView("redirect:" + url);
}
private void savePageImage(HttpServletRequest request, Page page, Image image, String text) throws IOException {
PageImage pageImage = new PageImage();
pageImage.setPage(page);
pageImage.setText(text);
if (image != null) {
//Adding already existing image to page
pageImage.setImage(image);
} else {
//Uploading image from request to page
pageImage = pageImageSubmit.handlePageImageSubmit(pageImage, request);
}
genericService.saveOrUpdate(pageImage);
}
@Autowired
public void setImageService(ImageService imageService) {
this.imageService = imageService;
}
@Autowired
public void setPageService(PageService pageService) {
this.pageService = pageService;
}
@Autowired
public void setGenericService(GenericService<PageImage> genericService) {
this.genericService = genericService;
}
@Autowired
public void setPageImageSubmit(PageImageOnSubmit pageImageSubmit) {
this.pageImageSubmit = pageImageSubmit;
}
}