package org.ovirt.engine.ui.common.widget.uicommon.popup.vm; import java.util.Map; import org.gwtbootstrap3.client.ui.Button; import org.gwtbootstrap3.client.ui.Row; import org.gwtbootstrap3.client.ui.constants.IconType; import org.gwtbootstrap3.client.ui.constants.Styles; import org.ovirt.engine.core.common.businessentities.network.Ipv4BootProtocol; import org.ovirt.engine.core.common.businessentities.network.Ipv6BootProtocol; import org.ovirt.engine.ui.common.CommonApplicationConstants; import org.ovirt.engine.ui.common.CommonApplicationTemplates; import org.ovirt.engine.ui.common.editor.UiCommonEditorDriver; import org.ovirt.engine.ui.common.gin.AssetProvider; 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.ComboBox; import org.ovirt.engine.ui.common.widget.EntityModelWidgetWithInfo; import org.ovirt.engine.ui.common.widget.dialog.AdvancedParametersExpander; import org.ovirt.engine.ui.common.widget.dialog.InfoIcon; 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.IntegerEntityModelTextBoxEditor; 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.StringEntityModelTextAreaEditor; import org.ovirt.engine.ui.common.widget.editor.generic.StringEntityModelTextBoxEditor; import org.ovirt.engine.ui.common.widget.editor.generic.StringEntityModelTextBoxOnlyEditor; 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.NullSafeRenderer; import org.ovirt.engine.ui.common.widget.uicommon.popup.AbstractModelBoundPopupWidget; import org.ovirt.engine.ui.uicommonweb.models.vms.VmInitModel; import com.google.gwt.core.client.GWT; import com.google.gwt.resources.client.ClientBundle; import com.google.gwt.resources.client.CssResource; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.cellview.client.CellTable; import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.IndexedPanel; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.Widget; public abstract class VmInitWidget extends AbstractModelBoundPopupWidget<VmInitModel> implements IndexedPanel { interface Driver extends UiCommonEditorDriver<VmInitModel, VmInitWidget> { } interface ViewUiBinder extends UiBinder<Widget, VmInitWidget> { ViewUiBinder uiBinder = GWT.create(ViewUiBinder.class); } interface ViewIdHandler extends ElementIdHandler<VmInitWidget> { ViewIdHandler idHandler = GWT.create(ViewIdHandler.class); } private final Driver driver = GWT.create(Driver.class); public static interface BasicStyle extends CssResource { String DEFAULT_CSS = "org/ovirt/engine/ui/common/css/BaseVmInitStyle.css"; //$NON-NLS-1$ String primaryOption(); String customScript(); String expanderContent(); } public static interface Resources extends ClientBundle { @Source(CellTable.Style.DEFAULT_CSS) BasicStyle createStyle(); } interface Style extends CssResource { String displayNone(); } private final BasicStyle customizableStyle; @UiField Style style; @UiField @Ignore FlowPanel mainPanel; @UiField @Ignore FlowPanel syspreptOptionsContent; @UiField(provided = true) @Path(value = "windowsSysprepTimeZone.selectedItem") @WithElementId ListModelListBoxEditor<Map.Entry<String, String>> windowsSysprepTimeZoneEditor; @UiField(provided = true) @Path(value = "windowsSysprepTimeZoneEnabled.entity") @WithElementId EntityModelCheckBoxEditor windowsSyspreptimeZoneEnabledEditor; @UiField @Ignore FlowPanel cloudInitOptionsContent; @Path(value = "windowsHostname.entity") @WithElementId StringEntityModelTextBoxOnlyEditor windowsHostnameEditor; @UiField(provided = true) @Ignore public EntityModelWidgetWithInfo windowsHostnameEditorWithInfo; @UiField @Path(value = "sysprepOrgName.entity") @WithElementId StringEntityModelTextBoxEditor sysprepOrgNameEditor; @UiField @Path(value = "sysprepDomain.selectedItem") @WithElementId ListModelSuggestBoxEditor sysprepDomainEditor; @UiField @Path(value = "inputLocale.entity") @WithElementId StringEntityModelTextBoxEditor inputLocaleEditor; @UiField @Path(value = "uiLanguage.entity") @WithElementId StringEntityModelTextBoxEditor uiLanguageEditor; @UiField @Path(value = "systemLocale.entity") @WithElementId StringEntityModelTextBoxEditor systemLocaleEditor; @UiField @Path(value = "userLocale.entity") @WithElementId StringEntityModelTextBoxEditor userLocaleEditor; @UiField @Path(value = "sysprepScript.entity") @WithElementId StringEntityModelTextAreaEditor sysprepScriptEditor; @UiField @Path(value = "activeDirectoryOU.entity") @WithElementId StringEntityModelTextBoxEditor activeDirectoryOUEditor; @UiField @Path(value = "userName.entity") @WithElementId StringEntityModelTextBoxEditor userNameEditor; @UiField @Path(value = "hostname.entity") @WithElementId StringEntityModelTextBoxEditor hostnameEditor; @UiField @Path(value = "authorizedKeys.entity") @WithElementId StringEntityModelTextAreaEditor authorizedKeysEditor; @UiField @Path(value = "customScript.entity") @WithElementId StringEntityModelTextAreaEditor customScriptEditor; @UiField(provided = true) public InfoIcon customScriptInfoIcon; @UiField(provided = true) @Path(value = "regenerateKeysEnabled.entity") @WithElementId EntityModelCheckBoxEditor regenerateKeysEnabledEditor; @UiField (provided = true) @Path(value = "timeZoneEnabled.entity") @WithElementId EntityModelCheckBoxEditor timeZoneEnabledEditor; @UiField(provided = true) @Path(value = "timeZoneList.selectedItem") @WithElementId ListModelListBoxEditor<Map.Entry<String, String>> timeZoneEditor; @UiField @Ignore AdvancedParametersExpander authenticationExpander; @UiField @Ignore FlowPanel authenticationExpanderContent; @UiField (provided = true) @Path(value = "cloudInitPasswordSet.entity") @WithElementId EntityModelCheckBoxEditor cloudInitPasswordSetEditor; @UiField @Path(value = "cloudInitRootPassword.entity") @WithElementId StringEntityModelPasswordBoxEditor cloudInitRootPasswordEditor; @UiField @Path(value = "cloudInitRootPasswordVerification.entity") @WithElementId StringEntityModelPasswordBoxEditor cloudInitRootPasswordVerificationEditor; @UiField (provided = true) @Path(value = "sysprepPasswordSet.entity") @WithElementId EntityModelCheckBoxEditor sysprepPasswordSetEditor; @UiField @Path(value = "sysprepAdminPassword.entity") @WithElementId StringEntityModelPasswordBoxEditor sysprepAdminPasswordEditor; @UiField @Path(value = "sysprepAdminPasswordVerification.entity") @WithElementId StringEntityModelPasswordBoxEditor sysprepAdminPasswordVerificationEditor; @UiField @Ignore AdvancedParametersExpander networkExpander; @UiField @Ignore FlowPanel networkExpanderContent; @UiField(provided = true) @Path(value = "networkEnabled.entity") @WithElementId EntityModelCheckBoxEditor networkEnabledEditor; @Path(value = "networkSelectedName.entity") @WithElementId StringEntityModelTextBoxEditor networkNameEditor; @Path(value = "networkList.selectedItem") @WithElementId ListModelListBoxEditor<String> networkListEditor; @UiField(provided = true) @WithElementId ComboBox<String> networkComboBox; @UiField @Ignore Label networkSelectLabel; @UiField Button networkAddButton; @UiField @Ignore Label networkAddLabel; @UiField @Ignore AdvancedParametersExpander customScriptExpander; @UiField @Ignore FlowPanel customScriptExpanderContent; @UiField @Ignore AdvancedParametersExpander sysprepScriptExpander; @UiField @Ignore FlowPanel sysprepScriptExpanderContent; @UiField @Ignore AdvancedParametersExpander sysprepPasswordExpander; @UiField @Ignore FlowPanel sysprepPasswordExpanderContent; @UiField @Ignore AdvancedParametersExpander sysprepInputsExpander; @UiField @Ignore FlowPanel sysprepInputsExpanderContent; @UiField @Ignore Label networkLabelSepAddRemove; @UiField Button networkRemoveButton; @UiField @Ignore Label networkRemoveLabel; @UiField @Ignore Row networkOptions; @UiField(provided = true) @Path(value = "ipv4BootProtocolList.selectedItem") @WithElementId ListModelListBoxEditor<Ipv4BootProtocol> ipv4BootProtocolEditor; @UiField(provided = true) @Path(value = "ipv6BootProtocolList.selectedItem") @WithElementId ListModelListBoxEditor<Ipv6BootProtocol> ipv6BootProtocolEditor; @UiField @Path(value = "networkIpAddress.entity") @WithElementId StringEntityModelTextBoxEditor networkIpv4AddressEditor; @UiField @Path(value = "networkNetmask.entity") @WithElementId StringEntityModelTextBoxEditor networkIpv4NetmaskEditor; @UiField @Path(value = "networkGateway.entity") @WithElementId StringEntityModelTextBoxEditor networkIpv4GatewayEditor; @UiField @Path(value = "networkIpv6Address.entity") @WithElementId StringEntityModelTextBoxEditor networkIpv6AddressEditor; @UiField @Path(value = "networkIpv6Prefix.entity") @WithElementId IntegerEntityModelTextBoxEditor networkIpv6PrefixEditor; @UiField @Path(value = "networkIpv6Gateway.entity") @WithElementId StringEntityModelTextBoxEditor networkIpv6GatewayEditor; @UiField (provided = true) @Path(value = "networkStartOnBoot.entity") @WithElementId EntityModelCheckBoxEditor networkStartOnBootEditor; @UiField @Path(value = "dnsServers.entity") @WithElementId StringEntityModelTextBoxEditor dnsServers; @UiField @Path(value = "dnsSearchDomains.entity") @WithElementId StringEntityModelTextBoxEditor dnsSearchDomains; private static final CommonApplicationTemplates templates = AssetProvider.getTemplates(); private static final CommonApplicationConstants constants = AssetProvider.getConstants(); public VmInitWidget(BasicStyle style) { style.ensureInjected(); this.customizableStyle = style; customScriptInfoIcon = new InfoIcon(templates.italicText(constants.customScriptInfo())); initEditorsWithIcon(); initCheckBoxEditors(); initListBoxEditors(); initComboBoxEditors(); initWidget(ViewUiBinder.uiBinder.createAndBindUi(this)); sysprepScriptEditor.hideLabel(); customScriptEditor.hideLabel(); initAdvancedParameterExpanders(); networkRemoveButton.setIcon(IconType.MINUS); networkAddButton.setIcon(IconType.PLUS); localize(); addStyles(); ViewIdHandler.idHandler.generateAndSetIds(this); driver.initialize(this); } private void initEditorsWithIcon() { windowsHostnameEditor = new StringEntityModelTextBoxOnlyEditor(); EnableableFormLabel label = new EnableableFormLabel(); label.setText(constants.cloudInitHostnameLabel()); windowsHostnameEditorWithInfo = new EntityModelWidgetWithInfo(label, windowsHostnameEditor); windowsHostnameEditorWithInfo.setExplanation(templates.italicText(constants.windowsHostNameInfo())); } private void initAdvancedParameterExpanders() { authenticationExpander.initWithContent(authenticationExpanderContent.getElement()); networkExpander.initWithContent(networkExpanderContent.getElement()); customScriptExpander.initWithContent(customScriptExpanderContent.getElement()); sysprepScriptExpander.initWithContent(sysprepScriptExpanderContent.getElement()); sysprepPasswordExpander.initWithContent(sysprepPasswordExpanderContent.getElement()); sysprepInputsExpander.initWithContent(sysprepInputsExpanderContent.getElement()); } void initCheckBoxEditors() { networkEnabledEditor = new EntityModelCheckBoxEditor(Align.RIGHT); networkStartOnBootEditor = new EntityModelCheckBoxEditor(Align.RIGHT); timeZoneEnabledEditor = new EntityModelCheckBoxEditor(Align.RIGHT); cloudInitPasswordSetEditor = new EntityModelCheckBoxEditor(Align.RIGHT); regenerateKeysEnabledEditor = new EntityModelCheckBoxEditor(Align.RIGHT); windowsSyspreptimeZoneEnabledEditor = new EntityModelCheckBoxEditor(Align.RIGHT); sysprepPasswordSetEditor = new EntityModelCheckBoxEditor(Align.RIGHT); } void initListBoxEditors() { timeZoneEditor = new ListModelListBoxEditor<>(new NullSafeRenderer<Map.Entry<String, String>>() { @Override public String renderNullSafe(Map.Entry<String, String> object) { return object.getValue(); } }); windowsSysprepTimeZoneEditor = new ListModelListBoxEditor<>(new NullSafeRenderer<Map.Entry<String, String>>() { @Override public String renderNullSafe(Map.Entry<String, String> object) { return object.getValue(); } }); ipv4BootProtocolEditor = new ListModelListBoxEditor<>(new EnumRenderer<Ipv4BootProtocol>()); ipv6BootProtocolEditor = new ListModelListBoxEditor<>(new EnumRenderer<Ipv6BootProtocol>()); } void initComboBoxEditors() { networkListEditor = new ListModelListBoxEditor<>(); networkNameEditor = new StringEntityModelTextBoxEditor(); networkComboBox = new ComboBox<>(networkListEditor, networkNameEditor); } void localize() { hostnameEditor.setLabel(constants.cloudInitHostnameLabel()); sysprepOrgNameEditor.setLabel(constants.sysprepOrgNameLabel()); sysprepDomainEditor.setLabel(constants.domainVmPopup()); inputLocaleEditor.setLabel(constants.inputLocaleLabel()); uiLanguageEditor.setLabel(constants.uiLanguageLabel()); sysprepScriptEditor.setWidgetTooltip(constants.sysprepLabel()); activeDirectoryOUEditor.setLabel(constants.activeDirectoryOU()); activeDirectoryOUEditor.setWidgetTooltip(constants.activeDirectoryOUToolTip()); systemLocaleEditor.setLabel(constants.systemLocaleLabel()); userLocaleEditor.setLabel(constants.userLocaleLabel()); userNameEditor.setLabel(constants.cloudInitUserNameLabel()); authorizedKeysEditor.setLabel(constants.cloudInitAuthorizedKeysLabel()); timeZoneEditor.setLabel(constants.cloudInitTimeZoneLabel()); windowsSyspreptimeZoneEnabledEditor.setLabel(constants.cloudInitConfigureTimeZoneLabel()); windowsSysprepTimeZoneEditor.setLabel(constants.cloudInitTimeZoneLabel()); cloudInitRootPasswordEditor.setLabel(constants.cloudInitRootPasswordLabel()); cloudInitRootPasswordVerificationEditor.setLabel(constants.cloudInitRootPasswordVerificationLabel()); sysprepAdminPasswordEditor.setLabel(constants.sysprepAdminPasswordLabel()); sysprepAdminPasswordVerificationEditor.setLabel(constants.sysprepAdminPasswordVerificationLabel()); String sep = "|"; //$NON-NLS-1$ // sequence is: <select label> | [+] <add label> | [-] <remove label> networkSelectLabel.setText(constants.cloudInitNetworkSelectLabel()); networkAddLabel.setText(constants.cloudInitObjectAddLabel()); networkLabelSepAddRemove.setText(sep); networkRemoveLabel.setText(constants.cloudInitObjectRemoveLabel()); ipv4BootProtocolEditor.setLabel(constants.cloudInitNetworkIpv4BootProtocolLabel()); networkIpv4AddressEditor.setLabel(constants.cloudInitNetworkIpv4AddressLabel()); networkIpv4NetmaskEditor.setLabel(constants.cloudInitNetworkIpv4NetmaskLabel()); networkIpv4GatewayEditor.setLabel(constants.cloudInitNetworkIpv4GatewayLabel()); ipv6BootProtocolEditor.setLabel(constants.cloudInitNetworkIpv6BootProtocolLabel()); networkIpv6AddressEditor.setLabel(constants.cloudInitNetworkIpv6AddressLabel()); networkIpv6PrefixEditor.setLabel(constants.cloudInitNetworkIpv6PrefixLabel()); networkIpv6GatewayEditor.setLabel(constants.cloudInitNetworkIpv6GatewayLabel()); dnsServers.setLabel(constants.cloudInitDnsServersLabel()); dnsSearchDomains.setLabel(constants.cloudInitDnsSearchDomainsLabel()); hostnameEditor.setWidgetTooltip(constants.cloudInitHostnameToolTip()); windowsHostnameEditor.setWidgetTooltip(constants.cloudInitHostnameToolTip()); authorizedKeysEditor.setWidgetTooltip(constants.cloudInitAuthorizedKeysToolTip()); cloudInitPasswordSetEditor.setWidgetTooltip(constants.vmInitPasswordSetToolTip()); sysprepPasswordSetEditor.setWidgetTooltip(constants.vmInitPasswordSetToolTip()); customScriptEditor.setWidgetTooltip(constants.customScriptToolTip()); regenerateKeysEnabledEditor.setWidgetTooltip(constants.cloudInitRegenerateKeysToolTip()); timeZoneEditor.setWidgetTooltip(constants.cloudInitTimeZoneToolTip()); cloudInitRootPasswordEditor.setWidgetTooltip(constants.cloudInitRootPasswordToolTip()); cloudInitRootPasswordVerificationEditor.setWidgetTooltip(constants.cloudInitRootPasswordVerificationToolTip()); sysprepAdminPasswordEditor.setWidgetTooltip(constants.sysprepAdminPasswordToolTip()); sysprepAdminPasswordVerificationEditor.setWidgetTooltip(constants.sysprepAdminPasswordVerificationToolTip()); networkListEditor.setWidgetTooltip(constants.cloudInitNetworkToolTip()); networkNameEditor.setWidgetTooltip(constants.cloudInitNetworkToolTip()); ipv4BootProtocolEditor.setWidgetTooltip(constants.cloudInitNetworkIpv4BootProtocolToolTip()); networkIpv4AddressEditor.setWidgetTooltip(constants.cloudInitNetworkIpv4AddressToolTip()); networkIpv4NetmaskEditor.setWidgetTooltip(constants.cloudInitNetworkIpv4NetmaskToolTip()); networkIpv4GatewayEditor.setWidgetTooltip(constants.cloudInitNetworkIpv4GatewayToolTip()); ipv6BootProtocolEditor.setWidgetTooltip(constants.cloudInitNetworkIpv6BootProtocolToolTip()); networkIpv6AddressEditor.setWidgetTooltip(constants.cloudInitNetworkIpv6AddressToolTip()); networkIpv6PrefixEditor.setWidgetTooltip(constants.cloudInitNetworkIpv6PrefixToolTip()); networkIpv6GatewayEditor.setWidgetTooltip(constants.cloudInitNetworkIpv6GatewayToolTip()); networkStartOnBootEditor.setWidgetTooltip(constants.cloudInitNetworkStartOnBootToolTip()); dnsServers.setWidgetTooltip(constants.cloudInitDnsServersToolTip()); dnsSearchDomains.setWidgetTooltip(constants.cloudInitDnsSearchDomainsToolTip()); networkExpander.setTitleWhenExpanded(constants.cloudInitNetworskLabel()); networkExpander.setTitleWhenCollapsed(constants.cloudInitNetworskLabel()); authenticationExpander.setTitleWhenExpanded(constants.cloudInitAuthenticationLabel()); authenticationExpander.setTitleWhenCollapsed(constants.cloudInitAuthenticationLabel()); customScriptExpander.setTitleWhenExpanded(constants.customScriptLabel()); customScriptExpander.setTitleWhenCollapsed(constants.customScriptLabel()); sysprepScriptExpander.setTitleWhenExpanded(constants.sysprepLabel()); sysprepScriptExpander.setTitleWhenCollapsed(constants.sysprepLabel()); sysprepPasswordExpander.setTitleWhenExpanded(constants.sysprepAdminPasswordLabel()); sysprepPasswordExpander.setTitleWhenCollapsed(constants.sysprepAdminPasswordLabel()); sysprepInputsExpander.setTitleWhenExpanded(constants.customLocaleLabel()); sysprepInputsExpander.setTitleWhenCollapsed(constants.customLocaleLabel()); } void addStyles() { networkListEditor.hideLabel(); setNetworkDetailsStyle(false); setNetworkIpv4StaticDetailsStyle(false); setNetworkIpv6StaticDetailsStyle(false); windowsSyspreptimeZoneEnabledEditor.addStyleName(customizableStyle.primaryOption()); sysprepDomainEditor.addStyleName(customizableStyle.primaryOption()); ipv4BootProtocolEditor.addStyleName(customizableStyle.primaryOption()); networkIpv4AddressEditor.addStyleName(customizableStyle.primaryOption()); networkIpv4NetmaskEditor.addStyleName(customizableStyle.primaryOption()); networkIpv4GatewayEditor.addStyleName(customizableStyle.primaryOption()); ipv6BootProtocolEditor.addStyleName(customizableStyle.primaryOption()); networkIpv6AddressEditor.addStyleName(customizableStyle.primaryOption()); networkIpv6PrefixEditor.addStyleName(customizableStyle.primaryOption()); networkIpv6GatewayEditor.addStyleName(customizableStyle.primaryOption()); networkStartOnBootEditor.addStyleName(customizableStyle.primaryOption()); windowsSysprepTimeZoneEditor.addStyleName(customizableStyle.primaryOption()); inputLocaleEditor.addStyleName(customizableStyle.primaryOption()); uiLanguageEditor.addStyleName(customizableStyle.primaryOption()); activeDirectoryOUEditor.addStyleName(customizableStyle.primaryOption()); systemLocaleEditor.addStyleName(customizableStyle.primaryOption()); userLocaleEditor.addStyleName(customizableStyle.primaryOption()); userNameEditor.addStyleName(customizableStyle.primaryOption()); hostnameEditor.addStyleName(customizableStyle.primaryOption()); windowsHostnameEditor.addStyleName(customizableStyle.primaryOption()); sysprepOrgNameEditor.addStyleName(customizableStyle.primaryOption()); timeZoneEnabledEditor.addStyleName(customizableStyle.primaryOption()); timeZoneEditor.addStyleName(customizableStyle.primaryOption()); cloudInitRootPasswordEditor.addStyleName(customizableStyle.primaryOption()); cloudInitRootPasswordVerificationEditor.addStyleName(customizableStyle.primaryOption()); sysprepAdminPasswordEditor.addStyleName(customizableStyle.primaryOption()); sysprepAdminPasswordVerificationEditor.addStyleName(customizableStyle.primaryOption()); authorizedKeysEditor.addStyleName(customizableStyle.primaryOption()); cloudInitPasswordSetEditor.addStyleName(customizableStyle.primaryOption()); sysprepPasswordSetEditor.addStyleName(customizableStyle.primaryOption()); regenerateKeysEnabledEditor.addStyleName(customizableStyle.primaryOption()); authenticationExpanderContent.addStyleName(customizableStyle.expanderContent()); customScriptExpanderContent.addStyleName(customizableStyle.expanderContent()); sysprepScriptExpanderContent.addStyleName(customizableStyle.expanderContent()); sysprepPasswordExpanderContent.addStyleName(customizableStyle.expanderContent()); sysprepInputsExpanderContent.addStyleName(customizableStyle.expanderContent()); networkExpanderContent.addStyleName(customizableStyle.expanderContent()); } public void setUsePatternFly(boolean use) { windowsHostnameEditorWithInfo.setUsePatternFly(use); sysprepDomainEditor.setUsePatternFly(use); sysprepOrgNameEditor.setUsePatternFly(use); activeDirectoryOUEditor.setUsePatternFly(use); windowsSyspreptimeZoneEnabledEditor.setUsePatternFly(use); windowsSysprepTimeZoneEditor.setUsePatternFly(use); sysprepPasswordSetEditor.setUsePatternFly(use); sysprepAdminPasswordEditor.setUsePatternFly(use); sysprepAdminPasswordVerificationEditor.setUsePatternFly(use); inputLocaleEditor.setUsePatternFly(use); uiLanguageEditor.setUsePatternFly(use); systemLocaleEditor.setUsePatternFly(use); userLocaleEditor.setUsePatternFly(use); sysprepScriptEditor.setUsePatternFly(use); hostnameEditor.setUsePatternFly(use); timeZoneEnabledEditor.setUsePatternFly(use); timeZoneEditor.setUsePatternFly(use); userNameEditor.setUsePatternFly(use); cloudInitPasswordSetEditor.setUsePatternFly(use); cloudInitRootPasswordEditor.setUsePatternFly(use); cloudInitRootPasswordVerificationEditor.setUsePatternFly(use); authorizedKeysEditor.setUsePatternFly(use); regenerateKeysEnabledEditor.setUsePatternFly(use); dnsServers.setUsePatternFly(use); dnsSearchDomains.setUsePatternFly(use); networkEnabledEditor.setUsePatternFly(use); networkStartOnBootEditor.setUsePatternFly(use); if (use) { authenticationExpanderContent.removeStyleName(customizableStyle.expanderContent()); customScriptExpanderContent.removeStyleName(customizableStyle.expanderContent()); sysprepScriptExpanderContent.removeStyleName(customizableStyle.expanderContent()); sysprepPasswordExpanderContent.removeStyleName(customizableStyle.expanderContent()); sysprepInputsExpanderContent.removeStyleName(customizableStyle.expanderContent()); networkExpanderContent.removeStyleName(customizableStyle.expanderContent()); windowsSyspreptimeZoneEnabledEditor.removeStyleName(customizableStyle.primaryOption()); sysprepDomainEditor.removeStyleName(customizableStyle.primaryOption()); ipv4BootProtocolEditor.removeStyleName(customizableStyle.primaryOption()); networkIpv4AddressEditor.removeStyleName(customizableStyle.primaryOption()); networkIpv4NetmaskEditor.removeStyleName(customizableStyle.primaryOption()); networkIpv4GatewayEditor.removeStyleName(customizableStyle.primaryOption()); ipv6BootProtocolEditor.removeStyleName(customizableStyle.primaryOption()); networkIpv6AddressEditor.removeStyleName(customizableStyle.primaryOption()); networkIpv6PrefixEditor.removeStyleName(customizableStyle.primaryOption()); networkIpv6GatewayEditor.removeStyleName(customizableStyle.primaryOption()); networkStartOnBootEditor.removeStyleName(customizableStyle.primaryOption()); windowsSysprepTimeZoneEditor.removeStyleName(customizableStyle.primaryOption()); inputLocaleEditor.removeStyleName(customizableStyle.primaryOption()); uiLanguageEditor.removeStyleName(customizableStyle.primaryOption()); activeDirectoryOUEditor.removeStyleName(customizableStyle.primaryOption()); systemLocaleEditor.removeStyleName(customizableStyle.primaryOption()); userLocaleEditor.removeStyleName(customizableStyle.primaryOption()); userNameEditor.removeStyleName(customizableStyle.primaryOption()); hostnameEditor.removeStyleName(customizableStyle.primaryOption()); windowsHostnameEditor.removeStyleName(customizableStyle.primaryOption()); sysprepOrgNameEditor.removeStyleName(customizableStyle.primaryOption()); timeZoneEnabledEditor.removeStyleName(customizableStyle.primaryOption()); timeZoneEditor.removeStyleName(customizableStyle.primaryOption()); cloudInitRootPasswordEditor.removeStyleName(customizableStyle.primaryOption()); cloudInitRootPasswordVerificationEditor.removeStyleName(customizableStyle.primaryOption()); sysprepAdminPasswordEditor.removeStyleName(customizableStyle.primaryOption()); sysprepAdminPasswordVerificationEditor.removeStyleName(customizableStyle.primaryOption()); authorizedKeysEditor.removeStyleName(customizableStyle.primaryOption()); cloudInitPasswordSetEditor.removeStyleName(customizableStyle.primaryOption()); sysprepPasswordSetEditor.removeStyleName(customizableStyle.primaryOption()); regenerateKeysEnabledEditor.removeStyleName(customizableStyle.primaryOption()); networkSelectLabel.addStyleName(Styles.FORM_GROUP); } else { sysprepScriptEditor.setContentWidgetContainerStyleName(customizableStyle.customScript()); } } /* Controls style for network options based on network selection */ private void setNetworkDetailsStyle(boolean enabled) { networkNameEditor.setEnabled(enabled); networkListEditor.setEnabled(enabled); setLabelEnabled(networkSelectLabel, enabled); setLabelEnabled(networkLabelSepAddRemove, enabled); setLabelEnabled(networkRemoveLabel, enabled); networkRemoveButton.setEnabled(enabled); networkOptions.setVisible(enabled); } /* Sets visibility for static networking options */ private void setNetworkIpv4StaticDetailsStyle(boolean visible) { networkIpv4AddressEditor.setVisible(visible); networkIpv4NetmaskEditor.setVisible(visible); networkIpv4GatewayEditor.setVisible(visible); } /* Sets visibility for static networking options */ private void setNetworkIpv6StaticDetailsStyle(boolean visible) { networkIpv6AddressEditor.setVisible(visible); networkIpv6PrefixEditor.setVisible(visible); networkIpv6GatewayEditor.setVisible(visible); } private void setLabelEnabled(Label label, boolean enabled) { label.getElement().getStyle().setColor(enabled ? "#000000" : "#999999"); //$NON-NLS-1$ //$NON-NLS-2$ } @Override public void edit(final VmInitModel model) { driver.edit(model); initializeEnabledCBBehavior(model); networkAddButton.addClickHandler(event -> model.getAddNetworkCommand().execute()); networkRemoveButton.addClickHandler(event -> model.getRemoveNetworkCommand().execute()); model.getNetworkList().getSelectedItemChangedEvent().addListener((ev, sender, args) -> { // Can't use ListModel.isEmpty() because ListModel.SetItems(<empty list>)) will // cause the ItemsChanged and SelectedItemChanged events to be fired before we // can update the isEmpty() flag, causing erroneous readings upon item removal. setNetworkDetailsStyle(model.getNetworkList().getSelectedItem() != null); }); model.getIpv4BootProtocolList().getSelectedItemChangedEvent().addListener((ev, sender, args) -> setNetworkIpv4StaticDetailsStyle(model.getIpv4BootProtocolList().getSelectedItem() != null && model.getIpv4BootProtocolList().getSelectedItem() == Ipv4BootProtocol.STATIC_IP)); model.getIpv6BootProtocolList().getSelectedItemChangedEvent().addListener((ev, sender, args) -> setNetworkIpv6StaticDetailsStyle(model.getIpv6BootProtocolList().getSelectedItem() != null && model.getIpv6BootProtocolList().getSelectedItem() == Ipv6BootProtocol.STATIC_IP)); model.getCloudInitPasswordSet().getPropertyChangedEvent().addListener((ev, sender, args) -> { String propName = args.propertyName; if ("IsChangable".equals(propName)) { //$NON-NLS-1$ cloudInitPasswordSetEditor.setWidgetTooltip( model.getCloudInitPasswordSet().getIsChangable() ? constants.vmInitPasswordSetToolTip() : constants.vmInitPasswordNotSetToolTip() ); } }); model.getSysprepPasswordSet().getPropertyChangedEvent().addListener((ev, sender, args) -> { String propName = args.propertyName; if ("IsChangable".equals(propName)) { //$NON-NLS-1$ sysprepPasswordSetEditor.setWidgetTooltip( model.getSysprepPasswordSet().getIsChangable() ? constants.vmInitPasswordSetToolTip() : constants.vmInitPasswordNotSetToolTip() ); } }); } void initializeEnabledCBBehavior(final VmInitModel model) { if (model.getRegenerateKeysEnabled().getEntity() != null) { regenerateKeysEnabledEditor.setEnabled(model.getRegenerateKeysEnabled().getEntity()); } if (model.getTimeZoneEnabled().getEntity() != null) { timeZoneEnabledEditor.setEnabled(model.getTimeZoneEnabled().getEntity()); } model.getWindowsSysprepTimeZoneEnabled().getEntityChangedEvent().addListener((ev, sender, args) -> windowsSysprepTimeZoneEditor.setEnabled(model.getWindowsSysprepTimeZoneEnabled().getEntity())); if (model.getWindowsSysprepTimeZoneEnabled().getEntity() != null) { windowsSysprepTimeZoneEditor.setEnabled(model.getWindowsSysprepTimeZoneEnabled().getEntity()); } model.getTimeZoneEnabled().getEntityChangedEvent().addListener((ev, sender, args) -> timeZoneEditor.setEnabled(model.getTimeZoneEnabled().getEntity())); if (model.getNetworkEnabled().getEntity() != null) { networkEnabledEditor.setEnabled(model.getNetworkEnabled().getEntity()); } model.getNetworkEnabled().getEntityChangedEvent().addListener((ev, sender, args) -> { boolean enabled = model.getNetworkEnabled().getEntity(); networkAddButton.setEnabled(enabled); setLabelEnabled(networkAddLabel, enabled); // See note above re: parameter to this method call setNetworkDetailsStyle(enabled && model.getNetworkList().getSelectedItem() != null); }); } public void setCloudInitContentVisible(boolean visible) { cloudInitOptionsContent.setVisible(visible); } public void setSyspepContentVisible(boolean visible) { syspreptOptionsContent.setVisible(visible); } @Override public Widget getWidget(int index) { return mainPanel.getWidget(index); } @Override public int getWidgetCount() { return mainPanel.getWidgetCount(); } @Override public int getWidgetIndex(Widget child) { return mainPanel.getWidgetIndex(child); } @Override public boolean remove(int index) { return mainPanel.remove(index); } @Override public VmInitModel flush() { return driver.flush(); } @Override public void cleanup() { driver.cleanup(); } }