package org.ovirt.engine.ui.webadmin.section.main.view.popup.gluster; import org.gwtbootstrap3.client.ui.Alert; import org.ovirt.engine.core.common.businessentities.RaidType; import org.ovirt.engine.core.common.businessentities.gluster.StorageDevice; import org.ovirt.engine.core.common.utils.Pair; import org.ovirt.engine.core.common.utils.SizeConverter; import org.ovirt.engine.core.common.utils.SizeConverter.SizeUnit; 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.view.popup.AbstractModelBoundPopupView; import org.ovirt.engine.ui.common.widget.EntityModelWidgetWithInfo; import org.ovirt.engine.ui.common.widget.dialog.InfoIcon; import org.ovirt.engine.ui.common.widget.dialog.SimpleDialogPanel; import org.ovirt.engine.ui.common.widget.editor.ListModelListBoxEditor; import org.ovirt.engine.ui.common.widget.editor.ListModelObjectCellTable; import org.ovirt.engine.ui.common.widget.editor.generic.IntegerEntityModelTextBoxEditor; import org.ovirt.engine.ui.common.widget.editor.generic.IntegerEntityModelTextBoxOnlyEditor; import org.ovirt.engine.ui.common.widget.editor.generic.StringEntityModelLabelEditor; import org.ovirt.engine.ui.common.widget.editor.generic.StringEntityModelTextBoxEditor; import org.ovirt.engine.ui.common.widget.label.EnableableFormLabel; import org.ovirt.engine.ui.common.widget.renderer.EnumRenderer; import org.ovirt.engine.ui.common.widget.table.column.AbstractTextColumn; import org.ovirt.engine.ui.uicommonweb.models.ListModel; import org.ovirt.engine.ui.uicommonweb.models.gluster.CreateBrickModel; import org.ovirt.engine.ui.uicompat.ConstantsManager; import org.ovirt.engine.ui.uicompat.EnumTranslator; import org.ovirt.engine.ui.uicompat.UIMessages; import org.ovirt.engine.ui.uicompat.external.StringUtils; import org.ovirt.engine.ui.webadmin.ApplicationConstants; import org.ovirt.engine.ui.webadmin.ApplicationMessages; import org.ovirt.engine.ui.webadmin.ApplicationTemplates; import org.ovirt.engine.ui.webadmin.gin.AssetProvider; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.gluster.CreateBrickPopupPresenterWidget; import com.google.gwt.core.client.GWT; import com.google.gwt.event.shared.EventBus; import com.google.gwt.i18n.client.NumberFormat; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.ui.Label; import com.google.inject.Inject; public class CreateBrickPopupView extends AbstractModelBoundPopupView<CreateBrickModel> implements CreateBrickPopupPresenterWidget.ViewDef { interface Driver extends UiCommonEditorDriver<CreateBrickModel, CreateBrickPopupView> { } interface ViewUiBinder extends UiBinder<SimpleDialogPanel, CreateBrickPopupView> { ViewUiBinder uiBinder = GWT.create(ViewUiBinder.class); } interface ViewIdHandler extends ElementIdHandler<CreateBrickPopupView> { ViewIdHandler idHandler = GWT.create(ViewIdHandler.class); } @UiField @Path(value = "lvName.entity") @WithElementId StringEntityModelTextBoxEditor lvNameEditor; @UiField @Path(value = "mountPoint.entity") @WithElementId StringEntityModelTextBoxEditor mountPointEditor; @UiField @Ignore @WithElementId Label deviceHeader; @UiField(provided = true) @Ignore @WithElementId ListModelObjectCellTable<StorageDevice, ListModel<StorageDevice>> deviceTable; @UiField @Path(value = "size.entity") @WithElementId StringEntityModelLabelEditor sizeEditor; @UiField @Ignore Label raidParamsLabel; @UiField(provided = true) @Ignore InfoIcon raidParamsInfoIcon; @UiField(provided = true) @Path(value = "raidTypeList.selectedItem") @WithElementId ListModelListBoxEditor<RaidType> raidTypeEditor; @UiField @Ignore Label deviceSelectionInfo; @UiField @Path(value = "noOfPhysicalDisksInRaidVolume.entity") @WithElementId IntegerEntityModelTextBoxEditor noOfPhysicalDisksEditor; @UiField(provided = true) @WithElementId("stripeSize") public EntityModelWidgetWithInfo stripeSizeWithInfo; @Ignore @WithElementId("stripeSizeLabel") public EnableableFormLabel stripeSizeLabel; @Path(value = "stripeSize.entity") @WithElementId("stripeSizeEditor") IntegerEntityModelTextBoxOnlyEditor stripeSizeEditor; @UiField @Ignore Alert message; private static final ApplicationConstants constants = AssetProvider.getConstants(); private static final UIMessages messages = ConstantsManager.getInstance().getMessages(); private static final ApplicationTemplates templates = AssetProvider.getTemplates(); private static final ApplicationMessages applicationMessages = AssetProvider.getMessages(); private final Driver driver = GWT.create(Driver.class); @Inject public CreateBrickPopupView(EventBus eventBus) { super(eventBus); initListBoxEditors(); initInfoIcon(); deviceTable = new ListModelObjectCellTable<>(true, false); stripeSizeLabel = new EnableableFormLabel(); stripeSizeEditor = new IntegerEntityModelTextBoxOnlyEditor(); stripeSizeWithInfo = new EntityModelWidgetWithInfo(stripeSizeLabel, stripeSizeEditor); initWidget(ViewUiBinder.uiBinder.createAndBindUi(this)); ViewIdHandler.idHandler.generateAndSetIds(this); localize(); initTableColumns(); driver.initialize(this); } private void initListBoxEditors() { raidTypeEditor = new ListModelListBoxEditor<>(new EnumRenderer<RaidType>()); } protected void initTableColumns() { // Table Entity Columns deviceTable.addColumn(new AbstractTextColumn<StorageDevice>() { @Override public String getValue(StorageDevice entity) { return entity.getName(); } }, constants.deviceName()); deviceTable.addColumnAndSetWidth(new AbstractTextColumn<StorageDevice>() { @Override public String getValue(StorageDevice entity) { return entity.getDevType(); } }, constants.deviceType(), "100px"); //$NON-NLS-1$ deviceTable.addColumnAndSetWidth(new AbstractTextColumn<StorageDevice>() { @Override public String getValue(StorageDevice entity) { Pair<SizeUnit, Double> convertedSize = SizeConverter.autoConvert(entity.getSize(), SizeUnit.MiB); return messages.sizeUnitString(formatSize(convertedSize.getSecond()), EnumTranslator.getInstance().translate(convertedSize.getFirst())); } }, constants.size(), "100px"); //$NON-NLS-1$ } private void localize() { stripeSizeLabel.setText(constants.stripeSize()); } private void initInfoIcon() { raidParamsInfoIcon = new InfoIcon(templates.italicText(constants.raidConfigurationWarning())); } @Override public void edit(final CreateBrickModel object) { deviceTable.asEditor().edit(object.getStorageDevices()); driver.edit(object); deviceSelectionInfo.setText(null); setRaidParamsVisibility(false); } @Override public CreateBrickModel flush() { deviceTable.flush(); return driver.flush(); } @Override public void cleanup() { driver.cleanup(); } public String formatSize(double size) { return NumberFormat.getFormat("#.##").format(size);//$NON-NLS-1$ } @Override public void setRaidInfoMessages(String raidType, int stripeSize) { deviceSelectionInfo.setText(applicationMessages.getStorageDeviceSelectionInfo(raidType)); //$NON-NLS-1$ //$NON-NLS-2$ this.stripeSizeWithInfo.setExplanation(templates.italicText(applicationMessages.stripSizeInfoForGlusterBricks(stripeSize, raidType))); } @Override public void setRaidParamsVisibility(boolean isVisiable) { deviceSelectionInfo.setVisible(isVisiable); stripeSizeWithInfo.setVisible(isVisiable); } @Override public void setMessage(String message) { super.setMessage(message); this.message.setText(message); this.message.setVisible(!StringUtils.isEmpty(message)); } }