package org.ovirt.engine.ui.uicommonweb.models.userportal;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.ovirt.engine.core.common.businessentities.VM;
import org.ovirt.engine.core.common.businessentities.VmPool;
import org.ovirt.engine.core.common.queries.IdQueryParameters;
import org.ovirt.engine.core.common.queries.VdcQueryParametersBase;
import org.ovirt.engine.core.common.queries.VdcQueryReturnValue;
import org.ovirt.engine.core.common.queries.VdcQueryType;
import org.ovirt.engine.ui.frontend.Frontend;
import org.ovirt.engine.ui.uicommonweb.ConsoleOptionsFrontendPersister.ConsoleContext;
import org.ovirt.engine.ui.uicommonweb.UICommand;
import org.ovirt.engine.ui.uicommonweb.models.ConsolesFactory;
import org.ovirt.engine.ui.uicommonweb.models.EntityModel;
import org.ovirt.engine.ui.uicommonweb.models.HasEntity;
import org.ovirt.engine.ui.uicommonweb.place.UserPortalApplicationPlaces;
import org.ovirt.engine.ui.uicompat.ConstantsManager;
import org.ovirt.engine.ui.uicompat.Event;
import org.ovirt.engine.ui.uicompat.EventArgs;
import org.ovirt.engine.ui.uicompat.EventDefinition;
import org.ovirt.engine.ui.uicompat.PropertyChangedEventArgs;
import com.google.inject.Inject;
@SuppressWarnings("unused")
public class UserPortalBasicListModel extends AbstractUserPortalListModel {
public static final EventDefinition searchCompletedEventDefinition;
private Event<EventArgs> privateSearchCompletedEvent;
@Override
public Event<EventArgs> getSearchCompletedEvent() {
return privateSearchCompletedEvent;
}
private void setSearchCompletedEvent(Event<EventArgs> value) {
privateSearchCompletedEvent = value;
}
private final VmBasicDiskListModel vmBasicDiskListModel;
public VmBasicDiskListModel getVmBasicDiskListModel() {
return vmBasicDiskListModel;
}
private EntityModel<String> privateSelectedItemDefinedMemory;
public EntityModel<String> getSelectedItemDefinedMemory() {
return privateSelectedItemDefinedMemory;
}
private void setSelectedItemDefinedMemory(EntityModel<String> value) {
privateSelectedItemDefinedMemory = value;
}
private EntityModel<String> privateSelectedItemNumOfCpuCores;
public EntityModel<String> getSelectedItemNumOfCpuCores() {
return privateSelectedItemNumOfCpuCores;
}
private void setSelectedItemNumOfCpuCores(EntityModel<String> value) {
privateSelectedItemNumOfCpuCores = value;
}
static {
searchCompletedEventDefinition = new EventDefinition("SearchCompleted", UserPortalBasicListModel.class); //$NON-NLS-1$
}
@Inject
public UserPortalBasicListModel(final VmBasicDiskListModel vmBasicDiskListModel) {
this.vmBasicDiskListModel = vmBasicDiskListModel;
setDetailList();
setApplicationPlace(UserPortalApplicationPlaces.basicMainTabPlace);
setSearchCompletedEvent(new Event<>(searchCompletedEventDefinition));
setSelectedItemDefinedMemory(new EntityModel<String>());
setSelectedItemNumOfCpuCores(new EntityModel<String>());
consolesFactory = new ConsolesFactory(ConsoleContext.UP_BASIC, this);
}
private void setDetailList() {
List<HasEntity<Object>> list = new ArrayList<>();
list.add(getVmBasicDiskListModel());
setDetailModels(list);
setActiveDetailModel(getVmBasicDiskListModel());
}
@Override
protected void syncSearch() {
super.syncSearch();
VdcQueryParametersBase queryParameters = new VdcQueryParametersBase();
queryParameters.setRefresh(getIsQueryFirstTime());
Frontend.getInstance().runQuery(VdcQueryType.GetAllVmsAndVmPools, queryParameters,
new AsyncQuery<VdcQueryReturnValue>(returnValue -> {
ArrayList<VM> vms = new ArrayList<>();
ArrayList<VmPool> pools = new ArrayList<>();
if (returnValue != null && returnValue.getSucceeded()) {
List<Object> list = (ArrayList<Object>) returnValue.getReturnValue();
if (list != null) {
for (Object object : list) {
if (object instanceof VM) {
vms.add((VM) object);
} else if (object instanceof VmPool) {
pools.add((VmPool) object);
}
}
}
}
onVmAndPoolLoad(vms, pools);
}));
}
@Override
public void setItems(Collection value) {
if (items != value) {
itemsChanging(value, items);
items = value;
getItemsChangedEvent().raise(this, EventArgs.EMPTY);
onPropertyChanged(new PropertyChangedEventArgs("Items")); //$NON-NLS-1$
}
}
@Override
public void forceRefresh() {
super.forceRefresh();
getVmBasicDiskListModel().forceRefresh();
}
@Override
protected void updateDetailsAvailability() {
super.updateDetailsAvailability();
}
@Override
protected void onSelectedItemChanged() {
super.onSelectedItemChanged();
updateSelectedEntityDetails();
}
private void updateSelectedEntityDetails() {
if (getSelectedItem() == null) {
return;
}
Object entity = getSelectedItem().getEntity();
if (entity instanceof VM) {
VM vm = (VM) entity;
updateDetails(vm);
}
else if (entity instanceof VmPool) {
VmPool pool = (VmPool) entity;
Frontend.getInstance().runQuery(VdcQueryType.GetVmDataByPoolId,
new IdQueryParameters(pool.getVmPoolId()),
new AsyncQuery<VdcQueryReturnValue>(result -> {
if (result != null) {
VM vm = result.getReturnValue();
if (vm != null) {
updateDetails(vm);
}
}
}));
}
}
public void updateDetails(VM vm) {
getSelectedItemDefinedMemory().setEntity(sizeParser(vm.getVmMemSizeMb()));
getSelectedItemNumOfCpuCores().setEntity(
ConstantsManager.getInstance().getMessages().cpuInfoMessage(vm.getNumOfCpus(),
vm.getNumOfSockets(), vm.getCpuPerSocket(), vm.getThreadsPerCpu())
);
}
// Temporarily converter
// TODO: Use converters infrastructure in UICommon
public String sizeParser(int sizeInMb) {
return sizeInMb >= 1024 && sizeInMb % 1024 == 0 ? sizeInMb / 1024 + "GB" : sizeInMb + "MB"; //$NON-NLS-1$ //$NON-NLS-2$
}
@Override
public void eventRaised(Event ev, Object sender, EventArgs args) {
super.eventRaised(ev, sender, args);
}
@Override
protected String getListName() {
return "UserPortalBasicListModel"; //$NON-NLS-1$
}
// overridden only to allow the UIBinder to access this
@Override
public UserPortalItemModel getSelectedItem() {
return super.getSelectedItem();
}
@Override
protected boolean fetchLargeIcons() {
return true;
}
@Override
public void executeCommand(UICommand command) {
super.executeCommand(command);
if (command.getName().equals("closeVncInfo")) { //$NON-NLS-1$
setWindow(null);
}
}
@Override
protected ConsoleContext getConsoleContext() {
return ConsoleContext.UP_BASIC;
}
}