// ======================================================================== // 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.actor.service.domain.misc; import static zeroth.actor.service.domain.misc.Notice_.*; import java.math.BigDecimal; import javax.enterprise.inject.Default; import javax.inject.Inject; import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.Predicate; import javax.persistence.criteria.Root; import org.apache.commons.lang3.StringUtils; import zeroth.actor.service.domain.misc.PersistenceServiceAnnotation.NewsPersistenceService; import zeroth.framework.enterprise.domain.AbstractQueryRepositoryImpl; import zeroth.framework.enterprise.infra.persistence.QueryPersistenceService; import zeroth.framework.standard.shared.SimpleFilter; /** * お知らせリポジトリ * @author nilcy */ @Default // @Tracer public class NewsRepositoryImpl extends AbstractQueryRepositoryImpl<News, BigDecimal, SimpleFilter> implements NewsRepository { /** 製品番号 */ private static final long serialVersionUID = -7181173647550897989L; /** 先進データ永続化サービス */ @Inject @NewsPersistenceService private QueryPersistenceService<News, BigDecimal> service; /** {@inheritDoc} */ @Override protected QueryPersistenceService<News, BigDecimal> getPersistenceService() { return service; } /** * {@inheritDoc} * <dl> * <dt>事前条件</dt> * <dd>フィルタは非NULLであること。</dd> * <dt>事後条件</dt> * <dd>指定したキーワードを表題、説明、カテゴリの部分一致で検索条件とする。</dd> * </dl> */ @Override protected Predicate expression(final SimpleFilter filter) { assert filter != null; if (StringUtils.isEmpty(filter.getKeyword())) { return super.expression(filter); } final CriteriaBuilder b = service.builder(); final Root<News> r = service.root(); return b.or(b.like(r.get(title), wrapWildcard(filter.getKeyword())), b.like(r.get(description), wrapWildcard(filter.getKeyword())), b.like(r.get(category), wrapWildcard(filter.getKeyword()))); } }