// ========================================================================
// Copyright (C) zeroth Project Team. All rights reserved.
// GNU AFFERO GENERAL PUBLIC LICENSE Version 3, 19 November 2007
// http://www.gnu.org/licenses/agpl-3.0.txt
// ========================================================================
package zeroth.framework.enterprise.app;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import zeroth.framework.enterprise.domain.ConstraintsException;
import zeroth.framework.enterprise.domain.SimpleRepository;
import zeroth.framework.enterprise.shared.Persistable;
import zeroth.framework.enterprise.shared.Tracer;
import zeroth.framework.standard.shared.CommonUtils;
/**
* 基本リポジトリアプリケーション
* @param <E> エンティティ型
* @param <ID> 識別子オブジェクト型
* @param <F> 検索条件オブジェクト型 TODO extends ValueObject<?>
* @author nilcy
*/
@Tracer
public abstract class AbstractSimpleRepositoryApplication<E extends Persistable<ID>, ID extends Serializable, F extends Serializable>
implements SimpleRepositoryApplication<E, ID, F> {
/** 製品番号 */
private static final long serialVersionUID = 6716209657934350302L;
/** コンストラクタ */
public AbstractSimpleRepositoryApplication() {
}
/**
* {@inheritDoc}
* <dl>
* <dt>事後条件</dt>
* <dd>管理エンティティのディープコピーを戻す。</dd>
* </dl>
* @see SimpleRepository#save(Persistable)
*/
@Override
public E save(final E entity) throws ConstraintsException {
// return getRepository().save(entity);
return CommonUtils.deepCopy(getRepository().save(entity));
}
/**
* {@inheritDoc}
* @see SimpleRepository#delete(Persistable)
*/
@Override
public void delete(final E aEntity) throws ConstraintsException {
getRepository().delete(aEntity);
}
/**
* {@inheritDoc}
* <dl>
* <dt>事後条件</dt>
* <dd>管理エンティティのディープコピーを戻す。</dd>
* </dl>
* @see SimpleRepository#find(Serializable)
*/
@Override
public E find(final ID id) {
return getRepository().find(id);
// return CommonUtils.deepCopy(getRepository().find(id));
}
/**
* {@inheritDoc}
* <dl>
* <dt>事後条件</dt>
* <dd>管理エンティティのディープコピーを戻す。</dd>
* </dl>
* @see SimpleRepository#findOne(Serializable)
*/
@Override
public E findOne(final F filter) {
return getRepository().findOne(filter);
// return CommonUtils.deepCopy(getRepository().findOne(filter));
}
/**
* {@inheritDoc}
* <dl>
* <dt>事後条件</dt>
* <dd>管理エンティティのディープコピーを戻す。</dd>
* </dl>
* @see SimpleRepository#findMany(Serializable)
*/
@Override
public Collection<E> findMany(final F filter) {
final Collection<E> entities = getRepository().findMany(filter);
final Collection<E> results = new ArrayList<>(entities.size());
for (final E e : entities) {
results.add(e);
// results.add(CommonUtils.deepCopy(e));
}
return results;
}
/**
* {@inheritDoc}
* @see SimpleRepository#count(Serializable)
*/
@Override
public long count(final F filter) {
return getRepository().count(filter);
}
/**
* 基本リポジトリI/Fの取得
* @return 基本リポジトリI/F
*/
protected abstract SimpleRepository<E, ID, F> getRepository();
}