package org.ovirt.engine.core.utils.ovf; import org.ovirt.engine.core.common.businessentities.BootSequence; import org.ovirt.engine.core.common.businessentities.DiskImage; import org.ovirt.engine.core.common.businessentities.DisplayType; import org.ovirt.engine.core.common.businessentities.UsbPolicy; import org.ovirt.engine.core.common.businessentities.VmInterfaceType; import org.ovirt.engine.core.common.businessentities.VmNetworkInterface; import org.ovirt.engine.core.common.businessentities.VmOsType; import org.ovirt.engine.core.common.businessentities.VmTemplate; import org.ovirt.engine.core.common.businessentities.VmType; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.compat.RefObject; import org.ovirt.engine.core.compat.StringHelper; import org.ovirt.engine.core.compat.backendcompat.XmlDocument; import org.ovirt.engine.core.compat.backendcompat.XmlNode; import org.ovirt.engine.core.compat.backendcompat.XmlNodeList; import org.ovirt.engine.core.utils.linq.LinqUtils; import org.ovirt.engine.core.utils.linq.Predicate; public class OvfTemplateReader extends OvfReader { protected VmTemplate _vmTemplate; public OvfTemplateReader(XmlDocument document, VmTemplate vmTemplate, java.util.ArrayList<DiskImage> images) { super(document, images); _vmTemplate = vmTemplate; } @Override protected void ReadOsSection(XmlNode section) { _vmTemplate.setId(new Guid(section.Attributes.get("ovf:id").getValue())); XmlNode node = section.SelectSingleNode("Description"); if (node != null) { _vmTemplate.setos(VmOsType.valueOf(node.InnerText)); } else { _vmTemplate.setos(VmOsType.Unassigned); } } @Override protected void ReadHardwareSection(XmlNode section) { XmlNodeList list = section.SelectNodes("Item"); for (XmlNode node : list) { int resourceType = Integer.parseInt(node.SelectSingleNode("rasd:ResourceType", _xmlNS).InnerText); switch (resourceType) { // CPU case 3: _vmTemplate .setnum_of_sockets(Integer.parseInt(node.SelectSingleNode("rasd:num_of_sockets", _xmlNS).InnerText)); _vmTemplate .setcpu_per_socket(Integer.parseInt(node.SelectSingleNode("rasd:cpu_per_socket", _xmlNS).InnerText)); break; // Memory case 4: _vmTemplate .setmem_size_mb(Integer.parseInt(node.SelectSingleNode("rasd:VirtualQuantity", _xmlNS).InnerText)); break; // Image case 17: final Guid guid = new Guid(node.SelectSingleNode("rasd:InstanceId", _xmlNS).InnerText); // DiskImage image = null; //LINQ _images.FirstOrDefault(img => // img.image_guid == guid); DiskImage image = LinqUtils.firstOrNull(_images, new Predicate<DiskImage>() { @Override public boolean eval(DiskImage diskImage) { return diskImage.getId().equals(guid); } }); String drive = node.SelectSingleNode("rasd:Caption", _xmlNS).InnerText; if (drive.startsWith("Drive ")) { image.setinternal_drive_mapping(drive.substring(6)); } image.setimage_group_id(OvfParser.GetImageGrupIdFromImageFile(node.SelectSingleNode( "rasd:HostResource", _xmlNS).InnerText)); if (!StringHelper.isNullOrEmpty(node.SelectSingleNode("rasd:Parent", _xmlNS).InnerText)) { image.setParentId(new Guid(node.SelectSingleNode("rasd:Parent", _xmlNS).InnerText)); } if (!StringHelper.isNullOrEmpty(node.SelectSingleNode("rasd:Template", _xmlNS).InnerText)) { image.setit_guid(new Guid(node.SelectSingleNode("rasd:Template", _xmlNS).InnerText)); } image.setappList(node.SelectSingleNode("rasd:ApplicationList", _xmlNS).InnerText); if (!StringHelper.isNullOrEmpty(node.SelectSingleNode("rasd:StorageId", _xmlNS).InnerText)) { image.setstorage_id(new Guid(node.SelectSingleNode("rasd:StorageId", _xmlNS).InnerText)); } if (!StringHelper.isNullOrEmpty(node.SelectSingleNode("rasd:StoragePoolId", _xmlNS).InnerText)) { image.setstorage_pool_id(new Guid(node.SelectSingleNode("rasd:StoragePoolId", _xmlNS).InnerText)); } java.util.Date creationDate = new java.util.Date(0); RefObject<java.util.Date> tempRefObject = new RefObject<java.util.Date>(creationDate); boolean tempVar = OvfParser.UtcDateStringToLocaDate( node.SelectSingleNode("rasd:CreationDate", _xmlNS).InnerText, tempRefObject); creationDate = tempRefObject.argvalue; if (tempVar) { image.setcreation_date(creationDate); } java.util.Date lastModified = new java.util.Date(0); RefObject<java.util.Date> tempRefObject2 = new RefObject<java.util.Date>(lastModified); boolean tempVar2 = OvfParser.UtcDateStringToLocaDate( node.SelectSingleNode("rasd:LastModified", _xmlNS).InnerText, tempRefObject2); lastModified = tempRefObject2.argvalue; if (tempVar2) { image.setlastModified(lastModified); } break; // Network case 10: VmNetworkInterface iface = new VmNetworkInterface(); if (!StringHelper.isNullOrEmpty(node.SelectSingleNode("rasd:ResourceSubType", _xmlNS).InnerText)) { iface.setType(Integer.parseInt(node.SelectSingleNode("rasd:ResourceSubType", _xmlNS).InnerText)); } iface.setNetworkName(node.SelectSingleNode("rasd:Connection", _xmlNS).InnerText); iface.setName(node.SelectSingleNode("rasd:Name", _xmlNS).InnerText); iface.setSpeed((node.SelectSingleNode("rasd:speed", _xmlNS) != null) ? Integer .parseInt(node.SelectSingleNode("rasd:speed", _xmlNS).InnerText) : VmInterfaceType.forValue(iface.getType()).getSpeed()); _vmTemplate.getInterfaces().add(iface); break; // USB case 23: _vmTemplate.setusb_policy(UsbPolicy.valueOf(node.SelectSingleNode("rasd:UsbPolicy", _xmlNS).InnerText)); break; // Monitor case 20: _vmTemplate .setnum_of_monitors(Integer.parseInt(node.SelectSingleNode("rasd:VirtualQuantity", _xmlNS).InnerText)); break; } } } @Override protected void ReadGeneralData() { // General Vm XmlNode content = _document.SelectSingleNode("//*/Content"); XmlNode node = content.SelectSingleNode("Name"); if (node != null) { _vmTemplate.setname(node.InnerText); name = _vmTemplate.getname(); } node = content.SelectSingleNode("TemplateId"); if (node != null) { if (!StringHelper.isNullOrEmpty(node.InnerText)) { _vmTemplate.setId(new Guid(node.InnerText)); } } node = content.SelectSingleNode("Description"); if (node != null) { _vmTemplate.setdescription(node.InnerText); } node = content.SelectSingleNode("Domain"); if (node != null) { _vmTemplate.setdomain(node.InnerText); } node = content.SelectSingleNode("CreationDate"); java.util.Date creationDate = new java.util.Date(0); RefObject<java.util.Date> tempRefObject = new RefObject<java.util.Date>(creationDate); boolean tempVar = node != null && OvfParser.UtcDateStringToLocaDate(node.InnerText, tempRefObject); creationDate = tempRefObject.argvalue; if (tempVar) { _vmTemplate.setcreation_date(creationDate); } node = content.SelectSingleNode("IsAutoSuspend"); if (node != null) { _vmTemplate.setis_auto_suspend(Boolean.parseBoolean(node.InnerText)); } node = content.SelectSingleNode("TimeZone"); if (node != null) { _vmTemplate.settime_zone(node.InnerText); } node = content.SelectSingleNode("VmType"); if (node != null) { if (!StringHelper.isNullOrEmpty(node.InnerText)) { _vmTemplate.setvm_type(VmType.forValue(Integer.parseInt(node.InnerText))); } } node = content.SelectSingleNode("default_boot_sequence"); if (node != null) { if (!StringHelper.isNullOrEmpty(node.InnerText)) { _vmTemplate.setdefault_boot_sequence(BootSequence.forValue(Integer.parseInt(node.InnerText))); } } node = content.SelectSingleNode("initrd_url"); if (node != null) { if (!StringHelper.isNullOrEmpty(node.InnerText)) { _vmTemplate.setinitrd_url((node.InnerText)); } } node = content.SelectSingleNode("kernel_url"); if (node != null) { if (!StringHelper.isNullOrEmpty(node.InnerText)) { _vmTemplate.setkernel_url((node.InnerText)); } } node = content.SelectSingleNode("kernel_params"); if (node != null) { if (!StringHelper.isNullOrEmpty(node.InnerText)) { _vmTemplate.setkernel_params((node.InnerText)); } } XmlNodeList list = content.SelectNodes("Section"); for (XmlNode section : list) { String value = section.Attributes.get("xsi:type").getValue(); // C# TO JAVA CONVERTER NOTE: The following 'switch' operated on a // string member and was converted to Java 'if-else' logic: // switch (value) // ORIGINAL LINE: case "ovf:OperatingSystemSection_Type": if (StringHelper.EqOp(value, "ovf:OperatingSystemSection_Type")) { ReadOsSection(section); } // ORIGINAL LINE: case "ovf:VirtualHardwareSection_Type": else if (StringHelper.EqOp(value, "ovf:VirtualHardwareSection_Type")) { ReadHardwareSection(section); } } node = content.SelectSingleNode("default_display_type"); if (node != null) { if (!StringHelper.isNullOrEmpty(node.InnerText)) { _vmTemplate.setdefault_display_type(DisplayType.forValue(Integer.parseInt(node.InnerText))); } } } }