package org.ovirt.engine.ui.uicommonweb.models.hosts; import java.util.Map; import org.ovirt.engine.core.common.businessentities.network.HostNetworkQos; import org.ovirt.engine.core.common.businessentities.network.IPv4Address; import org.ovirt.engine.core.common.businessentities.network.IpV6Address; import org.ovirt.engine.core.common.businessentities.network.Ipv4BootProtocol; import org.ovirt.engine.core.common.businessentities.network.Ipv6BootProtocol; import org.ovirt.engine.core.common.businessentities.network.NetworkAttachment; import org.ovirt.engine.core.common.businessentities.network.VdsNetworkInterface; import org.ovirt.engine.ui.uicommonweb.models.vms.key_value.KeyValueModel; public interface InterfacePropertiesAccessor { String getIpv4Address(); String getIpv4Netmask(); String getIpv4Gateway(); Ipv4BootProtocol getIpv4BootProtocol(); String getIpv6Address(); Integer getIpv6Prefix(); String getIpv6Gateway(); Ipv6BootProtocol getIpv6BootProtocol(); boolean isQosOverridden(); HostNetworkQos getHostNetworkQos(); Map<String, String> getCustomProperties(); class FromNic implements InterfacePropertiesAccessor { VdsNetworkInterface nic; public FromNic(VdsNetworkInterface nic) { this.nic = nic; } @Override public String getIpv4Address() { return nic.getIpv4Address(); } @Override public String getIpv4Netmask() { return nic.getIpv4Subnet(); } @Override public String getIpv4Gateway() { return nic.getIpv4Gateway(); } @Override public Ipv4BootProtocol getIpv4BootProtocol() { return nic.getIpv4BootProtocol(); } @Override public String getIpv6Address() { return nic.getIpv6Address(); } @Override public Integer getIpv6Prefix() { return nic.getIpv6Prefix(); } @Override public String getIpv6Gateway() { return nic.getIpv6Gateway(); } @Override public Ipv6BootProtocol getIpv6BootProtocol() { return nic.getIpv6BootProtocol(); } @Override public HostNetworkQos getHostNetworkQos() { return nic.getQos(); } @Override public boolean isQosOverridden() { return false; } @Override public Map<String, String> getCustomProperties() { return null; } } class FromNetworkAttachment implements InterfacePropertiesAccessor { NetworkAttachment networkAttachment; IPv4Address iPv4Address; IpV6Address iPv6Address; HostNetworkQos networkQos; public FromNetworkAttachment(NetworkAttachment networkAttachment, HostNetworkQos networkQos) { this.networkAttachment = networkAttachment; this.iPv4Address = networkAttachment.getIpConfiguration() != null && networkAttachment.getIpConfiguration().hasIpv4PrimaryAddressSet() ? networkAttachment.getIpConfiguration().getIpv4PrimaryAddress() : null; this.iPv6Address = networkAttachment.getIpConfiguration() != null && networkAttachment.getIpConfiguration().hasIpv6PrimaryAddressSet() ? networkAttachment.getIpConfiguration().getIpv6PrimaryAddress() : null; this.networkQos = networkQos; } @Override public String getIpv4Address() { return iPv4Address.getAddress(); } @Override public String getIpv4Netmask() { return iPv4Address.getNetmask(); } @Override public String getIpv4Gateway() { return iPv4Address.getGateway(); } @Override public Ipv4BootProtocol getIpv4BootProtocol() { return iPv4Address.getBootProtocol(); } @Override public String getIpv6Address() { return iPv6Address.getAddress(); } @Override public Integer getIpv6Prefix() { return iPv6Address.getPrefix(); } @Override public String getIpv6Gateway() { return iPv6Address.getGateway(); } @Override public Ipv6BootProtocol getIpv6BootProtocol() { return iPv6Address.getBootProtocol(); } @Override public HostNetworkQos getHostNetworkQos() { if (networkAttachment.isQosOverridden()) { return HostNetworkQos.fromAnonymousHostNetworkQos(networkAttachment.getHostNetworkQos()); } else { return networkQos; } } @Override public boolean isQosOverridden() { return networkAttachment.isQosOverridden(); } @Override public Map<String, String> getCustomProperties() { return networkAttachment.getProperties(); } } class FromNetworkAttachmentModel implements InterfacePropertiesAccessor { private final NetworkAttachmentModel networkAttachmentModel; FromNetworkAttachmentModel(NetworkAttachmentModel networkAttachmentModel) { this.networkAttachmentModel = networkAttachmentModel; } @Override public String getIpv4Address() { return networkAttachmentModel.getIpv4Address().getEntity(); } @Override public String getIpv4Netmask() { return networkAttachmentModel.getIpv4Subnet().getEntity(); } @Override public String getIpv4Gateway() { return networkAttachmentModel.getIpv4Gateway().getEntity(); } @Override public Ipv4BootProtocol getIpv4BootProtocol() { return networkAttachmentModel.getIpv4BootProtocol(); } @Override public String getIpv6Address() { return networkAttachmentModel.getIpv6Address().getEntity(); } @Override public Integer getIpv6Prefix() { return networkAttachmentModel.getIpv6Prefix().getEntity(); } @Override public String getIpv6Gateway() { return networkAttachmentModel.getIpv6Gateway().getEntity(); } @Override public Ipv6BootProtocol getIpv6BootProtocol() { return networkAttachmentModel.getIpv6BootProtocol(); } @Override public boolean isQosOverridden() { return networkAttachmentModel.getQosOverridden().getEntity(); } @Override public HostNetworkQos getHostNetworkQos() { return networkAttachmentModel.getQosModel().getEntity(); } @Override public Map<String, String> getCustomProperties() { boolean customPropertiesAvailable = networkAttachmentModel.getCustomPropertiesModel().getIsAvailable(); Map<String, String> customProperties = customPropertiesAvailable ? KeyValueModel.convertProperties(networkAttachmentModel.getCustomPropertiesModel().serialize()) : null; return customProperties; } } class FromNetworkAttachmentForModel extends FromNetworkAttachment { VdsNetworkInterface nic; public FromNetworkAttachmentForModel(NetworkAttachment networkAttachment, HostNetworkQos networkQos, VdsNetworkInterface nic) { super(networkAttachment, networkQos); this.nic = nic; } @Override public String getIpv4Address() { return shouldTakeIpv4DataFromNic() ? nic.getIpv4Address() : super.getIpv4Address(); } @Override public String getIpv4Netmask() { return shouldTakeIpv4DataFromNic() ? nic.getIpv4Subnet() : super.getIpv4Netmask(); } @Override public String getIpv4Gateway() { return shouldTakeIpv4DataFromNic() ? nic.getIpv4Gateway() : super.getIpv4Gateway(); } @Override public String getIpv6Address() { return shouldTakeIpv6DataFromNic() ? nic.getIpv6Address() : super.getIpv6Address(); } @Override public Integer getIpv6Prefix() { return shouldTakeIpv6DataFromNic() ? nic.getIpv6Prefix() : super.getIpv6Prefix(); } @Override public String getIpv6Gateway() { return shouldTakeIpv6DataFromNic() ? nic.getIpv6Gateway() : super.getIpv6Gateway(); } private boolean shouldTakeIpv4DataFromNic() { if (Ipv4BootProtocol.DHCP == getIpv4BootProtocol()) { return true; } return false; } private boolean shouldTakeIpv6DataFromNic() { if (Ipv6BootProtocol.DHCP == getIpv6BootProtocol() || Ipv6BootProtocol.AUTOCONF == getIpv6BootProtocol()) { return true; } return false; } } }