package org.ovirt.engine.ui.common.view.popup.numa;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.ovirt.engine.core.common.businessentities.VdsNumaNode;
import org.ovirt.engine.ui.common.CommonApplicationResources;
import org.ovirt.engine.ui.common.gin.AssetProvider;
import org.ovirt.engine.ui.common.view.CollapsiblePanelView;
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.OnlyToBeUsedInGeneratedCodeStringBlessedAsSafeHtml;
import com.google.gwt.safehtml.shared.SafeHtml;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.AbstractImagePrototype;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.Widget;
import com.google.inject.Inject;
import com.google.inject.Provider;
public class AssignedVNumaNodesPanel extends Composite {
interface WidgetUiBinder extends UiBinder<Widget, AssignedVNumaNodesPanel> {
WidgetUiBinder uiBinder = GWT.create(WidgetUiBinder.class);
}
interface Style extends CssResource {
String numaTitle();
}
private final VNumaTitleTemplate titleTemplate;
@UiField
FlowPanel container;
@UiField
Style style;
private final Provider<DraggableVirtualNumaPanel> virtualNumaPanelProvider;
private final CollapsiblePanelView collapsiblePanel;
private final DragTargetScrollPanel scrollPanel;
private static final CommonApplicationResources resources = AssetProvider.getResources();
@Inject
public AssignedVNumaNodesPanel(CollapsiblePanelView collapsiblePanel,
Provider<DraggableVirtualNumaPanel> virtualNumaPanelProvider, DragTargetScrollPanel scrollPanel,
VNumaTitleTemplate vNumaTitleTemplate) {
this.collapsiblePanel = collapsiblePanel;
initWidget(WidgetUiBinder.uiBinder.createAndBindUi(this));
container.add(collapsiblePanel);
this.virtualNumaPanelProvider = virtualNumaPanelProvider;
this.scrollPanel = scrollPanel;
this.titleTemplate = vNumaTitleTemplate;
collapsiblePanel.addContentWidget(scrollPanel);
}
public void setNodes(Collection<VNodeModel> virtualNodes, int numaNodeIndex, List<VdsNumaNode> numaNodeList) {
String myImageHtml = AbstractImagePrototype.create(resources.vNumaTitleIcon()).getHTML();
SafeHtml mySafeImageHtml = new OnlyToBeUsedInGeneratedCodeStringBlessedAsSafeHtml(myImageHtml);
if (virtualNodes == null) {
virtualNodes = new ArrayList<>();
}
SafeHtml title = titleTemplate.title(virtualNodes.size(), mySafeImageHtml, style.numaTitle());
collapsiblePanel.setTitleWidget(new HTML(title));
scrollPanel.setIndex(numaNodeIndex);
scrollPanel.clear();
for (VNodeModel nodeModel: virtualNodes) {
DraggableVirtualNumaPanel numaNodePanel = virtualNumaPanelProvider.get();
numaNodePanel.setModel(nodeModel, numaNodeList);
scrollPanel.add(numaNodePanel);
}
}
}