package org.ovirt.engine.ui.common.presenter.popup.numa;
import java.util.List;
import java.util.Set;
import org.ovirt.engine.core.common.businessentities.VDS;
import org.ovirt.engine.core.common.businessentities.VM;
import org.ovirt.engine.core.common.businessentities.VdsNumaNode;
import org.ovirt.engine.ui.common.presenter.AbstractModelBoundPopupPresenterWidget;
import org.ovirt.engine.ui.common.presenter.CollapsiblePanelPresenterWidget;
import org.ovirt.engine.ui.uicommonweb.models.hosts.numa.NumaSupportModel;
import org.ovirt.engine.ui.uicommonweb.models.hosts.numa.VNodeModel;
import com.google.gwt.event.shared.EventBus;
import com.google.gwt.event.shared.GwtEvent.Type;
import com.google.gwt.user.client.ui.IsWidget;
import com.google.inject.Inject;
import com.google.inject.Provider;
import com.gwtplatform.mvp.client.View;
import com.gwtplatform.mvp.client.annotations.ContentSlot;
import com.gwtplatform.mvp.client.proxy.RevealContentHandler;
public class NumaSupportPopupPresenterWidget extends AbstractModelBoundPopupPresenterWidget<NumaSupportModel, NumaSupportPopupPresenterWidget.ViewDef> {
public interface ViewDef extends AbstractModelBoundPopupPresenterWidget.ViewDef<NumaSupportModel> {
public void setUnassignedGroupPanel(View view);
public void setHostSummaryPanel(IsWidget widget);
public IsWidget getHostSummaryTitle(int totalCpus, int usedCpus, int totalMemory, int usedMemory,
int totalNumaNodes, int totalVNumaNodes);
public void addVNumaInfoPanel(Set<VdsNumaNode> numaNodes, int nodeIndex, NumaSupportModel supportModel);
public IsWidget getHostSummaryContent(VDS selectedItem, NumaSupportModel supportModel);
public void displayVmDetails(VNodeModel vNodeModel);
void clear();
}
@ContentSlot
public static final Type<RevealContentHandler<?>> TYPE_SetUnassignedPanel = new Type<>();
private final UnassignedVNumaNodesPanelPresenterWidget unassignedVNumaNodesPanelPresenterWidget;
private final Provider<CollapsiblePanelPresenterWidget> collapsiblePanelProvider;
private NumaSupportModel supportModel;
public static final Object TYPE_revealHostSummary = new Object();
public static final Object TYPE_revealSocketInfo = new Object();
@Inject
public NumaSupportPopupPresenterWidget(EventBus eventBus, ViewDef view,
UnassignedVNumaNodesPanelPresenterWidget unassignedVNumaNodesPanelPresenterWidget,
Provider<CollapsiblePanelPresenterWidget> collapsiblePanelProvider) {
super(eventBus, view);
this.collapsiblePanelProvider = collapsiblePanelProvider;
this.unassignedVNumaNodesPanelPresenterWidget = unassignedVNumaNodesPanelPresenterWidget;
}
@SuppressWarnings("unchecked")
@Override
public void init(final NumaSupportModel model) {
super.init(model);
supportModel = model;
this.unassignedVNumaNodesPanelPresenterWidget.setModel(model);
supportModel.getModelReady().addListener((ev, sender, args) -> modelReady());
}
@Override
protected void onBind() {
super.onBind();
registerHandler(getEventBus().addHandler(UpdatedVnumaEvent.getType(),
event -> {
if (event.getTargetNumaNodeIndex() != -1) {
supportModel.pinVNode(event.getSourceVmGuid(), event.getSourceVNumaNodeIndex(),
event.getTargetNumaNodeIndex());
} else {
supportModel.unpinVNode(event.getSourceVmGuid(), event.getSourceVNumaNodeIndex());
}
}));
registerHandler(getEventBus().addHandler(NumaVmSelectedEvent.getType(),
event -> getView().displayVmDetails(event.getVNodeModel())));
}
@Override
protected void onReveal() {
super.onReveal();
setInSlot(TYPE_SetUnassignedPanel, unassignedVNumaNodesPanelPresenterWidget);
getView().setUnassignedGroupPanel(unassignedVNumaNodesPanelPresenterWidget.getView());
}
private void modelReady() {
unassignedVNumaNodesPanelPresenterWidget.populateView();
getView().clear();
populateHostSummary();
populateSockets();
}
private void populateSockets() {
for (int i = 0; i < supportModel.getFirstLevelDistanceSetList().size(); i++) {
getView().addVNumaInfoPanel(supportModel.getFirstLevelDistanceSetList().get(i).getSecond(), i, supportModel);
}
}
private void populateHostSummary() {
CollapsiblePanelPresenterWidget hostSummaryPanel = collapsiblePanelProvider.get();
setInSlot(TYPE_revealHostSummary, hostSummaryPanel);
List<VM> vmsWithVNuma = supportModel.getVmsWithvNumaNodeList();
int totalVNuma = 0;
for (VM vm: vmsWithVNuma) {
totalVNuma += vm.getvNumaNodeList().size();
}
VDS selectedVds = supportModel.getHosts().getSelectedItem();
hostSummaryPanel.getView().setTitleWidget(getView().getHostSummaryTitle(
selectedVds.getCpuThreads(),
selectedVds.getUsageCpuPercent(),
selectedVds.getPhysicalMemMb(),
selectedVds.getMemFree().intValue(),
supportModel.getNumaNodeList().size(), totalVNuma));
hostSummaryPanel.getView().addContentWidget(getView().getHostSummaryContent(
selectedVds, supportModel));
getView().setHostSummaryPanel(hostSummaryPanel);
}
}