package org.ovirt.engine.ui.webadmin.widget.storage;
import org.ovirt.engine.core.compat.Event;
import org.ovirt.engine.core.compat.EventArgs;
import org.ovirt.engine.core.compat.IEventListener;
import org.ovirt.engine.core.compat.PropertyChangedEventArgs;
import org.ovirt.engine.ui.uicommonweb.models.storage.SanStorageModelBase;
import org.ovirt.engine.ui.webadmin.ApplicationConstants;
import org.ovirt.engine.ui.webadmin.ApplicationResources;
import org.ovirt.engine.ui.webadmin.ApplicationTemplates;
import org.ovirt.engine.ui.webadmin.gin.ClientGinjectorProvider;
import org.ovirt.engine.ui.webadmin.widget.Align;
import org.ovirt.engine.ui.webadmin.widget.FocusComposite;
import org.ovirt.engine.ui.webadmin.widget.HasEditorDriver;
import org.ovirt.engine.ui.webadmin.widget.UiCommandButton;
import org.ovirt.engine.ui.webadmin.widget.editor.EntityModelCheckBoxEditor;
import org.ovirt.engine.ui.webadmin.widget.editor.EntityModelTextBoxEditor;
import com.google.gwt.core.client.GWT;
import com.google.gwt.editor.client.SimpleBeanEditorDriver;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
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.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 SimpleBeanEditorDriver<SanStorageModelBase, IscsiDiscoverTargetsView> {
Driver driver = GWT.create(Driver.class);
}
interface ViewUiBinder extends UiBinder<Widget, IscsiDiscoverTargetsView> {
ViewUiBinder uiBinder = GWT.create(ViewUiBinder.class);
}
@UiField
WidgetStyle style;
@UiField
@Ignore
ToggleButton discoverTargetsImageButton;
@UiField
VerticalPanel discoverTargetsPanel;
@UiField
FlowPanel discoverTargetsPanelInner;
@UiField
@Path(value = "address.entity")
EntityModelTextBoxEditor addressEditor;
@UiField
@Path(value = "port.entity")
EntityModelTextBoxEditor portEditor;
@UiField(provided = true)
@Path(value = "useUserAuth.entity")
EntityModelCheckBoxEditor useUserAuthEditor;
@UiField
@Path(value = "userName.entity")
EntityModelTextBoxEditor chapUserEditor;
@UiField
@Path(value = "password.entity")
EntityModelTextBoxEditor chapPassEditor;
@UiField
UiCommandButton discoverButton;
@UiField
UiCommandButton loginAllButton;
@UiField
@Ignore
Label messageLabel;
@Inject
public IscsiDiscoverTargetsView() {
initCheckBoxEditors();
initWidget(ViewUiBinder.uiBinder.createAndBindUi(this));
localize(ClientGinjectorProvider.instance().getApplicationConstants());
addStyles(ClientGinjectorProvider.instance().getApplicationTemplates(),
ClientGinjectorProvider.instance().getApplicationConstants(),
ClientGinjectorProvider.instance().getApplicationResources());
Driver.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(ApplicationTemplates templates,
ApplicationConstants constants, ApplicationResources resources) {
useUserAuthEditor.addLabelStyleName(style.userAuthLabel());
addressEditor.addContentWidgetStyleName(style.textBox());
portEditor.addContentWidgetStyleName(style.textBox());
chapUserEditor.addContentWidgetStyleName(style.chapBox());
chapPassEditor.addContentWidgetStyleName(style.chapBox());
chapUserEditor.addLabelStyleName(style.chapLabel());
chapPassEditor.addLabelStyleName(style.chapLabel());
discoverTargetsImageButton.setStylePrimaryName("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()));
}
void localize(ApplicationConstants constants) {
addressEditor.setLabel(constants.storageIscsiPopupAddressLabel());
portEditor.setLabel(constants.storageIscsiPopupPortLabel());
useUserAuthEditor.setLabel(constants.storageIscsiPopupUserAuthLabel());
chapUserEditor.setLabel(constants.storageIscsiPopupChapUserLabel());
chapPassEditor.setLabel(constants.storageIscsiPopupChapPassLabel());
discoverButton.setLabel(constants.storageIscsiPopupDiscoverButtonLabel());
loginAllButton.setLabel(constants.storageIscsiPopupLoginAllButtonLabel());
}
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.driver.edit(object);
// Handle property change event
object.getPropertyChangedEvent().addListener(new IEventListener() {
@Override
public void eventRaised(Event ev, Object sender, EventArgs args) {
String propName = ((PropertyChangedEventArgs) args).PropertyName;
if (propName.equals("ProposeDiscoverTargets")) {
setProposeDiscover(object.getProposeDiscoverTargets());
}
else if (propName.equals("Message")) {
messageLabel.setText(object.getMessage());
}
}
});
// Handle key press event
addKeyPressHandler(new KeyPressHandler() {
@Override
public void onKeyPress(KeyPressEvent 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());
loginAllButton.setCommand(object.getLoginAllCommand());
discoverTargetsPanelInner.setVisible(discoverTargetsImageButton.isDown());
discoverTargetsImageButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
object.setProposeDiscoverTargets(discoverTargetsImageButton.isDown());
}
});
discoverButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
discoverButton.getCommand().Execute();
}
});
loginAllButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
loginAllButton.getCommand().Execute();
}
});
}
@Override
public SanStorageModelBase flush() {
return Driver.driver.flush();
}
@Override
public HandlerRegistration addKeyPressHandler(KeyPressHandler handler) {
return addDomHandler(handler, KeyPressEvent.getType());
}
public boolean isDiscoverPanelFocused() {
return isFocused();
}
interface WidgetStyle extends CssResource {
String textBox();
String chapBox();
String chapLabel();
String userAuthLabel();
String collapsedDiscoverTargetsPanel();
String expandedDiscoverTargetsPanel();
}
}