package org.ovirt.engine.ui.webadmin.section.main.view.popup.storage; import org.gwtbootstrap3.client.ui.Row; import org.ovirt.engine.core.common.businessentities.gluster.GlusterBrickEntity; import org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeEntity; 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.widget.Align; import org.ovirt.engine.ui.common.widget.editor.ListModelListBoxEditor; import org.ovirt.engine.ui.common.widget.editor.generic.EntityModelCheckBoxEditor; import org.ovirt.engine.ui.common.widget.editor.generic.StringEntityModelTextBoxEditor; import org.ovirt.engine.ui.common.widget.renderer.NullSafeRenderer; import org.ovirt.engine.ui.common.widget.uicommon.storage.AbstractStorageView; import org.ovirt.engine.ui.uicommonweb.models.storage.GlusterStorageModel; import org.ovirt.engine.ui.uicompat.external.StringUtils; import com.google.gwt.core.client.GWT; 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.gwt.user.client.ui.Widget; public class GlusterStorageView extends AbstractStorageView<GlusterStorageModel> { interface Driver extends UiCommonEditorDriver<GlusterStorageModel, GlusterStorageView> { } interface ViewUiBinder extends UiBinder<Widget, GlusterStorageView> { ViewUiBinder uiBinder = GWT.create(ViewUiBinder.class); } interface ViewIdHandler extends ElementIdHandler<GlusterStorageView> { ViewIdHandler idHandler = GWT.create(ViewIdHandler.class); } private final Driver driver = GWT.create(Driver.class); @UiField @Path(value = "path.entity") @WithElementId("path") StringEntityModelTextBoxEditor pathEditor; @UiField @Ignore Label pathExampleLabel; @UiField @Path(value = "vfsType.entity") @WithElementId("vfsType") StringEntityModelTextBoxEditor vfsTypeEditor; @UiField @Path(value = "mountOptions.entity") @WithElementId("mountOptions") StringEntityModelTextBoxEditor mountOptionsEditor; @UiField Row glusterVolumesRow; @UiField Row pathEditorRow; @UiField @Path(value = "configurationMessage") Label message; @UiField @Path(value = "linkGlusterVolume.entity") @WithElementId("linkGlusterVolume") EntityModelCheckBoxEditor linkGlusterVolumeEditor; @UiField(provided = true) @Path(value = "glusterVolumes.selectedItem") @WithElementId ListModelListBoxEditor<GlusterVolumeEntity> glusterVolumesEditor; public GlusterStorageView() { initEditors(); initWidget(ViewUiBinder.uiBinder.createAndBindUi(this)); ViewIdHandler.idHandler.generateAndSetIds(this); driver.initialize(this); } void initEditors() { linkGlusterVolumeEditor = new EntityModelCheckBoxEditor(Align.RIGHT); glusterVolumesEditor = new ListModelListBoxEditor<>(new NullSafeRenderer<GlusterVolumeEntity>() { @Override protected String renderNullSafe(GlusterVolumeEntity glusterVolume) { if (glusterVolume == null) { return ""; //$NON-NLS-1$ } else { if (glusterVolume.getBricks().isEmpty()) { return glusterVolume.getName(); } GlusterBrickEntity brick = glusterVolume.getBricks().get(0); if (brick == null) { return glusterVolume.getName(); } String server = brick.getNetworkId() != null && !StringUtils.isEmpty(brick.getNetworkAddress()) ? brick.getNetworkAddress() : brick.getServerName(); return server + ":/" + glusterVolume.getName(); //$NON-NLS-1$ } } }); } @Override public void edit(GlusterStorageModel object) { final GlusterStorageModel glusterStorageModel = object; driver.edit(object); glusterVolumesEditor.asEditor().setValue(object.getGlusterVolumes().getSelectedItem()); pathExampleLabel.setVisible(object.getPath().getIsAvailable() && object.getPath().getIsChangable()); glusterStorageModel.getLinkGlusterVolume().getEntityChangedEvent().addListener((ev, sender, args) -> { // Editor, needs the example boolean showEditor = !glusterStorageModel.getLinkGlusterVolume().getEntity(); pathEditorRow.setVisible(showEditor); pathExampleLabel.setVisible(showEditor); // List box, shouldn't have an example since you can only select one. glusterVolumesRow.setVisible(!showEditor); }); } @Override public GlusterStorageModel flush() { return driver.flush(); } @Override public void cleanup() { driver.cleanup(); } @Override public void focus() { pathEditor.setFocus(true); } }