package org.ovirt.engine.ui.common.view.popup.numa;
import java.util.List;
import org.ovirt.engine.core.common.businessentities.VM;
import org.ovirt.engine.core.common.businessentities.VdsNumaNode;
import org.ovirt.engine.ui.common.CommonApplicationConstants;
import org.ovirt.engine.ui.common.gin.AssetProvider;
import org.ovirt.engine.ui.common.presenter.popup.numa.UnassignedVNumaNodesPanelPresenterWidget;
import org.ovirt.engine.ui.common.view.AbstractView;
import org.ovirt.engine.ui.uicommonweb.models.hosts.numa.VNodeModel;
import com.google.gwt.core.client.GWT;
import com.google.gwt.resources.client.CssResource;
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.IsWidget;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Widget;
import com.google.inject.Inject;
import com.google.inject.Provider;
import com.gwtplatform.mvp.client.View;
public class UnassignedVNumaNodesPanelView extends AbstractView implements
UnassignedVNumaNodesPanelPresenterWidget.ViewDef {
interface ViewUiBinder extends
UiBinder<Widget, UnassignedVNumaNodesPanelView> {
ViewUiBinder uiBinder = GWT.create(ViewUiBinder.class);
}
interface Style extends CssResource {
String scrollPanel();
String unassignPanel();
String emptyPanel();
}
private static final int UNASSIGNED = -1; // -1 means unassigned NUMA NODE.
@UiField
Label unassignedHeaderLabel;
@UiField
Label instructionsLabel;
@UiField
FlowPanel unassignedNodesPanel;
@UiField
FlowPanel nodeDetailPanel;
@UiField
Style style;
@UiField(provided = true)
final CommonApplicationConstants constants = AssetProvider.getConstants();
private final Provider<VmTitlePanel> vmTitlePanelProvider;
private final Provider<DraggableVirtualNumaPanel> virtualNumaPanelProvider;
private final Provider<DragTargetScrollPanel> scrollPanelProvider;
/**
* Constructor.
*/
@Inject
public UnassignedVNumaNodesPanelView(
final Provider<VmTitlePanel> vmTitlePanelProvider,
final Provider<DraggableVirtualNumaPanel> virtualNumaPanelProvider,
Provider<DragTargetScrollPanel> scrollPanelProvider) {
this.vmTitlePanelProvider = vmTitlePanelProvider;
this.virtualNumaPanelProvider = virtualNumaPanelProvider;
this.scrollPanelProvider = scrollPanelProvider;
initWidget(ViewUiBinder.uiBinder.createAndBindUi(this));
}
private void addVNumaNode(IsWidget widget) {
unassignedNodesPanel.add(widget);
}
@Override
public void addToUnassignedPanel(View view) {
addVNumaNode(view);
}
@Override
public IsWidget getNodePanelTitle(VM vm, List<VNodeModel> list) {
VmTitlePanel titlePanel = vmTitlePanelProvider.get();
SafeHtmlBuilder builder = new SafeHtmlBuilder();
builder.appendEscaped(vm.getName());
titlePanel
.initWidget(builder.toSafeHtml(), list.size(), vm.getStatus());
return titlePanel;
}
@Override
public IsWidget getNodePanelContent(VM vm, List<VNodeModel> virtualNodes,
List<VdsNumaNode> numaNodeList) {
DragTargetScrollPanel scrollPanel = getScrollPanel();
scrollPanel.clear();
for (VNodeModel nodeModel : virtualNodes) {
DraggableVirtualNumaPanel numaNodePanel = virtualNumaPanelProvider
.get();
numaNodePanel.setModel(nodeModel, numaNodeList);
scrollPanel.add(numaNodePanel);
}
if (virtualNodes.isEmpty()) {
scrollPanel.addStyleName(style.emptyPanel());
}
return scrollPanel;
}
@Override
public void addEmptyUnassignPanel() {
DragTargetScrollPanel scrollPanel = getScrollPanel();
scrollPanel.addStyleName(style.unassignPanel());
addVNumaNode(scrollPanel);
}
private DragTargetScrollPanel getScrollPanel() {
DragTargetScrollPanel scrollPanel = scrollPanelProvider.get();
scrollPanel.setStyleName(style.scrollPanel());
scrollPanel.setIndex(UNASSIGNED);
return scrollPanel;
}
@Override
public void clear() {
unassignedNodesPanel.clear();
}
}