package org.ovirt.engine.ui.common.widget.uicommon.vm;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.ovirt.engine.core.common.businessentities.VmGuestAgentInterface;
import org.ovirt.engine.core.common.businessentities.network.VmNetworkInterface;
import org.ovirt.engine.ui.common.CommonApplicationConstants;
import org.ovirt.engine.ui.common.CommonApplicationMessages;
import org.ovirt.engine.ui.common.CommonApplicationTemplates;
import org.ovirt.engine.ui.common.gin.AssetProvider;
import org.ovirt.engine.ui.common.widget.editor.EntityModelCellTable;
import org.ovirt.engine.ui.common.widget.table.column.AbstractNullableNumberColumn;
import org.ovirt.engine.ui.common.widget.table.column.AbstractRxTxRateColumn;
import org.ovirt.engine.ui.common.widget.table.column.AbstractSafeHtmlColumn;
import org.ovirt.engine.ui.common.widget.table.column.AbstractSumUpColumn;
import org.ovirt.engine.ui.common.widget.table.column.AbstractTextColumn;
import org.ovirt.engine.ui.uicommonweb.models.EntityModel;
import org.ovirt.engine.ui.uicommonweb.models.ListModel;
import org.ovirt.engine.ui.uicommonweb.models.vms.VmInterfaceListModel;
import org.ovirt.engine.ui.uicompat.external.StringUtils;
import com.google.gwt.dom.client.Style.Position;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.safehtml.shared.SafeHtml;
import com.google.gwt.safehtml.shared.SafeHtmlUtils;
import com.google.gwt.user.client.ui.ScrollPanel;
import com.google.gwt.user.client.ui.TabLayoutPanel;
import com.google.gwt.view.client.NoSelectionModel;
public class VmInterfaceInfoPanel extends TabLayoutPanel {
private final VmInterfaceListModel vmInterfaceListModel;
private EntityModelCellTable<ListModel> statisticsTable;
private EntityModelCellTable<ListModel> guestAgentDataTable;
private static final CommonApplicationTemplates templates = AssetProvider.getTemplates();
private static final CommonApplicationConstants constants = AssetProvider.getConstants();
private static final CommonApplicationMessages messages = AssetProvider.getMessages();
public VmInterfaceInfoPanel(VmInterfaceListModel vmInterfaceListModel) {
super(CommonApplicationTemplates.TAB_BAR_HEIGHT, Unit.PX);
this.vmInterfaceListModel = vmInterfaceListModel;
initPanel();
addStyle();
}
private void initPanel() {
// Initialize Tables
initStatitsticsTable();
initGuestAgentDataTable();
// Add Tabs
add(new ScrollPanel(statisticsTable), constants.statistics());
add(new ScrollPanel(guestAgentDataTable), constants.guestAgentData());
}
public void updatePanel(VmNetworkInterface nic) {
updateTabsData(nic);
}
private void addStyle() {
getElement().getStyle().setPosition(Position.STATIC);
}
@SuppressWarnings({ "unchecked", "rawtypes" })
private void updateTabsData(VmNetworkInterface nic) {
statisticsTable.setRowData((List) Arrays.asList(nic));
guestAgentDataTable.setRowData(vmInterfaceListModel.getSelectionGuestAgentData() != null ? (List) vmInterfaceListModel.getSelectionGuestAgentData()
: new ArrayList<EntityModel>());
}
private void initStatitsticsTable() {
statisticsTable = new EntityModelCellTable<>(false, true);
statisticsTable.enableColumnResizing();
AbstractTextColumn<VmNetworkInterface> rxColumn = new AbstractRxTxRateColumn<VmNetworkInterface>() {
@Override
protected Double getRate(VmNetworkInterface object) {
return object.getStatistics().getReceiveRate();
}
@Override
protected Double getSpeed(VmNetworkInterface object) {
if (object.getSpeed() != null) {
return object.getSpeed().doubleValue();
} else {
return null;
}
}
};
statisticsTable.addColumn(rxColumn,
templates.sub(constants.rxRate(), constants.mbps()), "100px"); //$NON-NLS-1$
AbstractTextColumn<VmNetworkInterface> txColumn = new AbstractRxTxRateColumn<VmNetworkInterface>() {
@Override
protected Double getRate(VmNetworkInterface object) {
return object.getStatistics().getTransmitRate();
}
@Override
protected Double getSpeed(VmNetworkInterface object) {
if (object.getSpeed() != null) {
return object.getSpeed().doubleValue();
} else {
return null;
}
}
};
statisticsTable.addColumn(txColumn,
templates.sub(constants.txRate(), constants.mbps()), "100px"); //$NON-NLS-1$
AbstractNullableNumberColumn<VmNetworkInterface> totalRxColumn = new AbstractNullableNumberColumn<VmNetworkInterface>() {
@Override
protected Number getRawValue(VmNetworkInterface object) {
return object != null ? object.getStatistics().getReceivedBytes() : null;
}
};
statisticsTable.addColumn(totalRxColumn, templates.sub(constants.rxTotal(), constants.bytes()), "150px"); //$NON-NLS-1$
AbstractNullableNumberColumn<VmNetworkInterface> totalTxColumn = new AbstractNullableNumberColumn<VmNetworkInterface>() {
@Override
protected Number getRawValue(VmNetworkInterface object) {
return object != null ? object.getStatistics().getTransmittedBytes() : null;
}
};
statisticsTable.addColumn(totalTxColumn, templates.sub(constants.txTotal(), constants.bytes()), "150px"); //$NON-NLS-1$
AbstractTextColumn<VmNetworkInterface> dropsColumn = new AbstractSumUpColumn<VmNetworkInterface>() {
@Override
protected Double[] getRawValue(VmNetworkInterface object) {
Double receiveDropRate = object != null ? object.getStatistics().getReceiveDropRate() : null;
Double transmitDropRate = object != null ? object.getStatistics().getTransmitDropRate() : null;
return new Double[] { receiveDropRate, transmitDropRate };
}
};
statisticsTable.addColumn(dropsColumn,
templates.sub(constants.dropsInterface(), constants.pkts()), "100px"); //$NON-NLS-1$
statisticsTable.setRowData(new ArrayList<EntityModel>());
statisticsTable.setWidth("100%", true); //$NON-NLS-1$
statisticsTable.setSelectionModel(new NoSelectionModel());
}
private void initGuestAgentDataTable() {
guestAgentDataTable = new EntityModelCellTable<>(false, true);
guestAgentDataTable.enableColumnResizing();
AbstractTextColumn<VmGuestAgentInterface> nameColumn = new AbstractTextColumn<VmGuestAgentInterface>() {
@Override
public String getValue(VmGuestAgentInterface object) {
return object.getInterfaceName();
}
};
guestAgentDataTable.addColumn(nameColumn,
constants.nameVmGuestAgent(), "100px"); //$NON-NLS-1$
AbstractSafeHtmlColumn<VmGuestAgentInterface> ipv4Column =
new AbstractSafeHtmlColumn<VmGuestAgentInterface>() {
@Override
public SafeHtml getValue(VmGuestAgentInterface object) {
if (object.getIpv4Addresses() == null || object.getIpv4Addresses().size() == 0) {
return SafeHtmlUtils.fromTrustedString(""); //$NON-NLS-1$
}
if (object.getIpv4Addresses().size() == 1) {
return SafeHtmlUtils.fromTrustedString(object.getIpv4Addresses().get(0));
}
return SafeHtmlUtils.fromTrustedString(messages.addressesVmGuestAgent(object.getIpv4Addresses()
.size()));
}
@Override
public SafeHtml getTooltip(VmGuestAgentInterface object) {
return SafeHtmlUtils.fromTrustedString(StringUtils.join(object.getIpv4Addresses(), ", ")); //$NON-NLS-1$
}
};
guestAgentDataTable.addColumn(ipv4Column,
constants.ipv4VmGuestAgent(), "100px"); //$NON-NLS-1$
AbstractSafeHtmlColumn<VmGuestAgentInterface> ipv6Column =
new AbstractSafeHtmlColumn<VmGuestAgentInterface>() {
@Override
public SafeHtml getValue(VmGuestAgentInterface object) {
if (object.getIpv6Addresses() == null || object.getIpv6Addresses().size() == 0) {
return SafeHtmlUtils.fromTrustedString(""); //$NON-NLS-1$
}
if (object.getIpv6Addresses().size() == 1) {
return SafeHtmlUtils.fromTrustedString(object.getIpv6Addresses().get(0));
}
return SafeHtmlUtils.fromTrustedString(messages.addressesVmGuestAgent(object.getIpv6Addresses()
.size()));
}
@Override
public SafeHtml getTooltip(VmGuestAgentInterface object) {
return SafeHtmlUtils.fromTrustedString(StringUtils.join(object.getIpv6Addresses(), ", ")); //$NON-NLS-1$
}
};
guestAgentDataTable.addColumn(ipv6Column,
constants.ipv6VmGuestAgent(), "150px"); //$NON-NLS-1$
AbstractTextColumn<VmGuestAgentInterface> macColumn = new AbstractTextColumn<VmGuestAgentInterface>() {
@Override
public String getValue(VmGuestAgentInterface object) {
return object.getMacAddress();
}
};
guestAgentDataTable.addColumn(macColumn,
constants.macVmGuestAgent(), "150px"); //$NON-NLS-1$
guestAgentDataTable.setRowData(new ArrayList<EntityModel>());
guestAgentDataTable.setWidth("100%", true); //$NON-NLS-1$
guestAgentDataTable.setSelectionModel(new NoSelectionModel());
}
}