package org.ovirt.engine.ui.common.widget.uicommon.popup.vm;
import java.util.MissingResourceException;
import org.ovirt.engine.ui.common.CommonApplicationMessages;
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.widget.Align;
import org.ovirt.engine.ui.common.widget.editor.generic.EntityModelCheckBoxEditor;
import org.ovirt.engine.ui.common.widget.uicommon.popup.AbstractModelBoundPopupWidget;
import org.ovirt.engine.ui.uicommonweb.models.vms.VmNextRunConfigurationModel;
import org.ovirt.engine.ui.uicompat.NextRunFieldMessages;
import com.google.gwt.core.client.GWT;
import com.google.gwt.safehtml.shared.SafeHtml;
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
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.FlowPanel;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.Label;
public class VmNextRunConfigurationWidget extends AbstractModelBoundPopupWidget<VmNextRunConfigurationModel> {
interface Driver extends UiCommonEditorDriver<VmNextRunConfigurationModel, VmNextRunConfigurationWidget> {
}
interface ViewUiBinder extends UiBinder<FlowPanel, VmNextRunConfigurationWidget> {
ViewUiBinder uiBinder = GWT.create(ViewUiBinder.class);
}
interface ViewIdHandler extends ElementIdHandler<VmNextRunConfigurationWidget> {
ViewIdHandler idHandler = GWT.create(ViewIdHandler.class);
}
@UiField
FlowPanel changedFieldsPanel;
@UiField
@Ignore
Label changedFieldsPanelTitle;
@UiField
@Ignore
HTML applyNowCpuMessage;
@UiField
@Ignore
HTML applyNowMemoryMessage;
@UiField
@Ignore
HTML changedFields;
@UiField(provided = true)
@Path(value = "applyLater.entity")
EntityModelCheckBoxEditor applyLaterEditor;
@UiField
FlowPanel hotplugPanel;
@UiField
@Ignore
FlowPanel changedFieldsContent;
@UiField
FlowPanel vmUnpinnedPanel;
@UiField
@Ignore
Label vmUnpinnedPanelTitle;
@UiField
@Ignore
HTML vmUnpinnedMessage1;
@UiField
@Ignore
HTML vmUnpinnedMessage2;
private final Driver driver = GWT.create(Driver.class);
@UiField(provided = true)
@Path(value = "latch.entity")
EntityModelCheckBoxEditor vmUnpinnedLatchEditor;
private static final CommonApplicationTemplates templates = AssetProvider.getTemplates();
private static final CommonApplicationMessages messages = AssetProvider.getMessages();
private static final NextRunFieldMessages nextRunMessages = GWT.create(NextRunFieldMessages.class);
public VmNextRunConfigurationWidget() {
initEditors();
initWidget(ViewUiBinder.uiBinder.createAndBindUi(this));
localize();
ViewIdHandler.idHandler.generateAndSetIds(this);
driver.initialize(this);
setVisibilityToChangedFieldsExpander(false);
setVisibilityToVmUnpinningWarrningPanel(false);
}
void initEditors() {
applyLaterEditor = new EntityModelCheckBoxEditor(Align.RIGHT);
vmUnpinnedLatchEditor = new EntityModelCheckBoxEditor(Align.RIGHT);
}
void localize() {
applyNowCpuMessage.setHTML(bulletedItem(messages.nextRunConfigurationCpuValue()));
applyNowMemoryMessage.setHTML(bulletedItem(messages.nextRunConfigurationMemoryValue()));
vmUnpinnedMessage1.setHTML(bulletedItem(messages.unpinnedRunningVmWarningIncompatability()));
vmUnpinnedMessage2.setHTML(bulletedItem(messages.unpinnedRunningVmWarningSecurity()));
}
private SafeHtml bulletedItem(String msg) {
return templates.unorderedList(templates.listItem(SafeHtmlUtils.fromSafeConstant(msg)));
}
@Override
public void edit(VmNextRunConfigurationModel object) {
driver.edit(object);
if (object.isVmUnpinned()){
setVisibilityToVmUnpinningWarrningPanel(true);
}
if (object.getChangedFields().size() > 0) {
setVisibilityToChangedFieldsExpander(true);
SafeHtmlBuilder changedFieldsBuilder = new SafeHtmlBuilder();
for (String field: object.getChangedFields()) {
String msg = getNextRunMessage(field);
String escapedField = SafeHtmlUtils.htmlEscape(msg);
changedFieldsBuilder.append(bulletedItem(escapedField));
}
changedFields.setHTML(changedFieldsBuilder.toSafeHtml());
}
setVisibilityToHotChanges(object);
}
private String getNextRunMessage(String field) {
try {
return nextRunMessages.getString(field);
} catch (MissingResourceException e) {
// ignore
}
return field;
}
private void setVisibilityToHotChanges(VmNextRunConfigurationModel object) {
hotplugPanel.setVisible(object.isCpuPluggable() || object.isMemoryPluggable());
applyNowCpuMessage.setVisible(object.isCpuPluggable());
applyNowMemoryMessage.setVisible(object.isMemoryPluggable());
}
@Override
public VmNextRunConfigurationModel flush() {
return driver.flush();
}
private void setVisibilityToVmUnpinningWarrningPanel(boolean visibility) {
vmUnpinnedPanel.setVisible(visibility);
vmUnpinnedPanelTitle.setVisible(visibility);
vmUnpinnedLatchEditor.setVisible(visibility);
}
private void setVisibilityToChangedFieldsExpander(boolean flag) {
changedFieldsPanel.setVisible(flag);
changedFieldsPanelTitle.setVisible(flag);
}
@Override
public void cleanup() {
driver.cleanup();
}
}