package net.pechorina.kontempl.rest; import net.pechorina.kontempl.data.Page; import net.pechorina.kontempl.data.PageProperty; import net.pechorina.kontempl.service.PageService; import net.pechorina.kontempl.service.SiteService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.env.Environment; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.List; @RestController @RequestMapping(value = "/api/pages/{pageId}/properties") public class PagePropertyResource { static final Logger logger = LoggerFactory.getLogger(PagePropertyResource.class); @Autowired private SiteService siteService; @Autowired private PageService pageService; @Autowired private Environment env; @RequestMapping(method=RequestMethod.GET) public List<PageProperty> list(@PathVariable("pageId") Integer pageId) { Page p = pageService.getPage(pageId); return p.getProperties(); } @RequestMapping(method = RequestMethod.GET, value = "/{id}") public PageProperty getById(@PathVariable("pageId") Integer pageId, @PathVariable("id") Integer id) { Page p = pageService.getPage(pageId); return p.findPropertyById(id); } @RequestMapping(method = RequestMethod.POST) public ResponseEntity<Page> createPageProperty(@PathVariable("pageId") Integer pageId, @RequestBody PageProperty pageProperty, HttpServletRequest request) { Page p = pageService.getPage(pageId); //pageProperty.setPage(p); p.addProperty(pageProperty); Page savedEntity = pageService.savePage(p); logger.info("PAGE PROPERTY CREATE: " + savedEntity + " Src:" + request.getRemoteAddr()); return new ResponseEntity<>(savedEntity, HttpStatus.CREATED); } @RequestMapping(method = RequestMethod.PUT, value = "/{id}") public void saveProperty(@PathVariable("pageId") Integer pageId, @PathVariable("id") Integer propertyId, @RequestBody PageProperty pageProperty, HttpServletRequest request, HttpServletResponse response) { Page p = pageService.getPage(pageId); // merge updates PageProperty existingProperty = p.findPropertyById(propertyId); if (existingProperty != null) { existingProperty.setName(pageProperty.getName().trim()); existingProperty.setContent(pageProperty.getContent().trim()); } Page savedEntity = pageService.savePage(p); logger.info("PAGE PROPERTY SAVE: " + savedEntity + " Src:" + request.getRemoteAddr()); response.setStatus(HttpServletResponse.SC_OK); } @RequestMapping(method = RequestMethod.DELETE, value = "/{id}") public void deleteProperty(@PathVariable("pageId") Integer pageId, @PathVariable("id") Integer id, HttpServletRequest request, HttpServletResponse response) { Page p = pageService.getPage(pageId); if (p == null) { response.setStatus(HttpServletResponse.SC_NOT_FOUND); return; } PageProperty prop = p.findPropertyById(id); if (prop != null) { p.getProperties().removeIf(sp -> (sp.getId().intValue() == id.intValue())); } else { response.setStatus(HttpServletResponse.SC_NOT_FOUND); return; } Page savedEntity = pageService.savePage(p); logger.info("PAGE PROPERTY DELETE: " + savedEntity + " Src:" + request.getRemoteAddr()); response.setStatus(HttpServletResponse.SC_OK); } }