package org.ovirt.engine.ui.common.presenter.popup.numa;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.ovirt.engine.core.common.businessentities.VM;
import org.ovirt.engine.core.common.businessentities.VdsNumaNode;
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.user.client.ui.IsWidget;
import com.google.inject.Inject;
import com.google.inject.Provider;
import com.google.web.bindery.event.shared.EventBus;
import com.gwtplatform.mvp.client.PresenterWidget;
import com.gwtplatform.mvp.client.View;
public class UnassignedVNumaNodesPanelPresenterWidget extends
PresenterWidget<UnassignedVNumaNodesPanelPresenterWidget.ViewDef> {
public interface ViewDef extends View {
public void addToUnassignedPanel(View view);
public IsWidget getNodePanelTitle(VM vm, List<VNodeModel> list);
public IsWidget getNodePanelContent(VM vm, List<VNodeModel> list, List<VdsNumaNode> numaNodeList);
public void addEmptyUnassignPanel();
void clear();
}
public static final Object TYPE_RevealUnassignedPanels = new Object();
private final Provider<CollapsiblePanelPresenterWidget> collapisblePanelProvider;
private NumaSupportModel model;
@Inject
public UnassignedVNumaNodesPanelPresenterWidget(EventBus eventBus, ViewDef view,
Provider<CollapsiblePanelPresenterWidget> collapsiblePanelProvider) {
super(eventBus, view);
this.collapisblePanelProvider = collapsiblePanelProvider;
}
public void setModel(NumaSupportModel model) {
this.model = model;
}
public void populateView() {
getView().clear();
Collection<VNodeModel> unassignedNodeList = model.getUnassignedNumaNodes();
Map<VM, List<VNodeModel>> vmToNodeMap = new HashMap<>();
for(VM currentVM: this.model.getVmsWithvNumaNodeList()) {
List<VNodeModel> nodeModelList = new ArrayList<>();
vmToNodeMap.put(currentVM, nodeModelList);
}
for (VNodeModel vNodeModel: unassignedNodeList) {
VM currentVM = vNodeModel.getVm();
List<VNodeModel> nodeModels = vmToNodeMap.get(currentVM);
nodeModels.add(vNodeModel);
}
for(Map.Entry<VM, List<VNodeModel>> entry: vmToNodeMap.entrySet()) {
CollapsiblePanelPresenterWidget nodePanelPresenter = collapisblePanelProvider.get();
addToSlot(TYPE_RevealUnassignedPanels, nodePanelPresenter);
nodePanelPresenter.getView().setTitleWidget(getView().getNodePanelTitle(entry.getKey(), entry.getValue()));
nodePanelPresenter.getView().addContentWidget(getView().getNodePanelContent(entry.getKey(),
entry.getValue(), model.getNumaNodeList()));
if (entry.getValue().isEmpty()) {
nodePanelPresenter.collapsePanel();
}
getView().addToUnassignedPanel(nodePanelPresenter.getView());
}
getView().addEmptyUnassignPanel();
}
}