package org.ovirt.engine.ui.webadmin.widget.footer;
import java.util.Date;
import org.ovirt.engine.core.common.businessentities.AuditLog;
import org.ovirt.engine.ui.webadmin.ApplicationResources;
import org.ovirt.engine.ui.webadmin.ApplicationTemplates;
import org.ovirt.engine.ui.webadmin.uicommon.model.AlertFirstRowModelProvider;
import org.ovirt.engine.ui.webadmin.uicommon.model.AlertModelProvider;
import org.ovirt.engine.ui.webadmin.uicommon.model.AlertModelProvider.AlertCountChangeHandler;
import org.ovirt.engine.ui.webadmin.uicommon.model.EventFirstRowModelProvider;
import org.ovirt.engine.ui.webadmin.uicommon.model.EventModelProvider;
import org.ovirt.engine.ui.webadmin.widget.table.SimpleActionTable;
import org.ovirt.engine.ui.webadmin.widget.table.column.AuditLogSeverityColumn;
import org.ovirt.engine.ui.webadmin.widget.table.column.FullDateTimeColumn;
import org.ovirt.engine.ui.webadmin.widget.table.column.TextColumnWithTooltip;
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Style.Overflow;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
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.cellview.client.CellTable;
import com.google.gwt.user.cellview.client.CellTable.Resources;
import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.ui.AbstractImagePrototype;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.PushButton;
import com.google.gwt.user.client.ui.SimplePanel;
import com.google.gwt.user.client.ui.ToggleButton;
import com.google.gwt.user.client.ui.Widget;
public class AlertsEventsFooterView extends Composite implements AlertCountChangeHandler {
interface WidgetUiBinder extends UiBinder<Widget, AlertsEventsFooterView> {
WidgetUiBinder uiBinder = GWT.create(WidgetUiBinder.class);
}
@UiField
Style style;
@UiField
SimplePanel tablePanel;
@UiField
SimplePanel widgetPanel;
@UiField
SimplePanel firstRowTablePanel;
@UiField
ToggleButton alertButton;
@UiField
ToggleButton eventButton;
@UiField
PushButton expandButton;
SimpleActionTable<AuditLog> alertsTable;
SimpleActionTable<AuditLog> eventsTable;
SimpleActionTable<AuditLog> _alertsTable;
SimpleActionTable<AuditLog> _eventsTable;
private final ApplicationTemplates templates;
private final SafeHtml alertImage;
public AlertsEventsFooterView(AlertModelProvider alertModelProvider,
AlertFirstRowModelProvider alertFirstRowModelProvider,
EventModelProvider eventModelProvider,
EventFirstRowModelProvider eventFirstRowModelProvider,
ApplicationResources resources,
ApplicationTemplates templates) {
this.templates = templates;
initWidget(WidgetUiBinder.uiBinder.createAndBindUi(this));
initButtonHandlers();
alertModelProvider.setAlertCountChangeHandler(this);
alertsTable = new SimpleActionTable<AuditLog>(alertModelProvider, getTableResources());
alertsTable.setBarStyle(style.barStyle());
initTable(alertsTable);
_alertsTable = new SimpleActionTable<AuditLog>(alertFirstRowModelProvider, getTableResources());
_alertsTable.setBarStyle(style.barStyle());
_alertsTable.getElement().getStyle().setOverflowY(Overflow.HIDDEN);
initTable(_alertsTable);
eventsTable = new SimpleActionTable<AuditLog>(eventModelProvider, getTableResources());
eventsTable.setBarStyle(style.barStyle());
initTable(eventsTable);
_eventsTable = new SimpleActionTable<AuditLog>(eventFirstRowModelProvider, getTableResources());
_eventsTable.setBarStyle(style.barStyle());
_eventsTable.getElement().getStyle().setOverflowY(Overflow.HIDDEN);
initTable(_eventsTable);
alertButton.setValue(false);
eventButton.setValue(true);
tablePanel.clear();
firstRowTablePanel.clear();
tablePanel.add(eventsTable);
firstRowTablePanel.add(_eventsTable);
String image = AbstractImagePrototype.create(resources.alertConfigureImage()).getHTML();
alertImage = SafeHtmlUtils.fromTrustedString(image);
// no body is invoking the alert search (timer)
alertModelProvider.getModel().Search();
setAlertCount(0);
}
Resources getTableResources() {
return GWT.<Resources> create(AlertsEventsFooterResources.class);
}
@Override
public void onAlertCountChange(int count) {
setAlertCount(count);
}
void setAlertCount(int count) {
alertButton.setHTML(templates.alertFooterHeader(alertImage, count));
}
void initButtonHandlers() {
alertButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
if (alertButton.getValue()) {
eventButton.setValue(false);
tablePanel.clear();
tablePanel.add(alertsTable);
firstRowTablePanel.clear();
firstRowTablePanel.add(_alertsTable);
}
else {
alertButton.setValue(true);
}
}
});
eventButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
if (eventButton.getValue()) {
alertButton.setValue(false);
tablePanel.clear();
tablePanel.add(eventsTable);
firstRowTablePanel.clear();
firstRowTablePanel.add(_eventsTable);
}
else {
eventButton.setValue(true);
}
}
});
expandButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
String height = widgetPanel.getElement().getParentElement().getParentElement().getStyle().getHeight();
int offset = 30;
if (height.equals("30px")) {
offset = 162;
}
widgetPanel.getElement().getParentElement().getParentElement().getStyle().setHeight(offset, Unit.PX);
widgetPanel.getElement().getParentElement().getParentElement().getStyle().setBottom(0, Unit.PX);
Element e =
(Element) widgetPanel.getElement()
.getParentElement()
.getParentElement()
.getParentElement()
.getChild(2);
e.getStyle().setBottom(offset, Unit.PX);
e =
(Element) widgetPanel.getElement()
.getParentElement()
.getParentElement()
.getParentElement()
.getChild(3);
e.getStyle().setBottom(offset + 8, Unit.PX);
}
});
}
void initTable(SimpleActionTable<AuditLog> table) {
table.addColumn(new AuditLogSeverityColumn(), "", "40px");
TextColumnWithTooltip<AuditLog> logTimeColumn = new FullDateTimeColumn<AuditLog>() {
@Override
protected Date getRawValue(AuditLog object) {
return object.getlog_time();
}
};
table.addColumn(logTimeColumn, "Time", "160px");
TextColumnWithTooltip<AuditLog> messageColumn = new TextColumnWithTooltip<AuditLog>() {
@Override
public String getValue(AuditLog object) {
return object.getmessage();
}
};
table.addColumn(messageColumn, "Message");
}
public interface AlertsEventsFooterResources extends CellTable.Resources {
interface TableStyle extends CellTable.Style {
}
@Override
@Source({ CellTable.Style.DEFAULT_CSS, "org/ovirt/engine/ui/webadmin/css/FotterHeaderlessTable.css" })
TableStyle cellTableStyle();
}
interface Style extends CssResource {
String barStyle();
}
}