package org.ovirt.engine.ui.uicommonweb.models.vms; import java.util.Collections; import org.ovirt.engine.core.compat.*; import org.ovirt.engine.ui.uicompat.*; import org.ovirt.engine.core.common.businessentities.*; import org.ovirt.engine.core.common.vdscommands.*; import org.ovirt.engine.core.common.queries.*; import org.ovirt.engine.core.common.action.*; import org.ovirt.engine.ui.frontend.*; import org.ovirt.engine.ui.uicommonweb.*; import org.ovirt.engine.ui.uicommonweb.models.*; import org.ovirt.engine.core.common.*; import org.ovirt.engine.ui.uicommonweb.models.configure.*; import org.ovirt.engine.ui.uicommonweb.models.hosts.HostListModel; import org.ovirt.engine.ui.uicommonweb.models.storage.StorageModel; import org.ovirt.engine.ui.uicommonweb.models.storage.VmBackupModel; import org.ovirt.engine.ui.uicommonweb.models.tags.*; import org.ovirt.engine.ui.uicommonweb.models.userportal.*; 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.uicompat.*; import org.ovirt.engine.ui.uicommonweb.dataprovider.*; import org.ovirt.engine.ui.uicommonweb.*; import org.ovirt.engine.ui.uicommonweb.models.*; @SuppressWarnings("unused") public class VmListModel extends ListWithDetailsModel implements ISupportSystemTreeContext { @Override public boolean getIsAvailable() { // TODO Auto-generated method stub return false; } private UICommand privateNewServerCommand; public UICommand getNewServerCommand() { return privateNewServerCommand; } private void setNewServerCommand(UICommand value) { privateNewServerCommand = value; } private UICommand privateNewDesktopCommand; public UICommand getNewDesktopCommand() { return privateNewDesktopCommand; } private void setNewDesktopCommand(UICommand value) { privateNewDesktopCommand = 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 privateRunCommand; public UICommand getRunCommand() { return privateRunCommand; } private void setRunCommand(UICommand value) { privateRunCommand = value; } private UICommand privatePauseCommand; public UICommand getPauseCommand() { return privatePauseCommand; } private void setPauseCommand(UICommand value) { privatePauseCommand = value; } private UICommand privateStopCommand; public UICommand getStopCommand() { return privateStopCommand; } private void setStopCommand(UICommand value) { privateStopCommand = value; } private UICommand privateShutdownCommand; public UICommand getShutdownCommand() { return privateShutdownCommand; } private void setShutdownCommand(UICommand value) { privateShutdownCommand = value; } private UICommand privateMigrateCommand; public UICommand getMigrateCommand() { return privateMigrateCommand; } private void setMigrateCommand(UICommand value) { privateMigrateCommand = value; } private UICommand privateNewTemplateCommand; public UICommand getNewTemplateCommand() { return privateNewTemplateCommand; } private void setNewTemplateCommand(UICommand value) { privateNewTemplateCommand = value; } private UICommand privateRunOnceCommand; public UICommand getRunOnceCommand() { return privateRunOnceCommand; } private void setRunOnceCommand(UICommand value) { privateRunOnceCommand = value; } private UICommand privateExportCommand; public UICommand getExportCommand() { return privateExportCommand; } private void setExportCommand(UICommand value) { privateExportCommand = value; } private UICommand privateMoveCommand; public UICommand getMoveCommand() { return privateMoveCommand; } private void setMoveCommand(UICommand value) { privateMoveCommand = value; } private UICommand privateRetrieveIsoImagesCommand; public UICommand getRetrieveIsoImagesCommand() { return privateRetrieveIsoImagesCommand; } private void setRetrieveIsoImagesCommand(UICommand value) { privateRetrieveIsoImagesCommand = value; } private UICommand privateGuideCommand; public UICommand getGuideCommand() { return privateGuideCommand; } private void setGuideCommand(UICommand value) { privateGuideCommand = value; } private UICommand privateChangeCdCommand; public UICommand getChangeCdCommand() { return privateChangeCdCommand; } private void setChangeCdCommand(UICommand value) { privateChangeCdCommand = value; } private UICommand privateAssignTagsCommand; public UICommand getAssignTagsCommand() { return privateAssignTagsCommand; } private void setAssignTagsCommand(UICommand value) { privateAssignTagsCommand = value; } private Model errorWindow; public Model getErrorWindow() { return errorWindow; } public void setErrorWindow(Model value) { if (errorWindow != value) { errorWindow = value; OnPropertyChanged(new PropertyChangedEventArgs("ErrorWindow")); } } private ConsoleModel defaultConsoleModel; public ConsoleModel getDefaultConsoleModel() { return defaultConsoleModel; } public void setDefaultConsoleModel(ConsoleModel value) { if (defaultConsoleModel != value) { defaultConsoleModel = value; OnPropertyChanged(new PropertyChangedEventArgs("DefaultConsoleModel")); } } private ConsoleModel additionalConsoleModel; public ConsoleModel getAdditionalConsoleModel() { return additionalConsoleModel; } public void setAdditionalConsoleModel(ConsoleModel value) { if (additionalConsoleModel != value) { additionalConsoleModel = value; OnPropertyChanged(new PropertyChangedEventArgs("AdditionalConsoleModel")); } } private boolean hasAdditionalConsoleModel; public boolean getHasAdditionalConsoleModel() { return hasAdditionalConsoleModel; } public void setHasAdditionalConsoleModel(boolean value) { if (hasAdditionalConsoleModel != value) { hasAdditionalConsoleModel = value; OnPropertyChanged(new PropertyChangedEventArgs("HasAdditionalConsoleModel")); } } public ObservableCollection<ChangeCDModel> isoImages; public ObservableCollection<ChangeCDModel> getIsoImages() { return isoImages; } private void setIsoImages(ObservableCollection<ChangeCDModel> value) { if ((isoImages == null && value != null) || (isoImages != null && !isoImages.equals(value))) { isoImages = value; OnPropertyChanged(new PropertyChangedEventArgs("IsoImages")); } } //get { return SelectedItems == null ? new object[0] : SelectedItems.Cast<VM>().Select(a => a.vm_guid).Cast<object>().ToArray(); } protected Object[] getSelectedKeys() { if (getSelectedItems() == null) { return new Object[0]; } Object[] keys = new Object[getSelectedItems().size()]; for (int i = 0; i < getSelectedItems().size(); i++) { keys[i] = ((VM)getSelectedItems().get(i)).getvm_guid(); } return keys; } private Object privateGuideContext; public Object getGuideContext() { return privateGuideContext; } public void setGuideContext(Object value) { privateGuideContext = value; } private VM privatecurrentVm; public VM getcurrentVm() { return privatecurrentVm; } public void setcurrentVm(VM value) { privatecurrentVm = value; } private java.util.HashMap<Guid, java.util.ArrayList<ConsoleModel>> cachedConsoleModels; private java.util.ArrayList<String> privateCustomPropertiesKeysList; private java.util.ArrayList<String> getCustomPropertiesKeysList() { return privateCustomPropertiesKeysList; } private void setCustomPropertiesKeysList(java.util.ArrayList<String> value) { privateCustomPropertiesKeysList = value; } public VmListModel() { setTitle("Virtual Machines"); setDefaultSearchString("Vms:"); setSearchString(getDefaultSearchString()); cachedConsoleModels = new java.util.HashMap<Guid, java.util.ArrayList<ConsoleModel>>(); setNewServerCommand(new UICommand("NewServer", this)); setNewDesktopCommand(new UICommand("NewDesktop", this)); setEditCommand(new UICommand("Edit", this)); setRemoveCommand(new UICommand("Remove", this)); setRunCommand(new UICommand("Run", this, true)); setPauseCommand(new UICommand("Pause", this)); setStopCommand(new UICommand("Stop", this)); setShutdownCommand(new UICommand("Shutdown", this)); setMigrateCommand(new UICommand("Migrate", this)); setNewTemplateCommand(new UICommand("NewTemplate", this)); setRunOnceCommand(new UICommand("RunOnce", this)); setExportCommand(new UICommand("Export", this)); setMoveCommand(new UICommand("Move", this)); setGuideCommand(new UICommand("Guide", this)); setRetrieveIsoImagesCommand(new UICommand("RetrieveIsoImages", this)); setChangeCdCommand(new UICommand("ChangeCD", this)); setAssignTagsCommand(new UICommand("AssignTags", this)); setIsoImages(new ObservableCollection<ChangeCDModel>()); ChangeCDModel tempVar = new ChangeCDModel(); tempVar.setTitle("Retrieving CDs..."); getIsoImages().add(tempVar); UpdateActionAvailability(); getSearchNextPageCommand().setIsAvailable(true); getSearchPreviousPageCommand().setIsAvailable(true); AsyncDataProvider.GetCustomPropertiesList(new AsyncQuery(this, new INewAsyncCallback() { @Override public void OnSuccess(Object target, Object returnValue) { VmListModel model = (VmListModel)target; if (returnValue != null) { String[] array = ((String)returnValue).split("[;]", -1); model.setCustomPropertiesKeysList(new java.util.ArrayList<String>()); for (String s : array) { model.getCustomPropertiesKeysList().add(s); } } } })); } private void AssignTags() { if (getWindow() != null) { return; } TagListModel model = new TagListModel(); setWindow(model); model.setTitle("Assign Tags"); model.setHashName("assign_tags_vms"); GetAttachedTagsToSelectedVMs(model); UICommand tempVar = new UICommand("OnAssignTags", 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 java.util.Map<Guid, Boolean> attachedTagsToEntities; public java.util.ArrayList<org.ovirt.engine.core.common.businessentities.tags> allAttachedTags; public int selectedItemsCounter; private void GetAttachedTagsToSelectedVMs(TagListModel model) { java.util.ArrayList<Guid> vmIds = new java.util.ArrayList<Guid>(); for (Object item : getSelectedItems()) { VM vm = (VM)item; vmIds.add(vm.getvm_guid()); } attachedTagsToEntities = new java.util.HashMap<Guid, Boolean>(); allAttachedTags = new java.util.ArrayList<org.ovirt.engine.core.common.businessentities.tags>(); selectedItemsCounter = 0; for (Guid id : vmIds) { AsyncDataProvider.GetAttachedTagsToVm(new AsyncQuery(new Object[] { this, model }, new INewAsyncCallback() { @Override public void OnSuccess(Object target, Object returnValue) { Object[] array = (Object[])target; VmListModel vmListModel = (VmListModel)array[0]; TagListModel tagListModel = (TagListModel)array[1]; vmListModel.allAttachedTags.addAll((java.util.ArrayList<org.ovirt.engine.core.common.businessentities.tags>)returnValue); vmListModel.selectedItemsCounter++; if (vmListModel.selectedItemsCounter == vmListModel.getSelectedItems().size()) { PostGetAttachedTags(vmListModel, tagListModel); } } }), id); } } private void PostGetAttachedTags(VmListModel vmListModel, TagListModel tagListModel) { if (vmListModel.getLastExecutedCommand() == getAssignTagsCommand()) { //C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to LINQ queries: java.util.ArrayList<org.ovirt.engine.core.common.businessentities.tags> attachedTags = Linq.Distinct(vmListModel.allAttachedTags, new TagsEqualityComparer()); for (org.ovirt.engine.core.common.businessentities.tags tag : attachedTags) { int count = 0; for (org.ovirt.engine.core.common.businessentities.tags tag2 : vmListModel.allAttachedTags) { if (tag2.gettag_id().equals(tag.gettag_id())) { count++; } } vmListModel.attachedTagsToEntities.put(tag.gettag_id(), count == vmListModel.getSelectedItems().size()); } tagListModel.setAttachedTagsToEntities(vmListModel.attachedTagsToEntities); } else if (StringHelper.stringsEqual(vmListModel.getLastExecutedCommand().getName(), "OnAssignTags")) { vmListModel.PostOnAssignTags(tagListModel.getAttachedTagsToEntities()); } } private void OnAssignTags() { TagListModel model = (TagListModel)getWindow(); GetAttachedTagsToSelectedVMs(model); } public void PostOnAssignTags(java.util.Map<Guid, Boolean> attachedTags) { TagListModel model = (TagListModel)getWindow(); java.util.ArrayList<Guid> vmIds = new java.util.ArrayList<Guid>(); for (Object item : getSelectedItems()) { VM vm = (VM)item; vmIds.add(vm.getvm_guid()); } //prepare attach/detach lists java.util.ArrayList<Guid> tagsToAttach = new java.util.ArrayList<Guid>(); java.util.ArrayList<Guid> tagsToDetach = new java.util.ArrayList<Guid>(); if (model.getItems() != null && ((java.util.ArrayList<TagModel>)model.getItems()).size() > 0) { java.util.ArrayList<TagModel> tags = (java.util.ArrayList<TagModel>)model.getItems(); TagModel rootTag = tags.get(0); TagModel.RecursiveEditAttachDetachLists(rootTag, attachedTags, tagsToAttach, tagsToDetach); } java.util.ArrayList<VdcActionParametersBase> parameters = new java.util.ArrayList<VdcActionParametersBase>(); for (Guid a : tagsToAttach) { parameters.add(new AttachEntityToTagParameters(a, vmIds)); } Frontend.RunMultipleAction(VdcActionType.AttachVmsToTag, parameters); parameters = new java.util.ArrayList<VdcActionParametersBase>(); for (Guid a : tagsToDetach) { parameters.add(new AttachEntityToTagParameters(a, vmIds)); } Frontend.RunMultipleAction(VdcActionType.DetachVmFromTag, parameters); Cancel(); } private void Guide() { VmGuideModel model = new VmGuideModel(); setWindow(model); model.setTitle("New Virtual Machine - Guide Me"); model.setHashName("new_virtual_machine_-_guide_me"); model.setEntity(getGuideContext() != null ? DataProvider.GetVmById((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 VmGeneralModel()); list.add(new VmInterfaceListModel()); list.add(new VmDiskListModel()); list.add(new VmSnapshotListModel()); list.add(new VmEventListModel()); list.add(new VmAppListModel()); list.add(new PermissionListModel()); setDetailModels(list); } @Override public boolean IsSearchStringMatch(String searchString) { return searchString.trim().toLowerCase().startsWith("vm"); } @Override protected void SyncSearch() { SearchParameters tempVar = new SearchParameters(getSearchString(), SearchType.VM); tempVar.setMaxCount(getSearchPageSize()); super.SyncSearch(VdcQueryType.Search, tempVar); } @Override protected void AsyncSearch() { super.AsyncSearch(); setAsyncResult(Frontend.RegisterSearch(getSearchString(), SearchType.VM, getSearchPageSize())); setItems(getAsyncResult().getData()); } private void UpdateConsoleModels() { java.util.List tempVar = getSelectedItems(); java.util.List selectedItems = (tempVar != null) ? tempVar : new java.util.ArrayList(); Object tempVar2 = getSelectedItem(); VM vm = (VM)((tempVar2 instanceof VM) ? tempVar2 : null); if (vm == null || selectedItems.size() > 1) { setDefaultConsoleModel(null); setAdditionalConsoleModel(null); setHasAdditionalConsoleModel(false); } else { if (!cachedConsoleModels.containsKey(vm.getvm_guid())) { SpiceConsoleModel spiceConsoleModel = new SpiceConsoleModel(); spiceConsoleModel.getErrorEvent().addListener(this); VncConsoleModel vncConsoleModel = new VncConsoleModel(); RdpConsoleModel rdpConsoleModel = new RdpConsoleModel(); cachedConsoleModels.put(vm.getvm_guid(), new java.util.ArrayList<ConsoleModel>(java.util.Arrays.asList(new ConsoleModel[] { spiceConsoleModel, vncConsoleModel, rdpConsoleModel }))); } java.util.ArrayList<ConsoleModel> cachedModels = cachedConsoleModels.get(vm.getvm_guid()); for (ConsoleModel a : cachedModels) { a.setEntity(null); a.setEntity(vm); } setDefaultConsoleModel(vm.getdisplay_type() == DisplayType.vnc ? cachedModels.get(1) : cachedModels.get(0)); if (DataProvider.IsWindowsOsType(vm.getvm_os())) { for (ConsoleModel a : cachedModels) { if (a instanceof RdpConsoleModel) { setAdditionalConsoleModel(a); break; } } setHasAdditionalConsoleModel(true); } else { setAdditionalConsoleModel(null); setHasAdditionalConsoleModel(false); } } } public java.util.ArrayList<ConsoleModel> GetConsoleModelsByVmGuid(Guid vmGuid) { if (cachedConsoleModels != null && cachedConsoleModels.containsKey(vmGuid)) { return cachedConsoleModels.get(vmGuid); } return null; } private void NewDesktop() { NewInternal(VmType.Desktop); } private void NewServer() { NewInternal(VmType.Server); } private void NewInternal(VmType vmType) { if (getWindow() != null) { return; } UnitVmModel model = new UnitVmModel(new NewVmModelBehavior()); model.setTitle(StringFormat.format("New %1$s Virtual Machine", vmType == VmType.Server ? "Server" : "Desktop")); model.setHashName("new_" + (vmType == VmType.Server ? "server" : "desktop")); model.setIsNew(true); model.setVmType(vmType); model.setCustomPropertiesKeysList(getCustomPropertiesKeysList()); setWindow(model); model.Initialize(getSystemTreeSelectedItem()); // Ensures that the default provisioning is "Clone" for a new server and "Thin" for a new desktop. EntityModel selectedItem = null; boolean selectValue = model.getVmType() == VmType.Server; for (Object item : model.getProvisioning().getItems()) { EntityModel a = (EntityModel)item; if ((Boolean)a.getEntity() == selectValue) { selectedItem = a; break; } } model.getProvisioning().setSelectedItem(selectedItem); 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 void Edit() { VM vm = (VM)getSelectedItem(); if (vm == null) { return; } if (getWindow() != null) { return; } UnitVmModel model = new UnitVmModel(new ExistingVmModelBehavior(vm)); model.setVmType(vm.getvm_type()); setWindow(model); model.setTitle(StringFormat.format("Edit %1$s Virtual Machine", vm.getvm_type() == VmType.Server ? "Server" : "Desktop")); model.setHashName("edit_" + (vm.getvm_type() == VmType.Server ? "server" : "desktop")); model.setCustomPropertiesKeysList(getCustomPropertiesKeysList()); model.Initialize(this.getSystemTreeSelectedItem()); //TODO: //VDSGroup cluster = null; //if (model.Cluster.Items == null) //{ // model.Commands.Add( // new UICommand("Cancel", this) // { // Title = "Cancel", // IsCancel = true // }); // return; //} 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 void remove() { if (getWindow() != null) { return; } ConfirmationModel model = new ConfirmationModel(); setWindow(model); model.setTitle("Remove Virtual Machine(s)"); model.setHashName("remove_virtual_machine"); model.setMessage("Virtual Machine(s)"); //model.Items = SelectedItems.Cast<VM>().Select(a => a.vm_name); java.util.ArrayList<String> list = new java.util.ArrayList<String>(); for (Object selectedItem : getSelectedItems()) { VM a = (VM)selectedItem; list.add(a.getvm_name()); } 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); } private void Move() { VM vm = (VM)getSelectedItem(); if (vm == null) { return; } if (getWindow() != null) { return; } ListModel model = new ListModel(); setWindow(model); model.setTitle("Move Virtual Machine"); model.setHashName("move_virtual_machine"); java.util.ArrayList<storage_domains> storageDomains; if (!vm.getvmt_guid().equals(Guid.Empty)) { AsyncDataProvider.GetStorageDomainListByTemplate(new AsyncQuery(this, new INewAsyncCallback() { @Override public void OnSuccess(Object target, Object returnValue) { VmListModel vmListModel = (VmListModel)target; java.util.ArrayList<storage_domains> storageDomains = (java.util.ArrayList<storage_domains>)returnValue; vmListModel.PostMoveGetStorageDomains(storageDomains); } }), vm.getvmt_guid()); } else { AsyncDataProvider.GetStorageDomainList(new AsyncQuery(this, new INewAsyncCallback() { @Override public void OnSuccess(Object target, Object returnValue) { VmListModel vmListModel = (VmListModel)target; java.util.ArrayList<storage_domains> storageDomains = (java.util.ArrayList<storage_domains>)returnValue; java.util.ArrayList<storage_domains> filteredStorageDomains = new java.util.ArrayList<storage_domains>(); for (storage_domains a : storageDomains) { if (a.getstorage_domain_type() == StorageDomainType.Data || a.getstorage_domain_type() == StorageDomainType.Master) { filteredStorageDomains.add(a); } } vmListModel.PostMoveGetStorageDomains(filteredStorageDomains); } }), vm.getstorage_pool_id()); } } private void PostMoveGetStorageDomains(java.util.ArrayList<storage_domains> storageDomains) { // filter only the Active storage domains (Active regarding the relevant storage pool). java.util.ArrayList<storage_domains> list = new java.util.ArrayList<storage_domains>(); for (storage_domains a : storageDomains) { if (a.getstatus() != null && a.getstatus() == StorageDomainStatus.Active) { list.add(a); } } storageDomains = list; VM vm = (VM)getSelectedItem(); AsyncDataProvider.GetVmDiskList(new AsyncQuery(new Object[] { this, storageDomains }, new INewAsyncCallback() { @Override public void OnSuccess(Object target, Object returnValue) { Object[] array = (Object[])target; VmListModel vmListModel = (VmListModel)array[0]; java.util.ArrayList<storage_domains> storageDomains = (java.util.ArrayList<storage_domains>)array[1]; java.util.ArrayList<DiskImage> disks = new java.util.ArrayList<DiskImage>(); Iterable disksEnumerable = (Iterable)returnValue; java.util.Iterator disksIterator = disksEnumerable.iterator(); while (disksIterator.hasNext()) { disks.add((DiskImage)disksIterator.next()); } vmListModel.PostMoveGetVmDiskList(disks, storageDomains); } }), vm.getvm_guid(), true); } private void PostMoveGetVmDiskList(java.util.ArrayList<DiskImage> disks, java.util.ArrayList<storage_domains> storageDomains) { if (disks.size() > 0) { java.util.ArrayList<storage_domains> list = new java.util.ArrayList<storage_domains>(); for (storage_domains a : storageDomains) { if (!a.getid().equals(disks.get(0).getstorage_id().getValue())) { list.add(a); } } storageDomains = list; } Collections.sort(storageDomains, new Linq.StorageDomainByNameComparer()); java.util.ArrayList<EntityModel> items = new java.util.ArrayList<EntityModel>(); for (storage_domains a : storageDomains) { EntityModel m = new EntityModel(); m.setEntity(a); items.add(m); } ListModel model = (ListModel)getWindow(); model.setItems(items); if (items.size() == 1) { items.get(0).setIsSelected(true); } if (items.isEmpty()) { model.setMessage("The system could not find available target Storage Domain.\nPossible reasons:\n - No active Storage Domain available\n - The Template that the VM is based on does not exist on active Storage Domain"); UICommand tempVar = new UICommand("Cancel", this); tempVar.setTitle("Close"); tempVar.setIsDefault(true); tempVar.setIsCancel(true); model.getCommands().add(tempVar); } else { UICommand tempVar2 = new UICommand("OnMove", 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 OnMove() { VM vm = (VM)getSelectedItem(); if (vm == null) { Cancel(); return; } ListModel model = (ListModel)getWindow(); if (model.getProgress() != null) { return; } java.util.ArrayList<storage_domains> items = new java.util.ArrayList<storage_domains>(); for (Object item : model.getItems()) { EntityModel a = (EntityModel)item; if (a.getIsSelected()) { items.add((storage_domains)a.getEntity()); } } // should be only one: if (items.isEmpty()) { return; } java.util.ArrayList<VdcActionParametersBase> parameters = new java.util.ArrayList<VdcActionParametersBase>(); for (storage_domains a : items) { parameters.add(new MoveVmParameters(vm.getvm_guid(), a.getid())); } model.StartProgress(null); Frontend.RunMultipleAction(VdcActionType.MoveVm, parameters, new IFrontendMultipleActionAsyncCallback() { @Override public void Executed(FrontendMultipleActionAsyncResult result) { ListModel localModel = (ListModel)result.getState(); localModel.StopProgress(); Cancel(); } }, model); } private void Export() { VM vm = (VM)getSelectedItem(); if (vm == null) { return; } if (getWindow() != null) { return; } ExportVmModel model = new ExportVmModel(); setWindow(model); model.setTitle("Export Virtual Machine"); model.setHashName("export_virtual_machine"); AsyncDataProvider.GetStorageDomainList(new AsyncQuery(this, new INewAsyncCallback() { @Override public void OnSuccess(Object target, Object returnValue) { VmListModel vmListModel = (VmListModel)target; java.util.ArrayList<storage_domains> storageDomains = (java.util.ArrayList<storage_domains>)returnValue; java.util.ArrayList<storage_domains> filteredStorageDomains = new java.util.ArrayList<storage_domains>(); for (storage_domains a : storageDomains) { if (a.getstorage_domain_type() == StorageDomainType.ImportExport) { filteredStorageDomains.add(a); } } vmListModel.PostExportGetStorageDomainList(filteredStorageDomains); } }), vm.getstorage_pool_id()); } private void PostExportGetStorageDomainList(java.util.ArrayList<storage_domains> storageDomains) { ExportVmModel model = (ExportVmModel)getWindow(); model.getStorage().setItems(storageDomains); model.getStorage().setSelectedItem(Linq.FirstOrDefault(storageDomains)); boolean noActiveStorage = true; for (storage_domains a : storageDomains) { if (a.getstatus() == StorageDomainStatus.Active) { noActiveStorage = false; break; } } if (SelectedVmsOnDifferentDataCenters()) { model.getCollapseSnapshots().setIsChangable(false); model.getForceOverride().setIsChangable(false); model.setMessage("Virtual Machines reside on several Data Centers. Make sure the exported Virtual Machines reside on the same Data Center."); UICommand tempVar = new UICommand("Cancel", this); tempVar.setTitle("Close"); tempVar.setIsDefault(true); tempVar.setIsCancel(true); model.getCommands().add(tempVar); } else if (storageDomains.isEmpty()) { model.getCollapseSnapshots().setIsChangable(false); model.getForceOverride().setIsChangable(false); model.setMessage("There is no Export Domain to Backup the Virtual Machine into. Attach an Export Domain to the Virtual Machine(s) Data Center."); UICommand tempVar2 = new UICommand("Cancel", this); tempVar2.setTitle("Close"); tempVar2.setIsDefault(true); tempVar2.setIsCancel(true); model.getCommands().add(tempVar2); } else if (noActiveStorage) { model.getCollapseSnapshots().setIsChangable(false); model.getForceOverride().setIsChangable(false); model.setMessage("The relevant Export Domain in not active. Please activate it."); UICommand tempVar3 = new UICommand("Cancel", this); tempVar3.setTitle("Close"); tempVar3.setIsDefault(true); tempVar3.setIsCancel(true); model.getCommands().add(tempVar3); } else { showWarningOnExistingVms(model); UICommand tempVar4 = new UICommand("OnExport", this); tempVar4.setTitle("OK"); tempVar4.setIsDefault(true); model.getCommands().add(tempVar4); UICommand tempVar5 = new UICommand("Cancel", this); tempVar5.setTitle("Cancel"); tempVar5.setIsCancel(true); model.getCommands().add(tempVar5); } } private void showWarningOnExistingVms(ExportVmModel model) { Guid storageDomainId = ((storage_domains)model.getStorage().getSelectedItem()).getid(); AsyncDataProvider.GetDataCentersByStorageDomain(new AsyncQuery(new Object[] { this, model }, new INewAsyncCallback() { @Override public void OnSuccess(Object target, Object returnValue) { Object[] array = (Object[])target; VmListModel vmListModel = (VmListModel)array[0]; ExportVmModel exportVmModel = (ExportVmModel)array[1]; java.util.ArrayList<storage_pool> storagePools = (java.util.ArrayList<storage_pool>)returnValue; vmListModel.PostShowWarningOnExistingVms(exportVmModel, storagePools); } }), storageDomainId); } private void PostShowWarningOnExistingVms(ExportVmModel exportModel, java.util.List<storage_pool> storagePools) { storage_pool storagePool = storagePools.size() > 0 ? storagePools.get(0) : null; String existingVMs = ""; if (storagePool != null) { AsyncQuery _asyncQuery = new AsyncQuery(); _asyncQuery.setModel(this); _asyncQuery.asyncCallback = new INewAsyncCallback() { public void OnSuccess(Object model, Object ReturnValue) { VmListModel vmListModel = (VmListModel)model; ExportVmModel exportModel1 = (ExportVmModel)vmListModel.getWindow(); String existingVMs = ""; if (ReturnValue != null) { for (Object selectedItem : vmListModel.getSelectedItems()) { VM vm = (VM)selectedItem; VM foundVm = null; VdcQueryReturnValue returnValue = (VdcQueryReturnValue)ReturnValue; for (VM a : (java.util.ArrayList<VM>)returnValue.getReturnValue()) { if (a.getvm_guid().equals(vm.getvm_guid())) { foundVm = a; break; } } if (foundVm != null) { existingVMs += "\u2022 " + vm.getvm_name() + "\n"; } } } if (!StringHelper.isNullOrEmpty(existingVMs)) { exportModel1.setMessage(StringFormat.format("VM(s):\n%1$s already exist on the target Export Domain. If you want to override them, please check the 'Force Override' check-box.", existingVMs)); } }}; Guid storageDomainId = ((storage_domains)exportModel.getStorage().getSelectedItem()).getid(); GetAllFromExportDomainQueryParamenters tempVar = new GetAllFromExportDomainQueryParamenters(storagePool.getId(), storageDomainId); tempVar.setGetAll(true); Frontend.RunQuery(VdcQueryType.GetVmsFromExportDomain, tempVar, _asyncQuery); } } private boolean SelectedVmsOnDifferentDataCenters() { java.util.ArrayList<VM> vms = new java.util.ArrayList<VM>(); for (Object selectedItem : getSelectedItems()) { VM a = (VM)selectedItem; vms.add(a); } java.util.Map<NGuid, java.util.ArrayList<VM>> t = new java.util.HashMap<NGuid, java.util.ArrayList<VM>>(); for (VM a : vms) { if (!t.containsKey(a.getstorage_pool_id())) { t.put(a.getstorage_pool_id(), new java.util.ArrayList<VM>()); } java.util.ArrayList<VM> list = t.get(a.getstorage_pool_id()); list.add(a); } return t.size() > 1; } private void GetTemplatesNotPresentOnExportDomain() { ExportVmModel model = (ExportVmModel)getWindow(); Guid storageDomainId = ((storage_domains)model.getStorage().getSelectedItem()).getid(); AsyncDataProvider.GetDataCentersByStorageDomain(new AsyncQuery(this, new INewAsyncCallback() { @Override public void OnSuccess(Object target, Object returnValue) { VmListModel vmListModel = (VmListModel)target; java.util.ArrayList<storage_pool> storagePools = (java.util.ArrayList<storage_pool>)returnValue; storage_pool storagePool = storagePools.size() > 0 ? storagePools.get(0) : null; vmListModel.PostGetTemplatesNotPresentOnExportDomain(storagePool); } }), storageDomainId); } private void PostGetTemplatesNotPresentOnExportDomain(storage_pool storagePool) { ExportVmModel model = (ExportVmModel)getWindow(); Guid storageDomainId = ((storage_domains)model.getStorage().getSelectedItem()).getid(); if (storagePool != null) { AsyncDataProvider.GetAllTemplatesFromExportDomain(new AsyncQuery(this, new INewAsyncCallback() { @Override public void OnSuccess(Object target, Object returnValue) { VmListModel vmListModel = (VmListModel)target; java.util.HashMap<VmTemplate, java.util.ArrayList<DiskImage>> templatesDiskSet = (java.util.HashMap<VmTemplate, java.util.ArrayList<DiskImage>>)returnValue; java.util.HashMap<String, java.util.ArrayList<String>> templateDic = new java.util.HashMap<String, java.util.ArrayList<String>>(); //check if relevant templates are already there for (Object selectedItem : vmListModel.getSelectedItems()) { VM vm = (VM)selectedItem; boolean hasMatch = false; for (VmTemplate a : templatesDiskSet.keySet()) { if (vm.getvmt_guid().equals(a.getId())) { hasMatch = true; break; } } if (!vm.getvmt_guid().equals(Guid.Empty) && !hasMatch) { if (!templateDic.containsKey(vm.getvmt_name())) { templateDic.put(vm.getvmt_name(), new java.util.ArrayList<String>()); } templateDic.get(vm.getvmt_name()).add(vm.getvm_name()); } } String tempStr; java.util.ArrayList<String> tempList; java.util.ArrayList<String> missingTemplates = new java.util.ArrayList<String>(); for (java.util.Map.Entry<String, java.util.ArrayList<String>> keyValuePair : templateDic.entrySet()) { tempList = keyValuePair.getValue(); tempStr = "Template " + keyValuePair.getKey() + " (for "; int i; for (i = 0; i < tempList.size() - 1; i++) { tempStr += tempList.get(i) + ", "; } tempStr += tempList.get(i) + ")"; missingTemplates.add(tempStr); } vmListModel.PostExportGetMissingTemplates(missingTemplates); } }), storagePool.getId(), storageDomainId); } } private void PostExportGetMissingTemplates(java.util.ArrayList<String> missingTemplatesFromVms) { ExportVmModel model = (ExportVmModel)getWindow(); Guid storageDomainId = ((storage_domains)model.getStorage().getSelectedItem()).getid(); java.util.ArrayList<VdcActionParametersBase> parameters = new java.util.ArrayList<VdcActionParametersBase>(); for (Object a : getSelectedItems()) { VM vm = (VM)a; MoveVmParameters parameter = new MoveVmParameters(vm.getvm_guid(), storageDomainId); parameter.setForceOverride((Boolean)model.getForceOverride().getEntity()); parameter.setCopyCollapse((Boolean)model.getCollapseSnapshots().getEntity()); parameter.setTemplateMustExists(true); parameters.add(parameter); } if (!(Boolean)model.getCollapseSnapshots().getEntity()) { if ((missingTemplatesFromVms == null || missingTemplatesFromVms.size() > 0)) { ConfirmationModel confirmModel = new ConfirmationModel(); setConfirmWindow(confirmModel); confirmModel.setTitle("Template(s) not Found on Export Domain"); confirmModel.setHashName("template_not_found_on_export_domain"); confirmModel.setMessage(missingTemplatesFromVms == null ? "Could not read templates from Export Domain" : "The following templates are missing on the target Export Domain:"); confirmModel.setItems(missingTemplatesFromVms); UICommand tempVar = new UICommand("OnExportNoTemplates", 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 { if (model.getProgress() != null) { return; } model.StartProgress(null); Frontend.RunMultipleAction(VdcActionType.ExportVm, parameters, new IFrontendMultipleActionAsyncCallback() { @Override public void Executed(FrontendMultipleActionAsyncResult result) { ExportVmModel localModel = (ExportVmModel)result.getState(); localModel.StopProgress(); Cancel(); } }, model); } } else { if (model.getProgress() != null) { return; } for (VdcActionParametersBase item : parameters) { MoveVmParameters parameter = (MoveVmParameters)item; parameter.setTemplateMustExists(false); } model.StartProgress(null); Frontend.RunMultipleAction(VdcActionType.ExportVm, parameters, new IFrontendMultipleActionAsyncCallback() { @Override public void Executed(FrontendMultipleActionAsyncResult result) { ExportVmModel localModel = (ExportVmModel)result.getState(); localModel.StopProgress(); Cancel(); } }, model); } } public void OnExport() { ExportVmModel model = (ExportVmModel)getWindow(); Guid storageDomainId = ((storage_domains)model.getStorage().getSelectedItem()).getid(); if (!model.Validate()) { return; } GetTemplatesNotPresentOnExportDomain(); } private void OnExportNoTemplates() { ExportVmModel model = (ExportVmModel)getWindow(); Guid storageDomainId = ((storage_domains)model.getStorage().getSelectedItem()).getid(); if (model.getProgress() != null) { return; } java.util.ArrayList<VdcActionParametersBase> list = new java.util.ArrayList<VdcActionParametersBase>(); for (Object item : getSelectedItems()) { VM a = (VM)item; MoveVmParameters parameters = new MoveVmParameters(a.getvm_guid(), storageDomainId); parameters.setForceOverride((Boolean)model.getForceOverride().getEntity()); parameters.setCopyCollapse((Boolean)model.getCollapseSnapshots().getEntity()); parameters.setTemplateMustExists(false); list.add(parameters); } model.StartProgress(null); Frontend.RunMultipleAction(VdcActionType.ExportVm, list, new IFrontendMultipleActionAsyncCallback() { @Override public void Executed(FrontendMultipleActionAsyncResult result) { ExportVmModel localModel = (ExportVmModel)result.getState(); localModel.StopProgress(); Cancel(); } }, model); } private void RunOnce() { VM vm = (VM)getSelectedItem(); RunOnceModel model = new RunOnceModel(); setWindow(model); model.setTitle("Run Virtual Machine(s)"); model.setHashName("run_virtual_machine"); model.getAttachIso().setEntity(false); model.getAttachFloppy().setEntity(false); model.getRunAsStateless().setEntity(vm.getis_stateless()); model.getRunAndPause().setEntity(false); model.setHwAcceleration(true); //passing Kernel parameters model.getKernel_parameters().setEntity(vm.getkernel_params()); model.getKernel_path().setEntity(vm.getkernel_url()); model.getInitrd_path().setEntity(vm.getinitrd_url()); // Custom Properties model.getCustomProperties().setEntity(vm.getCustomProperties()); model.setCustomPropertiesKeysList(getCustomPropertiesKeysList()); model.setIsLinux_Unassign_UnknownOS(DataProvider.IsLinuxOsType(vm.getvm_os()) || vm.getvm_os() == VmOsType.Unassigned || vm.getvm_os() == VmOsType.Other); model.getIsLinuxOptionsAvailable().setEntity(model.getIsLinux_Unassign_UnknownOS()); model.setIsWindowsOS(DataProvider.IsWindowsOsType(vm.getvm_os())); model.getIsVmFirstRun().setEntity(!vm.getis_initialized()); model.getSysPrepDomainName().setSelectedItem(vm.getvm_domain()); RunOnceUpdateDisplayProtocols(vm); RunOnceUpdateFloppy(vm, new java.util.ArrayList<String>()); RunOnceUpdateImages(vm); RunOnceUpdateDomains(); RunOnceUpdateBootSequence(vm); UICommand tempVar = new UICommand("OnRunOnce", 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 RunOnceUpdateDisplayProtocols(VM vm) { RunOnceModel model = (RunOnceModel)getWindow(); EntityModel tempVar = new EntityModel(); tempVar.setTitle("VNC"); tempVar.setEntity(DisplayType.vnc); EntityModel vncProtocol = tempVar; EntityModel tempVar2 = new EntityModel(); tempVar2.setTitle("Spice"); tempVar2.setEntity(DisplayType.qxl); EntityModel qxlProtocol = tempVar2; boolean isVncSelected = vm.getdefault_display_type() == DisplayType.vnc; model.getDisplayConsole_Vnc_IsSelected().setEntity(isVncSelected); model.getDisplayConsole_Spice_IsSelected().setEntity(!isVncSelected); java.util.ArrayList<EntityModel> items = new java.util.ArrayList<EntityModel>(); items.add(vncProtocol); items.add(qxlProtocol); model.getDisplayProtocol().setItems(items); model.getDisplayProtocol().setSelectedItem(isVncSelected ? vncProtocol : qxlProtocol); } private void RunOnceUpdateBootSequence(VM vm) { AsyncQuery _asyncQuery = new AsyncQuery(); _asyncQuery.setModel(this); _asyncQuery.asyncCallback = new INewAsyncCallback() { public void OnSuccess(Object model, Object ReturnValue) { VmListModel vmListModel = (VmListModel)model; RunOnceModel runOnceModel = (RunOnceModel)vmListModel.getWindow(); boolean hasNics = ((java.util.ArrayList<VmNetworkInterface>)((VdcQueryReturnValue)ReturnValue).getReturnValue()).size() > 0; if (!hasNics) { BootSequenceModel bootSequenceModel = runOnceModel.getBootSequence(); bootSequenceModel.getNetworkOption().setIsChangable(false); bootSequenceModel.getNetworkOption().getChangeProhibitionReasons().add("Virtual Machine must have at least one network interface defined to boot from network."); } }}; Frontend.RunQuery(VdcQueryType.GetVmInterfacesByVmId, new GetVmByVmIdParameters(vm.getvm_guid()), _asyncQuery); } private void RunOnceUpdateDomains() { RunOnceModel model = (RunOnceModel)getWindow(); // Update Domain list AsyncDataProvider.GetDomainList(new AsyncQuery(model, new INewAsyncCallback() { @Override public void OnSuccess(Object target, Object returnValue) { RunOnceModel runOnceModel = (RunOnceModel)target; java.util.List<String> domains = (java.util.List<String>)returnValue; String oldDomain = (String)runOnceModel.getSysPrepDomainName().getSelectedItem(); if (oldDomain != null && !oldDomain.equals("") && !domains.contains(oldDomain)) { domains.add(0, oldDomain); } runOnceModel.getSysPrepDomainName().setItems(domains); String selectedDomain = (oldDomain != null) ? oldDomain : Linq.FirstOrDefault(domains); if (!StringHelper.stringsEqual(selectedDomain, "")) { runOnceModel.getSysPrepDomainName().setSelectedItem(selectedDomain); } } }), true); } public void RunOnceUpdateFloppy(VM vm, java.util.ArrayList<String> images) { RunOnceModel model = (RunOnceModel)getWindow(); if (DataProvider.IsWindowsOsType(vm.getvm_os())) { // Add a pseudo floppy disk image used for Windows' sysprep. if (!vm.getis_initialized()) { images.add(0, "[sysprep]"); model.getAttachFloppy().setEntity(true); } else { images.add("[sysprep]"); } } model.getFloppyImage().setItems(images); if (model.getFloppyImage().getIsChangable() && model.getFloppyImage().getSelectedItem() == null) { model.getFloppyImage().setSelectedItem(Linq.FirstOrDefault(images)); } } private void RunOnceUpdateImages(VM vm) { AsyncQuery _asyncQuery0 = new AsyncQuery(); _asyncQuery0.setModel(this); _asyncQuery0.asyncCallback = new INewAsyncCallback() { public void OnSuccess(Object model0, Object result0) { if (result0 != null) { storage_domains isoDomain = (storage_domains)result0; VmListModel vmListModel = (VmListModel)model0; AsyncQuery _asyncQuery1 = new AsyncQuery(); _asyncQuery1.setModel(vmListModel); _asyncQuery1.asyncCallback = new INewAsyncCallback() { public void OnSuccess(Object model1, Object result) { VmListModel vmListModel1 = (VmListModel)model1; RunOnceModel runOnceModel = (RunOnceModel)vmListModel1.getWindow(); java.util.ArrayList<String> images = (java.util.ArrayList<String>)result; runOnceModel.getIsoImage().setItems(images); if (runOnceModel.getIsoImage().getIsChangable() && runOnceModel.getIsoImage().getSelectedItem() == null) { runOnceModel.getIsoImage().setSelectedItem(Linq.FirstOrDefault(images)); } }}; AsyncDataProvider.GetIrsImageList(_asyncQuery1, isoDomain.getid(), false); AsyncQuery _asyncQuery2 = new AsyncQuery(); _asyncQuery2.setModel(vmListModel); _asyncQuery2.asyncCallback = new INewAsyncCallback() { public void OnSuccess(Object model2, Object result) { VmListModel vmListModel2 = (VmListModel)model2; VM selectedVM = (VM)vmListModel2.getSelectedItem(); java.util.ArrayList<String> images = (java.util.ArrayList<String>)result; vmListModel2.RunOnceUpdateFloppy(selectedVM, images); }}; AsyncDataProvider.GetFloppyImageList(_asyncQuery2, isoDomain.getid(), false); } }}; AsyncDataProvider.GetIsoDomainByDataCenterId(_asyncQuery0, vm.getstorage_pool_id()); } private void OnRunOnce() { VM vm = (VM)getSelectedItem(); if (vm == null) { Cancel(); return; } RunOnceModel model = (RunOnceModel)getWindow(); if (!model.Validate()) { return; } BootSequenceModel bootSequenceModel = model.getBootSequence(); RunVmOnceParams tempVar = new RunVmOnceParams(); tempVar.setVmId(vm.getvm_guid()); tempVar.setBootSequence(bootSequenceModel.getSequence()); tempVar.setDiskPath((Boolean)model.getAttachIso().getEntity() ? (String)model.getIsoImage().getSelectedItem() : ""); tempVar.setFloppyPath(model.getFloppyImagePath()); tempVar.setKvmEnable(model.getHwAcceleration()); tempVar.setRunAndPause((Boolean)model.getRunAndPause().getEntity()); tempVar.setAcpiEnable(true); tempVar.setRunAsStateless((Boolean)model.getRunAsStateless().getEntity()); tempVar.setReinitialize(model.getReinitialize()); tempVar.setCustomProperties((String)model.getCustomProperties().getEntity()); RunVmOnceParams param = tempVar; //kernel params if (model.getKernel_path().getEntity() != null) { param.setkernel_url((String)model.getKernel_path().getEntity()); } if (model.getKernel_parameters().getEntity() != null) { param.setkernel_params((String)model.getKernel_parameters().getEntity()); } if (model.getInitrd_path().getEntity() != null) { param.setinitrd_url((String)model.getInitrd_path().getEntity()); } //Sysprep params if (model.getSysPrepDomainName().getSelectedItem() != null) { param.setSysPrepDomainName(model.getSysPrepSelectedDomainName().getEntity().equals("") ? (String)model.getSysPrepSelectedDomainName().getEntity() : (String)model.getSysPrepDomainName().getSelectedItem()); } if (model.getSysPrepUserName().getEntity() != null) { param.setSysPrepUserName((String)model.getSysPrepUserName().getEntity()); } if (model.getSysPrepPassword().getEntity() != null) { param.setSysPrepPassword((String)model.getSysPrepPassword().getEntity()); } EntityModel displayProtocolSelectedItem = (EntityModel)model.getDisplayProtocol().getSelectedItem(); param.setUseVnc((DisplayType)displayProtocolSelectedItem.getEntity() == DisplayType.vnc); if ((Boolean)model.getDisplayConsole_Vnc_IsSelected().getEntity() || (Boolean)model.getDisplayConsole_Spice_IsSelected().getEntity()) { param.setUseVnc((Boolean)model.getDisplayConsole_Vnc_IsSelected().getEntity()); } Frontend.RunAction(VdcActionType.RunVmOnce, param, new IFrontendActionAsyncCallback() { @Override public void Executed(FrontendActionAsyncResult result) { } }, this); Cancel(); } private void NewTemplate() { VM vm = (VM)getSelectedItem(); if (vm == null) { return; } if (getWindow() != null) { return; } UnitVmModel model = new UnitVmModel(new NewTemplateVmModelBehavior(vm)); setWindow(model); model.setTitle("New Template"); model.setHashName("new_template"); model.setIsNew(true); model.setVmType(vm.getvm_type()); model.Initialize(getSystemTreeSelectedItem()); UICommand tempVar = new UICommand("OnNewTemplate", 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 DisableNewTemplateModel(VmModel model, String errMessage) { model.setMessage(errMessage); model.getName().setIsChangable(false); model.getDescription().setIsChangable(false); model.getCluster().setIsChangable(false); model.getStorageDomain().setIsChangable(false); model.getIsTemplatePublic().setIsChangable(false); UICommand tempVar = new UICommand("Cancel", this); tempVar.setTitle("Close"); tempVar.setIsCancel(true); model.getCommands().add(tempVar); } private void OnNewTemplate() { UnitVmModel model = (UnitVmModel)getWindow(); VM vm = (VM)getSelectedItem(); if (vm == null) { Cancel(); return; } if (model.getProgress() != null) { return; } if (!model.Validate()) { model.setIsValid(false); } else { String name = (String)model.getName().getEntity(); //Check name unicitate. AsyncDataProvider.IsTemplateNameUnique(new AsyncQuery(this, new INewAsyncCallback() { @Override public void OnSuccess(Object target, Object returnValue) { VmListModel vmListModel = (VmListModel)target; boolean isNameUnique = (Boolean)returnValue; if (!isNameUnique) { UnitVmModel VmModel = (UnitVmModel)vmListModel.getWindow(); VmModel.getInvalidityReasons().clear(); VmModel.getName().getInvalidityReasons().add("Name must be unique."); VmModel.getName().setIsValid(false); VmModel.setIsValid(false); } else { vmListModel.PostNameUniqueCheck(); } } }), name); } } public void PostNameUniqueCheck() { UnitVmModel model = (UnitVmModel)getWindow(); VM vm = (VM)getSelectedItem(); VM tempVar = new VM(); tempVar.setvm_guid(vm.getvm_guid()); tempVar.setvm_type(model.getVmType()); tempVar.setvm_os((VmOsType)model.getOSType().getSelectedItem()); tempVar.setnum_of_monitors((Integer)model.getNumOfMonitors().getSelectedItem()); tempVar.setvm_domain(model.getDomain().getIsAvailable() ? (String)model.getDomain().getSelectedItem() : ""); tempVar.setvm_mem_size_mb((Integer)model.getMemSize().getEntity()); tempVar.setMinAllocatedMem((Integer)model.getMinAllocatedMemory().getEntity()); tempVar.setvds_group_id(((VDSGroup)model.getCluster().getSelectedItem()).getID()); tempVar.settime_zone(model.getTimeZone().getIsAvailable() && model.getTimeZone().getSelectedItem() != null ? ((java.util.Map.Entry<String, String>)model.getTimeZone().getSelectedItem()).getKey() : ""); tempVar.setnum_of_sockets((Integer)model.getNumOfSockets().getEntity()); tempVar.setcpu_per_socket((Integer)model.getTotalCPUCores().getEntity() / (Integer)model.getNumOfSockets().getEntity()); tempVar.setusb_policy((UsbPolicy)model.getUsbPolicy().getSelectedItem()); tempVar.setis_auto_suspend(false); tempVar.setis_stateless((Boolean)model.getIsStateless().getEntity()); tempVar.setdefault_boot_sequence(model.getBootSequence()); tempVar.setauto_startup((Boolean)model.getIsHighlyAvailable().getEntity()); tempVar.setiso_path(model.getCdImage().getIsChangable() ? (String)model.getCdImage().getSelectedItem() : ""); tempVar.setinitrd_url(vm.getinitrd_url()); tempVar.setkernel_url(vm.getkernel_url()); tempVar.setkernel_params(vm.getkernel_params()); VM newvm = tempVar; EntityModel displayProtocolSelectedItem = (EntityModel)model.getDisplayProtocol().getSelectedItem(); newvm.setdefault_display_type((DisplayType)displayProtocolSelectedItem.getEntity()); EntityModel prioritySelectedItem = (EntityModel)model.getPriority().getSelectedItem(); newvm.setpriority((Integer)prioritySelectedItem.getEntity()); AddVmTemplateParameters addVmTemplateParameters = new AddVmTemplateParameters(newvm, (String)model.getName().getEntity(), (String)model.getDescription().getEntity()); addVmTemplateParameters.setDestinationStorageDomainId(((storage_domains)model.getStorageDomain().getSelectedItem()).getid()); addVmTemplateParameters.setPublicUse((Boolean)model.getIsTemplatePublic().getEntity()); model.StartProgress(null); Frontend.RunAction(VdcActionType.AddVmTemplate, addVmTemplateParameters, new IFrontendActionAsyncCallback() { @Override public void Executed(FrontendActionAsyncResult result) { VmListModel vmListModel = (VmListModel)result.getState(); vmListModel.getWindow().StopProgress(); VdcReturnValueBase returnValueBase = result.getReturnValue(); if (returnValueBase != null && returnValueBase.getSucceeded()) { vmListModel.Cancel(); } } }, this); } private void Migrate() { VM vm = (VM)getSelectedItem(); if (vm == null) { return; } if (getWindow() != null) { return; } MigrateModel model = new MigrateModel(); setWindow(model); model.setTitle("Migrate Virtual Machine(s)"); model.setHashName("migrate_virtual_machine"); model.setVmsOnSameCluster(true); model.setIsAutoSelect(true); model.setVmList(Linq.<VM>Cast(getSelectedItems())); AsyncDataProvider.GetUpHostListByCluster(new AsyncQuery(this, new INewAsyncCallback() { @Override public void OnSuccess(Object target, Object returnValue) { VmListModel vmListModel = (VmListModel)target; vmListModel.PostMigrateGetUpHosts((java.util.ArrayList<VDS>) returnValue); } }), vm.getvds_group_name()); } private void PostMigrateGetUpHosts(java.util.ArrayList<VDS> hosts) { MigrateModel model = (MigrateModel) getWindow(); NGuid run_on_vds = null; boolean allRunOnSameVds = true; for (Object item : getSelectedItems()) { VM a = (VM)item; if (!a.getvds_group_id().equals(((VM)getSelectedItems().get(0)).getvds_group_id())) { model.setVmsOnSameCluster(false); } if (run_on_vds == null) { run_on_vds = a.getrun_on_vds().getValue(); } else if(allRunOnSameVds && !run_on_vds.equals(a.getrun_on_vds().getValue())) { allRunOnSameVds = false; } } model.setIsHostSelAvailable(model.getVmsOnSameCluster() && hosts.size() > 0); if (model.getVmsOnSameCluster() && allRunOnSameVds) { VDS runOnSameVDS = null; for (VDS host : hosts) { if(host.getvds_id().equals(run_on_vds)) { runOnSameVDS = host; } } hosts.remove(runOnSameVDS); } if (hosts.isEmpty()) { model.setIsHostSelAvailable(false); if (allRunOnSameVds) { model.setNoSelAvailable(true); UICommand tempVar = new UICommand("Cancel", this); tempVar.setTitle("Close"); tempVar.setIsDefault(true); tempVar.setIsCancel(true); model.getCommands().add(tempVar); } } else { model.getHosts().setItems(hosts); model.getHosts().setSelectedItem(Linq.FirstOrDefault(hosts)); UICommand tempVar2 = new UICommand("OnMigrate", 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 OnMigrate() { MigrateModel model = (MigrateModel)getWindow(); if (model.getProgress() != null) { return; } model.StartProgress(null); if (model.getIsAutoSelect()) { java.util.ArrayList<VdcActionParametersBase> list = new java.util.ArrayList<VdcActionParametersBase>(); for (Object item : getSelectedItems()) { VM a = (VM)item; list.add(new MigrateVmParameters(true, a.getvm_guid())); } Frontend.RunMultipleAction(VdcActionType.MigrateVm, list, new IFrontendMultipleActionAsyncCallback() { @Override public void Executed(FrontendMultipleActionAsyncResult result) { MigrateModel localModel = (MigrateModel)result.getState(); localModel.StopProgress(); Cancel(); } }, model); } else { java.util.ArrayList<VdcActionParametersBase> list = new java.util.ArrayList<VdcActionParametersBase>(); for (Object item : getSelectedItems()) { VM a = (VM)item; if (a.getrun_on_vds().getValue().equals(((VDS)model.getHosts().getSelectedItem()).getvds_id())) { continue; } list.add(new MigrateVmToServerParameters(true, a.getvm_guid(), ((VDS)model.getHosts().getSelectedItem()).getvds_id())); } Frontend.RunMultipleAction(VdcActionType.MigrateVmToServer, list, new IFrontendMultipleActionAsyncCallback() { @Override public void Executed(FrontendMultipleActionAsyncResult result) { MigrateModel localModel = (MigrateModel)result.getState(); localModel.StopProgress(); Cancel(); } }, model); } } private void Shutdown() { ConfirmationModel model = new ConfirmationModel(); setWindow(model); model.setTitle("Shut down Virtual Machine(s)"); model.setHashName("shut_down_virtual_machine"); model.setMessage("Are you sure you want to Shut down the following Virtual Machines?"); //model.Items = SelectedItems.Cast<VM>().Select(a => a.vm_name); java.util.ArrayList<String> items = new java.util.ArrayList<String>(); for (Object item : getSelectedItems()) { VM a = (VM)item; items.add(a.getvm_name()); } model.setItems(items); UICommand tempVar = new UICommand("OnShutdown", 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 OnShutdown() { ConfirmationModel model = (ConfirmationModel)getWindow(); if (model.getProgress() != null) { return; } java.util.ArrayList<VdcActionParametersBase> list = new java.util.ArrayList<VdcActionParametersBase>(); for (Object item : getSelectedItems()) { VM a = (VM)item; list.add(new ShutdownVmParameters(a.getvm_guid(), true)); } model.StartProgress(null); Frontend.RunMultipleAction(VdcActionType.ShutdownVm, list, new IFrontendMultipleActionAsyncCallback() { @Override public void Executed(FrontendMultipleActionAsyncResult result) { ConfirmationModel localModel = (ConfirmationModel)result.getState(); localModel.StopProgress(); Cancel(); } }, model); } private void stop() { ConfirmationModel model = new ConfirmationModel(); setWindow(model); model.setTitle("Stop Virtual Machine(s)"); model.setHashName("stop_virtual_machine"); model.setMessage("Are you sure you want to Stop the following Virtual Machines?"); //model.Items = SelectedItems.Cast<VM>().Select(a => a.vm_name); java.util.ArrayList<String> items = new java.util.ArrayList<String>(); for (Object item : getSelectedItems()) { VM a = (VM)item; items.add(a.getvm_name()); } model.setItems(items); UICommand tempVar = new UICommand("OnStop", 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 OnStop() { ConfirmationModel model = (ConfirmationModel)getWindow(); if (model.getProgress() != null) { return; } java.util.ArrayList<VdcActionParametersBase> list = new java.util.ArrayList<VdcActionParametersBase>(); for (Object item : getSelectedItems()) { VM a = (VM)item; list.add(new StopVmParameters(a.getvm_guid(), StopVmTypeEnum.NORMAL)); } model.StartProgress(null); Frontend.RunMultipleAction(VdcActionType.StopVm, list, new IFrontendMultipleActionAsyncCallback() { @Override public void Executed(FrontendMultipleActionAsyncResult result) { ConfirmationModel localModel = (ConfirmationModel)result.getState(); localModel.StopProgress(); Cancel(); } }, model); } private void Pause() { java.util.ArrayList<VdcActionParametersBase> list = new java.util.ArrayList<VdcActionParametersBase>(); for (Object item : getSelectedItems()) { VM a = (VM)item; list.add(new HibernateVmParameters(a.getvm_guid())); } Frontend.RunMultipleAction(VdcActionType.HibernateVm, list, new IFrontendMultipleActionAsyncCallback() { @Override public void Executed(FrontendMultipleActionAsyncResult result) { } }, null); } private void Run() { java.util.ArrayList<VdcActionParametersBase> list = new java.util.ArrayList<VdcActionParametersBase>(); for (Object item : getSelectedItems()) { VM a = (VM)item; //use sysprep iff the vm is not initialized and vm has Win OS boolean reinitialize = !a.getis_initialized() && DataProvider.IsWindowsOsType(a.getvm_os()); RunVmParams tempVar = new RunVmParams(a.getvm_guid()); tempVar.setReinitialize(reinitialize); list.add(tempVar); } Frontend.RunMultipleAction(VdcActionType.RunVm, list, new IFrontendMultipleActionAsyncCallback() { @Override public void Executed(FrontendMultipleActionAsyncResult result) { } }, null); } private void OnRemove() { ConfirmationModel model = (ConfirmationModel)getWindow(); if (model.getProgress() != null) { return; } java.util.ArrayList<VdcActionParametersBase> list = new java.util.ArrayList<VdcActionParametersBase>(); for (Object item : getSelectedItems()) { VM a = (VM)item; list.add(new RemoveVmParameters(a.getvm_guid(), false)); } model.StartProgress(null); Frontend.RunMultipleAction(VdcActionType.RemoveVm, list, new IFrontendMultipleActionAsyncCallback() { @Override public void Executed(FrontendMultipleActionAsyncResult result) { ConfirmationModel localModel = (ConfirmationModel)result.getState(); localModel.StopProgress(); Cancel(); } }, model); } private void ChangeCD() { VM vm = (VM)getSelectedItem(); if (vm == null) { return; } AttachCdModel model = new AttachCdModel(); setWindow(model); model.setTitle("Change CD"); model.setHashName("change_cd"); AsyncQuery _asyncQuery1 = new AsyncQuery(); _asyncQuery1.setModel(this); _asyncQuery1.asyncCallback = new INewAsyncCallback() { public void OnSuccess(Object model1, Object result1) { VmListModel vmListModel1 = (VmListModel)model1; AttachCdModel attachCdModel = (AttachCdModel) vmListModel1.getWindow(); java.util.ArrayList<String> images1 = new java.util.ArrayList<String>(java.util.Arrays.asList(new String[] { "No CDs" })); attachCdModel.getIsoImage().setItems(images1); attachCdModel.getIsoImage().setSelectedItem(Linq.FirstOrDefault(images1)); if (result1 != null) { storage_domains isoDomain = (storage_domains)result1; AsyncQuery _asyncQuery2 = new AsyncQuery(); _asyncQuery2.setModel(vmListModel1); _asyncQuery2.asyncCallback = new INewAsyncCallback() { public void OnSuccess(Object model2, Object result2) { VmListModel vmListModel2 = (VmListModel)model2; AttachCdModel _attachCdModel = (AttachCdModel)vmListModel2.getWindow(); java.util.ArrayList<String> images2 = (java.util.ArrayList<String>)result2; if (images2.size() > 0) { images2.add(0, ConsoleModel.EjectLabel); _attachCdModel.getIsoImage().setItems(images2); } if (_attachCdModel.getIsoImage().getIsChangable()) { _attachCdModel.getIsoImage().setSelectedItem(Linq.FirstOrDefault(images2)); } }}; AsyncDataProvider.GetIrsImageList(_asyncQuery2, isoDomain.getid(), false); } }}; AsyncDataProvider.GetIsoDomainByDataCenterId(_asyncQuery1, vm.getstorage_pool_id()); UICommand tempVar = new UICommand("OnChangeCD", 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 OnChangeCD() { VM vm = (VM)getSelectedItem(); if (vm == null) { Cancel(); return; } AttachCdModel model = (AttachCdModel)getWindow(); if (model.getProgress() != null) { return; } String isoName = (StringHelper.stringsEqual(model.getIsoImage().getSelectedItem().toString(), ConsoleModel.EjectLabel)) ? "" : model.getIsoImage().getSelectedItem().toString(); model.StartProgress(null); Frontend.RunAction(VdcActionType.ChangeDisk, new ChangeDiskCommandParameters(vm.getvm_guid(), isoName), new IFrontendActionAsyncCallback() { @Override public void Executed(FrontendActionAsyncResult result) { AttachCdModel attachCdModel = (AttachCdModel)result.getState(); attachCdModel.StopProgress(); Cancel(); } }, model); } private void OnSave() { UnitVmModel model = (UnitVmModel)getWindow(); VM selectedItem = (VM)getSelectedItem(); if (model.getIsNew() == false && selectedItem == null) { Cancel(); return; } setcurrentVm(model.getIsNew() ? new VM() : (VM)Cloner.clone(selectedItem)); if (!model.Validate()) { return; } String name = (String)model.getName().getEntity(); //Check name unicitate. if (!DataProvider.IsVmNameUnique(name) && name.compareToIgnoreCase(getcurrentVm().getvm_name()) != 0) { model.getName().setIsValid(false); model.getName().getInvalidityReasons().add("Name must be unique."); model.setIsGeneralTabValid(false); return; } //Save changes. VmTemplate template = (VmTemplate)model.getTemplate().getSelectedItem(); getcurrentVm().setvm_type(model.getVmType()); getcurrentVm().setvmt_guid(template.getId()); getcurrentVm().setvm_name(name); getcurrentVm().setvm_os((VmOsType)model.getOSType().getSelectedItem()); getcurrentVm().setnum_of_monitors((Integer)model.getNumOfMonitors().getSelectedItem()); getcurrentVm().setvm_description((String)model.getDescription().getEntity()); getcurrentVm().setvm_domain(model.getDomain().getIsAvailable() ? (String)model.getDomain().getSelectedItem() : ""); getcurrentVm().setvm_mem_size_mb((Integer)model.getMemSize().getEntity()); getcurrentVm().setMinAllocatedMem((Integer)model.getMinAllocatedMemory().getEntity()); Guid newClusterID = ((VDSGroup)model.getCluster().getSelectedItem()).getID(); getcurrentVm().setvds_group_id(newClusterID); getcurrentVm().settime_zone((model.getTimeZone().getIsAvailable() && model.getTimeZone().getSelectedItem() != null) ? ((java.util.Map.Entry<String, String>)model.getTimeZone().getSelectedItem()).getKey() : ""); getcurrentVm().setnum_of_sockets((Integer)model.getNumOfSockets().getEntity()); getcurrentVm().setcpu_per_socket((Integer)model.getTotalCPUCores().getEntity() / (Integer)model.getNumOfSockets().getEntity()); getcurrentVm().setusb_policy((UsbPolicy)model.getUsbPolicy().getSelectedItem()); getcurrentVm().setis_auto_suspend(false); getcurrentVm().setis_stateless((Boolean)model.getIsStateless().getEntity()); getcurrentVm().setdefault_boot_sequence(model.getBootSequence()); getcurrentVm().setiso_path(model.getCdImage().getIsChangable() ? (String)model.getCdImage().getSelectedItem() : ""); getcurrentVm().setauto_startup((Boolean)model.getIsHighlyAvailable().getEntity()); getcurrentVm().setinitrd_url((String)model.getInitrd_path().getEntity()); getcurrentVm().setkernel_url((String)model.getKernel_path().getEntity()); getcurrentVm().setkernel_params((String)model.getKernel_parameters().getEntity()); getcurrentVm().setCustomProperties((String)model.getCustomProperties().getEntity()); EntityModel displayProtocolSelectedItem = (EntityModel)model.getDisplayProtocol().getSelectedItem(); getcurrentVm().setdefault_display_type((DisplayType)displayProtocolSelectedItem.getEntity()); EntityModel prioritySelectedItem = (EntityModel)model.getPriority().getSelectedItem(); getcurrentVm().setpriority((Integer)prioritySelectedItem.getEntity()); VDS defaultHost = (VDS)model.getDefaultHost().getSelectedItem(); if ((Boolean)model.getIsAutoAssign().getEntity()) { getcurrentVm().setdedicated_vm_for_vds(null); } else { getcurrentVm().setdedicated_vm_for_vds(defaultHost.getvds_id()); } getcurrentVm().setMigrationSupport(MigrationSupport.MIGRATABLE); if ((Boolean)model.getRunVMOnSpecificHost().getEntity()) { getcurrentVm().setMigrationSupport(MigrationSupport.PINNED_TO_HOST); } else if ((Boolean)model.getDontMigrateVM().getEntity()) { getcurrentVm().setMigrationSupport(MigrationSupport.IMPLICITLY_NON_MIGRATABLE); } if (model.getIsNew()) { if (getcurrentVm().getvmt_guid().equals(Guid.Empty)) { if (model.getProgress() != null) { return; } model.StartProgress(null); Frontend.RunAction(VdcActionType.AddVmFromScratch, new AddVmFromScratchParameters(getcurrentVm(), new java.util.ArrayList<DiskImageBase>(), Guid.Empty), new IFrontendActionAsyncCallback() { @Override public void Executed(FrontendActionAsyncResult result) { VmListModel vmListModel = (VmListModel)result.getState(); vmListModel.getWindow().StopProgress(); VdcReturnValueBase returnValueBase = result.getReturnValue(); if (returnValueBase != null && returnValueBase.getSucceeded()) { vmListModel.Cancel(); vmListModel.setGuideContext(returnValueBase.getActionReturnValue()); vmListModel.UpdateActionAvailability(); vmListModel.getGuideCommand().Execute(); } } }, this); } else { if (model.getProgress() != null) { return; } if ((Boolean)((EntityModel)model.getProvisioning().getSelectedItem()).getEntity()) { model.StartProgress(null); AsyncQuery _asyncQuery = new AsyncQuery(); _asyncQuery.setModel(this); _asyncQuery.asyncCallback = new INewAsyncCallback() { public void OnSuccess(Object model1, Object result1) { VmListModel vmListModel = (VmListModel)model1; java.util.ArrayList<DiskImage> templateDisks = (java.util.ArrayList<DiskImage>)result1; UnitVmModel unitVmModel = (UnitVmModel)vmListModel.getWindow(); storage_domains storageDomain = (storage_domains)unitVmModel.getStorageDomain().getSelectedItem(); for (DiskImage templateDisk : templateDisks) { DiskModel disk = null; for (DiskModel a : unitVmModel.getDisks()) { if (StringHelper.stringsEqual(a.getName(), templateDisk.getinternal_drive_mapping())) { disk = a; break; } } templateDisk.setvolume_type((VolumeType)disk.getVolumeType().getSelectedItem()); templateDisk.setvolume_format(DataProvider.GetDiskVolumeFormat((VolumeType)disk.getVolumeType().getSelectedItem(), storageDomain.getstorage_type())); } java.util.HashMap<String, DiskImageBase> dict = new java.util.HashMap<String, DiskImageBase>(); for (DiskImage a : templateDisks) { dict.put(a.getinternal_drive_mapping(), a); } AddVmFromTemplateParameters parameters = new AddVmFromTemplateParameters(vmListModel.getcurrentVm(), dict, storageDomain.getid()); parameters.setMakeCreatorExplicitOwner(true); Frontend.RunAction(VdcActionType.AddVmFromTemplate, new AddVmFromTemplateParameters(getcurrentVm(), dict, storageDomain.getid()), new IFrontendActionAsyncCallback() { @Override public void Executed(FrontendActionAsyncResult result) { VmListModel vmListModel1 = (VmListModel)result.getState(); vmListModel1.getWindow().StopProgress(); VdcReturnValueBase returnValueBase = result.getReturnValue(); if (returnValueBase != null && returnValueBase.getSucceeded()) { vmListModel1.Cancel(); } } }, vmListModel); }}; AsyncDataProvider.GetTemplateDiskList(_asyncQuery, template.getId()); } else { if (model.getProgress() != null) { return; } model.StartProgress(null); storage_domains storageDomain = (storage_domains)model.getStorageDomain().getSelectedItem(); VmManagementParametersBase tempVar = new VmManagementParametersBase(getcurrentVm()); tempVar.setStorageDomainId(storageDomain.getid()); Frontend.RunAction(VdcActionType.AddVm, tempVar, new IFrontendActionAsyncCallback() { @Override public void Executed(FrontendActionAsyncResult result) { VmListModel vmListModel = (VmListModel)result.getState(); vmListModel.getWindow().StopProgress(); VdcReturnValueBase returnValueBase = result.getReturnValue(); if (returnValueBase != null && returnValueBase.getSucceeded()) { vmListModel.Cancel(); } } }, this); } } } else // Update existing VM -> consists of editing VM cluster, and if succeeds - editing VM: { if (model.getProgress() != null) { return; } // runEditVM: should be true if Cluster hasn't changed or if // Cluster has changed and Editing it in the Backend has succeeded: Guid oldClusterID = selectedItem.getvds_group_id(); if (oldClusterID.equals(newClusterID) == false) { ChangeVMClusterParameters parameters = new ChangeVMClusterParameters(newClusterID, getcurrentVm().getvm_guid()); model.StartProgress(null); Frontend.RunAction(VdcActionType.ChangeVMCluster, parameters, new IFrontendActionAsyncCallback() { @Override public void Executed(FrontendActionAsyncResult result) { VmListModel vmListModel = (VmListModel)result.getState(); VdcReturnValueBase returnValueBase = result.getReturnValue(); if (returnValueBase != null && returnValueBase.getSucceeded()) { Frontend.RunAction(VdcActionType.UpdateVm, new VmManagementParametersBase(vmListModel.getcurrentVm()), new IFrontendActionAsyncCallback() { @Override public void Executed(FrontendActionAsyncResult result1) { VmListModel vmListModel1 = (VmListModel)result1.getState(); vmListModel1.getWindow().StopProgress(); VdcReturnValueBase retVal = result1.getReturnValue(); boolean isSucceeded = retVal.getSucceeded(); if (retVal != null && isSucceeded) { vmListModel1.Cancel(); } } }, vmListModel); } else { vmListModel.getWindow().StopProgress(); } } }, this); } else { if (model.getProgress() != null) { return; } model.StartProgress(null); Frontend.RunAction(VdcActionType.UpdateVm, new VmManagementParametersBase(getcurrentVm()), new IFrontendActionAsyncCallback() { @Override public void Executed(FrontendActionAsyncResult result) { VmListModel vmListModel = (VmListModel)result.getState(); vmListModel.getWindow().StopProgress(); VdcReturnValueBase returnValueBase = result.getReturnValue(); if (returnValueBase != null && returnValueBase.getSucceeded()) { vmListModel.Cancel(); } } }, this); } } } private void RetrieveIsoImages() { Object tempVar = getSelectedItem(); VM vm = (VM)((tempVar instanceof VM) ? tempVar : null); if (vm == null) { return; } Guid storagePoolId = vm.getstorage_pool_id(); getIsoImages().clear(); ChangeCDModel tempVar2 = new ChangeCDModel(); tempVar2.setTitle(ConsoleModel.EjectLabel); ChangeCDModel ejectModel = tempVar2; ejectModel.getExecutedEvent().addListener(this); getIsoImages().add(ejectModel); java.util.ArrayList<String> list = DataProvider.GetIrsImageList(storagePoolId, false); if (list.size() > 0) { for (String iso : list) { ChangeCDModel tempVar3 = new ChangeCDModel(); tempVar3.setTitle(iso); ChangeCDModel model = tempVar3; //model.Executed += changeCD; model.getExecutedEvent().addListener(this); getIsoImages().add(model); } } else { ChangeCDModel tempVar4 = new ChangeCDModel(); tempVar4.setTitle("No CDs"); getIsoImages().add(tempVar4); } } private void changeCD(Object sender, EventArgs e) { ChangeCDModel model = (ChangeCDModel)sender; //TODO: Patch! String isoName = model.getTitle(); if (StringHelper.stringsEqual(isoName, "No CDs")) { return; } Object tempVar = getSelectedItem(); VM vm = (VM)((tempVar instanceof VM) ? tempVar : null); if (vm == null) { return; } Frontend.RunMultipleAction(VdcActionType.ChangeDisk, new java.util.ArrayList<VdcActionParametersBase>(java.util.Arrays.asList(new VdcActionParametersBase[] { new ChangeDiskCommandParameters(vm.getvm_guid(), StringHelper.stringsEqual(isoName, ConsoleModel.EjectLabel) ? "" : isoName) })), new IFrontendMultipleActionAsyncCallback() { @Override public void Executed(FrontendMultipleActionAsyncResult result) { } }, null); } public void Cancel() { Frontend.Unsubscribe(); CancelConfirmation(); setGuideContext(null); setWindow(null); UpdateActionAvailability(); } private void CancelConfirmation() { setConfirmWindow(null); } public void CancelError() { setErrorWindow(null); } @Override protected void OnSelectedItemChanged() { super.OnSelectedItemChanged(); UpdateActionAvailability(); UpdateConsoleModels(); } @Override protected void SelectedItemsChanged() { super.SelectedItemsChanged(); UpdateActionAvailability(); UpdateConsoleModels(); } @Override protected void SelectedItemPropertyChanged(Object sender, PropertyChangedEventArgs e) { super.SelectedItemPropertyChanged(sender, e); //C# TO JAVA CONVERTER NOTE: The following 'switch' operated on a string member and was converted to Java 'if-else' logic: // switch (e.PropertyName) //ORIGINAL LINE: case "status": if (e.PropertyName.equals("status")) { UpdateActionAvailability(); } //ORIGINAL LINE: case "display_type": else if (e.PropertyName.equals("display_type")) { UpdateConsoleModels(); } } private void UpdateActionAvailability() { java.util.List items = getSelectedItems() != null && getSelectedItem() != null ? getSelectedItems() : new java.util.ArrayList(); getEditCommand().setIsExecutionAllowed(items.size() == 1); getRemoveCommand().setIsExecutionAllowed(items.size() > 0 && VdcActionUtils.CanExecute(items, VM.class, VdcActionType.RemoveVm)); getRunCommand().setIsExecutionAllowed(items.size() > 0 && VdcActionUtils.CanExecute(items, VM.class, VdcActionType.RunVm)); getPauseCommand().setIsExecutionAllowed(items.size() > 0 && VdcActionUtils.CanExecute(items, VM.class, VdcActionType.HibernateVm)); getShutdownCommand().setIsExecutionAllowed(items.size() > 0 && VdcActionUtils.CanExecute(items, VM.class, VdcActionType.ShutdownVm)); getStopCommand().setIsExecutionAllowed(items.size() > 0 && VdcActionUtils.CanExecute(items, VM.class, VdcActionType.StopVm)); getMigrateCommand().setIsExecutionAllowed(items.size() > 0 && VdcActionUtils.CanExecute(items, VM.class, VdcActionType.MigrateVm)); getNewTemplateCommand().setIsExecutionAllowed(items.size() == 1 && VdcActionUtils.CanExecute(items, VM.class, VdcActionType.AddVmTemplate)); getRunOnceCommand().setIsExecutionAllowed(items.size() == 1 && VdcActionUtils.CanExecute(items, VM.class, VdcActionType.RunVmOnce)); getExportCommand().setIsExecutionAllowed(items.size() > 0 && VdcActionUtils.CanExecute(items, VM.class, VdcActionType.ExportVm)); getMoveCommand().setIsExecutionAllowed(items.size() == 1 && VdcActionUtils.CanExecute(items, VM.class, VdcActionType.MoveVm)); getRetrieveIsoImagesCommand().setIsExecutionAllowed(items.size() == 1 && VdcActionUtils.CanExecute(items, VM.class, VdcActionType.ChangeDisk)); getChangeCdCommand().setIsExecutionAllowed(items.size() == 1 && VdcActionUtils.CanExecute(items, VM.class, VdcActionType.ChangeDisk)); getAssignTagsCommand().setIsExecutionAllowed(items.size() > 0); getGuideCommand().setIsExecutionAllowed(getGuideContext() != null || (getSelectedItem() != null && getSelectedItems() != null && getSelectedItems().size() == 1)); } @Override public void eventRaised(Event ev, Object sender, EventArgs args) { super.eventRaised(ev, sender, args); if (ev.equals(ChangeCDModel.ExecutedEventDefinition)) { changeCD(sender, args); } else if (ev.equals(ConsoleModel.ErrorEventDefinition) && sender instanceof SpiceConsoleModel) { SpiceConsoleModel_Error(sender, (ErrorCodeEventArgs)args); } } private void SpiceConsoleModel_Error(Object sender, ErrorCodeEventArgs e) { ResourceManager rm = new ResourceManager("UICommon.Resources.RdpErrors.RdpErrors", Assembly.GetExecutingAssembly()); ConfirmationModel model = new ConfirmationModel(); if (getErrorWindow() == null) { setErrorWindow(model); } model.setTitle("Console Disconnected"); model.setHashName("console_disconnected"); model.setMessage(StringFormat.format("Error connecting to Virtual Machine using Spice:\n%1$s", rm.GetString("E" + e.getErrorCode()))); rm.ReleaseAllResources(); UICommand tempVar = new UICommand("CancelError", this); tempVar.setTitle("Close"); tempVar.setIsDefault(true); tempVar.setIsCancel(true); model.getCommands().add(tempVar); } @Override public void ExecuteCommand(UICommand command) { super.ExecuteCommand(command); if (command == getNewServerCommand()) { NewServer(); } else if (command == getNewDesktopCommand()) { NewDesktop(); } else if (command == getEditCommand()) { Edit(); } else if (command == getRemoveCommand()) { remove(); } else if (command == getRunCommand()) { Run(); } else if (command == getPauseCommand()) { Pause(); } else if (command == getStopCommand()) { stop(); } else if (command == getShutdownCommand()) { Shutdown(); } else if (command == getMigrateCommand()) { Migrate(); } else if (command == getNewTemplateCommand()) { NewTemplate(); } else if (command == getRunOnceCommand()) { RunOnce(); } else if (command == getExportCommand()) { Export(); } else if (command == getMoveCommand()) { Move(); } else if (command == getGuideCommand()) { Guide(); } else if (command == getRetrieveIsoImagesCommand()) { RetrieveIsoImages(); } else if (command == getChangeCdCommand()) { ChangeCD(); } else if (command == getAssignTagsCommand()) { AssignTags(); } else if (StringHelper.stringsEqual(command.getName(), "OnAssignTags")) { OnAssignTags(); } else if (StringHelper.stringsEqual(command.getName(), "Cancel")) { Cancel(); } else if (StringHelper.stringsEqual(command.getName(), "OnSave")) { OnSave(); } else if (StringHelper.stringsEqual(command.getName(), "OnRemove")) { OnRemove(); } else if (StringHelper.stringsEqual(command.getName(), "OnMove")) { OnMove(); } else if (StringHelper.stringsEqual(command.getName(), "OnExport")) { OnExport(); } else if (StringHelper.stringsEqual(command.getName(), "OnExportNoTemplates")) { OnExportNoTemplates(); } else if (StringHelper.stringsEqual(command.getName(), "CancelConfirmation")) { CancelConfirmation(); } else if (StringHelper.stringsEqual(command.getName(), "CancelError")) { CancelError(); } else if (StringHelper.stringsEqual(command.getName(), "OnRunOnce")) { OnRunOnce(); } else if (StringHelper.stringsEqual(command.getName(), "OnNewTemplate")) { OnNewTemplate(); } else if (StringHelper.stringsEqual(command.getName(), "OnMigrate")) { OnMigrate(); } else if (StringHelper.stringsEqual(command.getName(), "OnShutdown")) { OnShutdown(); } else if (StringHelper.stringsEqual(command.getName(), "OnStop")) { OnStop(); } else if (StringHelper.stringsEqual(command.getName(), "OnChangeCD")) { OnChangeCD(); } } private SystemTreeItemModel systemTreeSelectedItem; public SystemTreeItemModel getSystemTreeSelectedItem() { return systemTreeSelectedItem; } public void setSystemTreeSelectedItem(SystemTreeItemModel value) { systemTreeSelectedItem = value; OnPropertyChanged(new PropertyChangedEventArgs("SystemTreeSelectedItem")); } @Override protected String getListName() { return "VmListModel"; } }