package org.ovirt.engine.ui.uicommonweb.models.userportal; 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.vms.*; import org.ovirt.engine.ui.uicompat.*; import org.ovirt.engine.core.common.*; import org.ovirt.engine.core.common.businessentities.*; import org.ovirt.engine.core.common.interfaces.*; import org.ovirt.engine.ui.uicommonweb.*; import org.ovirt.engine.ui.uicommonweb.models.*; @SuppressWarnings("unused") public class UserPortalBasicListModel extends IUserPortalListModel implements IVmPoolResolutionService { public static EventDefinition SearchCompletedEventDefinition; private Event privateSearchCompletedEvent; public Event getSearchCompletedEvent() { return privateSearchCompletedEvent; } private void setSearchCompletedEvent(Event value) { privateSearchCompletedEvent = value; } private ListModel privatevmBasicDiskListModel; public ListModel getvmBasicDiskListModel() { return privatevmBasicDiskListModel; } private void setvmBasicDiskListModel(ListModel value) { privatevmBasicDiskListModel = value; } private java.util.ArrayList<VM> privatevms; public java.util.ArrayList<VM> getvms() { return privatevms; } public void setvms(java.util.ArrayList<VM> value) { privatevms = value; } private java.util.ArrayList<vm_pools> privatepools; public java.util.ArrayList<vm_pools> getpools() { return privatepools; } public void setpools(java.util.ArrayList<vm_pools> value) { privatepools = value; } private EntityModel privateSelectedItemDefinedMemory; public EntityModel getSelectedItemDefinedMemory() { return privateSelectedItemDefinedMemory; } private void setSelectedItemDefinedMemory(EntityModel value) { privateSelectedItemDefinedMemory = value; } private EntityModel privateSelectedItemNumOfCpuCores; public EntityModel getSelectedItemNumOfCpuCores() { return privateSelectedItemNumOfCpuCores; } private void setSelectedItemNumOfCpuCores(EntityModel value) { privateSelectedItemNumOfCpuCores = value; } private java.util.HashMap<Guid, java.util.ArrayList<ConsoleModel>> cachedConsoleModels; static { SearchCompletedEventDefinition = new EventDefinition("SearchCompleted", UserPortalBasicListModel.class); } public UserPortalBasicListModel() { setSearchCompletedEvent(new Event(SearchCompletedEventDefinition)); setSelectedItemDefinedMemory(new EntityModel()); setSelectedItemNumOfCpuCores(new EntityModel()); cachedConsoleModels = new java.util.HashMap<Guid, java.util.ArrayList<ConsoleModel>>(); } @Override protected void SyncSearch() { super.SyncSearch(); AsyncQuery _asyncQuery = new AsyncQuery(); _asyncQuery.setModel(this); _asyncQuery.asyncCallback = new INewAsyncCallback() { public void OnSuccess(Object model, Object ReturnValue) { UserPortalBasicListModel userPortalBasicListModel = (UserPortalBasicListModel) model; userPortalBasicListModel.setvms((java.util.ArrayList<VM>)((VdcQueryReturnValue)ReturnValue).getReturnValue()); userPortalBasicListModel.OnVmAndPoolLoad(); }}; Frontend.RunQuery(VdcQueryType.GetUserVmsByUserIdAndGroups, new GetUserVmsByUserIdAndGroupsParameters(Frontend.getLoggedInUser().getUserId()), _asyncQuery); AsyncQuery _asyncQuery1 = new AsyncQuery(); _asyncQuery1.setModel(this); _asyncQuery1.asyncCallback = new INewAsyncCallback() { public void OnSuccess(Object model, Object ReturnValue) { if (ReturnValue != null) { UserPortalBasicListModel userPortalBasicListModel = (UserPortalBasicListModel) model; userPortalBasicListModel.setpools((java.util.ArrayList<vm_pools>)((VdcQueryReturnValue)ReturnValue).getReturnValue()); userPortalBasicListModel.OnVmAndPoolLoad(); } }}; Frontend.RunQuery(VdcQueryType.GetAllVmPoolsAttachedToUser, new GetAllVmPoolsAttachedToUserParameters(Frontend.getLoggedInUser().getUserId()), _asyncQuery1); } @Override protected void AsyncSearch() { super.AsyncSearch(); SyncSearch(); } @Override protected void InitDetailModels() { super.InitDetailModels(); setvmBasicDiskListModel(new VmBasicDiskListModel()); ObservableCollection<EntityModel> list = new ObservableCollection<EntityModel>(); list.add(getvmBasicDiskListModel()); setDetailModels(list); setActiveDetailModel(getvmBasicDiskListModel()); } @Override protected Object ProvideDetailModelEntity(Object selectedItem) { //Each item in this list model is not a business entity, //therefore select an Entity property to provide it to //the detail models. EntityModel model = (EntityModel)selectedItem; if (model == null) { return null; } return model.getEntity(); } @Override protected void UpdateDetailsAvailability() { super.UpdateDetailsAvailability(); } @Override protected void OnSelectedItemChanged() { super.OnSelectedItemChanged(); UpdateSelectedEntityDetails(); } private void UpdateSelectedEntityDetails() { if (getSelectedItem() == null) { return; } Object entity = ((EntityModel)getSelectedItem()).getEntity(); if (entity instanceof VM) { VM vm = (VM)entity; UpdateDetails(vm); } else if (entity instanceof vm_pools) { AsyncQuery _asyncQuery = new AsyncQuery(); _asyncQuery.setModel(this); _asyncQuery.asyncCallback = new INewAsyncCallback() { public void OnSuccess(Object model, Object result) { UserPortalBasicListModel userPortalBasicListModel = (UserPortalBasicListModel)model; VM vm = (VM)result; if (vm != null) { userPortalBasicListModel.UpdateDetails(vm); } }}; vm_pools pool = (vm_pools)entity; AsyncDataProvider.GetAnyVm(_asyncQuery, pool.getvm_pool_name()); } } public void UpdateDetails(VM vm) { getSelectedItemDefinedMemory().setEntity(SizeParser(vm.getvm_mem_size_mb())); getSelectedItemNumOfCpuCores().setEntity(vm.getnum_of_cpus() + " " + "(" + vm.getnum_of_sockets() + " Socket(s), " + vm.getcpu_per_socket() + " Core(s) per Socket)"); } // Temporarily converter // TODO: Use converters infrastructure in UICommon public String SizeParser(int sizeInMb) { return ((sizeInMb >= 1024 && sizeInMb % 1024 == 0) ? (sizeInMb / 1024 + "GB") : (sizeInMb + "MB")); } @Override public void eventRaised(Event ev, Object sender, EventArgs args) { super.eventRaised(ev, sender, args); } @Override public void OnVmAndPoolLoad() { if (getvms() != null && getpools() != null) { //Complete search. //Remove pools that has provided VMs. java.util.ArrayList<vm_pools> filteredPools = new java.util.ArrayList<vm_pools>(); poolMap = new java.util.HashMap<Guid, vm_pools>(); for (vm_pools pool : getpools()) { //Add pool to map. poolMap.put(pool.getvm_pool_id(), pool); boolean found = false; for (VM vm : getvms()) { if (vm.getVmPoolId() != null && vm.getVmPoolId().equals(pool.getvm_pool_id())) { found = true; break; } } if (!found) { filteredPools.add(pool); } } //Merge VMs and Pools, and create item models. java.util.List all = Linq.Concat(getvms(), filteredPools); Linq.Sort(all, new Linq.VmAndPoolByNameComparer()); java.util.ArrayList<Model> items = new java.util.ArrayList<Model>(); for (Object item : all) { UserPortalItemModel model = new UserPortalItemModel(this); model.setEntity(item); items.add(model); UpdateConsoleModel(model); } // In userportal 'Basic View': Set 'CanConnectAutomatically' to true if there's one and only one VM in status 'UP' and the other VMs aren't up. setCanConnectAutomatically(GetStatusUpVms(items).size() == 1 && GetUpVms(items).size() == 1 && ((UICommand)GetStatusUpVms(items).get(0).getDefaultConsole().getConnectCommand()).getIsExecutionAllowed()); setItems(items); setvms(null); setpools(null); getSearchCompletedEvent().raise(this, EventArgs.Empty); } } private void UpdateConsoleModel(UserPortalItemModel item) { if (item.getEntity() != null) { Object tempVar = item.getEntity(); VM vm = (VM)((tempVar instanceof VM) ? tempVar : null); if (vm == null) { return; } // Caching console model if needed 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 }))); } // Getting cached console model java.util.ArrayList<ConsoleModel> cachedModels = cachedConsoleModels.get(vm.getvm_guid()); for (ConsoleModel cachedModel : cachedModels) { cachedModel.setEntity(vm); } // Set default console by vm's display type item.setDefaultConsole(vm.getdisplay_type() == DisplayType.vnc ? cachedModels.get(1) : cachedModels.get(0)); // Adjust item's default console for userportal 'Basic View' item.getDefaultConsole().setForceVmStatusUp(true); // Update additional console if (DataProvider.IsWindowsOsType(vm.getvm_os())) { item.setAdditionalConsole(cachedModels.get(2)); item.setHasAdditionalConsole(true); } else { item.setAdditionalConsole(null); item.setHasAdditionalConsole(false); } } } @Override protected String getListName() { return "UserPortalBasicListModel"; } }