/*_########################################################################## _## _## 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.criteria.CriteriaQuery; import com.github.kaitoy.sneo.giane.model.Node; import com.github.kaitoy.sneo.giane.model.PhysicalNetworkInterface; import com.github.kaitoy.sneo.giane.model.RealNetworkInterface; import com.github.kaitoy.sneo.giane.model.Vlan; import com.github.kaitoy.sneo.giane.model.VlanMember; import com.github.kaitoy.sneo.giane.model.dao.VlanMemberDao; public class VlanMemberDaoImpl extends AbstractDao<VlanMember> implements VlanMemberDao { public VlanMember findByKey(Integer id) { return findSingleBy("id", id, VlanMember.class); } public List<VlanMember> findByCriteriaAndNodeIdAndVlanId( CriteriaQuery<VlanMember> criteria, Integer nodeId, Integer vlanId, boolean included ) { List<VlanMember> list = findByCriteria(criteria); Iterator<VlanMember> iter = list.iterator(); while (iter.hasNext()) { VlanMember member = iter.next(); if (member instanceof PhysicalNetworkInterface) { Node node = ((PhysicalNetworkInterface)member).getNode(); if (!node.getId().equals(nodeId)) { iter.remove(); continue; } } else if (member instanceof RealNetworkInterface) { Node node = ((RealNetworkInterface)member).getNode(); if (!node.getId().equals(nodeId)) { iter.remove(); continue; } } boolean found = false; for (Vlan vlan: member.getVlans()) { if (vlan.getId().equals(vlanId)) { found = true; break; } } if ((found && !included) || (!found && included)) { iter.remove(); } } return list; } }