package org.ovirt.engine.core.bll.storage; import java.util.List; import org.ovirt.engine.core.common.AuditLogType; import org.ovirt.engine.core.common.businessentities.DiskImage; import org.ovirt.engine.core.common.businessentities.StorageDomainType; import org.ovirt.engine.core.common.businessentities.VmTemplate; import org.ovirt.engine.core.common.businessentities.storage_domain_static; import org.ovirt.engine.core.common.queries.DiskImageList; import org.ovirt.engine.core.common.queries.GetAllFromExportDomainQueryParamenters; import org.ovirt.engine.core.common.vdscommands.VDSReturnValue; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.compat.RefObject; import org.ovirt.engine.core.dal.dbbroker.DbFacade; import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogDirector; import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogableBase; import org.ovirt.engine.core.utils.ovf.OvfManager; import org.ovirt.engine.core.utils.ovf.OvfReaderException; public class GetTemplatesFromExportDomainQuery<P extends GetAllFromExportDomainQueryParamenters> extends GetVmsFromExportDomainQuery<P> { public GetTemplatesFromExportDomainQuery(P parameters) { super(parameters); } @Override protected void executeQueryCommand() { storage_domain_static storage = DbFacade.getInstance().getStorageDomainStaticDAO().get( getParameters().getStorageDomainId()); if (storage.getstorage_domain_type() == StorageDomainType.ImportExport) { VDSReturnValue retVal = ExecuteVerb(); BuildOvfReturnValue(retVal.getReturnValue()); } else { java.util.HashMap<VmTemplate, java.util.ArrayList<DiskImage>> templates = new java.util.HashMap<VmTemplate, java.util.ArrayList<DiskImage>>(); getQueryReturnValue().setReturnValue(templates); } } @Override protected void BuildOvfReturnValue(Object obj) { boolean shouldAdd = true; java.util.ArrayList<String> ovfList = (java.util.ArrayList<String>) obj; OvfManager ovfManager = new OvfManager(); java.util.HashMap<VmTemplate, DiskImageList> templates = new java.util.HashMap<VmTemplate, DiskImageList>(); List<VmTemplate> existsTemplates = DbFacade.getInstance().getVmTemplateDAO().getAll(); java.util.HashMap<Guid, VmTemplate> existsVmDictionary = new java.util.HashMap<Guid, VmTemplate>(); for (VmTemplate vmTemplate : existsTemplates) { existsVmDictionary.put(vmTemplate.getId(), vmTemplate); } if (IsValidExportDomain()) { VmTemplate template = null; for (String ovf : ovfList) { try { if (ovfManager.IsOvfTemplate(ovf)) { java.util.ArrayList<DiskImage> diskImages = null; RefObject<VmTemplate> tempRefObject = new RefObject<VmTemplate>(template); RefObject<java.util.ArrayList<DiskImage>> tempRefObject2 = new RefObject<java.util.ArrayList<DiskImage>>( diskImages); ovfManager.ImportTemplate(ovf, tempRefObject, tempRefObject2); template = tempRefObject.argvalue; diskImages = tempRefObject2.argvalue; shouldAdd = getParameters().getGetAll() ? shouldAdd : (!existsVmDictionary.containsKey(template.getId()) && diskImages != null); if (shouldAdd) { templates.put(template, new DiskImageList(diskImages)); } } } catch (OvfReaderException ex) { AuditLogableBase logable = new AuditLogableBase(); logable.AddCustomValue("Template", ex.getName()); AuditLogDirector.log(logable, AuditLogType.IMPORTEXPORT_FAILED_TO_IMPORT_TEMPLATE); } catch (RuntimeException ex) { AuditLogableBase logable = new AuditLogableBase(); logable.AddCustomValue("Template", "[Unknown name]"); AuditLogDirector.log(logable, AuditLogType.IMPORTEXPORT_FAILED_TO_IMPORT_TEMPLATE); } } } getQueryReturnValue().setReturnValue(templates); } }