package de.nava.mlsample.web; import de.nava.mlsample.domain.Product; import de.nava.mlsample.domain.ProductSearchResult; import de.nava.mlsample.service.ProductRepositoryXML; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.*; import org.springframework.web.util.UriComponentsBuilder; @RestController public class SampleRESTwithXMLController { private static final Logger logger = LoggerFactory.getLogger(SampleRESTwithXMLController.class); @Autowired protected ProductRepositoryXML productRepositoryXML; @RequestMapping( value = "/products", method = RequestMethod.POST, consumes = MediaType.APPLICATION_XML_VALUE ) public ResponseEntity<String> createProduct(@RequestBody Product product, UriComponentsBuilder builder) { productRepositoryXML.add(product); HttpHeaders headers = new HttpHeaders(); headers.setLocation( builder.path("/products/{id}.xml") .buildAndExpand(product.getSku()).toUri()); return new ResponseEntity<>("", headers, HttpStatus.CREATED); } @RequestMapping( value = "/products/{sku}.xml", method = RequestMethod.DELETE ) @ResponseStatus(HttpStatus.NO_CONTENT) public void deleteProduct(@PathVariable("sku") Long sku) { productRepositoryXML.remove(sku); } @RequestMapping( value = "/products/{sku}.xml", method = RequestMethod.GET, produces = MediaType.APPLICATION_XML_VALUE ) public Product readProduct(@PathVariable("sku") Long sku) { return productRepositoryXML.findBySku(sku); } @RequestMapping( value = "/products.xml", method = RequestMethod.GET, produces = MediaType.APPLICATION_XML_VALUE ) public ProductSearchResult searchProducts(@RequestParam(required=false, value="name") String name) { if (StringUtils.isEmpty(name)) { logger.info("Lookup all {} products...", productRepositoryXML.count()); return productRepositoryXML.findAll(); } else { logger.info("Lookup products by name: {}", name); return productRepositoryXML.findByName(name); } } }