package de.nava.mlsample.service.init; import com.fasterxml.jackson.databind.ObjectMapper; import de.nava.mlsample.domain.Product; import de.nava.mlsample.domain.Products; import de.nava.mlsample.service.ProductRepositoryJSON; import de.nava.mlsample.service.ProductRepositoryXML; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Unmarshaller; import java.io.IOException; import java.io.InputStream; /** * Initialize some sample data (if collection are empty yet). * * @author Niko Schmuck */ @Service public class BootstrapDataPopulator implements InitializingBean { private static final Logger logger = LoggerFactory.getLogger(BootstrapDataPopulator.class); @Autowired protected ProductRepositoryJSON productRepositoryJSON; @Autowired protected ProductRepositoryXML productRepositoryXML; @Override public void afterPropertiesSet() throws Exception { logger.info("~~~ Load bootstrap data"); if (productRepositoryJSON.count() == 0) { importJSONProducts(); } if (productRepositoryXML.count() == 0) { importXMLProducts(); } } private void importXMLProducts() throws JAXBException, IOException { JAXBContext context = JAXBContext.newInstance(Products.class); Unmarshaller unmarshaller = context.createUnmarshaller(); try (InputStream inputStream = Products.class.getResourceAsStream("/sampledata/products.xml")) { Products products = (Products) unmarshaller.unmarshal(inputStream); for (Product product : products.getProducts()) { productRepositoryXML.add(product); } logger.info("Imported {} products to JSON store", products.getProducts().size()); } } private void importJSONProducts() throws IOException { ObjectMapper mapper = new ObjectMapper(); InputStream inputStream = Products.class.getResourceAsStream("/sampledata/products.json"); Product[] products = mapper.readValue(inputStream, Product[].class); for (Product product : products) { productRepositoryJSON.add(product); } logger.info("Imported {} products to JSON store", products.length); } }