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; } }