package org.ovirt.engine.ui.common.widget.uicommon.storage; import org.ovirt.engine.ui.common.CommonApplicationConstants; import org.ovirt.engine.ui.common.CommonApplicationResources; 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.widget.Align; import org.ovirt.engine.ui.common.widget.FocusComposite; import org.ovirt.engine.ui.common.widget.HasEditorDriver; import org.ovirt.engine.ui.common.widget.UiCommandButton; import org.ovirt.engine.ui.common.widget.editor.generic.EntityModelCheckBoxEditor; 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.uicommonweb.models.storage.SanStorageModelBase; import com.google.gwt.core.client.GWT; import com.google.gwt.dom.client.Style.Visibility; import com.google.gwt.event.dom.client.HasKeyPressHandlers; import com.google.gwt.event.dom.client.KeyCodes; import com.google.gwt.event.dom.client.KeyPressEvent; import com.google.gwt.event.dom.client.KeyPressHandler; import com.google.gwt.event.shared.HandlerRegistration; import com.google.gwt.resources.client.CssResource; import com.google.gwt.safehtml.shared.SafeHtml; import com.google.gwt.safehtml.shared.SafeHtmlUtils; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.ui.AbstractImagePrototype; import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.ToggleButton; import com.google.gwt.user.client.ui.VerticalPanel; import com.google.gwt.user.client.ui.Widget; import com.google.inject.Inject; public class IscsiDiscoverTargetsView extends FocusComposite implements HasEditorDriver<SanStorageModelBase>, HasKeyPressHandlers { interface Driver extends UiCommonEditorDriver<SanStorageModelBase, IscsiDiscoverTargetsView> { } interface ViewUiBinder extends UiBinder<Widget, IscsiDiscoverTargetsView> { ViewUiBinder uiBinder = GWT.create(ViewUiBinder.class); } @UiField WidgetStyle style; @UiField HorizontalPanel discoverTargetsLabelPanel; @UiField @Ignore ToggleButton discoverTargetsImageButton; @UiField VerticalPanel discoverTargetsPanel; @UiField FlowPanel discoverTargetsPanelInner; @UiField @Path(value = "address.entity") StringEntityModelTextBoxEditor addressEditor; @UiField @Path(value = "port.entity") StringEntityModelTextBoxEditor portEditor; @UiField(provided = true) @Path(value = "useUserAuth.entity") EntityModelCheckBoxEditor useUserAuthEditor; @UiField @Path(value = "userName.entity") StringEntityModelTextBoxEditor chapUserEditor; @UiField @Path(value = "password.entity") StringEntityModelPasswordBoxEditor chapPassEditor; @UiField UiCommandButton discoverButton; @UiField UiCommandButton loginButton; @UiField @Ignore Label messageLabel; private static final CommonApplicationTemplates templates = AssetProvider.getTemplates(); private static final CommonApplicationResources resources = AssetProvider.getResources(); private static final CommonApplicationConstants constants = AssetProvider.getConstants(); private final Driver driver = GWT.create(Driver.class); @Inject public IscsiDiscoverTargetsView() { initCheckBoxEditors(); initWidget(ViewUiBinder.uiBinder.createAndBindUi(this)); localize(); addStyles(); driver.initialize(this); addFocusWidget(addressEditor.asValueBox()); addFocusWidget(portEditor.asValueBox()); addFocusWidget(chapUserEditor.asValueBox()); addFocusWidget(chapPassEditor.asValueBox()); addFocusWidget(useUserAuthEditor.asCheckBox()); } void initCheckBoxEditors() { useUserAuthEditor = new EntityModelCheckBoxEditor(Align.RIGHT); } void addStyles() { addressEditor.addContentWidgetContainerStyleName(style.textBox()); portEditor.addContentWidgetContainerStyleName(style.textBox()); chapUserEditor.addContentWidgetContainerStyleName(style.chapBox()); chapPassEditor.addContentWidgetContainerStyleName(style.chapBox()); discoverTargetsImageButton.setStylePrimaryName(style.discoverTargetsButton()); SafeHtml expanderImage = SafeHtmlUtils .fromTrustedString(AbstractImagePrototype.create( resources.expanderImage()).getHTML()); SafeHtml expanderDownImage = SafeHtmlUtils .fromTrustedString(AbstractImagePrototype.create( resources.expanderDownImage()).getHTML()); discoverTargetsImageButton.getUpFace().setHTML( templates.imageTextButton(expanderImage, constants.storageIscsiDiscoverTargetsLabel())); discoverTargetsImageButton.getDownFace().setHTML( templates.imageTextButton(expanderDownImage, constants.storageIscsiDiscoverTargetsLabel())); } protected void localize() { addressEditor.setLabel(constants.storageIscsiPopupAddressLabel()); portEditor.setLabel(constants.storageIscsiPopupPortLabel()); useUserAuthEditor.setLabel(constants.storageIscsiPopupUserAuthLabel()); chapUserEditor.setLabel(constants.storageIscsiPopupChapUserLabel()); chapPassEditor.setLabel(constants.storageIscsiPopupChapPassLabel()); discoverButton.setLabel(constants.storageIscsiPopupDiscoverButtonLabel()); } private void setProposeDiscover(boolean propose) { discoverTargetsImageButton.setDown(propose); discoverTargetsPanelInner.setVisible(propose); discoverTargetsPanel.setStyleName(propose ? style.expandedDiscoverTargetsPanel() : style.collapsedDiscoverTargetsPanel()); } @Override public void edit(final SanStorageModelBase object) { driver.edit(object); // Handle property change event object.getPropertyChangedEvent().addListener((ev, sender, args) -> { String propName = args.propertyName; if (propName.equals("ProposeDiscoverTargets")) { //$NON-NLS-1$ setProposeDiscover(object.getProposeDiscoverTargets()); } else if (propName.equals("Message")) { //$NON-NLS-1$ messageLabel.setText(object.getMessage()); } }); // Handle key press event addKeyPressHandler(event -> { if (KeyCodes.KEY_ENTER == event.getNativeEvent().getKeyCode()) { object.getDiscoverTargetsCommand().execute(); setIsFocused(false); } }); setProposeDiscover(object.getProposeDiscoverTargets()); initButtons(object); } void initButtons(final SanStorageModelBase object) { discoverButton.setCommand(object.getDiscoverTargetsCommand()); discoverTargetsPanelInner.setVisible(discoverTargetsImageButton.isDown()); discoverTargetsImageButton.addClickHandler(event -> object.setProposeDiscoverTargets(discoverTargetsImageButton.isDown())); discoverButton.addClickHandler(event -> discoverButton.getCommand().execute()); initLoginButton(object); } protected void initLoginButton(SanStorageModelBase object) { loginButton.setCommand(object.getLoginCommand()); loginButton.addClickHandler(event -> loginButton.getCommand().execute()); loginButton.setLabel(object.getLoginButtonLabel()); } public void setEnabled(boolean enabled) { Visibility visibility = enabled ? Visibility.VISIBLE : Visibility.HIDDEN; discoverTargetsLabelPanel.getElement().getStyle().setVisibility(visibility); } @Override public SanStorageModelBase flush() { return driver.flush(); } @Override public void cleanup() { driver.cleanup(); } @Override public HandlerRegistration addKeyPressHandler(KeyPressHandler handler) { return addDomHandler(handler, KeyPressEvent.getType()); } public void setLoginButtonStyle(String style) { loginButton.setStyleName(style); } public boolean isDiscoverPanelFocused() { return isFocused(); } interface WidgetStyle extends CssResource { String textBox(); String chapBox(); String chapLabel(); String userAuthLabel(); String collapsedDiscoverTargetsPanel(); String expandedDiscoverTargetsPanel(); String discoverTargetsButton(); } }