package org.ovirt.engine.ui.uicommon.models.datacenters; 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.models.configure.*; import org.ovirt.engine.core.common.interfaces.*; 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 DataCenterListModel extends ListWithDetailsModel implements ISupportSystemTreeContext { private UICommand privateNewCommand; public UICommand getNewCommand() { return privateNewCommand; } private void setNewCommand(UICommand value) { privateNewCommand = value; } private UICommand privateEditCommand; public UICommand getEditCommand() { return privateEditCommand; } private void setEditCommand(UICommand value) { privateEditCommand = value; } private UICommand privateRemoveCommand; public UICommand getRemoveCommand() { return privateRemoveCommand; } private void setRemoveCommand(UICommand value) { privateRemoveCommand = value; } private UICommand privateForceRemoveCommand; public UICommand getForceRemoveCommand() { return privateForceRemoveCommand; } private void setForceRemoveCommand(UICommand value) { privateForceRemoveCommand = value; } private UICommand privateActivateCommand; public UICommand getActivateCommand() { return privateActivateCommand; } private void setActivateCommand(UICommand value) { privateActivateCommand = value; } private UICommand privateGuideCommand; public UICommand getGuideCommand() { return privateGuideCommand; } private void setGuideCommand(UICommand value) { privateGuideCommand = value; } private UICommand privateRecoveryStorageCommand; public UICommand getRecoveryStorageCommand() { return privateRecoveryStorageCommand; } private void setRecoveryStorageCommand(UICommand value) { privateRecoveryStorageCommand = value; } private Model window; public Model getWindow() { return window; } public void setWindow(Model value) { if (window != value) { window = value; OnPropertyChanged(new PropertyChangedEventArgs("Window")); } } private Model confirmWindow; public Model getConfirmWindow() { return confirmWindow; } public void setConfirmWindow(Model value) { if (confirmWindow != value) { confirmWindow = value; OnPropertyChanged(new PropertyChangedEventArgs("ConfirmWindow")); } } //get { return SelectedItems == null ? new object[0] : SelectedItems.Cast<storage_pool>().Select(a => a.id).Cast<object>().ToArray(); } protected Object[] getSelectedKeys() { if (getSelectedItems() == null) { return new Object[0]; } else { java.util.ArrayList<Object> objL = new java.util.ArrayList<Object>(); for (storage_pool a : Linq.<storage_pool>Cast(getSelectedItems())) { objL.add(a.getId()); } return objL.toArray(new Object[]{}); } } private Object privateGuideContext; public Object getGuideContext() { return privateGuideContext; } public void setGuideContext(Object value) { privateGuideContext = value; } public DataCenterListModel() { setTitle("Data Centers"); setDefaultSearchString("DataCenter:"); setSearchString(getDefaultSearchString()); setNewCommand(new UICommand("New", this)); setEditCommand(new UICommand("Edit", this)); setRemoveCommand(new UICommand("Remove", this)); UICommand tempVar = new UICommand("ForceRemove", this); tempVar.setIsExecutionAllowed(true); setForceRemoveCommand(tempVar); setRecoveryStorageCommand(new UICommand("RecoveryStorage", this)); setActivateCommand(new UICommand("Activate", this)); setGuideCommand(new UICommand("Guide", this)); UpdateActionAvailability(); getSearchNextPageCommand().setIsAvailable(true); getSearchPreviousPageCommand().setIsAvailable(true); } public void Guide() { DataCenterGuideModel model = new DataCenterGuideModel(); setWindow(model); model.setTitle("New Data Center - Guide Me"); model.setHashName("new_data_center_-_guide_me"); model.setEntity(getGuideContext() != null ? DataProvider.GetDataCenterById(getGuideContext() instanceof Guid ? (Guid)getGuideContext() : (Guid)getGuideContext()) : null); UICommand tempVar = new UICommand("Cancel", this); tempVar.setTitle("Configure Later"); tempVar.setIsDefault(true); tempVar.setIsCancel(true); model.getCommands().add(tempVar); } @Override protected void InitDetailModels() { super.InitDetailModels(); ObservableCollection<EntityModel> list = new ObservableCollection<EntityModel>(); list.add(new DataCenterStorageListModel()); list.add(new DataCenterNetworkListModel()); list.add(new DataCenterClusterListModel()); list.add(new PermissionListModel()); list.add(new DataCenterEventListModel()); setDetailModels(list); } @Override public boolean IsSearchStringMatch(String searchString) { return searchString.trim().toLowerCase().startsWith("datacenter"); } @Override protected void SyncSearch() { SearchParameters tempVar = new SearchParameters(getSearchString(), SearchType.StoragePool); tempVar.setMaxCount(getSearchPageSize()); super.SyncSearch(VdcQueryType.Search, tempVar); } @Override protected void AsyncSearch() { super.AsyncSearch(); setAsyncResult(Frontend.RegisterSearch(getSearchString(), SearchType.StoragePool, getSearchPageSize())); setItems(getAsyncResult().getData()); } public void New() { if (getWindow() != null) { return; } DataCenterModel model = new DataCenterModel(); setWindow(model); model.setTitle("New Data Center"); model.setHashName("new_data_center"); model.setIsNew(true); model.getStorageTypeList().setSelectedItem(StorageType.NFS); UICommand tempVar = new UICommand("OnSave", this); tempVar.setTitle("OK"); tempVar.setIsDefault(true); model.getCommands().add(tempVar); UICommand tempVar2 = new UICommand("Cancel", this); tempVar2.setTitle("Cancel"); tempVar2.setIsCancel(true); model.getCommands().add(tempVar2); } public void Edit() { storage_pool dataCenter = (storage_pool)getSelectedItem(); if (getWindow() != null) { return; } DataCenterModel model = new DataCenterModel(); setWindow(model); model.setDataCenterId(dataCenter.getId()); model.setTitle("Edit Data Center"); model.setHashName("edit_data_center"); model.getName().setEntity(dataCenter.getname()); if (getSystemTreeSelectedItem() != null && getSystemTreeSelectedItem().getType() == SystemTreeItemType.DataCenter) { model.getName().setIsChangable(false); model.getName().setInfo("Cannot edit Data Center's Name in tree context"); } model.getDescription().setEntity(dataCenter.getdescription()); model.setOriginalName(dataCenter.getname()); if (DataProvider.GetStorageDomainList(dataCenter.getId()).size() != 0) { model.getStorageTypeList().setIsChangable(false); model.getStorageTypeList().getChangeProhibitionReasons().add("Cannot change Repository type with Storage Domains attached to it"); } model.getStorageTypeList().setSelectedItem(dataCenter.getstorage_pool_type()); //Version for (Object a : model.getVersion().getItems()) { Version item = (Version)a; if (Version.OpEquality(item, dataCenter.getcompatibility_version())) { model.getVersion().setSelectedItem(item); break; } } UICommand tempVar = new UICommand("OnSave", this); tempVar.setTitle("OK"); tempVar.setIsDefault(true); model.getCommands().add(tempVar); UICommand tempVar2 = new UICommand("Cancel", this); tempVar2.setTitle("Cancel"); tempVar2.setIsCancel(true); model.getCommands().add(tempVar2); } public void remove() { if (getWindow() != null) { return; } ConfirmationModel model = new ConfirmationModel(); setWindow(model); model.setTitle("Remove Data Center(s)"); model.setHashName("remove_data_center"); model.setMessage("Data Center(s)"); java.util.ArrayList<String> list = new java.util.ArrayList<String>(); for (storage_pool a : Linq.<storage_pool>Cast(getSelectedItems())) { list.add(a.getname()); } model.setItems(list); UICommand tempVar = new UICommand("OnRemove", this); tempVar.setTitle("OK"); tempVar.setIsDefault(true); model.getCommands().add(tempVar); UICommand tempVar2 = new UICommand("Cancel", this); tempVar2.setTitle("Cancel"); tempVar2.setIsCancel(true); model.getCommands().add(tempVar2); } public void ForceRemove() { ConfirmationModel model = new ConfirmationModel(); setWindow(model); model.setTitle("Force Remove Data Center"); model.setHashName("force_remove_data_center"); model.setMessage("Data Center(s)"); model.getLatch().setIsAvailable(true); model.getLatch().setIsChangable(true); java.util.ArrayList<String> list = new java.util.ArrayList<String>(); for (storage_pool a : Linq.<storage_pool>Cast(getSelectedItems())) { list.add(a.getname()); } model.setItems(list); UICommand tempVar = new UICommand("OnForceRemove", this); tempVar.setTitle("OK"); tempVar.setIsDefault(true); model.getCommands().add(tempVar); UICommand tempVar2 = new UICommand("Cancel", this); tempVar2.setTitle("Cancel"); tempVar2.setIsCancel(true); model.getCommands().add(tempVar2); } public void RecoveryStorage() { ConfirmationModel model = new ConfirmationModel(); setWindow(model); model.setTitle("Data Center Re-Initialize"); model.setHashName("data_center_re-initialize"); model.getLatch().setIsAvailable(true); model.getLatch().setIsChangable(true); //IEnumerable<storage_domains> list = DataProvider.GetStorageDomainList(); //List<EntityModel> models = list // .Where(a => (a.storage_domain_type == StorageDomainType.Data && a.storage_type == ((storage_pool)SelectedItem).storage_pool_type) && // (a.storage_domain_shared_status == StorageDomainSharedStatus.Unattached) // ) // .Select(a => new EntityModel() { Entity = a }) // .ToList(); java.util.ArrayList<EntityModel> models = new java.util.ArrayList<EntityModel>(); for (storage_domains a : DataProvider.GetStorageDomainList()) { if (a.getstorage_domain_type() == StorageDomainType.Data && a.getstorage_type() == ((storage_pool)getSelectedItem()).getstorage_pool_type() && (a.getstorage_domain_shared_status() == StorageDomainSharedStatus.Unattached)) { EntityModel tempVar = new EntityModel(); tempVar.setEntity(a); models.add(tempVar); } } model.setItems(models); if (models.size() > 0) { EntityModel entityModel = models.size() != 0 ? models.get(0) : null; if (entityModel != null) { entityModel.setIsSelected(true); } } if (models.isEmpty()) { model.setMessage("There are no compatible Storage Domains to attach to this Data Center. Please add new Storage from the Storage tab."); UICommand tempVar2 = new UICommand("Cancel", this); tempVar2.setTitle("Close"); tempVar2.setIsDefault(true); tempVar2.setIsCancel(true); model.getCommands().add(tempVar2); } else { UICommand tempVar3 = new UICommand("OnRecover", this); tempVar3.setTitle("OK"); tempVar3.setIsDefault(true); model.getCommands().add(tempVar3); UICommand tempVar4 = new UICommand("Cancel", this); tempVar4.setTitle("Cancel"); tempVar4.setIsCancel(true); model.getCommands().add(tempVar4); } } public void OnRecover() { ConfirmationModel model = (ConfirmationModel)getWindow(); if (!model.Validate()) { return; } //storage_domains master = DataProvider.GetStorageDomainList(((storage_pool)SelectedItem).id).FirstOrDefault(a=>a.storage_domain_type == StorageDomainType.Master); storage_domains master = null; for (storage_domains a : DataProvider.GetStorageDomainList(((storage_pool)getSelectedItem()).getId())) { if (a.getstorage_domain_type() == StorageDomainType.Master) { master = a; break; } } java.util.ArrayList<storage_domains> items = new java.util.ArrayList<storage_domains>(); for (EntityModel a : Linq.<EntityModel>Cast(model.getItems())) { if (a.getIsSelected()) { items.add((storage_domains)a.getEntity()); } } if (items.size() > 0) { if (model.getProgress() != null) { return; } java.util.ArrayList<VdcActionParametersBase> parameters = new java.util.ArrayList<VdcActionParametersBase>(); for (storage_domains a : items) { parameters.add(new RecoveryStoragePoolParameters(((storage_pool)getSelectedItem()).getId(), a.getid())); } model.StartProgress(null); Frontend.RunMultipleAction(VdcActionType.RecoveryStoragePool, parameters, new IFrontendMultipleActionAsyncCallback() { @Override public void Executed(FrontendMultipleActionAsyncResult result) { ConfirmationModel localModel = (ConfirmationModel)result.getState(); localModel.StopProgress(); Cancel(); } }, model); } else { Cancel(); } } public void Activate() { //Frontend.RunMultipleActions(VdcActionType.ActivateStoragePool, // SelectedItems.Cast<storage_pool>() // .Select(a => (VdcActionParametersBase)new StoragePoolParametersBase(a.id)) // .ToList() //); } public void OnRemove() { ConfirmationModel model = (ConfirmationModel)getWindow(); if (model.getProgress() != null) { return; } java.util.ArrayList<VdcActionParametersBase> parameters = new java.util.ArrayList<VdcActionParametersBase>(); for (storage_pool a : Linq.<storage_pool>Cast(getSelectedItems())) { parameters.add(new StoragePoolParametersBase(a.getId())); } model.StartProgress(null); Frontend.RunMultipleAction(VdcActionType.RemoveStoragePool, parameters, new IFrontendMultipleActionAsyncCallback() { @Override public void Executed(FrontendMultipleActionAsyncResult result) { ConfirmationModel localModel = (ConfirmationModel)result.getState(); localModel.StopProgress(); Cancel(); } }, model); } public void OnForceRemove() { ConfirmationModel model = (ConfirmationModel) getWindow(); if(!model.Validate()) { return; } VdcActionParametersBase parametersBase = new VdcActionParametersBase(); StoragePoolParametersBase tempVar = new StoragePoolParametersBase(((storage_pool)getSelectedItem()).getId()); tempVar.setForceDelete(true); parametersBase = tempVar; Frontend.RunAction(VdcActionType.RemoveStoragePool, parametersBase); Cancel(); } public void Cancel() { CancelConfirmation(); setGuideContext(null); setWindow(null); UpdateActionAvailability(); } public void CancelConfirmation() { setConfirmWindow(null); } public void OnSave() { DataCenterModel model = (DataCenterModel)getWindow(); if (!model.Validate()) { return; } if (!model.getIsNew() && (Version)model.getVersion().getSelectedItem() != ((storage_pool)getSelectedItem()).getcompatibility_version()) { ConfirmationModel confirmModel = new ConfirmationModel(); setConfirmWindow(confirmModel); confirmModel.setTitle("Change Data Center Compatibility Version"); confirmModel.setHashName("change_data_center_compatibility_version"); confirmModel.setMessage("You are about to change the Data Center Compatibility Version. Are you sure you want to continue?"); UICommand tempVar = new UICommand("OnSaveInternal", this); tempVar.setTitle("OK"); tempVar.setIsDefault(true); confirmModel.getCommands().add(tempVar); UICommand tempVar2 = new UICommand("CancelConfirmation", this); tempVar2.setTitle("Cancel"); tempVar2.setIsCancel(true); confirmModel.getCommands().add(tempVar2); } else { OnSaveInternal(); } } public void OnSaveInternal() { DataCenterModel model = (DataCenterModel)getWindow(); if (model.getProgress() != null) { return; } storage_pool dataCenter = model.getIsNew() ? new storage_pool() : (storage_pool)Cloner.clone(getSelectedItem()); //cancel confirm window if there is CancelConfirmation(); //Save changes. dataCenter.setname((String)model.getName().getEntity()); dataCenter.setdescription((String)model.getDescription().getEntity()); dataCenter.setstorage_pool_type((StorageType)model.getStorageTypeList().getSelectedItem()); dataCenter.setcompatibility_version((Version)model.getVersion().getSelectedItem()); model.StartProgress(null); Frontend.RunAction(model.getIsNew() ? VdcActionType.AddEmptyStoragePool : VdcActionType.UpdateStoragePool, new StoragePoolManagementParameter(dataCenter), new IFrontendActionAsyncCallback() { @Override public void Executed(FrontendActionAsyncResult result) { DataCenterListModel localModel = (DataCenterListModel)result.getState(); localModel.PostOnSaveInternal(result.getReturnValue()); } }, this); } public void PostOnSaveInternal(VdcReturnValueBase returnValue) { DataCenterModel model = (DataCenterModel)getWindow(); model.StopProgress(); if (returnValue != null && returnValue.getSucceeded()) { Cancel(); if (model.getIsNew()) { setGuideContext(returnValue.getActionReturnValue()); UpdateActionAvailability(); getGuideCommand().Execute(); } } } @Override protected void OnSelectedItemChanged() { super.OnSelectedItemChanged(); UpdateActionAvailability(); } @Override protected void SelectedItemsChanged() { super.SelectedItemsChanged(); UpdateActionAvailability(); } @Override protected void ItemsCollectionChanged(Object sender, NotifyCollectionChangedEventArgs e) { super.ItemsCollectionChanged(sender, e); //Try to select an item corresponding to the system tree selection. if (getSystemTreeSelectedItem() != null && getSystemTreeSelectedItem().getType() == SystemTreeItemType.DataCenter) { storage_pool dataCenter = (storage_pool)getSystemTreeSelectedItem().getEntity(); setSelectedItem(Linq.FirstOrDefault(Linq.<storage_pool>Cast(getItems()), new Linq.DataCenterPredicate(dataCenter.getId()))); } } @Override protected void SelectedItemPropertyChanged(Object sender, PropertyChangedEventArgs e) { super.SelectedItemPropertyChanged(sender, e); if (e.PropertyName.equals("status")) { UpdateActionAvailability(); } } private void UpdateActionAvailability() { java.util.ArrayList<storage_pool> items = getSelectedItems() != null ? new java.util.ArrayList<storage_pool>(Linq.<storage_pool>Cast(getSelectedItems())) : new java.util.ArrayList<storage_pool>(); boolean isAllDown = true; for (storage_pool item : items) { if (item.getstatus() == StoragePoolStatus.Up || item.getstatus() == StoragePoolStatus.Contend) { isAllDown = false; break; } } getEditCommand().setIsExecutionAllowed(getSelectedItem() != null && items.size() == 1); getRemoveCommand().setIsExecutionAllowed(items.size() > 0 && isAllDown); storage_pool storagePoolItem = (getSelectedItem() != null ? (storage_pool)getSelectedItem() : null); getForceRemoveCommand().setIsExecutionAllowed(storagePoolItem != null && items.size() == 1 && storagePoolItem.getstatus() != StoragePoolStatus.Up && storagePoolItem.getstatus() != StoragePoolStatus.Contend && storagePoolItem.getstatus() != StoragePoolStatus.Uninitialized); getGuideCommand().setIsExecutionAllowed(getGuideContext() != null || (getSelectedItem() != null && getSelectedItems() != null && getSelectedItems().size() == 1)); getActivateCommand().setIsExecutionAllowed(items.size() > 0); if (getActivateCommand().getIsExecutionAllowed()) { for (storage_pool a : items) { if (a.getstatus() == StoragePoolStatus.Up || a.getstatus() == StoragePoolStatus.Uninitialized) { getActivateCommand().setIsExecutionAllowed(false); break; } } } getRecoveryStorageCommand().setIsExecutionAllowed(items != null && items.size() == 1); //System tree dependent actions. boolean isAvailable = !(getSystemTreeSelectedItem() != null && getSystemTreeSelectedItem().getType() == SystemTreeItemType.DataCenter); getNewCommand().setIsAvailable(isAvailable); getRemoveCommand().setIsAvailable(isAvailable); } @Override public void ExecuteCommand(UICommand command) { super.ExecuteCommand(command); if (command == getNewCommand()) { New(); } else if (command == getEditCommand()) { Edit(); } else if (command == getRemoveCommand()) { remove(); } else if (command == getForceRemoveCommand()) { ForceRemove(); } else if (command == getActivateCommand()) { Activate(); } else if (command == getGuideCommand()) { Guide(); } else if (command == getRecoveryStorageCommand()) { RecoveryStorage(); } else if (StringHelper.stringsEqual(command.getName(), "OnSave")) { OnSave(); } else if (StringHelper.stringsEqual(command.getName(), "Cancel")) { Cancel(); } else if (StringHelper.stringsEqual(command.getName(), "OnRemove")) { OnRemove(); } else if (StringHelper.stringsEqual(command.getName(), "OnForceRemove")) { OnForceRemove(); } else if (StringHelper.stringsEqual(command.getName(), "OnSaveInternal")) { OnSaveInternal(); } else if (StringHelper.stringsEqual(command.getName(), "CancelConfirmation")) { CancelConfirmation(); } else if (StringHelper.stringsEqual(command.getName(), "OnRecover")) { OnRecover(); } } private SystemTreeItemModel systemTreeSelectedItem; public SystemTreeItemModel getSystemTreeSelectedItem() { return systemTreeSelectedItem; } public void setSystemTreeSelectedItem(SystemTreeItemModel value) { if (systemTreeSelectedItem != value) { systemTreeSelectedItem = value; OnSystemTreeSelectedItemChanged(); } } private void OnSystemTreeSelectedItemChanged() { UpdateActionAvailability(); } }