package org.ovirt.engine.ui.common.section.main.presenter;
import org.ovirt.engine.ui.common.presenter.AbstractModelBoundPopupPresenterWidget;
import org.ovirt.engine.ui.uicommonweb.models.EditOptionsModel;
import com.google.gwt.event.dom.client.ChangeEvent;
import com.google.gwt.event.dom.client.ChangeHandler;
import com.google.gwt.event.dom.client.HasChangeHandlers;
import com.google.gwt.event.shared.EventBus;
import com.google.gwt.user.client.ui.HasText;
import com.google.gwt.user.client.ui.HasValue;
import com.google.inject.Inject;
public class OptionsPopupPresenterWidget
extends AbstractModelBoundPopupPresenterWidget<EditOptionsModel, OptionsPopupPresenterWidget.ViewDef> {
public interface ViewDef extends AbstractModelBoundPopupPresenterWidget.ViewDef<EditOptionsModel> {
<T extends HasChangeHandlers & HasValue<String> & HasText> T getPublicKeyEditor();
}
@Inject
public OptionsPopupPresenterWidget(EventBus eventBus, ViewDef view) {
super(eventBus, view);
}
@Override
public void init(EditOptionsModel model) {
super.init(model);
// TODO-GWT work around GWT bug when handling "intersection" types
// See https://github.com/gwtproject/gwt/issues/9476 for details.
registerHandler(((/*required-cast*/HasChangeHandlers) getView().getPublicKeyEditor()).addChangeHandler(new ChangeHandler() {
/**
* It replaces arbitrary number of '\n' by '\n\n' to visually separate lines.
*/
@Override
public void onChange(ChangeEvent event) {
// TODO-GWT work around GWT bug when handling "intersection" types
// See https://github.com/gwtproject/gwt/issues/9476 for details.
final String originalValue = ((/*required-cast*/HasValue<String>) getView().getPublicKeyEditor()).getValue();
String valueWithoutEmptyLines = originalValue;
if (valueWithoutEmptyLines == null) {
return;
}
while (valueWithoutEmptyLines.contains("\n\n")) { //$NON-NLS-1$
valueWithoutEmptyLines =
valueWithoutEmptyLines.replaceAll("\\n\\n", "\n"); //$NON-NLS-1$ //$NON-NLS-2$
}
final String lineSeparatedRecords = valueWithoutEmptyLines.replaceAll("\\n", "\n\n"); //$NON-NLS-1$ //$NON-NLS-2$
if (!originalValue.equals(lineSeparatedRecords)) {
getView().getPublicKeyEditor().setText(lineSeparatedRecords);
}
}
}));
}
@Override
protected void handleEnterKey() {
// preventing confirmation by <Enter>
}
}