package org.ovirt.engine.ui.webadmin.section.main.view.popup.cluster; import java.util.List; import java.util.Map; import org.ovirt.engine.core.common.businessentities.ClusterEditWarnings; import org.ovirt.engine.ui.common.editor.UiCommonEditorDriver; import org.ovirt.engine.ui.common.idhandler.ElementIdHandler; import org.ovirt.engine.ui.common.view.popup.AbstractModelBoundPopupView; import org.ovirt.engine.ui.common.widget.dialog.SimpleDialogPanel; import org.ovirt.engine.ui.frontend.Frontend; import org.ovirt.engine.ui.uicommonweb.models.clusters.ClusterWarningsModel; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.cluster.ClusterWarningsPopupPresenterWidget; import com.google.gwt.event.shared.EventBus; import com.google.gwt.safehtml.client.SafeHtmlTemplates; import com.google.gwt.safehtml.shared.SafeHtml; import com.google.gwt.safehtml.shared.SafeHtmlBuilder; 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.inject.Inject; public class ClusterWarningsPopupView extends AbstractModelBoundPopupView<ClusterWarningsModel> implements ClusterWarningsPopupPresenterWidget.ViewDef { interface Driver extends UiCommonEditorDriver<ClusterWarningsModel, ClusterWarningsPopupView> { } interface ViewUiBinder extends UiBinder<SimpleDialogPanel, ClusterWarningsPopupView> { } interface ViewIdHandler extends ElementIdHandler<ClusterWarningsPopupView> { } interface WarningTemplates extends SafeHtmlTemplates { @Template("<div>{0}</div>") SafeHtml warningTitle(String text); @Template("<ul>{0}</ul>") SafeHtml warningList(SafeHtml safeHtml); @Template("<li>{0}</li>") SafeHtml warning(String entityName); @Template("<li>{0} [{1}]</li>") SafeHtml warningWithDetails(String entityName, String details); } private final Driver driver; private final WarningTemplates warningTemplates; @UiField @Ignore FlowPanel hostPanel; @UiField @Ignore FlowPanel vmPanel; @UiField @Ignore HTML hostWarnings; @UiField @Ignore HTML vmWarnings; @Inject public ClusterWarningsPopupView(EventBus eventBus, Driver driver, ViewUiBinder uiBinder, ViewIdHandler viewIdHandler, WarningTemplates warningTemplates) { super(eventBus); this.driver = driver; this.warningTemplates = warningTemplates; initWidget(uiBinder.createAndBindUi(this)); viewIdHandler.generateAndSetIds(this); driver.initialize(this); } @Override public void edit(ClusterWarningsModel model) { driver.edit(model); hostWarnings.setHTML(buildWarnings(model.getHostWarnings())); vmWarnings.setHTML(buildWarnings(model.getVmWarnings())); } private SafeHtml buildWarnings(List<ClusterEditWarnings.Warning> warnings) { SafeHtmlBuilder builder = new SafeHtmlBuilder(); for (ClusterEditWarnings.Warning warning : warnings) { builder.append(warningTemplates.warningTitle(localize(warning.getMainMessage()))); builder.append(warningTemplates.warningList(buildWarningDetails(warning.getDetailsByName()))); } return builder.toSafeHtml(); } private static String localize(String warning) { return Frontend.getInstance().getAppErrorsTranslator().translateErrorTextSingle(warning); } private SafeHtml buildWarningDetails(Map<String, String> detailsByName) { SafeHtmlBuilder builder = new SafeHtmlBuilder(); for (Map.Entry<String, String> entry : detailsByName.entrySet()) { String name = entry.getKey(); if (entry.getValue() != null) { builder.append(warningTemplates.warningWithDetails(name, entry.getValue())); } else { builder.append(warningTemplates.warning(name)); } } return builder.toSafeHtml(); } @Override public void init(ClusterWarningsModel model) { hostPanel.setVisible(!model.getHostWarnings().isEmpty()); vmPanel.setVisible(!model.getVmWarnings().isEmpty()); } @Override public ClusterWarningsModel flush() { return driver.flush(); } @Override public void cleanup() { driver.cleanup(); } }