package org.ovirt.engine.ui.uicommonweb.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.uicommonweb.*; import org.ovirt.engine.ui.uicommonweb.models.*; import org.ovirt.engine.core.common.*; import org.ovirt.engine.ui.uicommonweb.dataprovider.*; import org.ovirt.engine.ui.uicommonweb.models.common.*; import org.ovirt.engine.ui.uicommonweb.models.configure.*; import org.ovirt.engine.ui.uicommonweb.validation.*; 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.uicommonweb.*; import org.ovirt.engine.ui.uicommonweb.models.*; @SuppressWarnings("unused") public class StorageListModel extends ListWithDetailsModel implements ITaskTarget, ISupportSystemTreeContext { @Override public boolean getIsAvailable() { // TODO Auto-generated method stub return false; } 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; } // 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; public storage_domain_static storageDomain; public TaskContext context; public IStorageModel storageModel; public NGuid storageId; public storage_server_connections nfsConnection; public storage_server_connections connection; public Guid hostId = new Guid(); public String path; public StorageDomainType domainType = StorageDomainType.values()[0]; public boolean removeConnection; @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()); model.getPath().setIsAvailable(false); AsyncDataProvider.GetStorageConnectionById(new AsyncQuery(model, new INewAsyncCallback() { @Override public void OnSuccess(Object target, Object returnValue) { NfsStorageModel nfsStorageModel = (NfsStorageModel)target; storage_server_connections connection = (storage_server_connections)returnValue; nfsStorageModel.getPath().setEntity(connection.getconnection()); } }), storage.getstorage(), true); return model; } private IStorageModel PrepareLocalStorageForEdit(storage_domains storage) { LocalStorageModel model = new LocalStorageModel(); model.setRole(storage.getstorage_domain_type()); model.getPath().setIsAvailable(false); AsyncDataProvider.GetStorageConnectionById(new AsyncQuery(model, new INewAsyncCallback() { @Override public void OnSuccess(Object target, Object returnValue) { LocalStorageModel localStorageModel = (LocalStorageModel)target; storage_server_connections connection = (storage_server_connections)returnValue; localStorageModel.getPath().setEntity(connection.getconnection()); } }), storage.getstorage(), true); 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(); AsyncDataProvider.GetLunsByVgId(new AsyncQuery(model, new INewAsyncCallback() { @Override public void OnSuccess(Object target, Object returnValue) { SanStorageModel sanStorageModel = (SanStorageModel)target; java.util.ArrayList<LUNs> lunList = (java.util.ArrayList<LUNs>)returnValue; sanStorageModel.ApplyData(lunList, true); } }), storage.getstorage()); } 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(); } } public void StorageNameValidation() { StorageModel model = (StorageModel)getWindow(); String name = (String)model.getName().getEntity(); AsyncDataProvider.IsStorageDomainNameUnique(new AsyncQuery(this, new INewAsyncCallback() { @Override public void OnSuccess(Object target, Object returnValue) { StorageListModel storageListModel = (StorageListModel)target; StorageModel storageModel = (StorageModel)storageListModel.getWindow(); String name1 = (String)storageModel.getName().getEntity(); String tempVar = storageModel.getOriginalName(); String originalName = (tempVar != null) ? tempVar : ""; boolean isNameUnique = (Boolean)returnValue; if (!isNameUnique && name1.compareToIgnoreCase(originalName) != 0) { storageModel.getName().getInvalidityReasons().add("Name must be unique."); storageModel.getName().setIsValid(false); storageListModel.PostStorageNameValidation(); } else { AsyncDataProvider.GetStorageDomainMaxNameLength(new AsyncQuery(storageListModel, new INewAsyncCallback() { @Override public void OnSuccess(Object target1, Object returnValue1) { StorageListModel storageListModel1 = (StorageListModel)target1; StorageModel storageModel1 = (StorageModel)storageListModel1.getWindow(); int nameMaxLength = (Integer)returnValue1; RegexValidation tempVar2 = new RegexValidation(); tempVar2.setExpression("^[A-Za-z0-9_-]{1," + nameMaxLength + "}$"); tempVar2.setMessage("Name can contain only 'A-Z', 'a-z', '0-9', '_' or '-' characters, max length: " + nameMaxLength); storageModel1.getName().ValidateEntity(new IValidation[] { new NotEmptyValidation(), tempVar2 }); storageListModel1.PostStorageNameValidation(); } })); } } }), name); } public void PostStorageNameValidation() { if (getLastExecutedCommand().getName().equals("OnSave")) { OnSavePostNameValidation(); } } private void CleanConnection(storage_server_connections connection, Guid hostId) { Frontend.RunAction(VdcActionType.RemoveStorageServerConnection, new StorageServerConnectionParametersBase(connection, hostId), new IFrontendActionAsyncCallback() { @Override public void Executed(FrontendActionAsyncResult result) { } }, this); } private void remove() { if (getWindow() != null) { return; } RemoveStorageModel model = new RemoveStorageModel(); setWindow(model); model.setTitle("Remove Storage(s)"); model.setHashName("remove_storage"); model.setMessage("Are you sure you want to Remove the Storage Domain?"); model.getFormat().setIsAvailable(false); AsyncDataProvider.GetHostList(new AsyncQuery(new Object[] { this, model }, new INewAsyncCallback() { @Override public void OnSuccess(Object target, Object returnValue) { Object[] array = (Object[])target; StorageListModel storageListModel = (StorageListModel)array[0]; RemoveStorageModel removeStorageModel = (RemoveStorageModel)array[1]; storage_domains storage = (storage_domains)storageListModel.getSelectedItem(); java.util.ArrayList<VDS> hosts = (java.util.ArrayList<VDS>)returnValue; removeStorageModel.getHostList().setItems(hosts); removeStorageModel.getHostList().setSelectedItem(Linq.FirstOrDefault(hosts)); removeStorageModel.getFormat().setIsAvailable(storage.getstorage_domain_type() == StorageDomainType.ISO || storage.getstorage_domain_type() == StorageDomainType.ImportExport); if (hosts.isEmpty()) { UICommand tempVar = new UICommand("Cancel", storageListModel); tempVar.setTitle("Close"); tempVar.setIsDefault(true); tempVar.setIsCancel(true); removeStorageModel.getCommands().add(tempVar); } else { UICommand tempVar2 = new UICommand("OnRemove", storageListModel); tempVar2.setTitle("OK"); tempVar2.setIsDefault(true); removeStorageModel.getCommands().add(tempVar2); UICommand tempVar3 = new UICommand("Cancel", storageListModel); tempVar3.setTitle("Cancel"); tempVar3.setIsCancel(true); removeStorageModel.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.RunAction(VdcActionType.RemoveStorageDomain, tempVar, new IFrontendActionAsyncCallback() { @Override public void Executed(FrontendActionAsyncResult result) { } }, this); } 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() { StorageNameValidation(); } private void OnSavePostNameValidation() { 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) { this.context = context; storage_domains selectedItem = (storage_domains)getSelectedItem(); StorageModel model = (StorageModel)getWindow(); boolean isNew = model.getStorage() == null; storageModel = model.getSelectedItem(); NfsStorageModel nfsModel = (NfsStorageModel)storageModel; path = (String)nfsModel.getPath().getEntity(); storageDomain = isNew ? new storage_domain_static() : (storage_domain_static)Cloner.clone(selectedItem.getStorageStaticData()); storageDomain.setstorage_type(isNew ? storageModel.getType() : storageDomain.getstorage_type()); storageDomain.setstorage_domain_type(isNew ? storageModel.getRole() : storageDomain.getstorage_domain_type()); storageDomain.setstorage_name((String)model.getName().getEntity()); storageDomain.setStorageFormat((StorageFormatType)model.getFormat().getSelectedItem()); if (isNew) { AsyncDataProvider.GetStorageDomainsByConnection(new AsyncQuery(this, new INewAsyncCallback() { @Override public void OnSuccess(Object target, Object returnValue) { StorageListModel storageListModel = (StorageListModel)target; java.util.ArrayList<storage_domains> storages = (java.util.ArrayList<storage_domains>)returnValue; if (storages != null && storages.size() > 0) { String storageName = storages.get(0).getstorage_name(); OnFinish(storageListModel.context, false, storageListModel.storageModel, "Create operation failed. Domain " + storageName + " already exists in the system."); } else { storageListModel.SaveNewNfsStorage(); } } }), null, path); } else { Frontend.RunAction(VdcActionType.UpdateStorageDomain, new StorageDomainManagementParameter(storageDomain), new IFrontendActionAsyncCallback() { @Override public void Executed(FrontendActionAsyncResult result) { StorageListModel storageListModel = (StorageListModel)result.getState(); storageListModel.OnFinish(storageListModel.context, true, storageListModel.storageModel); } }, this); } } public void SaveNewNfsStorage() { StorageModel model = (StorageModel)getWindow(); NfsStorageModel nfsModel = (NfsStorageModel)model.getSelectedItem(); VDS host = (VDS)model.getHost().getSelectedItem(); hostId = host.getvds_id(); //Create storage connection. storage_server_connections tempVar = new storage_server_connections(); tempVar.setconnection(path); tempVar.setstorage_type(nfsModel.getType()); connection = tempVar; java.util.ArrayList<VdcActionType> actionTypes = new java.util.ArrayList<VdcActionType>(); java.util.ArrayList<VdcActionParametersBase> parameters = new java.util.ArrayList<VdcActionParametersBase>(); actionTypes.add(VdcActionType.AddStorageServerConnection); actionTypes.add(VdcActionType.AddNFSStorageDomain); actionTypes.add(VdcActionType.RemoveStorageServerConnection); parameters.add(new StorageServerConnectionParametersBase(connection, host.getvds_id())); StorageDomainManagementParameter tempVar2 = new StorageDomainManagementParameter(storageDomain); tempVar2.setVdsId(host.getvds_id()); parameters.add(tempVar2); parameters.add(new StorageServerConnectionParametersBase(connection, host.getvds_id())); IFrontendActionAsyncCallback callback1 = new IFrontendActionAsyncCallback() { @Override public void Executed(FrontendActionAsyncResult result) { StorageListModel storageListModel = (StorageListModel)result.getState(); VdcReturnValueBase vdcReturnValueBase = result.getReturnValue(); storageListModel.storageDomain.setstorage((String)vdcReturnValueBase.getActionReturnValue()); } }; IFrontendActionAsyncCallback callback2 = new IFrontendActionAsyncCallback() { @Override public void Executed(FrontendActionAsyncResult result) { StorageListModel storageListModel = (StorageListModel)result.getState(); VdcReturnValueBase vdcReturnValueBase = result.getReturnValue(); storageListModel.storageId = (NGuid)vdcReturnValueBase.getActionReturnValue(); } }; IFrontendActionAsyncCallback callback3 = new IFrontendActionAsyncCallback() { @Override public void Executed(FrontendActionAsyncResult result) { StorageListModel storageListModel = (StorageListModel)result.getState(); StorageModel storageModel = (StorageModel)storageListModel.getWindow(); //Attach storage to data center as neccessary. storage_pool dataCenter = (storage_pool)storageModel.getDataCenter().getSelectedItem(); if (!dataCenter.getId().equals(StorageModel.UnassignedDataCenterId)) { storageListModel.AttachStorageToDataCenter((Guid)storageListModel.storageId, dataCenter.getId()); } storageListModel.OnFinish(storageListModel.context, true, storageListModel.storageModel); } }; IFrontendActionAsyncCallback failureCallback = new IFrontendActionAsyncCallback() { @Override public void Executed(FrontendActionAsyncResult result) { StorageListModel storageListModel = (StorageListModel)result.getState(); storageListModel.CleanConnection(storageListModel.connection, storageListModel.hostId); storageListModel.OnFinish(storageListModel.context, false, storageListModel.storageModel); } }; Frontend.RunMultipleActions(actionTypes, parameters, new java.util.ArrayList<IFrontendActionAsyncCallback>(java.util.Arrays.asList(new IFrontendActionAsyncCallback[] { callback1, callback2, callback3 })), failureCallback, this); } public void SaveNewSanStorage() { StorageModel model = (StorageModel)getWindow(); SanStorageModel sanModel = (SanStorageModel)model.getSelectedItem(); 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()); } AddSANStorageDomainParameters tempVar = new AddSANStorageDomainParameters(storageDomain); tempVar.setVdsId(host.getvds_id()); tempVar.setLunIds(lunIds); Frontend.RunAction(VdcActionType.AddSANStorageDomain, tempVar, new IFrontendActionAsyncCallback() { @Override public void Executed(FrontendActionAsyncResult result) { StorageListModel storageListModel = (StorageListModel)result.getState(); StorageModel storageModel = (StorageModel)storageListModel.getWindow(); storage_pool dataCenter = (storage_pool)storageModel.getDataCenter().getSelectedItem(); if (!dataCenter.getId().equals(StorageModel.UnassignedDataCenterId)) { VdcReturnValueBase returnValue = result.getReturnValue(); NGuid storageId = (NGuid)returnValue.getActionReturnValue(); storageListModel.AttachStorageToDataCenter((Guid)storageId, dataCenter.getId()); } storageListModel.OnFinish(storageListModel.context, true, storageListModel.storageModel); } }, this); } private void SaveLocalStorage(TaskContext context) { this.context = context; storage_domains selectedItem = (storage_domains)getSelectedItem(); StorageModel model = (StorageModel)getWindow(); VDS host = (VDS)model.getHost().getSelectedItem(); boolean isNew = model.getStorage() == null; storageModel = model.getSelectedItem(); LocalStorageModel localModel = (LocalStorageModel)storageModel; path = (String)localModel.getPath().getEntity(); storageDomain = isNew ? new storage_domain_static() : (storage_domain_static)Cloner.clone(selectedItem.getStorageStaticData()); storageDomain.setstorage_type(isNew ? storageModel.getType() : storageDomain.getstorage_type()); storageDomain.setstorage_domain_type(isNew ? storageModel.getRole() : storageDomain.getstorage_domain_type()); storageDomain.setstorage_name((String)model.getName().getEntity()); if (isNew) { AsyncDataProvider.GetStorageDomainsByConnection(new AsyncQuery(this, new INewAsyncCallback() { @Override public void OnSuccess(Object target, Object returnValue) { StorageListModel storageListModel = (StorageListModel)target; java.util.ArrayList<storage_domains> storages = (java.util.ArrayList<storage_domains>)returnValue; if (storages != null && storages.size() > 0) { String storageName = storages.get(0).getstorage_name(); OnFinish(storageListModel.context, false, storageListModel.storageModel, "Create operation failed. Domain " + storageName + " already exists in the system."); } else { storageListModel.SaveNewLocalStorage(); } } }), host.getstorage_pool_id(), path); } else { Frontend.RunAction(VdcActionType.UpdateStorageDomain, new StorageDomainManagementParameter(storageDomain), new IFrontendActionAsyncCallback() { @Override public void Executed(FrontendActionAsyncResult result) { StorageListModel storageListModel = (StorageListModel)result.getState(); storageListModel.OnFinish(storageListModel.context, true, storageListModel.storageModel); } }, this); } } public void SaveNewLocalStorage() { StorageModel model = (StorageModel)getWindow(); LocalStorageModel localModel = (LocalStorageModel)model.getSelectedItem(); VDS host = (VDS)model.getHost().getSelectedItem(); hostId = host.getvds_id(); //Create storage connection. storage_server_connections tempVar = new storage_server_connections(); tempVar.setconnection(path); tempVar.setstorage_type(localModel.getType()); connection = tempVar; java.util.ArrayList<VdcActionType> actionTypes = new java.util.ArrayList<VdcActionType>(); java.util.ArrayList<VdcActionParametersBase> parameters = new java.util.ArrayList<VdcActionParametersBase>(); actionTypes.add(VdcActionType.AddStorageServerConnection); actionTypes.add(VdcActionType.AddLocalStorageDomain); parameters.add(new StorageServerConnectionParametersBase(connection, host.getvds_id())); StorageDomainManagementParameter tempVar2 = new StorageDomainManagementParameter(storageDomain); tempVar2.setVdsId(host.getvds_id()); parameters.add(tempVar2); IFrontendActionAsyncCallback callback1 = new IFrontendActionAsyncCallback() { @Override public void Executed(FrontendActionAsyncResult result) { StorageListModel storageListModel = (StorageListModel)result.getState(); storageListModel.removeConnection = true; VdcReturnValueBase vdcReturnValueBase = result.getReturnValue(); storageListModel.storageDomain.setstorage((String)vdcReturnValueBase.getActionReturnValue()); } }; IFrontendActionAsyncCallback callback2 = new IFrontendActionAsyncCallback() { @Override public void Executed(FrontendActionAsyncResult result) { StorageListModel storageListModel = (StorageListModel)result.getState(); storageListModel.removeConnection = false; storageListModel.OnFinish(storageListModel.context, true, storageListModel.storageModel); } }; IFrontendActionAsyncCallback failureCallback = new IFrontendActionAsyncCallback() { @Override public void Executed(FrontendActionAsyncResult result) { StorageListModel storageListModel = (StorageListModel)result.getState(); if (storageListModel.removeConnection) { storageListModel.CleanConnection(storageListModel.connection, storageListModel.hostId); storageListModel.removeConnection = false; } storageListModel.OnFinish(storageListModel.context, false, storageListModel.storageModel); } }; Frontend.RunMultipleActions(actionTypes, parameters, new java.util.ArrayList<IFrontendActionAsyncCallback>(java.util.Arrays.asList(new IFrontendActionAsyncCallback[] { callback1, callback2 })), failureCallback, this); } public void OnFinish(TaskContext context, boolean isSucceeded, IStorageModel model) { OnFinish(context, isSucceeded, model, null); } public void OnFinish(TaskContext context, boolean isSucceeded, IStorageModel model, String message) { context.InvokeUIThread(this, new java.util.ArrayList<Object>(java.util.Arrays.asList(new Object[] { "Finish", isSucceeded, model, message }))); } private void SaveSanStorage(TaskContext context) { this.context = context; StorageModel model = (StorageModel)getWindow(); SanStorageModel sanModel = (SanStorageModel)model.getSelectedItem(); storage_domains storage = (storage_domains)getSelectedItem(); VDS host = (VDS)model.getHost().getSelectedItem(); boolean isNew = model.getStorage() == null; 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()); if (isNew) { AsyncDataProvider.GetStorageDomainsByConnection(new AsyncQuery(this, new INewAsyncCallback() { @Override public void OnSuccess(Object target, Object returnValue) { StorageListModel storageListModel = (StorageListModel)target; java.util.ArrayList<storage_domains> storages = (java.util.ArrayList<storage_domains>)returnValue; if (storages != null && storages.size() > 0) { String storageName = storages.get(0).getstorage_name(); OnFinish(storageListModel.context, false, storageListModel.storageModel, "Create operation failed. Domain " + storageName + " already exists in the system."); } else { storageListModel.SaveNewSanStorage(); } } }), null, path); } else { Frontend.RunAction(VdcActionType.UpdateStorageDomain, new StorageDomainManagementParameter(storageDomain), new IFrontendActionAsyncCallback() { @Override public void Executed(FrontendActionAsyncResult result) { StorageListModel storageListModel = (StorageListModel)result.getState(); StorageModel storageModel = (StorageModel)getWindow(); SanStorageModel sanStorageModel = (SanStorageModel)storageModel.getSelectedItem(); storage_domains storageDomain1 = (storage_domains)storageListModel.getSelectedItem(); java.util.ArrayList<String> lunIds = new java.util.ArrayList<String>(); for (LunModel lun : sanStorageModel.getAddedLuns()) { lunIds.add(lun.getLunId()); } if (lunIds.size() > 0) { Frontend.RunAction(VdcActionType.ExtendSANStorageDomain, new ExtendSANStorageDomainParameters(storageDomain1.getid(), lunIds), new IFrontendActionAsyncCallback() { @Override public void Executed(FrontendActionAsyncResult result1) { } }, this); } storageListModel.OnFinish(storageListModel.context, true, storageListModel.storageModel); } }, this); } } private void AttachStorageToDataCenter(Guid storageId, Guid dataCenterId) { Frontend.RunAction(VdcActionType.AttachStorageDomainToPool, new StorageDomainPoolParametersBase(storageId, dataCenterId), new IFrontendActionAsyncCallback() { @Override public void Executed(FrontendActionAsyncResult result) { } }, this); } private void ImportNfsStorage(TaskContext context) { this.context = context; java.util.ArrayList<Object> data = (java.util.ArrayList<Object>)context.getState(); StorageModel model = (StorageModel)getWindow(); storageModel = (NfsStorageModel)model.getSelectedItem(); hostId = (Guid)data.get(1); path = (String)data.get(2); domainType = (StorageDomainType)data.get(3); ImportNfsStorageInit(); } public void ImportNfsStorageInit() { if (nfsConnection != null) { // Clean nfs connection Frontend.RunAction(VdcActionType.RemoveStorageServerConnection, new StorageServerConnectionParametersBase(nfsConnection, hostId), new IFrontendActionAsyncCallback() { @Override public void Executed(FrontendActionAsyncResult result) { StorageListModel storageListModel = (StorageListModel)result.getState(); VdcReturnValueBase returnVal = result.getReturnValue(); boolean success = returnVal != null && returnVal.getSucceeded(); if (success) { storageListModel.nfsConnection = null; } storageListModel.ImportNfsStoragePostInit(); } }, this); } else { ImportNfsStoragePostInit(); } } public void ImportNfsStoragePostInit() { // Check storage domain existance AsyncDataProvider.GetStorageDomainsByConnection(new AsyncQuery(this, new INewAsyncCallback() { @Override public void OnSuccess(Object target, Object returnValue) { StorageListModel storageListModel = (StorageListModel)target; java.util.ArrayList<storage_domains> storages = (java.util.ArrayList<storage_domains>)returnValue; if (storages != null && storages.size() > 0) { String storageName = storages.get(0).getstorage_name(); OnFinish(storageListModel.context, false, storageListModel.storageModel, "Import operation failed. Domain " + storageName + " already exists in the system."); } else { storage_server_connections tempVar = new storage_server_connections(); tempVar.setconnection(storageListModel.path); tempVar.setstorage_type(StorageType.NFS); storageListModel.nfsConnection = tempVar; storageListModel.ImportNfsStorageConnect(); } } }), null, path); } public void ImportNfsStorageConnect() { Frontend.RunAction(VdcActionType.ConnectStorageToVds, new StorageServerConnectionParametersBase(nfsConnection, hostId), new IFrontendActionAsyncCallback() { @Override public void Executed(FrontendActionAsyncResult result) { StorageListModel storageListModel = (StorageListModel)result.getState(); VdcReturnValueBase returnVal = result.getReturnValue(); boolean success = returnVal != null && returnVal.getSucceeded(); if (success) { AsyncDataProvider.GetExistingStorageDomainList(new AsyncQuery(storageListModel, new INewAsyncCallback() { @Override public void OnSuccess(Object target, Object returnValue) { StorageListModel storageListModel1 = (StorageListModel)target; java.util.ArrayList<storage_domains> domains = (java.util.ArrayList<storage_domains>)returnValue; if (domains != null) { if (domains.isEmpty()) { PostImportNfsStorage(storageListModel1.context, false, storageListModel1.storageModel, "There is no storage domain under the specified path. Please check path."); } else { storageListModel1.ImportNfsStorageAddDomain(domains); } } else { PostImportNfsStorage(storageListModel1.context, false, storageListModel1.storageModel, "Failed to retrieve existing storage domain information."); } } }), hostId, domainType, path); } else { PostImportNfsStorage(storageListModel.context, false, storageListModel.storageModel, "Failed to retrieve existing storage domain information."); } } }, this); } public void ImportNfsStorageAddDomain(java.util.ArrayList<storage_domains> domains) { storage_domains sdToAdd = Linq.FirstOrDefault(domains); storage_domain_static sdsToAdd = sdToAdd == null ? null : sdToAdd.getStorageStaticData(); StorageDomainManagementParameter tempVar = new StorageDomainManagementParameter(sdsToAdd); tempVar.setVdsId(hostId); Frontend.RunAction(VdcActionType.AddExistingNFSStorageDomain, tempVar, new IFrontendActionAsyncCallback() { @Override public void Executed(FrontendActionAsyncResult result) { Object[] array = (Object[])result.getState(); StorageListModel storageListModel = (StorageListModel)array[0]; storage_domains sdToAdd1 = (storage_domains)array[1]; VdcReturnValueBase returnVal = result.getReturnValue(); boolean success = returnVal != null && returnVal.getSucceeded(); if (success) { StorageModel model = (StorageModel)storageListModel.getWindow(); storage_pool dataCenter = (storage_pool)model.getDataCenter().getSelectedItem(); if (!dataCenter.getId().equals(StorageModel.UnassignedDataCenterId)) { storageListModel.AttachStorageToDataCenter(sdToAdd1.getid(), dataCenter.getId()); } PostImportNfsStorage(storageListModel.context, true, storageListModel.storageModel, null); } else { PostImportNfsStorage(storageListModel.context, false, storageListModel.storageModel, ""); } } }, new Object[] { this, sdToAdd }); } public void PostImportNfsStorage(TaskContext context, boolean isSucceeded, IStorageModel model, String message) { Frontend.RunAction(VdcActionType.RemoveStorageServerConnection, new StorageServerConnectionParametersBase(nfsConnection, hostId), new IFrontendActionAsyncCallback() { @Override public void Executed(FrontendActionAsyncResult result) { VdcReturnValueBase returnValue = result.getReturnValue(); boolean success = returnValue != null && returnValue.getSucceeded(); if (success) { nfsConnection = null; } Object[] array = (Object[])result.getState(); OnFinish((TaskContext)array[0], (Boolean)array[1], (IStorageModel)array[2], (String)array[3]); } }, new Object[] { context, isSucceeded, model, message }); } private void ImportSanStorage(TaskContext context) { this.context = context; java.util.ArrayList<Object> data = (java.util.ArrayList<Object>)context.getState(); StorageModel storageModel = (StorageModel)getWindow(); ImportSanStorageModel sanStorageModel = (ImportSanStorageModel)storageModel.getSelectedItem(); Guid hostId = (Guid)data.get(1); storage_domains storage; if (sanStorageModel.getSelectedItem() != null) { storage = (storage_domains)sanStorageModel.getSelectedItem(); } else { ListModel candidates = sanStorageModel.getCandidatesList(); EntityModel selectedItem = (EntityModel)candidates.getSelectedItem(); storage = (storage_domains)selectedItem.getEntity(); } AddSANStorageDomainParameters tempVar = new AddSANStorageDomainParameters(storage == null ? null : storage.getStorageStaticData()); tempVar.setVdsId(hostId); Frontend.RunAction(VdcActionType.AddExistingSANStorageDomain, tempVar, new IFrontendActionAsyncCallback() { @Override public void Executed(FrontendActionAsyncResult result) { Object[] array = (Object[])result.getState(); StorageListModel storageListModel = (StorageListModel)array[0]; storage_domains sdToAdd1 = (storage_domains)array[1]; VdcReturnValueBase returnVal = result.getReturnValue(); boolean success = returnVal != null && returnVal.getSucceeded(); if (success) { StorageModel model = (StorageModel)storageListModel.getWindow(); storage_pool dataCenter = (storage_pool)model.getDataCenter().getSelectedItem(); if (!dataCenter.getId().equals(StorageModel.UnassignedDataCenterId)) { storageListModel.AttachStorageToDataCenter(sdToAdd1.getid(), dataCenter.getId()); } storageListModel.OnFinish(storageListModel.context, true, storageListModel.storageModel); } OnFinish(storageListModel.context, success, storageListModel.storageModel, null); } }, new Object[] { this, storage }); } 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(); } @Override protected String getListName() { return "StorageListModel"; } }