All Downloads are FREE. Search and download functionalities are using the official Maven repository.

ars.database.service.StandardGeneralService Maven / Gradle / Ivy

package ars.database.service;

import java.util.List;
import java.io.Serializable;

import ars.util.Beans;
import ars.invoke.request.Requester;
import ars.database.model.TreeModel;
import ars.database.repository.Repository;
import ars.database.repository.Repositories;
import ars.database.service.AbstractService;

/**
 * 通用业务操作接口抽象实现
 * 
 * @author yongqiangwu
 * 
 * @param 
 *            数据模型
 */
public abstract class StandardGeneralService extends AbstractService {
	/**
	 * 新增对象实体
	 * 
	 * @param requester
	 *            请求对象
	 * @return 新增对象实体主键
	 */
	public Serializable add(Requester requester) {
		T entity = Beans.getInstance(this.getModel());
		this.initObject(requester, entity);
		return this.saveObject(requester, entity);
	}

	/**
	 * 删除对象
	 * 
	 * @param requester
	 *            请求对象
	 */
	public void delete(Requester requester) {
		List entities = this.getQuery(requester, true).custom(requester.getParameters()).list();
		for (int i = 0; i < entities.size(); i++) {
			this.deleteObject(requester, entities.get(i));
		}
	}

	/**
	 * 修改对象实体
	 * 
	 * @param requester
	 *            请求对象
	 * @param identifiers
	 *            对象主键数组
	 */
	@SuppressWarnings("unchecked")
	public void update(Requester requester, Object[] identifiers) {
		if (identifiers.length > 0) {
			Repository repository = this.getRepository();
			String primary = repository.getPrimary();
			List entities = this.getQuery(requester).or(primary, identifiers).list();
			for (int i = 0; i < entities.size(); i++) {
				T entity = entities.get(i);
				Boolean active = entity instanceof TreeModel ? ((TreeModel) entity).getActive() : null;
				this.initObject(requester, entity);
				this.updateObject(requester, entity);
				if (active != null && active != ((TreeModel) entity).getActive()) {
					TreeModel tree = (TreeModel) entity;
					if (tree.getActive() == Boolean.TRUE) {
						TreeModel parent = (TreeModel) tree.getParent();
						while (parent != null) {
							if (parent.getActive() != Boolean.TRUE) {
								parent.setActive(true);
								((Repository>) repository).update(parent);
							}
							parent = (TreeModel) parent.getParent();
						}
					} else if (tree.getActive() == Boolean.FALSE) {
						List children = repository.query().ne(primary, tree.getId()).eq("active", true)
								.start("key", tree.getKey()).list();
						for (int j = 0; j < children.size(); j++) {
							TreeModel child = (TreeModel) children.get(j);
							if (child.getActive() != Boolean.FALSE) {
								child.setActive(false);
								((Repository>) repository).update(child);
							}
						}
					}
				}
			}
		}
	}

	/**
	 * 统计数量
	 * 
	 * @param requester
	 *            请求对象
	 * @return 数量
	 */
	public int count(Requester requester) {
		return this.getQuery(requester).custom(requester.getParameters()).count();
	}

	/**
	 * 数据统计
	 * 
	 * @param requester
	 *            请求对象
	 * @return 统计数据列表
	 */
	public List stats(Requester requester) {
		return this.getQuery(requester).custom(requester.getParameters()).stats();
	}

	/**
	 * 获取单个对象
	 * 
	 * @param requester
	 *            请求对象
	 * @return 对象实例
	 */
	public T object(Requester requester) {
		return this.getQuery(requester, true).custom(requester.getParameters()).single();
	}

	/**
	 * 获取对象列表
	 * 
	 * @param requester
	 *            请求对象
	 * @return 对象实例列表
	 */
	public List objects(Requester requester) {
		return this.getQuery(requester).custom(requester.getParameters()).list();
	}

	/**
	 * 获取树对象列表
	 * 
	 * @param requester
	 *            请求对象
	 * @return 树对象实例列表
	 */
	@SuppressWarnings({ "rawtypes", "unchecked" })
	public List trees(Requester requester) {
		List objects = this.getQuery(requester).custom(requester.getParameters()).list();
		return (List) Repositories.mergeTrees((List) objects);
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy