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.core.common.mode.ApplicationMode;
import org.ovirt.engine.ui.common.editor.UiCommonEditorDriver;
import org.ovirt.engine.ui.common.idhandler.ElementIdHandler;
import org.ovirt.engine.ui.common.idhandler.WithElementId;
import org.ovirt.engine.ui.common.uicommon.model.DetailModelProvider;
import org.ovirt.engine.ui.common.view.AbstractSubTabFormView;
import org.ovirt.engine.ui.common.widget.form.FormBuilder;
import org.ovirt.engine.ui.common.widget.form.FormItem;
import org.ovirt.engine.ui.common.widget.form.GeneralFormPanel;
import org.ovirt.engine.ui.common.widget.label.BooleanTextBoxLabel;
import org.ovirt.engine.ui.common.widget.label.EnumTextBoxLabel;
import org.ovirt.engine.ui.common.widget.label.MemorySizeTextBoxLabel;
import org.ovirt.engine.ui.common.widget.label.StringValueLabel;
import org.ovirt.engine.ui.uicommonweb.models.ApplicationModeHelper;
import org.ovirt.engine.ui.uicommonweb.models.hosts.HostGeneralModel;
import org.ovirt.engine.ui.uicommonweb.models.hosts.HostListModel;
import org.ovirt.engine.ui.webadmin.ApplicationConstants;
import org.ovirt.engine.ui.webadmin.gin.AssetProvider;
import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.host.SubTabHostGeneralInfoPresenter;
import org.ovirt.engine.ui.webadmin.widget.alert.InLineAlertWidget;
import org.ovirt.engine.ui.webadmin.widget.alert.InLineAlertWidget.AlertType;
import org.ovirt.engine.ui.webadmin.widget.label.DetailsTextBoxLabel;
import org.ovirt.engine.ui.webadmin.widget.label.FullDateTimeLabel;
import org.ovirt.engine.ui.webadmin.widget.label.NullableNumberValueLabel;
import org.ovirt.engine.ui.webadmin.widget.label.PercentTextBoxLabel;
import com.google.gwt.core.client.GWT;
import com.google.gwt.editor.client.Editor;
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.ValueLabel;
import com.google.gwt.user.client.ui.Widget;
public class SubTabHostGeneralInfoView extends AbstractSubTabFormView<VDS, HostListModel<Void>, HostGeneralModel>
implements SubTabHostGeneralInfoPresenter.ViewDef, Editor<HostGeneralModel> {
interface Driver extends UiCommonEditorDriver<HostGeneralModel, SubTabHostGeneralInfoView> {
}
interface ViewIdHandler extends ElementIdHandler<SubTabHostGeneralInfoView> {
ViewIdHandler idHandler = GWT.create(ViewIdHandler.class);
}
private static final ApplicationConstants constants = AssetProvider.getConstants();
@Path("IScsiInitiatorName")
StringValueLabel iScsiInitiatorName = new StringValueLabel();
PercentTextBoxLabel<Integer> sharedMemory = new PercentTextBoxLabel<>();
BooleanTextBoxLabel memoryPageSharing = new BooleanTextBoxLabel(constants.active(), constants.inactive());
NullableNumberValueLabel<Integer> activeVms = new NullableNumberValueLabel<>();
NullableNumberValueLabel<Integer> logicalCores = new NullableNumberValueLabel<>();
StringValueLabel onlineCores = new StringValueLabel();
StringValueLabel spmPriority = new StringValueLabel();
StringValueLabel hostedEngineHa = new StringValueLabel();
FullDateTimeLabel bootTime = new FullDateTimeLabel();
StringValueLabel kdumpStatus = new StringValueLabel();
StringValueLabel selinuxEnforceMode = new StringValueLabel();
StringValueLabel clusterCompatibilityVersion = new StringValueLabel();
MemorySizeTextBoxLabel<Integer> physicalMemory = new MemorySizeTextBoxLabel<>();
MemorySizeTextBoxLabel<Integer> usedMemory = new MemorySizeTextBoxLabel<>();
MemorySizeTextBoxLabel<Integer> freeMemory = new MemorySizeTextBoxLabel<>();
MemorySizeTextBoxLabel<Long> swapTotal = new MemorySizeTextBoxLabel<>();
MemorySizeTextBoxLabel<Long> usedSwap = new MemorySizeTextBoxLabel<>();
MemorySizeTextBoxLabel<Long> swapFree = new MemorySizeTextBoxLabel<>();
MemorySizeTextBoxLabel<Float> maxSchedulingMemory = new MemorySizeTextBoxLabel<>();
BooleanTextBoxLabel hostDevicePassthroughSupport = new BooleanTextBoxLabel(constants.enabled(), constants.disabled());
@Ignore
DetailsTextBoxLabel<ArrayList<ValueLabel<Integer>>, Integer> physicalMemoryDetails =
new DetailsTextBoxLabel<>(constants.total(), constants.used(), constants.free());
@Ignore
DetailsTextBoxLabel<ArrayList<ValueLabel<Long>>, Long> swapSizeDetails =
new DetailsTextBoxLabel<>(constants.total(), constants.used(), constants.free());
@Ignore
EnumTextBoxLabel<VdsTransparentHugePagesState> automaticLargePage = new EnumTextBoxLabel<>();
@UiField(provided = true)
@WithElementId
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;
private final Driver driver = GWT.create(Driver.class);
interface ViewUiBinder extends UiBinder<Widget, SubTabHostGeneralInfoView> {
ViewUiBinder uiBinder = GWT.create(ViewUiBinder.class);
}
@Inject
public SubTabHostGeneralInfoView(DetailModelProvider<HostListModel<Void>, HostGeneralModel> modelProvider) {
super(modelProvider);
// Init form panel:
formPanel = new GeneralFormPanel();
initWidget(ViewUiBinder.uiBinder.createAndBindUi(this));
driver.initialize(this);
generateIds();
boolean virtSupported = ApplicationModeHelper.isModeSupported(ApplicationMode.VirtOnly);
// Build a form using the FormBuilder
formBuilder = new FormBuilder(formPanel, 3, 6);
formBuilder.setRelativeColumnWidth(0, 3);
formBuilder.setRelativeColumnWidth(1, 4);
formBuilder.setRelativeColumnWidth(2, 5);
formBuilder.addFormItem(new FormItem(constants.spmPriority(), spmPriority, 0, 0, virtSupported).withAutoPlacement());
formBuilder.addFormItem(new FormItem(constants.activeVmsHostGeneral(), activeVms, 0, virtSupported).withAutoPlacement());
formBuilder.addFormItem(new FormItem(constants.logicalCores(), logicalCores, 0).withAutoPlacement());
formBuilder.addFormItem(new FormItem(constants.onlineCores(), onlineCores, 0).withAutoPlacement());
formBuilder.addFormItem(new FormItem(constants.bootTimeHostGeneral(), bootTime, 0).withAutoPlacement());
formBuilder.addFormItem(new FormItem(constants.hostedEngineHaHostGeneral(), hostedEngineHa, 0,
virtSupported).withAutoPlacement());
formBuilder.addFormItem(new FormItem(constants.isciInitNameHostGeneral(), iScsiInitiatorName, 0, 1,
virtSupported).withAutoPlacement());
formBuilder.addFormItem(new FormItem(constants.kdumpStatus(), kdumpStatus, 1).withAutoPlacement());
formBuilder.addFormItem(new FormItem(constants.physMemHostGeneral(), physicalMemoryDetails, 1).withAutoPlacement());
formBuilder.addFormItem(new FormItem(constants.swapSizeHostGeneral(), swapSizeDetails, 1).withAutoPlacement());
formBuilder.addFormItem(new FormItem(constants.sharedMemHostGeneral(), sharedMemory, 1).withAutoPlacement());
formBuilder.addFormItem(new FormItem(constants.hostDevicePassthroughHostGeneral(), hostDevicePassthroughSupport, 1).withAutoPlacement());
formBuilder.addFormItem(new FormItem(constants.maxSchedulingMemory(), maxSchedulingMemory, 0, 2, virtSupported).withAutoPlacement());
formBuilder.addFormItem(new FormItem(constants.memPageSharingHostGeneral(), memoryPageSharing, 2).withAutoPlacement());
formBuilder.addFormItem(new FormItem(constants.autoLargePagesHostGeneral(), automaticLargePage, 2).withAutoPlacement());
formBuilder.addFormItem(new FormItem(constants.selinuxModeGeneral(), selinuxEnforceMode, 2).withAutoPlacement());
formBuilder.addFormItem(new FormItem(constants.clusterCompatibilityVersion(), clusterCompatibilityVersion, 2).withAutoPlacement());
}
@Override
protected void generateIds() {
ViewIdHandler.idHandler.generateAndSetIds(this);
}
@Override
public void setMainTabSelectedItem(VDS selectedItem) {
driver.edit(getDetailModel());
automaticLargePage.setValue((VdsTransparentHugePagesState) getDetailModel().getAutomaticLargePage());
ArrayList<ValueLabel<Integer>> physicalMemoryDetailsArray =
new ArrayList<>(Arrays.<ValueLabel<Integer>>asList(physicalMemory, usedMemory, freeMemory));
ArrayList<ValueLabel<Long>> swapSizeDetailsArray =
new ArrayList<>(Arrays.<ValueLabel<Long>>asList(swapTotal, usedSwap, swapFree));
physicalMemoryDetails.setValue(physicalMemoryDetailsArray);
swapSizeDetails.setValue(swapSizeDetailsArray);
maxSchedulingMemory.setValue(selectedItem.getMaxSchedulingMemory());
formBuilder.update(getDetailModel());
}
@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) {
addAlert(alertWidget, AlertType.ALERT);
}
@Override
public void addAlert(Widget alertWidget, AlertType type) {
// Add the composite panel to the alerts panel:
alertsList.add(new InLineAlertWidget(alertWidget, type));
// Make the panel visible if it wasn't:
if (!alertsPanel.isVisible()) {
alertsPanel.setVisible(true);
}
}
}