package org.ovirt.engine.ui.common.widget.uicommon.vm;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.ovirt.engine.core.common.businessentities.network.VmInterfaceType;
import org.ovirt.engine.core.common.businessentities.network.VmNetworkInterface;
import org.ovirt.engine.core.common.businessentities.storage.Disk;
import org.ovirt.engine.core.common.businessentities.storage.DiskImage;
import org.ovirt.engine.core.common.businessentities.storage.DiskStorageType;
import org.ovirt.engine.core.common.businessentities.storage.ImageStatus;
import org.ovirt.engine.core.common.businessentities.storage.VolumeType;
import org.ovirt.engine.ui.common.CommonApplicationConstants;
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.AbstractDiskSizeColumn;
import org.ovirt.engine.ui.common.widget.table.column.AbstractEnumColumn;
import org.ovirt.engine.ui.common.widget.table.column.AbstractFullDateTimeColumn;
import org.ovirt.engine.ui.common.widget.table.column.AbstractRxTxRateColumn;
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.common.widget.table.column.DiskImageStatusColumn;
import org.ovirt.engine.ui.uicommonweb.models.EntityModel;
import org.ovirt.engine.ui.uicommonweb.models.ListModel;
import org.ovirt.engine.ui.uicommonweb.models.vms.SnapshotModel;
import com.google.gwt.dom.client.Style.Position;
import com.google.gwt.dom.client.Style.Unit;
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 VmSnapshotInfoPanel extends TabLayoutPanel {
private static final CommonApplicationTemplates templates = AssetProvider.getTemplates();
private static final CommonApplicationConstants constants = AssetProvider.getConstants();
private VmSnapshotInfoGeneral generalForm;
private EntityModelCellTable<ListModel> disksTable;
private EntityModelCellTable<ListModel> nicsTable;
private EntityModelCellTable<ListModel> appsTable;
public VmSnapshotInfoPanel() {
super(CommonApplicationTemplates.TAB_BAR_HEIGHT, Unit.PX);
initPanel();
addStyle();
}
private void initPanel() {
// Initialize Tables
initGeneralForm();
initDisksTable();
initNicsTable();
initAppsTable();
// Add Tabs
add(new ScrollPanel(generalForm), constants.generalLabel());
add(new ScrollPanel(disksTable), constants.disksLabel());
add(new ScrollPanel(nicsTable), constants.nicsLabel());
add(new ScrollPanel(appsTable), constants.applicationsLabel());
}
public void updatePanel(final SnapshotModel snapshotModel) {
snapshotModel.updateVmConfiguration(returnValue -> updateTabsData(snapshotModel));
}
private void addStyle() {
getElement().getStyle().setPosition(Position.STATIC);
}
@SuppressWarnings({ "unchecked", "rawtypes" })
public void updateTabsData(SnapshotModel snapshotModel) {
generalForm.update(snapshotModel.getVm());
disksTable.setRowData((List) snapshotModel.getDisks());
nicsTable.setRowData((List) snapshotModel.getNics());
appsTable.setRowData((List) snapshotModel.getApps());
}
private void initGeneralForm() {
generalForm = new VmSnapshotInfoGeneral();
}
private void initDisksTable() {
disksTable = new EntityModelCellTable<>(false, true);
disksTable.enableColumnResizing();
disksTable.addColumn(new DiskImageStatusColumn(), constants.empty(), "30px"); //$NON-NLS-1$
AbstractTextColumn<DiskImage> aliasColumn = new AbstractTextColumn<DiskImage>() {
@Override
public String getValue(DiskImage object) {
return object.getDiskAlias();
}
};
disksTable.addColumn(aliasColumn, constants.aliasDisk(), "70px"); //$NON-NLS-1$
AbstractDiskSizeColumn<DiskImage> sizeColumn = new AbstractDiskSizeColumn<DiskImage>() {
@Override
protected Long getRawValue(DiskImage object) {
return object.getSize();
}
};
disksTable.addColumn(sizeColumn, constants.provisionedSizeDisk(), "70px"); //$NON-NLS-1$
AbstractDiskSizeColumn<DiskImage> actualSizeColumn = new AbstractDiskSizeColumn<DiskImage>() {
@Override
protected Long getRawValue(DiskImage object) {
return object.getActualSizeInBytes();
}
};
disksTable.addColumn(actualSizeColumn, constants.sizeDisk(), "70px"); //$NON-NLS-1$
AbstractTextColumn<DiskImage> allocationColumn = new AbstractEnumColumn<DiskImage, VolumeType>() {
@Override
protected VolumeType getRawValue(DiskImage object) {
return VolumeType.forValue(object.getVolumeType().getValue());
}
};
disksTable.addColumn(allocationColumn, constants.allocationDisk(), "110px"); //$NON-NLS-1$
AbstractTextColumn<DiskImage> interfaceColumn = new AbstractTextColumn<DiskImage>() {
@Override
public String getValue(DiskImage object) {
if (object.getDiskVmElements().size() == 1) {
return object.getDiskVmElements().iterator().next().getDiskInterface().toString();
}
return null;
}
};
disksTable.addColumn(interfaceColumn, constants.interfaceDisk(), "95px"); //$NON-NLS-1$
AbstractTextColumn<DiskImage> statusColumn = new AbstractEnumColumn<DiskImage, ImageStatus>() {
@Override
protected ImageStatus getRawValue(DiskImage object) {
return object.getImageStatus();
}
};
disksTable.addColumn(statusColumn, constants.statusDisk(), "65px"); //$NON-NLS-1$
AbstractTextColumn<DiskImage> dateCreatedColumn = new AbstractFullDateTimeColumn<DiskImage>() {
@Override
protected Date getRawValue(DiskImage object) {
return object.getCreationDate();
}
};
disksTable.addColumn(dateCreatedColumn, constants.creationDateDisk(), "80px"); //$NON-NLS-1$
AbstractTextColumn<DiskImage> diskSnapshotIDColumn = new AbstractTextColumn<DiskImage>() {
@Override
public String getValue(DiskImage diskImage) {
return diskImage.getImageId().toString();
}
};
disksTable.addColumn(diskSnapshotIDColumn, constants.diskSnapshotIDDisk(), "260px"); //$NON-NLS-1$
AbstractTextColumn<Disk> diskStorageTypeColumn = new AbstractEnumColumn<Disk, DiskStorageType>() {
@Override
protected DiskStorageType getRawValue(Disk object) {
return object.getDiskStorageType();
}
};
disksTable.addColumn(diskStorageTypeColumn, constants.typeDisk(), "80px"); //$NON-NLS-1$
AbstractTextColumn<DiskImage> descriptionColumn = new AbstractTextColumn<DiskImage>() {
@Override
public String getValue(DiskImage object) {
return object.getDiskDescription();
}
};
disksTable.addColumn(descriptionColumn, constants.descriptionDisk(), "80px"); //$NON-NLS-1$
disksTable.setRowData(new ArrayList<EntityModel>());
disksTable.setWidth("100%", true); //$NON-NLS-1$
disksTable.setSelectionModel(new NoSelectionModel());
}
private void initNicsTable() {
nicsTable = new EntityModelCellTable<>(false, true);
nicsTable.enableColumnResizing();
AbstractTextColumn<VmNetworkInterface> nameColumn = new AbstractTextColumn<VmNetworkInterface>() {
@Override
public String getValue(VmNetworkInterface object) {
return object.getName();
}
};
nicsTable.addColumn(nameColumn, constants.nameInterface(), "80px"); //$NON-NLS-1$
AbstractTextColumn<VmNetworkInterface> networkNameColumn = new AbstractTextColumn<VmNetworkInterface>() {
@Override
public String getValue(VmNetworkInterface object) {
return object.getNetworkName();
}
};
nicsTable.addColumn(networkNameColumn, constants.networkNameInterface(), "80px"); //$NON-NLS-1$
AbstractTextColumn<VmNetworkInterface> profileNameColumn = new AbstractTextColumn<VmNetworkInterface>() {
@Override
public String getValue(VmNetworkInterface object) {
return object.getVnicProfileName();
}
};
nicsTable.addColumn(profileNameColumn, constants.profileNameInterface(), "80px"); //$NON-NLS-1$
AbstractTextColumn<VmNetworkInterface> typeColumn = new AbstractEnumColumn<VmNetworkInterface, VmInterfaceType>() {
@Override
protected VmInterfaceType getRawValue(VmNetworkInterface object) {
return VmInterfaceType.forValue(object.getType());
}
};
nicsTable.addColumn(typeColumn, constants.typeInterface(), "80px"); //$NON-NLS-1$
AbstractTextColumn<VmNetworkInterface> macColumn = new AbstractTextColumn<VmNetworkInterface>() {
@Override
public String getValue(VmNetworkInterface object) {
return object.getMacAddress();
}
};
nicsTable.addColumn(macColumn, constants.macInterface(), "80px"); //$NON-NLS-1$
AbstractTextColumn<VmNetworkInterface> speedColumn = new AbstractTextColumn<VmNetworkInterface>() {
@Override
public String getValue(VmNetworkInterface object) {
if (object.getSpeed() != null) {
return object.getSpeed().toString();
} else {
return null;
}
}
};
nicsTable.addColumn(speedColumn, templates.sub(constants.speedInterface(), constants.mbps()), "80px"); //$NON-NLS-1$
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;
}
}
};
nicsTable.addColumn(rxColumn, templates.sub(constants.rxRate(), constants.mbps()), "80px"); //$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;
}
}
};
nicsTable.addColumn(txColumn, templates.sub(constants.txRate(), constants.mbps()), "80px"); //$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 };
}
};
nicsTable.addColumn(dropsColumn, templates.sub(constants.dropsInterface(), constants.pkts()), "80px"); //$NON-NLS-1$
nicsTable.setRowData(new ArrayList<EntityModel>());
nicsTable.setWidth("100%", true); //$NON-NLS-1$
nicsTable.setSelectionModel(new NoSelectionModel());
}
private void initAppsTable() {
appsTable = new EntityModelCellTable<>(false, true);
AbstractTextColumn<String> appNameColumn = new AbstractTextColumn<String>() {
@Override
public String getValue(String appName) {
return appName;
}
};
appsTable.addColumn(appNameColumn, constants.nameSnapshot());
appsTable.setRowData(new ArrayList<EntityModel>());
appsTable.setWidth("100%", true); //$NON-NLS-1$
appsTable.setSelectionModel(new NoSelectionModel());
}
}