package org.ovirt.engine.ui.uicommon.models.storage; 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.common.*; import org.ovirt.engine.ui.uicommon.models.configure.*; import org.ovirt.engine.ui.uicompat.*; import org.ovirt.engine.core.common.*; 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.uicommon.*; import org.ovirt.engine.ui.uicommon.models.*; @SuppressWarnings("unused") public class StorageListModel extends ListWithDetailsModel implements ITaskTarget, ISupportSystemTreeContext { private UICommand privateNewDomainCommand; public UICommand getNewDomainCommand() { return privateNewDomainCommand; } private void setNewDomainCommand(UICommand value) { privateNewDomainCommand = value; } private UICommand privateImportDomainCommand; public UICommand getImportDomainCommand() { return privateImportDomainCommand; } private void setImportDomainCommand(UICommand value) { privateImportDomainCommand = 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 privateDestroyCommand; public UICommand getDestroyCommand() { return privateDestroyCommand; } private void setDestroyCommand(UICommand value) { privateDestroyCommand = value; } private Model window; public Model getWindow() { return window; } public void setWindow(Model value) { if (window != value) { window = value; OnPropertyChanged(new PropertyChangedEventArgs("Window")); } } // get { return SelectedItems == null ? new object[0] : SelectedItems.Cast<storage_domains>().Select(a => a.id).Cast<object>().ToArray(); } protected Object[] getSelectedKeys() { if (getSelectedItems() == null) { return new Object[0]; } else { java.util.ArrayList<Object> items = new java.util.ArrayList<Object>(); for (Object item : getSelectedItems()) { storage_domains i = (storage_domains)item; items.add(i.getid()); } return items.toArray(new Object[]{}); } } public StorageListModel() { setTitle("Storage"); setDefaultSearchString("Storage:"); setSearchString(getDefaultSearchString()); setNewDomainCommand(new UICommand("NewDomain", this)); setImportDomainCommand(new UICommand("ImportDomain", this)); setEditCommand(new UICommand("Edit", this)); setRemoveCommand(new UICommand("Remove", this)); setDestroyCommand(new UICommand("Destroy", this)); UpdateActionAvailability(); getSearchNextPageCommand().setIsAvailable(true); getSearchPreviousPageCommand().setIsAvailable(true); } private EntityModel vmBackupModel; private EntityModel templateBackupModel; private ListModel vmListModel; private ListModel templateListModel; private ListModel isoListModel; @Override protected void InitDetailModels() { super.InitDetailModels(); vmBackupModel = new VmBackupModel(); vmBackupModel.setIsAvailable(false); templateBackupModel = new TemplateBackupModel(); templateBackupModel.setIsAvailable(false); vmListModel = new StorageVmListModel(); vmListModel.setIsAvailable(false); templateListModel = new StorageTemplateListModel(); templateListModel.setIsAvailable(false); isoListModel = new StorageIsoListModel(); isoListModel.setIsAvailable(false); ObservableCollection<EntityModel> list = new ObservableCollection<EntityModel>(); list.add(new StorageGeneralModel()); list.add(new StorageDataCenterListModel()); list.add(vmBackupModel); list.add(templateBackupModel); list.add(vmListModel); list.add(templateListModel); list.add(isoListModel); list.add(new StorageEventListModel()); list.add(new PermissionListModel()); setDetailModels(list); } @Override public boolean IsSearchStringMatch(String searchString) { return searchString.trim().toLowerCase().startsWith("storage"); } @Override protected void SyncSearch() { SearchParameters tempVar = new SearchParameters(getSearchString(), SearchType.StorageDomain); tempVar.setMaxCount(getSearchPageSize()); super.SyncSearch(VdcQueryType.Search, tempVar); } @Override protected void AsyncSearch() { super.AsyncSearch(); setAsyncResult(Frontend.RegisterSearch(getSearchString(), SearchType.StorageDomain, getSearchPageSize())); setItems(getAsyncResult().getData()); } private void NewDomain() { if (getWindow() != null) { return; } StorageModel model = new StorageModel(new NewEditStorageModelBehavior()); setWindow(model); model.setTitle("New Domain"); model.setHashName("new_domain"); model.setSystemTreeSelectedItem(getSystemTreeSelectedItem()); java.util.ArrayList<IStorageModel> items = new java.util.ArrayList<IStorageModel>(); // putting all Data domains at the beginning on purpose (so when choosing the // first selectable storage type/function, it will be a Data one, if relevant). NfsStorageModel tempVar = new NfsStorageModel(); tempVar.setRole(StorageDomainType.Data); items.add(tempVar); IscsiStorageModel tempVar2 = new IscsiStorageModel(); tempVar2.setRole(StorageDomainType.Data); tempVar2.setIsGrouppedByTarget(true); items.add(tempVar2); FcpStorageModel tempVar3 = new FcpStorageModel(); tempVar3.setRole(StorageDomainType.Data); items.add(tempVar3); LocalStorageModel tempVar4 = new LocalStorageModel(); tempVar4.setRole(StorageDomainType.Data); items.add(tempVar4); NfsStorageModel tempVar5 = new NfsStorageModel(); tempVar5.setRole(StorageDomainType.ISO); items.add(tempVar5); NfsStorageModel tempVar6 = new NfsStorageModel(); tempVar6.setRole(StorageDomainType.ImportExport); items.add(tempVar6); IscsiStorageModel tempVar7 = new IscsiStorageModel(); tempVar7.setRole(StorageDomainType.ImportExport); tempVar7.setIsGrouppedByTarget(true); items.add(tempVar7); FcpStorageModel tempVar8 = new FcpStorageModel(); tempVar8.setRole(StorageDomainType.ImportExport); items.add(tempVar8); model.setItems(items); model.Initialize(); UICommand tempVar9 = new UICommand("OnSave", this); tempVar9.setTitle("OK"); tempVar9.setIsDefault(true); model.getCommands().add(tempVar9); UICommand tempVar10 = new UICommand("Cancel", this); tempVar10.setTitle("Cancel"); tempVar10.setIsCancel(true); model.getCommands().add(tempVar10); } private void Edit() { storage_domains storage = (storage_domains)getSelectedItem(); if (getWindow() != null) { return; } StorageModel model = new StorageModel(new NewEditStorageModelBehavior()); setWindow(model); model.setTitle("Edit Domain"); model.setHashName("edit_domain"); model.setSystemTreeSelectedItem(getSystemTreeSelectedItem()); model.setStorage(storage); model.getName().setEntity(storage.getstorage_name()); model.setOriginalName(storage.getstorage_name()); model.getDataCenter().setIsAvailable(false); model.getFormat().setIsAvailable(false); IStorageModel item = null; switch (storage.getstorage_type()) { case NFS: item = PrepareNfsStorageForEdit(storage); break; case FCP: item = PrepareFcpStorageForEdit(storage); break; case ISCSI: item = PrepareIscsiStorageForEdit(storage); break; case LOCALFS: item = PrepareLocalStorageForEdit(storage); break; } model.setItems(new java.util.ArrayList<IStorageModel>(java.util.Arrays.asList(new IStorageModel[] { item }))); model.setSelectedItem(item); model.Initialize(); if (getSystemTreeSelectedItem() != null && getSystemTreeSelectedItem().getType() != SystemTreeItemType.System) { switch (getSystemTreeSelectedItem().getType()) { case Storage: { model.getName().setIsChangable(false); model.getName().setInfo("Cannot edit Storage Domains's Name in this tree context"); } 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); } private IStorageModel PrepareNfsStorageForEdit(storage_domains storage) { NfsStorageModel model = new NfsStorageModel(); model.setRole(storage.getstorage_domain_type()); storage_server_connections connection = DataProvider.GetStorageConnectionById(storage.getstorage()); model.getPath().setEntity(connection.getconnection()); model.getPath().setIsAvailable(false); return model; } private IStorageModel PrepareLocalStorageForEdit(storage_domains storage) { LocalStorageModel model = new LocalStorageModel(); model.setRole(storage.getstorage_domain_type()); storage_server_connections connection = DataProvider.GetStorageConnectionById(storage.getstorage()); model.getPath().setEntity(connection.getconnection()); model.getPath().setIsAvailable(false); return model; } private IStorageModel PrepareIscsiStorageForEdit(storage_domains storage) { IscsiStorageModel model = new IscsiStorageModel(); model.setRole(storage.getstorage_domain_type()); PrepareSanStorageForEdit(model); return model; } private IStorageModel PrepareFcpStorageForEdit(storage_domains storage) { FcpStorageModel model = new FcpStorageModel(); model.setRole(storage.getstorage_domain_type()); PrepareSanStorageForEdit(model); return model; } private void PrepareSanStorageForEdit(SanStorageModel model) { storage_domains storage = (storage_domains)getSelectedItem(); GetLunsByVgIdParameters tempVar = new GetLunsByVgIdParameters(); tempVar.setVgId(storage.getstorage()); VdcQueryReturnValue returnValue = Frontend.RunQuery(VdcQueryType.GetLunsByVgId, tempVar); if (returnValue != null && returnValue.getSucceeded()) { model.ApplyData((java.util.ArrayList<LUNs>)returnValue.getReturnValue(), true); } } private void ImportDomain() { if (getWindow() != null) { return; } StorageModel model = new StorageModel(new ImportStorageModelBehavior()); setWindow(model); model.setTitle("Import Pre-Configured Domain"); model.setHashName("import_pre-configured_domain"); model.setSystemTreeSelectedItem(getSystemTreeSelectedItem()); model.getName().setIsAvailable(false); model.getFormat().setIsAvailable(false); java.util.ArrayList<IStorageModel> items = new java.util.ArrayList<IStorageModel>(); NfsStorageModel tempVar = new NfsStorageModel(); tempVar.setRole(StorageDomainType.ISO); items.add(tempVar); NfsStorageModel tempVar2 = new NfsStorageModel(); tempVar2.setRole(StorageDomainType.ImportExport); items.add(tempVar2); IscsiImportStorageModel tempVar3 = new IscsiImportStorageModel(); tempVar3.setRole(StorageDomainType.ImportExport); items.add(tempVar3); FcpImportStorageModel tempVar4 = new FcpImportStorageModel(); tempVar4.setRole(StorageDomainType.ImportExport); items.add(tempVar4); model.setItems(items); model.Initialize(); UICommand tempVar5 = new UICommand("OnImport", this); tempVar5.setTitle("OK"); tempVar5.setIsDefault(true); model.getCommands().add(tempVar5); UICommand tempVar6 = new UICommand("Cancel", this); tempVar6.setTitle("Cancel"); tempVar6.setIsCancel(true); model.getCommands().add(tempVar6); } private void OnImport() { StorageModel model = (StorageModel)getWindow(); if (model.getProgress() != null) { return; } if (!model.Validate()) { return; } model.StartProgress("Importing Storage Domain..."); VDS host = (VDS)model.getHost().getSelectedItem(); //Save changes. if (model.getSelectedItem() instanceof NfsStorageModel) { NfsStorageModel nfsModel = (NfsStorageModel)model.getSelectedItem(); nfsModel.setMessage(null); Task.Create(this, new java.util.ArrayList<Object>(java.util.Arrays.asList(new Object[] { "ImportNfs", host.getvds_id(), nfsModel.getPath().getEntity(), nfsModel.getRole() }))).Run(); } else { Task.Create(this, new java.util.ArrayList<Object>(java.util.Arrays.asList(new Object[] { "ImportSan", host.getvds_id() }))).Run(); } } private storage_server_connections nfsConnection; private void CleanNfsConnection(Guid hostId) { if (nfsConnection != null) { VdcReturnValueBase ret1 = Frontend.RunAction(VdcActionType.RemoveStorageServerConnection, new StorageServerConnectionParametersBase(nfsConnection, hostId)); if (ret1 != null && ret1.getSucceeded()) { nfsConnection = null; } } } private void remove() { storage_domains storage = (storage_domains)getSelectedItem(); if (getWindow() != null) { return; } RemoveStorageModel model = new RemoveStorageModel(); setWindow(model); model.setTitle("Remove Storage(s)"); model.setHashName("remove_storage"); java.util.ArrayList<VDS> hosts = DataProvider.GetUpHostList(); model.getHostList().setItems(hosts); model.getHostList().setSelectedItem(Linq.FirstOrDefault(hosts)); model.getFormat().setIsAvailable(storage.getstorage_domain_type() == StorageDomainType.ISO || storage.getstorage_domain_type() == StorageDomainType.ImportExport); if (hosts.isEmpty()) { UICommand tempVar = new UICommand("Cancel", this); tempVar.setTitle("Close"); tempVar.setIsDefault(true); tempVar.setIsCancel(true); model.getCommands().add(tempVar); } else { UICommand tempVar2 = new UICommand("OnRemove", this); tempVar2.setTitle("OK"); tempVar2.setIsDefault(true); model.getCommands().add(tempVar2); UICommand tempVar3 = new UICommand("Cancel", this); tempVar3.setTitle("Cancel"); tempVar3.setIsCancel(true); model.getCommands().add(tempVar3); } } private void OnRemove() { if (getSelectedItem() != null) { storage_domains storage = (storage_domains)getSelectedItem(); RemoveStorageModel model = (RemoveStorageModel)getWindow(); if (!model.Validate()) { return; } VDS host = (VDS)model.getHostList().getSelectedItem(); RemoveStorageDomainParameters tempVar = new RemoveStorageDomainParameters(storage.getid()); tempVar.setVdsId(host.getvds_id()); tempVar.setDoFormat((storage.getstorage_domain_type() == StorageDomainType.Data || storage.getstorage_domain_type() == StorageDomainType.Master) ? true : (Boolean)model.getFormat().getEntity()); Frontend.RunActionAsyncroniousely(VdcActionType.RemoveStorageDomain, tempVar); } Cancel(); } private void Destroy() { ConfirmationModel model = new ConfirmationModel(); setWindow(model); model.setTitle("Destroy Storage Domain"); model.setHashName("destroy_storage_domain"); java.util.ArrayList<String> items = new java.util.ArrayList<String>(); items.add(((storage_domains)getSelectedItem()).getstorage_name()); model.setItems(items); model.getLatch().setIsAvailable(true); model.getLatch().setIsChangable(true); UICommand tempVar = new UICommand("OnDestroy", 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); } private void OnDestroy() { ConfirmationModel model = (ConfirmationModel)getWindow(); if (model.getProgress() != null) { return; } if (!model.Validate()) { return; } storage_domains storageDomain = (storage_domains)getSelectedItem(); model.StartProgress(null); Frontend.RunMultipleAction(VdcActionType.ForceRemoveStorageDomain, new java.util.ArrayList<VdcActionParametersBase>(java.util.Arrays.asList(new VdcActionParametersBase[] { new StorageDomainParametersBase(storageDomain.getid()) })), new IFrontendMultipleActionAsyncCallback() { @Override public void Executed(FrontendMultipleActionAsyncResult result) { ConfirmationModel localModel = (ConfirmationModel)result.getState(); localModel.StopProgress(); Cancel(); } }, model); } private void OnSave() { StorageModel model = (StorageModel)getWindow(); if (!model.Validate()) { return; } if (model.getSelectedItem() instanceof NfsStorageModel) { SaveNfsStorage(); } else if (model.getSelectedItem() instanceof LocalStorageModel) { SaveLocalStorage(); } else { SaveSanStorage(); } } private void SaveLocalStorage() { if (getWindow().getProgress() != null) { return; } getWindow().StartProgress(null); Task.Create(this, new java.util.ArrayList<Object>(java.util.Arrays.asList(new Object[] { "SaveLocal" }))).Run(); } private void SaveNfsStorage() { if (getWindow().getProgress() != null) { return; } getWindow().StartProgress(null); Task.Create(this, new java.util.ArrayList<Object>(java.util.Arrays.asList(new Object[] { "SaveNfs" }))).Run(); } private void SaveSanStorage() { if (getWindow().getProgress() != null) { return; } getWindow().StartProgress(null); Task.Create(this, new java.util.ArrayList<Object>(java.util.Arrays.asList(new Object[] { "SaveSan" }))).Run(); } private void Cancel() { setWindow(null); } @Override protected void OnSelectedItemChanged() { super.OnSelectedItemChanged(); 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.Storage) { storage_domains storage = (storage_domains)getSystemTreeSelectedItem().getEntity(); setSelectedItem(Linq.FirstOrDefault(Linq.<storage_domains>Cast(getItems()), new Linq.StoragePredicate(storage.getid()))); } } @Override protected void UpdateDetailsAvailability() { if (getSelectedItem() != null) { storage_domains storage = (storage_domains)getSelectedItem(); boolean isBackupStorage = storage.getstorage_domain_type() == StorageDomainType.ImportExport; boolean isDataStorage = storage.getstorage_domain_type() == StorageDomainType.Data || storage.getstorage_domain_type() == StorageDomainType.Master; boolean isIsoStorage = storage.getstorage_domain_type() == StorageDomainType.ISO; vmBackupModel.setIsAvailable(isBackupStorage); templateBackupModel.setIsAvailable(isBackupStorage); vmListModel.setIsAvailable(isDataStorage); templateListModel.setIsAvailable(isDataStorage); isoListModel.setIsAvailable(isIsoStorage); } } @Override protected void SelectedItemsChanged() { super.SelectedItemsChanged(); UpdateActionAvailability(); } @Override protected void SelectedItemPropertyChanged(Object sender, PropertyChangedEventArgs e) { super.SelectedItemPropertyChanged(sender, e); if (e.PropertyName.equals("storage_domain_shared_status")) { UpdateActionAvailability(); } } private void UpdateActionAvailability() { java.util.ArrayList<storage_domains> items = getSelectedItems() != null ? Linq.<storage_domains>Cast(getSelectedItems()) : new java.util.ArrayList<storage_domains>(); storage_domains item = (storage_domains)getSelectedItem(); getNewDomainCommand().setIsAvailable(true); getEditCommand().setIsExecutionAllowed(item != null && items.size() == 1 && (item.getstorage_domain_shared_status() == StorageDomainSharedStatus.Active || item.getstorage_domain_shared_status() == StorageDomainSharedStatus.Mixed)); getRemoveCommand().setIsExecutionAllowed(items.size() == 1 && Linq.FindAllStorageDomainsBySharedStatus(items, StorageDomainSharedStatus.Unattached).size() == items.size()); getDestroyCommand().setIsExecutionAllowed(item != null && items.size() == 1); //System tree dependent actions. boolean isAvailable = !(getSystemTreeSelectedItem() != null && getSystemTreeSelectedItem().getType() == SystemTreeItemType.Storage); getNewDomainCommand().setIsAvailable(isAvailable); getRemoveCommand().setIsAvailable(isAvailable); } @Override public void ExecuteCommand(UICommand command) { super.ExecuteCommand(command); if (command == getNewDomainCommand()) { NewDomain(); } else if (command == getImportDomainCommand()) { ImportDomain(); } else if (command == getEditCommand()) { Edit(); } else if (command == getRemoveCommand()) { remove(); } else if (command == getDestroyCommand()) { Destroy(); } else if (StringHelper.stringsEqual(command.getName(), "OnSave")) { OnSave(); } else if (StringHelper.stringsEqual(command.getName(), "Cancel")) { Cancel(); } else if (StringHelper.stringsEqual(command.getName(), "OnImport")) { OnImport(); } else if (StringHelper.stringsEqual(command.getName(), "OnRemove")) { OnRemove(); } else if (StringHelper.stringsEqual(command.getName(), "OnDestroy")) { OnDestroy(); } } private void SaveNfsStorage(TaskContext context) { storage_domains selectedItem = (storage_domains)getSelectedItem(); StorageModel model = (StorageModel)getWindow(); NfsStorageModel nfsModel = (NfsStorageModel)model.getSelectedItem(); VDS host = (VDS)model.getHost().getSelectedItem(); boolean isNew = model.getStorage() == null; String path = (String)nfsModel.getPath().getEntity(); String storageName = null; RefObject<String> tempRef_storageName = new RefObject<String>(storageName); boolean tempVar = isNew && DataProvider.IsDomainAlreadyExist(path, tempRef_storageName); storageName = tempRef_storageName.argvalue; if (tempVar) { context.InvokeUIThread(this, new java.util.ArrayList<Object>(java.util.Arrays.asList(new Object[] { "Finish", false, nfsModel, "Create Operation failed. Domain " + storageName + " already exists in the system." }))); return; } //Create storage connection. storage_server_connections tempVar2 = new storage_server_connections(); tempVar2.setconnection(path); tempVar2.setstorage_type(nfsModel.getType()); storage_server_connections connection = tempVar2; storage_domain_static storageDomain = isNew ? new storage_domain_static() : (storage_domain_static)Cloner.clone(selectedItem.getStorageStaticData()); storageDomain.setstorage_type(isNew ? nfsModel.getType() : storageDomain.getstorage_type()); storageDomain.setstorage_domain_type(isNew ? nfsModel.getRole() : storageDomain.getstorage_domain_type()); storageDomain.setstorage_name((String)model.getName().getEntity()); storageDomain.setStorageFormat((StorageFormatType)model.getFormat().getSelectedItem()); VdcReturnValueBase returnValue; if (isNew) { boolean attach = false; returnValue = Frontend.RunAction(VdcActionType.AddStorageServerConnection, new StorageServerConnectionParametersBase(connection, host.getvds_id())); if (returnValue != null && returnValue.getSucceeded()) { storageDomain.setstorage((String)returnValue.getActionReturnValue()); //Add storage domain. StorageDomainManagementParameter tempVar3 = new StorageDomainManagementParameter(storageDomain); tempVar3.setVdsId(host.getvds_id()); returnValue = Frontend.RunAction(VdcActionType.AddNFSStorageDomain, tempVar3); attach = returnValue != null && returnValue.getSucceeded(); } //Clean up connection. Frontend.RunAction(VdcActionType.RemoveStorageServerConnection, new StorageServerConnectionParametersBase(connection, host.getvds_id())); if (attach) { //Attach storage to data center as neccessary. storage_pool dataCenter = (storage_pool)model.getDataCenter().getSelectedItem(); if (!dataCenter.getId().equals(StorageModel.UnassignedDataCenterId)) { NGuid storageId = (NGuid)returnValue.getActionReturnValue(); AttachStorageToDataCenter((Guid)storageId, dataCenter.getId()); } } } else { returnValue = Frontend.RunAction(VdcActionType.UpdateStorageDomain, new StorageDomainManagementParameter(storageDomain)); } context.InvokeUIThread(this, new java.util.ArrayList<Object>(java.util.Arrays.asList(new Object[] { "Finish", returnValue != null && returnValue.getSucceeded(), nfsModel, null }))); } private void SaveLocalStorage(TaskContext context) { storage_domains selectedItem = (storage_domains)getSelectedItem(); StorageModel model = (StorageModel)getWindow(); LocalStorageModel localModel = (LocalStorageModel)model.getSelectedItem(); VDS host = (VDS)model.getHost().getSelectedItem(); boolean isNew = model.getStorage() == null; String path = (String)localModel.getPath().getEntity(); String storageName = null; RefObject<String> tempRef_storageName = new RefObject<String>(storageName); boolean tempVar = isNew && DataProvider.IsDomainAlreadyExist(host.getstorage_pool_id(), path, tempRef_storageName); storageName = tempRef_storageName.argvalue; if (tempVar) { context.InvokeUIThread(this, new java.util.ArrayList<Object>(java.util.Arrays.asList(new Object[] { "Finish", false, localModel, "Create Operation failed. Domain " + storageName + " already exists in the system." }))); return; } //Create storage connection. storage_server_connections tempVar2 = new storage_server_connections(); tempVar2.setconnection(path); tempVar2.setstorage_type(localModel.getType()); storage_server_connections connection = tempVar2; storage_domain_static storageDomain = isNew ? new storage_domain_static() : (storage_domain_static)Cloner.clone(selectedItem.getStorageStaticData()); storageDomain.setstorage_type(isNew ? localModel.getType() : storageDomain.getstorage_type()); storageDomain.setstorage_domain_type(isNew ? localModel.getRole() : storageDomain.getstorage_domain_type()); storageDomain.setstorage_name((String)model.getName().getEntity()); VdcReturnValueBase returnValue; boolean removeConnection = false; if (isNew) { returnValue = Frontend.RunAction(VdcActionType.AddStorageServerConnection, new StorageServerConnectionParametersBase(connection, host.getvds_id())); if (returnValue != null && returnValue.getSucceeded()) { storageDomain.setstorage((String)returnValue.getActionReturnValue()); //Add storage domain. StorageDomainManagementParameter tempVar3 = new StorageDomainManagementParameter(storageDomain); tempVar3.setVdsId(host.getvds_id()); returnValue = Frontend.RunAction(VdcActionType.AddLocalStorageDomain, tempVar3); if (returnValue == null || !returnValue.getSucceeded()) { removeConnection = true; } } //Clean up connection in case of storage creation failure. if (removeConnection) { Frontend.RunAction(VdcActionType.RemoveStorageServerConnection, new StorageServerConnectionParametersBase(connection, host.getvds_id())); } } else { returnValue = Frontend.RunAction(VdcActionType.UpdateStorageDomain, new StorageDomainManagementParameter(storageDomain)); } context.InvokeUIThread(this, new java.util.ArrayList<Object>(java.util.Arrays.asList(new Object[] { "Finish", returnValue != null && returnValue.getSucceeded(), localModel, null }))); } private void SaveSanStorage(TaskContext context) { StorageModel model = (StorageModel)getWindow(); SanStorageModel sanModel = (SanStorageModel)model.getSelectedItem(); storage_domains storage = (storage_domains)getSelectedItem(); boolean isNew = model.getStorage() == null; VDS host = (VDS)model.getHost().getSelectedItem(); java.util.ArrayList<String> lunIds = new java.util.ArrayList<String>(); for (LunModel lun : sanModel.getAddedLuns()) { lunIds.add(lun.getLunId()); } storage_domain_static storageDomain = isNew ? new storage_domain_static() : (storage_domain_static)Cloner.clone(storage.getStorageStaticData()); storageDomain.setstorage_type(isNew ? sanModel.getType() : storageDomain.getstorage_type()); storageDomain.setstorage_domain_type(isNew ? sanModel.getRole() : storageDomain.getstorage_domain_type()); storageDomain.setStorageFormat(isNew ? (StorageFormatType)sanModel.getContainer().getFormat().getSelectedItem() : storageDomain.getStorageFormat()); storageDomain.setstorage_name((String)model.getName().getEntity()); VdcReturnValueBase returnValue; if (isNew) { AddSANStorageDomainParameters tempVar = new AddSANStorageDomainParameters(storageDomain); tempVar.setVdsId(host.getvds_id()); tempVar.setLunIds(lunIds); returnValue = Frontend.RunAction(VdcActionType.AddSANStorageDomain, tempVar); if (returnValue != null && returnValue.getSucceeded()) { //Attach storage to data center as neccessary. storage_pool dataCenter = (storage_pool)model.getDataCenter().getSelectedItem(); if (!dataCenter.getId().equals(StorageModel.UnassignedDataCenterId)) { NGuid storageId = (NGuid)returnValue.getActionReturnValue(); AttachStorageToDataCenter((Guid)storageId, dataCenter.getId()); } } } else { returnValue = Frontend.RunAction(VdcActionType.UpdateStorageDomain, new StorageDomainManagementParameter(storageDomain)); //Extend storage as neccessary. if (returnValue != null && returnValue.getSucceeded() && lunIds.size() > 0) { returnValue = Frontend.RunAction(VdcActionType.ExtendSANStorageDomain, new ExtendSANStorageDomainParameters(storage.getid(), lunIds)); } } context.InvokeUIThread(this, new java.util.ArrayList<Object>(java.util.Arrays.asList(new Object[] { "Finish", returnValue != null && returnValue.getSucceeded(), sanModel, null }))); } private void AttachStorageToDataCenter(Guid storageId, Guid dataCenterId) { Frontend.RunActionAsyncroniousely(VdcActionType.AttachStorageDomainToPool, new StorageDomainPoolParametersBase(storageId, dataCenterId)); } private void ImportNfsStorage(TaskContext context) { java.util.ArrayList<Object> data = (java.util.ArrayList<Object>)context.getState(); StorageModel model = (StorageModel)getWindow(); NfsStorageModel storageModel = (NfsStorageModel)model.getSelectedItem(); Guid hostId = (Guid)data.get(1); String path = (String)data.get(2); StorageDomainType domainType = (StorageDomainType)data.get(3); boolean success = true; String message = null; CleanNfsConnection(hostId); try { String storageName = null; RefObject<String> tempRef_storageName = new RefObject<String>(storageName); boolean tempVar = DataProvider.IsDomainAlreadyExist(path, tempRef_storageName); storageName = tempRef_storageName.argvalue; if (tempVar) { throw new RuntimeException("Import Operation failed. Domain " + storageName + " already exists in the system."); } storage_server_connections tempVar2 = new storage_server_connections(); tempVar2.setconnection(path); tempVar2.setstorage_type(StorageType.NFS); nfsConnection = tempVar2; VdcReturnValueBase ret2 = Frontend.RunAction(VdcActionType.ConnectStorageToVds, new StorageServerConnectionParametersBase(nfsConnection, hostId)); if (ret2 == null || !ret2.getSucceeded()) { throw new RuntimeException("Failed to retrieve existing storage domain information."); } VdcQueryReturnValue ret3 = Frontend.RunQuery(VdcQueryType.GetExistingStorageDomainList, new GetExistingStorageDomainListParameters(hostId, StorageType.NFS, domainType, path)); if (ret3 == null || !ret3.getSucceeded()) { throw new RuntimeException("Failed to retrieve existing storage domain information."); } java.util.ArrayList<storage_domains> domains = ((java.util.ArrayList<storage_domains>)ret3.getReturnValue()); if (domains.isEmpty()) { throw new RuntimeException("There is no storage domain under the specified path. Please check path."); } storage_domains sdToAdd = Linq.FirstOrDefault(domains); storage_domain_static sdsToAdd = sdToAdd == null ? null : sdToAdd.getStorageStaticData(); StorageDomainManagementParameter tempVar3 = new StorageDomainManagementParameter(sdsToAdd); tempVar3.setVdsId(hostId); VdcReturnValueBase ret4 = Frontend.RunAction(VdcActionType.AddExistingNFSStorageDomain, tempVar3); if (ret4 == null || !ret4.getSucceeded()) { throw new RuntimeException(); } //Attach storage to data center as neccessary. storage_pool dataCenter = (storage_pool)model.getDataCenter().getSelectedItem(); if (!dataCenter.getId().equals(StorageModel.UnassignedDataCenterId)) { AttachStorageToDataCenter(sdToAdd.getid(), dataCenter.getId()); } } catch (RuntimeException ex) { success = false; message = ex.getMessage(); } finally { CleanNfsConnection(hostId); } context.InvokeUIThread(this, new java.util.ArrayList<Object>(java.util.Arrays.asList(new Object[] { "Finish", success, storageModel, message }))); } private void ImportSanStorage(TaskContext context) { java.util.ArrayList<Object> data = (java.util.ArrayList<Object>)context.getState(); StorageModel model = (StorageModel)getWindow(); ImportSanStorageModel storageModel = (ImportSanStorageModel)model.getSelectedItem(); storage_domains storage = (storage_domains)storageModel.getSelectedItem(); Guid hostId = (Guid)data.get(1); AddSANStorageDomainParameters tempVar = new AddSANStorageDomainParameters(storage == null ? null : storage.getStorageStaticData()); tempVar.setVdsId(hostId); VdcReturnValueBase returnValue = Frontend.RunAction(VdcActionType.AddExistingSANStorageDomain, tempVar); if (returnValue != null && returnValue.getSucceeded()) { //Attach storage to data center as neccessary. storage_pool dataCenter = (storage_pool)model.getDataCenter().getSelectedItem(); if (!dataCenter.getId().equals(StorageModel.UnassignedDataCenterId)) { AttachStorageToDataCenter(storage.getid(), dataCenter.getId()); } } context.InvokeUIThread(this, new java.util.ArrayList<Object>(java.util.Arrays.asList(new Object[] { "Finish", returnValue != null && returnValue.getSucceeded(), storageModel, null }))); } public void run(TaskContext context) { java.util.ArrayList<Object> data = (java.util.ArrayList<Object>)context.getState(); String key = (String)data.get(0); //C# TO JAVA CONVERTER NOTE: The following 'switch' operated on a string member and was converted to Java 'if-else' logic: // switch (key) //ORIGINAL LINE: case "SaveNfs": if (StringHelper.stringsEqual(key, "SaveNfs")) { SaveNfsStorage(context); } //ORIGINAL LINE: case "SaveLocal": else if (StringHelper.stringsEqual(key, "SaveLocal")) { SaveLocalStorage(context); } //ORIGINAL LINE: case "SaveSan": else if (StringHelper.stringsEqual(key, "SaveSan")) { SaveSanStorage(context); } //ORIGINAL LINE: case "ImportNfs": else if (StringHelper.stringsEqual(key, "ImportNfs")) { ImportNfsStorage(context); } //ORIGINAL LINE: case "ImportSan": else if (StringHelper.stringsEqual(key, "ImportSan")) { ImportSanStorage(context); } //ORIGINAL LINE: case "Finish": else if (StringHelper.stringsEqual(key, "Finish")) { getWindow().StopProgress(); if ((Boolean)data.get(1)) { Cancel(); } else { ((Model)data.get(2)).setMessage((String)data.get(3)); } } } private SystemTreeItemModel systemTreeSelectedItem; public SystemTreeItemModel getSystemTreeSelectedItem() { return systemTreeSelectedItem; } public void setSystemTreeSelectedItem(SystemTreeItemModel value) { if (systemTreeSelectedItem != value) { systemTreeSelectedItem = value; OnSystemTreeSelectedItemChanged(); } } private void OnSystemTreeSelectedItemChanged() { UpdateActionAvailability(); } }