package org.ovirt.engine.ui.webadmin.section.main.view.popup.provider;
import org.gwtbootstrap3.client.ui.Row;
import org.ovirt.engine.core.common.businessentities.ProviderType;
import org.ovirt.engine.core.common.businessentities.StoragePool;
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.Align;
import org.ovirt.engine.ui.common.widget.HasUiCommandClickHandlers;
import org.ovirt.engine.ui.common.widget.UiCommandButton;
import org.ovirt.engine.ui.common.widget.dialog.SimpleDialogPanel;
import org.ovirt.engine.ui.common.widget.dialog.tab.DialogTab;
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.ListModelSuggestBoxEditor;
import org.ovirt.engine.ui.common.widget.editor.generic.StringEntityModelPasswordBoxEditor;
import org.ovirt.engine.ui.common.widget.editor.generic.StringEntityModelTextBoxEditor;
import org.ovirt.engine.ui.common.widget.renderer.EnumRenderer;
import org.ovirt.engine.ui.uicommonweb.models.providers.ProviderModel;
import org.ovirt.engine.ui.uicompat.ConstantsManager;
import org.ovirt.engine.ui.webadmin.ApplicationConstants;
import org.ovirt.engine.ui.webadmin.ApplicationResources;
import org.ovirt.engine.ui.webadmin.gin.AssetProvider;
import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.provider.ProviderPopupPresenterWidget;
import org.ovirt.engine.ui.webadmin.widget.provider.KVMPropertiesWidget;
import org.ovirt.engine.ui.webadmin.widget.provider.NeutronAgentWidget;
import org.ovirt.engine.ui.webadmin.widget.provider.VmwarePropertiesWidget;
import org.ovirt.engine.ui.webadmin.widget.provider.XENPropertiesWidget;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.shared.EventBus;
import com.google.gwt.resources.client.CssResource;
import com.google.gwt.text.shared.AbstractRenderer;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.Label;
import com.google.inject.Inject;
public class ProviderPopupView extends AbstractModelBoundPopupView<ProviderModel> implements ProviderPopupPresenterWidget.ViewDef {
interface Driver extends UiCommonEditorDriver<ProviderModel, ProviderPopupView> {}
private final Driver driver = GWT.create(Driver.class);
interface ViewUiBinder extends UiBinder<SimpleDialogPanel, ProviderPopupView> {
ViewUiBinder uiBinder = GWT.create(ViewUiBinder.class);
}
interface ViewIdHandler extends ElementIdHandler<ProviderPopupView> {
ViewIdHandler idHandler = GWT.create(ViewIdHandler.class);
}
private static final ApplicationResources resources = AssetProvider.getResources();
private static final ApplicationConstants constants = AssetProvider.getConstants();
@UiField
@Path(value = "name.entity")
@WithElementId
StringEntityModelTextBoxEditor nameEditor;
@UiField
@Path(value = "description.entity")
@WithElementId
StringEntityModelTextBoxEditor descriptionEditor;
@UiField(provided = true)
@Path(value = "type.selectedItem")
@WithElementId
ListModelListBoxEditor<ProviderType> typeEditor;
@UiField(provided = true)
@Path(value = "dataCenter.selectedItem")
@WithElementId
ListModelListBoxEditor<StoragePool> datacenterEditor;
@UiField
@Path(value = "url.entity")
@WithElementId
StringEntityModelTextBoxEditor urlEditor;
@UiField
UiCommandButton testButton;
@UiField
Image testResultImage;
@UiField
@Ignore
Label testResultMessage;
@UiField(provided = true)
@Path(value = "requiresAuthentication.entity")
@WithElementId
EntityModelCheckBoxEditor requiresAuthenticationEditor;
@UiField
@Path(value = "username.entity")
@WithElementId
StringEntityModelTextBoxEditor usernameEditor;
@UiField
@Path(value = "password.entity")
@WithElementId
StringEntityModelPasswordBoxEditor passwordEditor;
@UiField
@Path(value = "tenantName.entity")
@WithElementId
StringEntityModelTextBoxEditor tenantNameEditor;
@UiField
@Path(value = "authUrl.entity")
@WithElementId
StringEntityModelTextBoxEditor authUrlEditor;
@UiField
@Path(value = "pluginType.selectedItem")
@WithElementId
ListModelSuggestBoxEditor pluginTypeEditor;
@UiField
@WithElementId
DialogTab generalTab;
@UiField
@Ignore
DialogTab agentConfigurationTab;
@UiField
Row typeEditorRow;
@UiField
Row datacenterEditorRow;
@UiField
@Ignore
NeutronAgentWidget neutronAgentWidget;
@UiField
@Ignore
VmwarePropertiesWidget vmwarePropertiesWidget;
@UiField
@Ignore
KVMPropertiesWidget kvmPropertiesWidget;
@UiField
@Ignore
XENPropertiesWidget xenPropertiesWidget;
@UiField(provided = true)
@Path(value = "readOnly.entity")
@WithElementId
EntityModelCheckBoxEditor readOnlyEditor;
@UiField
Style style;
private ProviderModel providerModel;
@SuppressWarnings({ "rawtypes", "unchecked" })
@Inject
public ProviderPopupView(EventBus eventBus) {
super(eventBus);
typeEditor = new ListModelListBoxEditor<>(new EnumRenderer());
datacenterEditor = new ListModelListBoxEditor<>(new AbstractRenderer<StoragePool>() {
@Override
public String render(StoragePool storagePool) {
return storagePool != null ? storagePool.getName() :
ConstantsManager.getInstance().getConstants().anyDataCenter();
}
});
requiresAuthenticationEditor = new EntityModelCheckBoxEditor(Align.RIGHT);
readOnlyEditor = new EntityModelCheckBoxEditor(Align.RIGHT);
initWidget(ViewUiBinder.uiBinder.createAndBindUi(this));
ViewIdHandler.idHandler.generateAndSetIds(this);
driver.initialize(this);
}
@Override
public void edit(ProviderModel model) {
providerModel = model;
setAgentTabVisibility(model.getNeutronAgentModel().isPluginConfigurationAvailable().getEntity());
driver.edit(model);
neutronAgentWidget.edit(model.getNeutronAgentModel());
vmwarePropertiesWidget.edit(model.getVmwarePropertiesModel());
kvmPropertiesWidget.edit(model.getKvmPropertiesModel());
xenPropertiesWidget.edit(model.getXenPropertiesModel());
}
@Override
public ProviderModel flush() {
neutronAgentWidget.flush();
vmwarePropertiesWidget.flush();
kvmPropertiesWidget.flush();
xenPropertiesWidget.flush();
return driver.flush();
}
@Override
public void cleanup() {
driver.cleanup();
}
@Override
public void focusInput() {
nameEditor.setFocus(true);
}
interface Style extends CssResource {
String contentStyle();
String testResultImage();
String headerSeparator();
}
@Override
public HasUiCommandClickHandlers getTestButton() {
return testButton;
}
@Override
public void setTestResultImage(String errorMessage) {
testResultImage.setResource(errorMessage.isEmpty() ? resources.logNormalImage() : resources.logErrorImage());
testResultImage.setStylePrimaryName(style.testResultImage());
testResultMessage.setText(errorMessage.isEmpty() ? constants.testSuccessMessage() : errorMessage);
}
@Override
public void setAgentTabVisibility(boolean visible) {
agentConfigurationTab.setVisible(visible);
}
@Override
public void setCurrentActiveProviderWidget() {
if (providerModel != null) {
if (providerModel.getDataCenter().getIsAvailable()) {
typeEditorRow.removeStyleName(style.headerSeparator());
datacenterEditorRow.addStyleName(style.headerSeparator());
} else {
typeEditorRow.addStyleName(style.headerSeparator());
datacenterEditorRow.removeStyleName(style.headerSeparator());
}
kvmPropertiesWidget.setVisible(providerModel.getKvmPropertiesModel().getIsAvailable());
vmwarePropertiesWidget.setVisible(providerModel.getVmwarePropertiesModel().getIsAvailable());
xenPropertiesWidget.setVisible(providerModel.getXenPropertiesModel().getIsAvailable());
}
}
@Override
public int setTabIndexes(int nextTabIndex) {
nameEditor.setTabIndex(nextTabIndex++);
descriptionEditor.setTabIndex(nextTabIndex++);
typeEditor.setTabIndex(nextTabIndex++);
datacenterEditor.setTabIndex(nextTabIndex++);
pluginTypeEditor.setTabIndex(nextTabIndex++);
urlEditor.setTabIndex(nextTabIndex++);
readOnlyEditor.setTabIndex(nextTabIndex++);
nextTabIndex = vmwarePropertiesWidget.setTabIndexes(nextTabIndex);
kvmPropertiesWidget.setTabIndexes(nextTabIndex++);
xenPropertiesWidget.setTabIndexes(nextTabIndex++);
requiresAuthenticationEditor.setTabIndex(nextTabIndex++);
usernameEditor.setTabIndex(nextTabIndex++);
passwordEditor.setTabIndex(nextTabIndex++);
tenantNameEditor.setTabIndex(nextTabIndex++);
authUrlEditor.setTabIndex(nextTabIndex++);
testButton.setTabIndex(nextTabIndex++);
return nextTabIndex;
}
}