package org.ovirt.engine.ui.uicommonweb.models.storage; import java.util.ArrayList; import java.util.LinkedHashSet; import java.util.List; import java.util.Set; import org.ovirt.engine.core.common.businessentities.StorageDomainType; import org.ovirt.engine.core.common.businessentities.StoragePool; import org.ovirt.engine.core.common.businessentities.StoragePoolStatus; import org.ovirt.engine.core.common.businessentities.VDS; import org.ovirt.engine.core.common.businessentities.storage.StorageType; import org.ovirt.engine.ui.uicommonweb.Linq; import org.ovirt.engine.ui.uicommonweb.models.EntityModel; import org.ovirt.engine.ui.uicommonweb.models.Model; public abstract class StorageModelBehavior extends Model { private StorageModel model; public StorageModel getModel() { return model; } public void setModel(StorageModel value) { model = value; } public List<StoragePool> filterDataCenter(List<StoragePool> source) { return Linq.where(source, new Linq.DataCenterStatusPredicate(StoragePoolStatus.NotOperational).negate()); } public abstract void updateItemsAvailability(); public void setStorageTypeItems() { ArrayList<IStorageModel> filteredItems = getSelectableModelsByRole(); Set<StorageType> storageTypeItems = new LinkedHashSet<>(); for (IStorageModel model : filteredItems) { storageTypeItems.add(model.getType()); } getModel().getAvailableStorageTypeItems().setItems(storageTypeItems); getModel().storageItemsChanged(); } public void setStorageDomainTypeItems() { ArrayList<IStorageModel> filteredItems = getSelectableModels(); Set<StorageDomainType> storageDomainTypeItems = new LinkedHashSet<>(); for (IStorageModel model : filteredItems) { storageDomainTypeItems.add(model.getRole()); } getModel().getAvailableStorageDomainTypeItems().setItems(storageDomainTypeItems); } public ArrayList<IStorageModel> getSelectableModels() { // Filter un-selectable models List<IStorageModel> items = getModel().getStorageModels(); return getSelectableModels(items); } public ArrayList<IStorageModel> getSelectableModelsByRole() { StorageDomainType role = getModel().getAvailableStorageDomainTypeItems().getSelectedItem(); List<IStorageModel> items = getModel().getStorageModelsByRole(role); return getSelectableModels(items); } public ArrayList<IStorageModel> getSelectableModels(List<IStorageModel> storageItems) { // Filter un-selectable models ArrayList<IStorageModel> filteredItems = new ArrayList<>(); for (IStorageModel model : storageItems) { if (((Model) model).getIsSelectable()) { filteredItems.add(model); } } return filteredItems; } public void onStorageModelUpdated(IStorageModel model) { // Update models list (the list is used for checking update completion) getModel().updatedStorageModels.add(model); // Filter UnSelectable model from AvailableStorageItems list if (getModel().updatedStorageModels.size() == getModel().getStorageModels().size()) { getModel().updatedStorageModels.clear(); getModel().getHost().setItems(new ArrayList<VDS>()); getModel().getHost().setSelectedItem(null); setStorageTypeItems(); setStorageDomainTypeItems(); if (getModel().getCurrentStorageItem() != null) { getModel().updateFormat(); } } } public final void updateDataCenterAlert() { EntityModel alert = getModel().getDataCenterAlert(); alert.setIsAvailable(false); alert.setEntity(""); } protected boolean isLocalStorage(IStorageModel storage) { return storage.getType() == StorageType.LOCALFS; } public abstract boolean isImport(); }