package org.sef4j.testwebapp.service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.PostConstruct;
import javax.inject.Inject;
import javax.transaction.Transactional;
import org.sef4j.testwebapp.domain.ProductEntity;
import org.sef4j.testwebapp.dto.ProductDTO;
import org.sef4j.testwebapp.repository.ProductRepository;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
@Component
@Transactional
public class ProductService {
private static final Logger LOG = LoggerFactory.getLogger(ProductService.class);
@Inject
private ProductRepository productRepository;
@Inject
private DtoMapper dtoMapper;
public List<ProductDTO> findAll() {
LOG.debug("findAll");
List<ProductEntity> tmpres = productRepository.findAll();
return dtoMapper.map(tmpres);
}
@PostConstruct // needed only once ...
public void createDefaults() {
LOG.info("createDefaults");
List<ProductEntity> alreadyFound = productRepository.findAllByShortDescrLike("cool %");
Map<String,ProductEntity> alreadyFoundByDescr = new HashMap<String,ProductEntity>();
alreadyFound.stream().forEach(x -> alreadyFoundByDescr.put(x.getShortDescr(), x));
List<ProductEntity> toCreate = new ArrayList<ProductEntity>();
for (int i = 0; i < 2000; i++) {
String name = null;
switch(i % 3) {
case 0: name = "book"; break;
case 1: name = "pc"; break;
case 2: name = "telephone"; break;
}
String shortDescr = "cool " + name + " " + i;
ProductEntity p = alreadyFoundByDescr.get(shortDescr);
if (p == null) {
p = new ProductEntity();
p.setName(name + " " + i);
p.setShortDescr(shortDescr);
toCreate.add(p);
}
}
if (! toCreate.isEmpty()) {
LOG.info("createDefaults ProductEntity : " + toCreate.size());
productRepository.save(toCreate);
productRepository.flush();
LOG.info("... done createDefaults ProductEntity : " + toCreate.size());
}
}
}