package org.zstack.network.l2.vxlan.vxlanNetworkPool; import org.zstack.header.configuration.PythonClassInventory; import org.zstack.header.message.NoJsonSchema; import org.zstack.header.network.l2.L2NetworkInventory; import org.zstack.header.query.ExpandedQueries; import org.zstack.header.query.ExpandedQuery; import org.zstack.header.query.Queryable; import org.zstack.header.search.Inventory; import org.zstack.header.search.Parent; import org.zstack.network.l2.vxlan.vtep.VtepInventory; import org.zstack.network.l2.vxlan.vtep.VtepVO; import org.zstack.network.l2.vxlan.vxlanNetwork.L2VxlanNetworkInventory; import org.zstack.network.l2.vxlan.vxlanNetwork.VxlanNetworkVO; import javax.persistence.JoinColumn; import java.util.*; @PythonClassInventory @Inventory(mappingVOClass = VxlanNetworkPoolVO.class, collectionValueOfMethod = "valueOf1", parent = {@Parent(inventoryClass = L2NetworkInventory.class, type = VxlanNetworkPoolConstant.VXLAN_NETWORK_POOL_TYPE)}) @ExpandedQueries({ @ExpandedQuery(expandedField = "vniRange", inventoryClass = VniRangeInventory.class, foreignKey = "uuid", expandedInventoryKey = "l2NetworkUuid"), @ExpandedQuery(expandedField = "l2VxlanNetwork", inventoryClass = L2VxlanNetworkInventory.class, foreignKey = "uuid", expandedInventoryKey = "poolUuid"), @ExpandedQuery(expandedField = "vtep", inventoryClass = VtepInventory.class, foreignKey = "uuid", expandedInventoryKey = "poolUuid") }) public class L2VxlanNetworkPoolInventory extends L2NetworkInventory { @Queryable(mappingClass = VtepVO.class, joinColumn = @JoinColumn(name = "poolUuid", referencedColumnName = "uuid")) private List<VtepInventory> attachedVtepRefs; @Queryable(mappingClass = VxlanNetworkVO.class, joinColumn = @JoinColumn(name = "poolUuid", referencedColumnName = "uuid")) private List<L2VxlanNetworkInventory> attachedVxlanNetworkRefs; @Queryable(mappingClass = VniRangeVO.class, joinColumn = @JoinColumn(name = "l2NetworkUuid", referencedColumnName = "uuid")) private List<VniRangeInventory> attachedVniRanges; @NoJsonSchema private Map<String, String> attachedCidrs; public L2VxlanNetworkPoolInventory() { } protected L2VxlanNetworkPoolInventory(VxlanNetworkPoolVO vo) { super(vo); attachedCidrs = new HashMap<>(); for (Map<String, String> tag : VxlanSystemTags.VXLAN_POOL_CLUSTER_VTEP_CIDR.getTokensOfTagsByResourceUuid(vo.getUuid())) { attachedCidrs.put(tag.get(VxlanSystemTags.CLUSTER_UUID_TOKEN), tag.get(VxlanSystemTags.VTEP_CIDR_TOKEN).split("[{}]")[1]); } setAttachedCidrs(attachedCidrs); setAttachedVniRanges(VniRangeInventory.valueOf(vo.getAttachedVniRanges())); setAttachedVtepRefs(VtepInventory.valueOf(vo.getAttachedVtepRefs())); setAttachedVxlanNetworkRefs(L2VxlanNetworkInventory.valueOf1(vo.getAttachedVxlanNetworkRefs())); } public static L2VxlanNetworkPoolInventory valueOf(VxlanNetworkPoolVO vo) { return new L2VxlanNetworkPoolInventory(vo); } public static List<L2VxlanNetworkPoolInventory> valueOf1(Collection<VxlanNetworkPoolVO> vos) { List<L2VxlanNetworkPoolInventory> invs = new ArrayList<L2VxlanNetworkPoolInventory>(vos.size()); for (VxlanNetworkPoolVO vo : vos) { invs.add(new L2VxlanNetworkPoolInventory(vo)); } return invs; } public List<VtepInventory> getAttachedVtepRefs() { return attachedVtepRefs; } public void setAttachedVtepRefs(List<VtepInventory> attachedVtepRefs) { this.attachedVtepRefs = attachedVtepRefs; } public List<L2VxlanNetworkInventory> getAttachedVxlanNetworkRefs() { return attachedVxlanNetworkRefs; } public void setAttachedVxlanNetworkRefs(List<L2VxlanNetworkInventory> attachedVxlanNetworkRefs) { this.attachedVxlanNetworkRefs = attachedVxlanNetworkRefs; } public List<VniRangeInventory> getAttachedVniRanges() { return attachedVniRanges; } public void setAttachedVniRanges(List<VniRangeInventory> attachedVniRanges) { this.attachedVniRanges = attachedVniRanges; } public Map<String, String> getAttachedCidrs() { return attachedCidrs; } public void setAttachedCidrs(Map<String, String> attachedCidrs) { this.attachedCidrs = attachedCidrs; } }