package org.ovirt.engine.ui.uicommon.models.vms;
import java.util.Collections;
import org.ovirt.engine.core.compat.*;
import org.ovirt.engine.ui.uicompat.*;
import org.ovirt.engine.core.common.businessentities.*;
import org.ovirt.engine.core.common.vdscommands.*;
import org.ovirt.engine.core.common.queries.*;
import org.ovirt.engine.core.common.action.*;
import org.ovirt.engine.ui.frontend.*;
import org.ovirt.engine.ui.uicommon.*;
import org.ovirt.engine.ui.uicommon.models.*;
import org.ovirt.engine.core.common.*;
import org.ovirt.engine.ui.uicommon.validation.*;
import org.ovirt.engine.core.common.businessentities.*;
import org.ovirt.engine.core.common.queries.*;
import org.ovirt.engine.ui.uicompat.*;
import org.ovirt.engine.ui.uicommon.*;
import org.ovirt.engine.ui.uicommon.models.*;
@SuppressWarnings("unused")
public class ImportVmModel extends ListWithDetailsModel
{
private storage_domain_static privateSourceStorage;
public storage_domain_static getSourceStorage()
{
return privateSourceStorage;
}
public void setSourceStorage(storage_domain_static value)
{
privateSourceStorage = value;
}
private storage_pool privateStoragePool;
public storage_pool getStoragePool()
{
return privateStoragePool;
}
public void setStoragePool(storage_pool value)
{
privateStoragePool = value;
}
private ListModel privateDestinationStorage;
public ListModel getDestinationStorage()
{
return privateDestinationStorage;
}
private void setDestinationStorage(ListModel value)
{
privateDestinationStorage = value;
}
private ListModel privateCluster;
public ListModel getCluster()
{
return privateCluster;
}
private void setCluster(ListModel value)
{
privateCluster = value;
}
private ListModel privateSystemDiskFormat;
public ListModel getSystemDiskFormat()
{
return privateSystemDiskFormat;
}
private void setSystemDiskFormat(ListModel value)
{
privateSystemDiskFormat = value;
}
private ListModel privateDataDiskFormat;
public ListModel getDataDiskFormat()
{
return privateDataDiskFormat;
}
private void setDataDiskFormat(ListModel value)
{
privateDataDiskFormat = value;
}
private EntityModel privateCollapseSnapshots;
public EntityModel getCollapseSnapshots()
{
return privateCollapseSnapshots;
}
private void setCollapseSnapshots(EntityModel value)
{
privateCollapseSnapshots = value;
}
private String nameAndDescription;
public String getNameAndDescription()
{
return nameAndDescription;
}
public void setNameAndDescription(String value)
{
if (!StringHelper.stringsEqual(nameAndDescription, value))
{
nameAndDescription = value;
OnPropertyChanged(new PropertyChangedEventArgs("NameAndDescription"));
}
}
private java.util.List<VM> problematicItems;
public java.util.List<VM> getProblematicItems()
{
return problematicItems;
}
public void setProblematicItems(java.util.List<VM> value)
{
if (problematicItems != value)
{
problematicItems = value;
OnPropertyChanged(new PropertyChangedEventArgs("ProblematicItems"));
}
}
private boolean hasCollapseSnapshotsWarning;
public boolean getHasCollapseSnapshotsWarning()
{
return hasCollapseSnapshotsWarning;
}
public void setHasCollapseSnapshotsWarning(boolean value)
{
if (hasCollapseSnapshotsWarning != value)
{
hasCollapseSnapshotsWarning = value;
OnPropertyChanged(new PropertyChangedEventArgs("HasCollapseSnapshotsWarning"));
}
}
public ImportVmModel()
{
EntityModel tempVar = new EntityModel();
tempVar.setEntity(false);
setCollapseSnapshots(tempVar);
getCollapseSnapshots().getEntityChangedEvent().addListener(this);
setDestinationStorage(new ListModel());
getDestinationStorage().getSelectedItemChangedEvent().addListener(this);
setCluster(new ListModel());
setSystemDiskFormat(new ListModel());
setDataDiskFormat(new ListModel());
}
@Override
public void eventRaised(Event ev, Object sender, EventArgs args)
{
super.eventRaised(ev, sender, args);
if (ev.equals(EntityChangedEventDefinition) && sender == getCollapseSnapshots())
{
CollapseSnapshots_EntityChanged();
}
else if (ev.equals(getSelectedItemChangedEvent()) && sender == getDestinationStorage())
{
DestinationStorage_SelectedItemChanged();
}
}
private void DestinationStorage_SelectedItemChanged()
{
UpdateImportWarnings();
}
@Override
protected void ItemsChanged()
{
super.ItemsChanged();
UpdateImportWarnings();
}
private void UpdateImportWarnings()
{
//Clear problematic state.
setProblematicItems(null);
if (getItems() == null)
{
return;
}
storage_domains destinationStorage = (storage_domains)getDestinationStorage().getSelectedItem();
//Determine which items are problematic.
java.util.ArrayList<VM> problematicItems = new java.util.ArrayList<VM>();
for (Object item : getItems())
{
VM vm = (VM)item;
if (vm.getDiskMap() != null)
{
for (java.util.Map.Entry<String, DiskImage> pair : vm.getDiskMap().entrySet())
{
DiskImage disk = pair.getValue();
if (disk.getvolume_type() == VolumeType.Sparse && disk.getvolume_format() == VolumeFormat.RAW && destinationStorage != null && (destinationStorage.getstorage_type() == StorageType.ISCSI || destinationStorage.getstorage_type() == StorageType.FCP))
{
problematicItems.add(vm);
}
}
}
}
//Decide what to do with the CollapseSnapshots option.
if (problematicItems.size() > 0)
{
if (problematicItems.size() == Linq.Count(getItems()))
{
//All items are problematic.
getCollapseSnapshots().setIsChangable(false);
getCollapseSnapshots().setEntity(true);
getCollapseSnapshots().setMessage("Note that all snapshots will be collapsed due to different storage types");
setHasCollapseSnapshotsWarning(true);
}
else
{
//Some items are problematic.
getCollapseSnapshots().setMessage("Use a separate import operation for the marked VMs or\nApply \"Collapse Snapshots\" for all VMs");
setHasCollapseSnapshotsWarning(!(Boolean)getCollapseSnapshots().getEntity());
setProblematicItems((Boolean)getCollapseSnapshots().getEntity() ? null : problematicItems);
}
}
else
{
//No problematic items.
getCollapseSnapshots().setIsChangable(true);
getCollapseSnapshots().setMessage(null);
setHasCollapseSnapshotsWarning(false);
}
}
public void CollapseSnapshots_EntityChanged()
{
if (getItems() == null)
{
return;
}
storage_domains selectedDestinationStorage = null;
boolean sameSelectedDestinationStorage = false;
if (getDestinationStorage().getSelectedItem() != null)
{
selectedDestinationStorage = (storage_domains)getDestinationStorage().getSelectedItem();
}
java.util.ArrayList<storage_domains> destStorages = new java.util.ArrayList<storage_domains>();
java.util.HashMap<Guid, java.util.ArrayList<storage_domains>> templateGuidStorageDomainDic = new java.util.HashMap<Guid, java.util.ArrayList<storage_domains>>();
for (Object item : getItems())
{
VM vm = (VM)item;
Guid Guid = vm.getvmt_guid();
if (templateGuidStorageDomainDic.containsKey(Guid))
{
continue;
}
if (Guid.equals(Guid.Empty))
{
templateGuidStorageDomainDic.put(Guid, null);
}
else
{
templateGuidStorageDomainDic.put(Guid, DataProvider.GetStorageDomainListByTemplate(Guid));
}
}
for (storage_domains domain : DataProvider.GetDataDomainsListByDomain(this.getSourceStorage().getId()))
{
boolean addStorage = false;
if ((domain.getstorage_domain_type() == StorageDomainType.Data || domain.getstorage_domain_type() == StorageDomainType.Master) && domain.getstatus() != null && domain.getstatus() == StorageDomainStatus.Active)
{
for (java.util.Map.Entry<Guid, java.util.ArrayList<storage_domains>> keyValuePair : templateGuidStorageDomainDic.entrySet())
{
if (Guid.Empty.equals(keyValuePair.getKey()))
{
addStorage = true;
}
else
{
addStorage = false;
for (storage_domains storageDomain : keyValuePair.getValue())
{
if (storageDomain.getid().equals(domain.getid()) || (Boolean)getCollapseSnapshots().getEntity())
{
addStorage = true;
break;
}
}
}
if (addStorage == false)
{
break;
}
}
}
if (addStorage)
{
destStorages.add(domain);
if (sameSelectedDestinationStorage == false && domain.equals(selectedDestinationStorage))
{
sameSelectedDestinationStorage = true;
selectedDestinationStorage = domain;
}
}
}
getDestinationStorage().setItems(destStorages);
if (sameSelectedDestinationStorage)
{
getDestinationStorage().setSelectedItem(selectedDestinationStorage);
}
else
{
getDestinationStorage().setSelectedItem(Linq.FirstOrDefault(destStorages));
}
if (getDetailModels() != null && getActiveDetailModel() instanceof VmImportDiskListModel)
{
VmImportDiskListModel detailModel = (VmImportDiskListModel)getActiveDetailModel();
detailModel.setCollapseSnapshots((Boolean)getCollapseSnapshots().getEntity());
}
UpdateImportWarnings();
}
@Override
protected void ActiveDetailModelChanged()
{
super.ActiveDetailModelChanged();
CollapseSnapshots_EntityChanged();
}
@Override
protected void InitDetailModels()
{
super.InitDetailModels();
VmImportDiskListModel importDiskListModel = new VmImportDiskListModel();
ObservableCollection<EntityModel> list = new ObservableCollection<EntityModel>();
list.add(new VmGeneralModel());
list.add(new VmImportInterfaceListModel());
list.add(importDiskListModel);
list.add(new VmAppListModel());
setDetailModels(list);
importDiskListModel.setSelectedVMsCount(((java.util.List)getItems()).size());
}
public boolean Validate()
{
getDestinationStorage().ValidateSelectedItem(new IValidation[] { new NotEmptyValidation() });
getCluster().ValidateSelectedItem(new IValidation[] { new NotEmptyValidation() });
return getDestinationStorage().getIsValid() && getCluster().getIsValid();
}
@Override
protected void OnSelectedItemChanged()
{
super.OnSelectedItemChanged();
if (getSelectedItem() != null)
{
VM vm = (VM)getSelectedItem();
setNameAndDescription(StringFormat.format("%1$s%2$s", vm.getvm_name(), !StringHelper.isNullOrEmpty(vm.getvm_description()) ? " [" + vm.getvm_description() + "]" : ""));
}
else
{
setNameAndDescription("");
}
}
}