Package org.sab.invsys.service.product

Source Code of org.sab.invsys.service.product.ProductService

package org.sab.invsys.service.product;

import java.util.List;

import org.apache.log4j.Logger;
import org.sab.invsys.common.util.extjs.FilterRequest;
import org.sab.invsys.common.util.mapper.product.ProductMapper;
import org.sab.invsys.persistence.model.product.Product;
import org.sab.invsys.persistence.model.product.ProductGroup;
import org.sab.invsys.persistence.model.product.QProduct;
import org.sab.invsys.persistence.model.product.Product.COLUMNS;
import org.sab.invsys.persistence.repo.product.ProductGroupRepository;
import org.sab.invsys.persistence.repo.product.ProductRepository;
import org.sab.invsys.web.model.product.ProductUI;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.mysema.query.types.Predicate;
import com.mysema.query.types.expr.BooleanExpression;

@Service
public class ProductService {

  @Autowired
  private ProductRepository repository;
 
  @Autowired
  private ProductGroupRepository groupRepository;
 
  private Logger logger = Logger.getLogger(ProductService.class);

  private ProductMapper mapper = new ProductMapper();

  @Transactional
  public ProductUI create(ProductUI uiBean) {

    Product newProduct = mapper.toPersistenceBean(uiBean);
   
    if(uiBean.getProductGroup() != null)
    {
      ProductGroup group = groupRepository.findByGroupName(uiBean.getProductGroup());
      newProduct.setGroup(group);
    }
   
    Product saved = repository.save(newProduct);
    logger.debug("Created Account : " + saved);

    return mapper.toUIBean(saved);
  }

  public ProductUI find(ProductUI uiBean) {
    return mapper.toUIBean(repository.findByProductName(uiBean
        .getProductName()));
  }

  public List<ProductUI> findAll() {
    return mapper.toUIBean(repository.findAll());
  }

  public Page<ProductUI> findAll(Pageable pageable,
      List<FilterRequest> filters) {

    Predicate predicate = toPredicate(filters);
    return mapper.toUIBean(repository.findAll(predicate, pageable),
        pageable);
  }

  public ProductUI findByProductname(String productName) {
    return mapper.toUIBean(repository.findByProductName(productName));
  }

  public ProductUI update(ProductUI uiBean) {
    Product existing = repository
        .findByProductName(uiBean.getProductName());

    if (existing == null) {
      return null;
    }
   
    if (! existing.getGroup().getGroupName().equals(uiBean.getProductGroup()))
    {
      ProductGroup group = groupRepository.findByGroupName(uiBean.getProductGroup()) ;
      existing.setGroup(group);
    }

    existing.setDescription(uiBean.getDescription());
    existing.setPrice(uiBean.getPrice());

    Product saved = null;

    try {
      saved = repository.save(existing);
    } catch (Exception e) {
      logger.error(e);
    }

    return mapper.toUIBean(saved);
  }

  public Boolean delete(ProductUI uiBean) {
    Product existing = repository
        .findByProductName(uiBean.getProductName());

    if (existing == null) {
      return false;
    }

    repository.delete(existing);
    return true;
  }

  private Predicate toPredicate(final List<FilterRequest> filters) {
    logger.info("Entering predicates :: " + filters);

    QProduct product = QProduct.product;
    BooleanExpression result = null;

    try {
      for (FilterRequest filter : filters) {

        COLUMNS column = COLUMNS.valueOf(filter.getProperty()
            .toUpperCase());
        BooleanExpression expression = null;

        switch (column) {
        case PRODUCTNAME:
          if (filter.getValue() != null
              && !"".equals(filter.getValue())) {
            expression = product.productName.like("%"
                + filter.getValue() + "%");
          }
          break;
        case DESCRIPTION:
          if (filter.getValue() != null
              && !"".equals(filter.getValue())) {
            expression = product.description.like("%"
                + filter.getValue() + "%");
          }
          break;
        case PRODUCTGROUP:
          if (filter.getValue() != null
              && !"".equals(filter.getValue())) {
            expression = product.group.groupName.like("%"
                + filter.getValue() + "%");
          }
          break;
        }
        if (expression != null) {
          if (result != null) {
            result = result.and(expression);
          } else {
            result = expression;
          }
        }
      }
    } catch (Exception ex) {
      logger.error(ex);
    }
    logger.info("Result Predicate :: "
        + (result != null ? result.toString() : ""));

    logger.info("Exiting predicates");
    return result;
  }

}
TOP

Related Classes of org.sab.invsys.service.product.ProductService

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.