/*_########################################################################## _## _## Copyright (C) 2012-2013 Kaito Yamada _## _########################################################################## */ package com.github.kaitoy.sneo.giane.model.dao.impl; import java.util.Iterator; import java.util.List; import javax.persistence.NoResultException; import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.Root; import com.github.kaitoy.sneo.giane.model.PhysicalNetworkInterface; import com.github.kaitoy.sneo.giane.model.Vlan; import com.github.kaitoy.sneo.giane.model.dao.PhysicalNetworkInterfaceDao; public class PhysicalNetworkInterfaceDaoImpl extends AbstractDao<PhysicalNetworkInterface> implements PhysicalNetworkInterfaceDao { public PhysicalNetworkInterface findByKey(Integer id) { return findSingleBy("id", id, PhysicalNetworkInterface.class); } public List<PhysicalNetworkInterface> findByCriteriaAndVlanId( CriteriaQuery<PhysicalNetworkInterface> criteria, Integer vlanId, boolean included ) { List<PhysicalNetworkInterface> list = findByCriteria(criteria); Iterator<PhysicalNetworkInterface> iter = list.iterator(); while (iter.hasNext()) { PhysicalNetworkInterface nif = iter.next(); boolean found = false; for (Vlan vlan: nif.getVlans()) { if (vlan.getId().equals(vlanId)) { found = true; break; } } if ((found && !included) || (!found && included)) { iter.remove(); } } return list; } public List<PhysicalNetworkInterface> listSingles() { CriteriaBuilder cb = getCriteriaBuilder(); CriteriaQuery<PhysicalNetworkInterface> cq = cb.createQuery(PhysicalNetworkInterface.class); Root<PhysicalNetworkInterface> r = cq.from(PhysicalNetworkInterface.class); cq.select(r).where(cb.isNull(r.get("l2Connection"))); return getEntityManager().createQuery(cq).getResultList(); } public PhysicalNetworkInterface findByNameAndNodeId(String name, Integer nodeId) { CriteriaBuilder cb = getCriteriaBuilder(); CriteriaQuery<PhysicalNetworkInterface> cq = cb.createQuery(PhysicalNetworkInterface.class); Root<PhysicalNetworkInterface> r = cq.from(PhysicalNetworkInterface.class); cq.select(r).where( cb.and( cb.equal(r.get("name"), name), cb.equal(r.get("node"), nodeId) ) ); try { return getEntityManager().createQuery(cq).getSingleResult(); } catch (NoResultException e) { return null; } } }