package org.ovirt.engine.ui.webadmin.section.main.view.tab.host; import java.util.ArrayList; import java.util.Arrays; import javax.inject.Inject; import org.ovirt.engine.core.common.businessentities.VDS; import org.ovirt.engine.core.common.businessentities.VdsTransparentHugePagesState; import org.ovirt.engine.ui.uicommonweb.models.hosts.HostGeneralModel; import org.ovirt.engine.ui.uicommonweb.models.hosts.HostListModel; import org.ovirt.engine.ui.webadmin.ApplicationResources; import org.ovirt.engine.ui.webadmin.gin.ClientGinjectorProvider; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.host.SubTabHostGeneralPresenter; import org.ovirt.engine.ui.webadmin.section.main.view.AbstractSubTabFormView; import org.ovirt.engine.ui.webadmin.uicommon.model.DetailModelProvider; import org.ovirt.engine.ui.webadmin.widget.form.FormBuilder; import org.ovirt.engine.ui.webadmin.widget.form.FormItem; import org.ovirt.engine.ui.webadmin.widget.form.GeneralFormPanel; import org.ovirt.engine.ui.webadmin.widget.label.BooleanLabel; import org.ovirt.engine.ui.webadmin.widget.label.DetailsLabel; import org.ovirt.engine.ui.webadmin.widget.label.EnumLabel; import org.ovirt.engine.ui.webadmin.widget.label.MemorySizeLabel; import org.ovirt.engine.ui.webadmin.widget.label.NullableNumberLabel; import org.ovirt.engine.ui.webadmin.widget.label.PercentLabel; import org.ovirt.engine.ui.webadmin.widget.label.TextBoxLabel; import org.ovirt.engine.ui.webadmin.widget.label.VersionLabel; import com.google.gwt.core.client.GWT; import com.google.gwt.editor.client.Editor; import com.google.gwt.editor.client.SimpleBeanEditorDriver; 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.HTMLPanel; import com.google.gwt.user.client.ui.Image; import com.google.gwt.user.client.ui.ValueLabel; import com.google.gwt.user.client.ui.Widget; public class SubTabHostGeneralView extends AbstractSubTabFormView<VDS, HostListModel, HostGeneralModel> implements SubTabHostGeneralPresenter.ViewDef, Editor<HostGeneralModel> { interface Driver extends SimpleBeanEditorDriver<HostGeneralModel, SubTabHostGeneralView> { Driver driver = GWT.create(Driver.class); } // We need this in order to find the icon for alert messages: private final ApplicationResources resources; TextBoxLabel oS = new TextBoxLabel(true); TextBoxLabel kvmVersion = new TextBoxLabel(true); TextBoxLabel spiceVersion = new TextBoxLabel(true); TextBoxLabel kernelVersion = new TextBoxLabel(true); TextBoxLabel iScsiInitiatorName = new TextBoxLabel(true); TextBoxLabel cpuName = new TextBoxLabel(true); TextBoxLabel cpuType = new TextBoxLabel(true); VersionLabel vdsmVersion = new VersionLabel(); PercentLabel<Integer> sharedMemory = new PercentLabel<Integer>(); BooleanLabel memoryPageSharing = new BooleanLabel("Active", "Inactive"); NullableNumberLabel<Integer> activeVms = new NullableNumberLabel<Integer>(); NullableNumberLabel<Integer> numberOfCPUs = new NullableNumberLabel<Integer>(); MemorySizeLabel<Integer> physicalMemory = new MemorySizeLabel<Integer>(); MemorySizeLabel<Integer> usedMemory = new MemorySizeLabel<Integer>(); MemorySizeLabel<Integer> freeMemory = new MemorySizeLabel<Integer>(); MemorySizeLabel<Long> swapTotal = new MemorySizeLabel<Long>(); MemorySizeLabel<Long> usedSwap = new MemorySizeLabel<Long>(); MemorySizeLabel<Long> swapFree = new MemorySizeLabel<Long>(); @Ignore DetailsLabel<ArrayList<ValueLabel<Integer>>, Integer> physicalMemoryDetails = new DetailsLabel<ArrayList<ValueLabel<Integer>>, Integer>("total", "used", "free"); @Ignore DetailsLabel<ArrayList<ValueLabel<Long>>, Long> swapSizeDetails = new DetailsLabel<ArrayList<ValueLabel<Long>>, Long>("total", "used", "free"); @Ignore EnumLabel<VdsTransparentHugePagesState> automaticLargePage = new EnumLabel<VdsTransparentHugePagesState>(); @UiField(provided = true) GeneralFormPanel formPanel; FormBuilder formBuilder; // This is the panel containing the action items label and the // potential list of action items, this way we can hide the panel // completely (including the label) if there are no action items // to present: @UiField HTMLPanel alertsPanel; // This is the list of action items inside the panel, so that we // can clear and add elements inside without affecting the panel: @UiField FlowPanel alertsList; interface ViewUiBinder extends UiBinder<Widget, SubTabHostGeneralView> { ViewUiBinder uiBinder = GWT.create(ViewUiBinder.class); } @Inject public SubTabHostGeneralView(DetailModelProvider<HostListModel, HostGeneralModel> modelProvider) { super(modelProvider); // Inject a reference to the resources: resources = ClientGinjectorProvider.instance().getApplicationResources(); // Init form panel: formPanel = new GeneralFormPanel(); initWidget(ViewUiBinder.uiBinder.createAndBindUi(this)); Driver.driver.initialize(this); // Build a form using the FormBuilder formBuilder = new FormBuilder(formPanel, 3, 6); formBuilder.setColumnsWidth("230px", "120px", "270px"); formBuilder.addFormItem(new FormItem("OS Version", oS, 0, 0)); formBuilder.addFormItem(new FormItem("Kernel Version", kernelVersion, 1, 0)); formBuilder.addFormItem(new FormItem("KVM Version", kvmVersion, 2, 0)); formBuilder.addFormItem(new FormItem("VDSM Version", vdsmVersion, 3, 0)); formBuilder.addFormItem(new FormItem("SPICE Version", spiceVersion, 4, 0)); formBuilder.addFormItem(new FormItem("iSCSI Initiator Name", iScsiInitiatorName, 5, 0)); formBuilder.addFormItem(new FormItem("Active VMs", activeVms, 0, 1)); formBuilder.addFormItem(new FormItem("Memory Page Sharing", memoryPageSharing, 1, 1)); formBuilder.addFormItem(new FormItem("Automatic Large Pages", automaticLargePage, 2, 1)); formBuilder.addFormItem(new FormItem("Number of CPUs", numberOfCPUs, 3, 1)); formBuilder.addFormItem(new FormItem("CPU Name", cpuName, 4, 1)); formBuilder.addFormItem(new FormItem("CPU Type", cpuType, 5, 1)); formBuilder.addFormItem(new FormItem("Physical Memory", physicalMemoryDetails, 0, 2)); formBuilder.addFormItem(new FormItem("Swap Size", swapSizeDetails, 1, 2)); formBuilder.addFormItem(new FormItem("Shared Memory", sharedMemory, 2, 2)); } @SuppressWarnings("unchecked") @Override public void setMainTabSelectedItem(VDS selectedItem) { Driver.driver.edit(getDetailModel()); automaticLargePage.setValue((VdsTransparentHugePagesState) getDetailModel().getAutomaticLargePage()); ArrayList<ValueLabel<Integer>> physicalMemoryDetailsArray = new ArrayList<ValueLabel<Integer>>(Arrays.asList(physicalMemory, usedMemory, freeMemory)); ArrayList<ValueLabel<Long>> swapSizeDetailsArray = new ArrayList<ValueLabel<Long>>(Arrays.asList(swapTotal, usedSwap, swapFree)); physicalMemoryDetails.setValue(physicalMemoryDetailsArray); swapSizeDetails.setValue(swapSizeDetailsArray); formBuilder.showForm(getDetailModel(), Driver.driver); } @Override public void clearAlerts() { // Remove all the alert widgets and make the panel invisible: alertsList.clear(); alertsPanel.setVisible(false); } @Override public void addAlert(Widget alertWidget) { // Create a composite panel that contains the alert icon and the widget provided // by the caller, both rendered horizontally: FlowPanel alertPanel = new FlowPanel(); Image alertIcon = new Image(resources.alertImage()); alertIcon.getElement().getStyle().setProperty("display", "inline"); alertWidget.getElement().getStyle().setProperty("display", "inline"); alertPanel.add(alertIcon); alertPanel.add(alertWidget); // Add the composite panel to the alerts panel: alertsList.add(alertPanel); // Make the panel visible if it wasn't: if (!alertsPanel.isVisible()) { alertsPanel.setVisible(true); } } }