package org.ovirt.engine.ui.webadmin.widget.provider; import org.ovirt.engine.core.common.businessentities.OpenstackNetworkProviderProperties; import org.ovirt.engine.core.common.businessentities.Provider; import org.ovirt.engine.core.common.businessentities.ProviderType; 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.EntityModelWidgetWithInfo; import org.ovirt.engine.ui.common.widget.PatternFlyCompatible; import org.ovirt.engine.ui.common.widget.editor.ListModelListBoxEditor; import org.ovirt.engine.ui.common.widget.editor.ListModelListBoxOnlyEditor; import org.ovirt.engine.ui.common.widget.editor.generic.ListModelSuggestBoxEditor; 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.renderer.NameRenderer; import org.ovirt.engine.ui.common.widget.uicommon.popup.AbstractModelBoundPopupWidget; import org.ovirt.engine.ui.uicommonweb.models.providers.HostNetworkProviderModel; import org.ovirt.engine.ui.uicommonweb.models.providers.NeutronAgentModel; import org.ovirt.engine.ui.webadmin.ApplicationConstants; import org.ovirt.engine.ui.webadmin.ApplicationTemplates; import org.ovirt.engine.ui.webadmin.gin.AssetProvider; 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.FlowPanel; import com.google.inject.Inject; public class HostNetworkProviderWidget extends AbstractModelBoundPopupWidget<HostNetworkProviderModel> implements PatternFlyCompatible { interface Driver extends UiCommonEditorDriver<HostNetworkProviderModel, HostNetworkProviderWidget> { } private final Driver driver = GWT.create(Driver.class); interface ViewUiBinder extends UiBinder<FlowPanel, HostNetworkProviderWidget> { ViewUiBinder uiBinder = GWT.create(ViewUiBinder.class); } interface ViewIdHandler extends ElementIdHandler<HostNetworkProviderWidget> { ViewIdHandler idHandler = GWT.create(ViewIdHandler.class); } private static final ApplicationTemplates templates = AssetProvider.getTemplates(); private static final ApplicationConstants constants = AssetProvider.getConstants(); @UiField(provided = true) @WithElementId("networkProvider") public EntityModelWidgetWithInfo networkProvider; @Ignore @WithElementId("networkProviderLabel") public EnableableFormLabel networkProviderLabel; @Path(value = "networkProviders.selectedItem") @WithElementId("networkProviderEditor") public ListModelListBoxOnlyEditor<Provider<OpenstackNetworkProviderProperties>> networkProviderEditor; @UiField(provided = true) @Path(value = "networkProviderType.selectedItem") @WithElementId("networkProviderType") public ListModelListBoxEditor<ProviderType> networkProviderTypeEditor; @UiField @Path(value = "providerPluginType.selectedItem") @WithElementId("providerPluginType") public ListModelSuggestBoxEditor providerPluginTypeEditor; @UiField FlowPanel neutronAgentPanel; @UiField(provided = true) @Ignore NeutronAgentWidget neutronAgentWidget; @Inject public HostNetworkProviderWidget() { networkProviderLabel = new EnableableFormLabel(); networkProviderEditor = new ListModelListBoxOnlyEditor<>(new NameRenderer<Provider<OpenstackNetworkProviderProperties>>()); networkProvider = new EntityModelWidgetWithInfo(networkProviderLabel, networkProviderEditor); networkProviderTypeEditor = new ListModelListBoxEditor<>(new EnumRenderer<ProviderType>()); neutronAgentWidget = new NeutronAgentWidget(); initWidget(ViewUiBinder.uiBinder.createAndBindUi(this)); ViewIdHandler.idHandler.generateAndSetIds(this); networkProviderLabel.setText(constants.externalNetworkProviderLabel()); networkProvider.setExplanation(templates.italicText(constants.externalProviderExplanation())); networkProviderTypeEditor.setLabel(constants.typeProvider()); providerPluginTypeEditor.setLabel(constants.pluginType()); driver.initialize(this); } @Override public void edit(HostNetworkProviderModel model) { driver.edit(model); final NeutronAgentModel neutronAgentModel = model.getNeutronAgentModel(); neutronAgentWidget.edit(neutronAgentModel); neutronAgentPanel.setVisible(neutronAgentModel.isPluginConfigurationAvailable().getEntity()); neutronAgentModel.isPluginConfigurationAvailable().getEntityChangedEvent().addListener((ev, sender, args) -> neutronAgentPanel.setVisible(neutronAgentModel.isPluginConfigurationAvailable().getEntity())); } @Override public HostNetworkProviderModel flush() { neutronAgentWidget.flush(); return driver.flush(); } @Override public void cleanup() { driver.cleanup(); } @Override public void setUsePatternFly(boolean use) { networkProvider.setUsePatternFly(use); networkProviderTypeEditor.setUsePatternFly(use); providerPluginTypeEditor.setUsePatternFly(use); } }