aode.lx.service.impl.BaseServiceImpl.java Source code

Java tutorial

Introduction

Here is the source code for aode.lx.service.impl.BaseServiceImpl.java

Source

/**
 * Copyright (c) 2005-2012 https://github.com/zhangkaitao
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 */
package aode.lx.service.impl;

import aode.lx.Repository.BaseJapRepository;
import aode.lx.persistence.DynamicSpecifications;
import aode.lx.persistence.SearchFilter;
import aode.lx.service.BaseService;
import aode.lx.utils.PageRequestBulider;
import aode.lx.utils.Reflections;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;
import java.io.Serializable;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * service ??
 * <p/>
 * <p>
 *   T ID
 * <p/>
 * <p>
 * User:
 * <p>
 * Date: 13-1-12 ?4:43
 * <p>
 * Version: 1.0
 */
public abstract class BaseServiceImpl<T, ID extends Serializable> implements BaseService<T, ID> {

    protected Class<T> entityClass = Reflections.getClassGenricType(getClass());

    public abstract BaseJapRepository<T, ID> getRepository();

    /**
     * ??
     *
     *            
     * @return ?
     */
    @Override
    public T save(T entity) {

        return getRepository().save(entity);
    }

    @Override
    public List<T> save(List<T> entity) {
        return getRepository().save(entity);
    }

    @Override
    public T saveAndFlush(T entity) {
        return getRepository().saveAndFlush(entity);
    }

    /**
     * ?
     *
     * @param id
     *            
     */
    @Override
    public void delete(ID id) {
        getRepository().delete(id);
    }

    /**
     * ?ID
     *
     *            
     */
    @Override
    public void delete(ID[] ids) {
        for (ID id : ids) {
            getRepository().delete(id);
        }
    }

    /**
     * ?ID
     *
     *            
     */
    @Override
    public void delete(Iterable<ID> ids) {
        for (ID id : ids) {
            getRepository().delete(id);
        }
    }

    /**
     * 
     *
     *            
     */
    @Override
    public void delete(T entity) {
        getRepository().delete(entity);
    }

    /**
     * ?
     *
     *            
     */
    @Override
    public void deleteInBatch(Iterable<T> entities) {
        getRepository().deleteInBatch(entities);
    }

    /**
     * 
     *
     * @param id
     *            
     * @return id
     */
    @Override
    public T findOne(ID id) {
        return getRepository().findOne(id);
    }

    /**
     * ?
     *
     * @param id
     *            
     * @return  true?false
     */
    @Override
    public boolean exists(ID id) {
        return getRepository().exists(id);
    }

    /**
     * 
     *
     * @return 
     */
    @Override
    public long count() {
        return getRepository().count();
    }

    /**
     * 
     *
     * @return
     */
    @Override
    public List<T> findAll() {
        return getRepository().findAll();
    }

    /**
     * ?
     *
     * @param sort
     * @return
     */
    @Override
    public List<T> findAll(Sort sort) {
        return getRepository().findAll(sort);
    }

    /**
     * ??
     *
     *            ???
     * @return
     */
    @Override
    public Page<T> findAllPaginated() {
        RequestAttributes ar = RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = ((ServletRequestAttributes) ar).getRequest();
        PageRequest pageRequest = PageRequestBulider.getPageRequest(request);
        return getRepository().findAll(pageRequest);
    }

    /**
     * ???.
     */
    @Override
    public List<T> search(Map<String, SearchFilter> additionalFilters, Sort sort) {
        RequestAttributes ar = RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = ((ServletRequestAttributes) ar).getRequest();
        Map<String, SearchFilter> filters = SearchFilter.parse(request);
        addAdditionalFilters(filters, additionalFilters);
        Specification<T> spec = DynamicSpecifications.bySearchFilter(filters.values(), this.entityClass);
        List<T> list = this.getRepository().findAll(spec, sort);
        return list;
    }

    @Override
    public List<T> search(Map<String, SearchFilter> additionalFilters, Pageable pageable) {
        RequestAttributes ar = RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = ((ServletRequestAttributes) ar).getRequest();
        Map<String, SearchFilter> filters = SearchFilter.parse(request);
        addAdditionalFilters(filters, additionalFilters);
        Specification<T> spec = DynamicSpecifications.bySearchFilter(filters.values(), this.entityClass);
        List<T> list = this.getRepository().findAll(spec, pageable).getContent();
        return list;
    }

    @Override
    public List<T> search(Pageable pageable) {
        List<T> list = search(null, pageable);
        return list;
    }

    @Override
    public List<T> search(Sort sort) {
        return search(null, sort);
    }

    @Override
    public List<T> search() {
        return this.getRepository().findAll();
    }

    @Override
    public List<T> search(Map<String, SearchFilter> additionalFilters) {
        RequestAttributes ar = RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = ((ServletRequestAttributes) ar).getRequest();
        Map<String, SearchFilter> filters = SearchFilter.parse(request);
        addAdditionalFilters(filters, additionalFilters);
        Specification<T> spec = DynamicSpecifications.bySearchFilter(filters.values(), this.entityClass);
        List<T> list = this.getRepository().findAll(spec);
        return list;
    }

    @Override
    public Long searchCount(Map<String, SearchFilter> additionalFilters) {
        RequestAttributes ar = RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = ((ServletRequestAttributes) ar).getRequest();
        Map<String, SearchFilter> filters = SearchFilter.parse(request);
        addAdditionalFilters(filters, additionalFilters);
        Specification<T> spec = DynamicSpecifications.bySearchFilter(filters.values(), this.entityClass);
        long list = this.getRepository().count(spec);
        return list;
    }

    @Override
    public Long searchCount() {
        return searchCount(null);
    }

    /**
     * Returns a single entity matching the given {@link Specification}.
     *
     * @param spec
     * @return
     */
    @Override
    public T findOne(Specification<T> spec) {
        return this.getRepository().findOne(spec);
    }

    protected void addAdditionalFilters(Map<String, SearchFilter> primaryFilters,
            Map<String, SearchFilter> additionalFilters) {
        if (additionalFilters != null) {
            for (String k : additionalFilters.keySet()) {
                if (!primaryFilters.containsKey(k)) {
                    primaryFilters.put(k, additionalFilters.get(k));
                }
            }
        }
    }

    @Override
    public Page<T> searchPaginated(Map<String, SearchFilter> additionalFilters) {
        RequestAttributes ar = RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = ((ServletRequestAttributes) ar).getRequest();
        PageRequest pageRequest = PageRequestBulider.getPageRequest(request);
        Map<String, SearchFilter> filters = SearchFilter.parse(request);
        addAdditionalFilters(filters, additionalFilters);
        Specification<T> spec = DynamicSpecifications.bySearchFilter(filters.values(), this.entityClass);
        Page<T> page = null;
        page = this.getRepository().findAll(spec, pageRequest);
        return page;
    }

    @Override
    public Page<T> searchPaginated(Map<String, SearchFilter> additionalFilters, Pageable pageable) {
        RequestAttributes ar = RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = ((ServletRequestAttributes) ar).getRequest();
        Map<String, SearchFilter> filters = SearchFilter.parse(request);
        addAdditionalFilters(filters, additionalFilters);
        Specification<T> spec = DynamicSpecifications.bySearchFilter(filters.values(), this.entityClass);
        Page<T> page = null;
        page = this.getRepository().findAll(spec, pageable);
        return page;
    }

    @Override
    public Page<T> searchPaginated() {
        return this.searchPaginated(null);
    }
}