/******************************************************************************* * Copyright (C) 2013 JMaNGOS <http://jmangos.org/> * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; either version 2 of the License, or (at your * option) any later version. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see <http://www.gnu.org/licenses/>. ******************************************************************************/ /** * */ package org.jmangos.world.dao.specification; import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.Path; import javax.persistence.criteria.Predicate; import javax.persistence.criteria.Root; import org.jmangos.commons.entities.Creature; import org.jmangos.commons.entities.CreaturePositionerHolder; import org.jmangos.commons.entities.Position; import org.jmangos.commons.entities.SkillLineAbilityEntity; import org.jmangos.commons.model.base.NestedMap; import org.springframework.data.jpa.domain.Specification; /** * <p> * <ol> * <li><b>Class:</b> <tt>SkillLineAbilitySpecs</tt> contains specification for * {@link SkillLineAbilityEntity} * <ol> * <b>Specifications:</b> * <li>isRaceMatchToRaceMask * <li>isClassMatchToClassMask * <li>isLearnOnGetSkill * <li>isSkill * </ol> * <li><b>Used in: * {@link org.jmangos.world.services.impl.SkillLineAbilityServiceImpl}</b> * </ol> * </p> * * @author MinimaJack */ public class CreatureDataSpecs { public static Specification<Creature> isWithinCoords(final Position poslc, final Position posrc) { return new Specification<Creature>() { @Override public Predicate toPredicate(final Root<Creature> root, final CriteriaQuery<?> query, final CriteriaBuilder cb) { final Path<CreaturePositionerHolder> mov = root.<CreaturePositionerHolder> get("movement"); final Path<Position> position = mov.<Position> get("position"); final Predicate y = cb.between(position.<Float> get("y"), poslc.getY(), posrc.getY()); final Predicate x = cb.between(position.<Float> get("x"), poslc.getX(), posrc.getX()); return cb.and(y, x); } }; } public static Specification<Creature> isInMap(final NestedMap map) { return new Specification<Creature>() { @Override public Predicate toPredicate(final Root<Creature> root, final CriteriaQuery<?> query, final CriteriaBuilder cb) { final Path<CreaturePositionerHolder> mov = root.<CreaturePositionerHolder> get("movement"); return cb.equal(mov.get("map"), map.getId()); } }; } public static Specification<Creature> isHaveId(final Integer id) { return new Specification<Creature>() { @Override public Predicate toPredicate(final Root<Creature> root, final CriteriaQuery<?> query, final CriteriaBuilder cb) { return cb.equal(root.get("entry"), id); } }; } }