package org.ovirt.engine.ui.uicommonweb.models.storage; import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.ovirt.engine.core.common.action.ImportRepoImageParameters; import org.ovirt.engine.core.common.action.VdcActionParametersBase; import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.businessentities.BusinessEntitiesDefinitions; import org.ovirt.engine.core.common.businessentities.Quota; import org.ovirt.engine.core.common.businessentities.StorageDomain; import org.ovirt.engine.core.common.businessentities.comparators.NameableComparator; import org.ovirt.engine.core.common.businessentities.storage.RepoImage; import org.ovirt.engine.ui.frontend.Frontend; import org.ovirt.engine.ui.uicommonweb.Linq; import org.ovirt.engine.ui.uicommonweb.UICommand; import org.ovirt.engine.ui.uicommonweb.help.HelpTag; import org.ovirt.engine.ui.uicommonweb.models.ConfirmationModel; import org.ovirt.engine.ui.uicommonweb.models.EntityModel; import org.ovirt.engine.ui.uicommonweb.validation.I18NExtraNameOrNoneValidation; import org.ovirt.engine.ui.uicommonweb.validation.IValidation; import org.ovirt.engine.ui.uicommonweb.validation.LengthValidation; import org.ovirt.engine.ui.uicompat.ConstantsManager; import org.ovirt.engine.ui.uicompat.EventArgs; import org.ovirt.engine.ui.uicompat.IEventListener; import org.ovirt.engine.ui.uicompat.external.StringUtils; public class ImportRepoImageModel extends ImportExportRepoImageBaseModel { protected StorageDomain sourceStorageDomain; private final StorageIsoListModel storageIsoListModel; public ImportRepoImageModel(StorageIsoListModel storageIsoListModel) { this.storageIsoListModel = storageIsoListModel; } public void init(StorageDomain sourceStorageDomain, List<RepoImage> repoImages) { this.sourceStorageDomain = sourceStorageDomain; setRepoImages(repoImages); updateDataCenters(); IEventListener<EventArgs> importAsTemplateListener = (ev, sender, args) -> updateClusterEnabled(); getImportAsTemplate().getEntityChangedEvent().addListener(importAsTemplateListener); } public void setRepoImages(List<RepoImage> repoImages) { ArrayList<EntityModel> entities = new ArrayList<>(); for (RepoImage i : repoImages) { entities.add(new RepoImageModel(i)); } setEntities(entities); } @Override protected List<StorageDomain> filterStorageDomains(List<StorageDomain> storageDomains) { List<StorageDomain> availableStorageDomains = new ArrayList<>(); // Filtering out domains that are not active for (StorageDomain storageDomainItem : storageDomains) { if (Linq.isDataActiveStorageDomain(storageDomainItem)) { availableStorageDomains.add(storageDomainItem); } } // Sorting by name Collections.sort(availableStorageDomains, new NameableComparator()); return availableStorageDomains; } @Override protected String getNoDomainAvailableMessage() { return constants.noStorageDomainAvailableMsg(); } @Override public boolean isImportModel() { return true; } @Override public void executeCommand(UICommand command) { if (!validate()) { return; } super.executeCommand(command); startProgress(); ArrayList<VdcActionParametersBase> actionParameters = new ArrayList<>(); final StringBuilder imageNames = new StringBuilder(); for (EntityModel entity : getEntities()) { RepoImage repoImage = (RepoImage) entity.getEntity(); imageNames.append("\n -"); //$NON-NLS-1$ imageNames.append(repoImage.getRepoImageName()); ImportRepoImageParameters importParameters = new ImportRepoImageParameters(); // source importParameters.setSourceRepoImageId(repoImage.getRepoImageId()); importParameters.setSourceStorageDomainId(sourceStorageDomain.getId()); // destination importParameters.setDiskAlias(((RepoImageModel) entity).getDiskImageAlias()); importParameters.setStoragePoolId(getDataCenter().getSelectedItem().getId()); importParameters.setStorageDomainId(getStorageDomain().getSelectedItem().getId()); importParameters.setClusterId(getStorageDomain().getSelectedItem().getId()); Quota selectedQuota = getQuota().getSelectedItem(); if (selectedQuota != null) { importParameters.setQuotaId(selectedQuota.getId()); } Boolean importAsTemplate = getImportAsTemplate().getEntity(); importParameters.setImportAsTemplate(importAsTemplate); if (importAsTemplate) { importParameters.setClusterId(getCluster().getSelectedItem().getId()); String templateName = getTemplateName().getEntity(); if (StringUtils.isNotEmpty(templateName)) { importParameters.setTemplateName(templateName); } } actionParameters.add(importParameters); } Frontend.getInstance().runMultipleAction(VdcActionType.ImportRepoImage, actionParameters, result -> { ImportExportRepoImageBaseModel model = (ImportExportRepoImageBaseModel) result.getState(); model.stopProgress(); model.cancel(); ConfirmationModel confirmModel = new ConfirmationModel(); storageIsoListModel.setConfirmWindow(confirmModel); confirmModel.setTitle(ConstantsManager.getInstance().getConstants().importImagesTitle()); confirmModel.setHelpTag(HelpTag.import_images); confirmModel.setHashName("import_images"); //$NON-NLS-1$ confirmModel.setMessage(ConstantsManager.getInstance() .getMessages() .importProcessHasBegunForImages(imageNames.toString())); confirmModel.getCommands().add(new UICommand("CancelConfirm", storageIsoListModel) //$NON-NLS-1$ .setTitle(ConstantsManager.getInstance().getConstants().close()) .setIsDefault(true) .setIsCancel(true) ); }, this); } public boolean validate() { getTemplateName().validateEntity( new IValidation[] { new LengthValidation(BusinessEntitiesDefinitions.VM_TEMPLATE_NAME_SIZE), new I18NExtraNameOrNoneValidation() }); return getTemplateName().getIsValid(); } public void updateClusterEnabled() { boolean importAsTemplate = getImportAsTemplate().getEntity(); getCluster().setIsAvailable(importAsTemplate); getCluster().setIsChangeable(!getCluster().getIsEmpty()); getTemplateName().setIsAvailable(importAsTemplate); } }