package org.zstack.header.network.l3; import org.zstack.header.configuration.PythonClassInventory; import org.zstack.header.network.l2.L2NetworkInventory; import org.zstack.header.network.service.NetworkServiceL3NetworkRefInventory; import org.zstack.header.query.*; import org.zstack.header.search.Inventory; import org.zstack.header.vm.VmNicInventory; import org.zstack.header.zone.ZoneInventory; import javax.persistence.JoinColumn; import java.io.Serializable; import java.sql.Timestamp; import java.util.ArrayList; import java.util.Collection; import java.util.List; /** * @inventory inventory for l3Network * @category l3network * @example { * "inventory": { * "uuid": "f73926eb4f234f8195c61c33d8db419d", * "name": "GuestNetwork", * "description": "Test", * "type": "L3BasicNetwork", * "zoneUuid": "732fbb4383b24b019f60d862995976bf", * "l2NetworkUuid": "f1a092c6914840c9895c564abbc55375", * "state": "Enabled", * "createDate": "May 4, 2014 11:07:24 PM", * "lastOpDate": "May 4, 2014 11:07:24 PM", * "dns": [], * "ipRanges": [ * { * "uuid": "78b43f4b0a9745fab49c967e1c35beb1", * "l3NetworkUuid": "f73926eb4f234f8195c61c33d8db419d", * "name": "TestIpRange", * "description": "Test", * "startIp": "10.10.2.100", * "endIp": "10.20.2.200", * "netmask": "255.0.0.0", * "gateway": "10.10.2.1", * "createDate": "May 4, 2014 11:07:24 PM", * "lastOpDate": "May 4, 2014 11:07:24 PM" * } * ], * "networkServices": [ * { * "l3NetworkUuid": "f73926eb4f234f8195c61c33d8db419d", * "networkServiceProviderUuid": "bbb525dc4cc8451295d379797e092dba", * "networkServiceType": "PortForwarding" * } * ] * } * } * @since 0.1.0 */ @Inventory(mappingVOClass = L3NetworkVO.class) @PythonClassInventory @ExpandedQueries({ @ExpandedQuery(expandedField = "zone", inventoryClass = ZoneInventory.class, foreignKey = "zoneUuid", expandedInventoryKey = "uuid"), @ExpandedQuery(expandedField = "l2Network", inventoryClass = L2NetworkInventory.class, foreignKey = "l2NetworkUuid", expandedInventoryKey = "uuid"), @ExpandedQuery(expandedField = "vmNic", inventoryClass = VmNicInventory.class, foreignKey = "uuid", expandedInventoryKey = "l3NetworkUuid"), @ExpandedQuery(expandedField = "serviceProviderRef", inventoryClass = NetworkServiceL3NetworkRefInventory.class, foreignKey = "uuid", expandedInventoryKey = "l3NetworkUuid", hidden = true) }) @ExpandedQueryAliases({ @ExpandedQueryAlias(alias = "serviceProvider", expandedField = "serviceProviderRef.serviceProvider") }) public class L3NetworkInventory implements Serializable { /** * @desc l3Network uuid */ private String uuid; /** * @desc max length of 255 characters */ private String name; /** * @desc max length of 2048 characters */ private String description; /** * @desc l3Network type */ private String type; /** * @desc uuid of zone this l3Network belongs to. See :ref:`ZoneInventory` */ private String zoneUuid; /** * @desc uuid of l2Network this l3Network belongs to. See :ref:`L2Network` */ private String l2NetworkUuid; /** * @desc - Enabled: ok for operations * - Disabled: no vm can be created on this l3Network * @choices - Enabled * - Disabled */ private String state; private String dnsDomain; private Boolean system; /** * @desc the time this resource gets created */ private Timestamp createDate; /** * @desc last time this resource gets operated */ private Timestamp lastOpDate; /** * @desc a list of dns */ @Queryable(mappingClass = L3NetworkDnsInventory.class, joinColumn = @JoinColumn(name = "l3NetworkUuid", referencedColumnName = "dns")) private List<String> dns; /** * @desc a list of ip ranges. see :ref:`IpRangeInventory` */ @Queryable(mappingClass = IpRangeInventory.class, joinColumn = @JoinColumn(name = "l3NetworkUuid")) private List<IpRangeInventory> ipRanges; /** * @desc a list of network services enabled on this l3Network. See :ref:`NetworkServiceL3NetworkRefInventory` */ @Queryable(mappingClass = NetworkServiceL3NetworkRefInventory.class, joinColumn = @JoinColumn(name = "l3NetworkUuid")) private List<NetworkServiceL3NetworkRefInventory> networkServices; public static L3NetworkInventory valueOf(L3NetworkVO vo) { L3NetworkInventory inv = new L3NetworkInventory(); inv.setUuid(vo.getUuid()); inv.setCreateDate(vo.getCreateDate()); inv.setDescription(vo.getDescription()); inv.setL2NetworkUuid(vo.getL2NetworkUuid()); inv.setName(vo.getName()); inv.setType(vo.getType()); inv.setDnsDomain(vo.getDnsDomain()); inv.setZoneUuid(vo.getZoneUuid()); inv.setState(vo.getState().toString()); for (L3NetworkDnsVO dnsvo : vo.getDns()) { inv.getDns().add(dnsvo.getDns()); } inv.setSystem(vo.isSystem()); inv.setIpRanges(IpRangeInventory.valueOf(vo.getIpRanges())); inv.setLastOpDate(vo.getLastOpDate()); inv.setNetworkServices(NetworkServiceL3NetworkRefInventory.valueOf(vo.getNetworkServices())); return inv; } public static List<L3NetworkInventory> valueOf(Collection<L3NetworkVO> vos) { List<L3NetworkInventory> invs = new ArrayList<L3NetworkInventory>(vos.size()); for (L3NetworkVO vo : vos) { invs.add(valueOf(vo)); } return invs; } public String getDnsDomain() { return dnsDomain; } public void setDnsDomain(String domain) { this.dnsDomain = domain; } public boolean isSystem() { return system; } public void setSystem(boolean system) { this.system = system; } public String getUuid() { return uuid; } public void setUuid(String uuid) { this.uuid = uuid; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public String getType() { return type; } public void setType(String type) { this.type = type; } public String getZoneUuid() { return zoneUuid; } public void setZoneUuid(String zoneUuid) { this.zoneUuid = zoneUuid; } public String getL2NetworkUuid() { return l2NetworkUuid; } public void setL2NetworkUuid(String l2NetworkUuid) { this.l2NetworkUuid = l2NetworkUuid; } public List<String> getDns() { if (dns == null) { dns = new ArrayList<String>(); } return dns; } public void setDns(List<String> dns) { this.dns = dns; } public Timestamp getCreateDate() { return createDate; } public void setCreateDate(Timestamp createDate) { this.createDate = createDate; } public Timestamp getLastOpDate() { return lastOpDate; } public void setLastOpDate(Timestamp lastOpDate) { this.lastOpDate = lastOpDate; } public List<IpRangeInventory> getIpRanges() { return ipRanges; } public void setIpRanges(List<IpRangeInventory> ipRanges) { this.ipRanges = ipRanges; } public List<NetworkServiceL3NetworkRefInventory> getNetworkServices() { return networkServices; } public void setNetworkServices(List<NetworkServiceL3NetworkRefInventory> networkServices) { this.networkServices = networkServices; } public List<NetworkServiceL3NetworkRefInventory> getNetworkServiceL3NetworkRefByProviderUuid(String providerUuid) { if (networkServices == null || networkServices.isEmpty()) { return new ArrayList<NetworkServiceL3NetworkRefInventory>(0); } List<NetworkServiceL3NetworkRefInventory> refs = new ArrayList<NetworkServiceL3NetworkRefInventory>(); for (NetworkServiceL3NetworkRefInventory ref : networkServices) { if (ref.getNetworkServiceProviderUuid().equals(providerUuid)) { refs.add(ref); } } return refs; } public List<String> getNetworkServiceTypesFromProvider(String providerUuid) { List<NetworkServiceL3NetworkRefInventory> refs = getNetworkServiceL3NetworkRefByProviderUuid(providerUuid); List<String> nwTypes = new ArrayList<String>(refs.size()); for (NetworkServiceL3NetworkRefInventory ref : refs) { nwTypes.add(ref.getNetworkServiceType()); } return nwTypes; } public String getState() { return state; } public void setState(String state) { this.state = state; } }