package org.ovirt.engine.ui.webadmin.widget.storage; import java.util.ArrayList; import java.util.Arrays; import org.ovirt.engine.core.common.businessentities.BusinessEntity; import org.ovirt.engine.core.common.businessentities.Quota; import org.ovirt.engine.core.common.businessentities.VM; 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.LunDisk; import org.ovirt.engine.core.common.utils.SizeConverter; import org.ovirt.engine.ui.common.widget.label.DiskSizeLabel; import org.ovirt.engine.ui.common.widget.label.StringValueLabel; import org.ovirt.engine.ui.common.widget.tree.AbstractSubTabTree; import org.ovirt.engine.ui.uicommonweb.models.SearchableListModel; import org.ovirt.engine.ui.webadmin.ApplicationConstants; import org.ovirt.engine.ui.webadmin.ApplicationResources; import org.ovirt.engine.ui.webadmin.gin.AssetProvider; import org.ovirt.engine.ui.webadmin.widget.label.FullDateTimeLabel; import com.google.gwt.resources.client.ImageResource; import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.Image; import com.google.gwt.user.client.ui.TreeItem; import com.google.gwt.user.client.ui.VerticalPanel; public class VMsTree<M extends SearchableListModel> extends AbstractSubTabTree<M, VM, Disk> { private static final ApplicationResources resources = AssetProvider.getResources(); private static final ApplicationConstants constants = AssetProvider.getConstants(); public VMsTree() { super(); } @Override protected TreeItem getRootItem(VM vm) { HorizontalPanel panel = new HorizontalPanel(); panel.setSpacing(1); panel.setWidth("100%"); //$NON-NLS-1$ addItemToPanel(panel, new Image(resources.vmImage()), "25px"); //$NON-NLS-1$ addTextBoxToPanel(panel, new StringValueLabel(), vm.getName(), ""); //$NON-NLS-1$ addTextBoxToPanel(panel, new StringValueLabel(), String.valueOf(vm.getDiskMap().size()), "80px"); //$NON-NLS-1$ addTextBoxToPanel(panel, new StringValueLabel(), vm.getVmtName(), "160px"); //$NON-NLS-1$ addValueLabelToPanel(panel, new DiskSizeLabel<Double>(), vm.getDiskSize(), "110px"); //$NON-NLS-1$ addValueLabelToPanel(panel, new DiskSizeLabel<Double>(), vm.getActualDiskWithSnapshotsSize(), "110px"); //$NON-NLS-1$ addValueLabelToPanel(panel, new FullDateTimeLabel(), vm.getVmCreationDate(), "140px"); //$NON-NLS-1$ TreeItem treeItem = new TreeItem(panel); treeItem.setUserObject(vm.getId()); return treeItem; } @Override protected TreeItem getNodeItem(Disk disk) { //return getDiskOrSnapshotNode(new ArrayList<Disk>(Arrays.asList(disk)), true); return getDiskNode(new ArrayList<>(Arrays.asList(disk))); } @Override protected TreeItem getLeafItem(Disk disk) { if (disk.getDiskStorageType() == DiskStorageType.IMAGE) { return getSnapshotNode(((DiskImage) disk).getSnapshots()); } else { return null; } } @Override protected ArrayList<Disk> getNodeObjects(VM vm) { ArrayList<Disk> disks = new ArrayList<>(); for (Disk disk : vm.getDiskMap().values()) { disks.add(disk); } return disks; } @Override protected boolean getIsNodeEnabled(Disk disk) { if (disk.getDiskStorageType() == DiskStorageType.IMAGE) { if (listModel.getEntity() instanceof Quota) { return ((BusinessEntity) listModel.getEntity()).getId().equals(((DiskImage) disk).getQuotaId()); } else { return ((DiskImage) disk).getStorageIds() .get(0) .equals(((BusinessEntity) listModel.getEntity()).getId()); } } else { return true; } } @Override protected String getNodeDisabledTooltip() { return constants.differentStorageDomainWarning(); } private TreeItem getSnapshotNode(ArrayList<DiskImage> disks) { VerticalPanel vPanel = new VerticalPanel(); vPanel.setWidth("100%"); //$NON-NLS-1$ for (DiskImage disk : disks) { HorizontalPanel panel = new HorizontalPanel(); ImageResource image = resources.snapshotImage(); String name = disk.getDescription(); addItemToPanel(panel, new Image(image), "25px"); //$NON-NLS-1$ addTextBoxToPanel(panel, new StringValueLabel(), name, ""); //$NON-NLS-1$ addTextBoxToPanel(panel, new StringValueLabel(), "", "80px"); //$NON-NLS-1$ //$NON-NLS-2$ addTextBoxToPanel(panel, new StringValueLabel(), "", "160px"); //$NON-NLS-1$ //$NON-NLS-2$ addValueLabelToPanel(panel, new DiskSizeLabel<Long>(), disk.getSizeInGigabytes(), "110px"); //$NON-NLS-1$ addValueLabelToPanel(panel, new DiskSizeLabel<Double>(SizeConverter.SizeUnit.GiB), disk.getActualSize(), "110px"); //$NON-NLS-1$ addValueLabelToPanel(panel, new FullDateTimeLabel(), disk.getCreationDate(), "140px"); //$NON-NLS-1$ panel.setSpacing(1); panel.setWidth("100%"); //$NON-NLS-1$ vPanel.add(panel); } TreeItem treeItem = new TreeItem(vPanel); treeItem.setUserObject(disks.get(0).getId() + "snapshot"); //$NON-NLS-1$ return treeItem; } private TreeItem getDiskNode(ArrayList<Disk> disks) { if (disks.isEmpty()) { return null; } VerticalPanel vPanel = new VerticalPanel(); vPanel.setWidth("100%"); //$NON-NLS-1$ for (Disk disk : disks) { HorizontalPanel panel = new HorizontalPanel(); ImageResource image = resources.diskImage(); String name = disk.getDiskAlias(); addItemToPanel(panel, new Image(image), "25px"); //$NON-NLS-1$ addTextBoxToPanel(panel, new StringValueLabel(), name, ""); //$NON-NLS-1$ addTextBoxToPanel(panel, new StringValueLabel(), "", "80px"); //$NON-NLS-1$ //$NON-NLS-2$ addTextBoxToPanel(panel, new StringValueLabel(), "", "160px"); //$NON-NLS-1$ //$NON-NLS-2$ boolean isDiskImage = disk.getDiskStorageType() == DiskStorageType.IMAGE; Double actualSize = isDiskImage ? ((DiskImage) disk).getActualDiskWithSnapshotsSize() : (long) ((LunDisk) disk).getLun().getDeviceSize(); Long virtualSize = isDiskImage ? disk.getSize() : (long) (((LunDisk) disk).getLun().getDeviceSize() * Math.pow(1024, 3)); addValueLabelToPanel(panel, new DiskSizeLabel<Long>(SizeConverter.SizeUnit.BYTES), virtualSize, "110px"); //$NON-NLS-1$ addValueLabelToPanel(panel, new DiskSizeLabel<Double>(SizeConverter.SizeUnit.GiB), actualSize, "110px"); //$NON-NLS-1$ addValueLabelToPanel(panel, new FullDateTimeLabel(), disk.getDiskStorageType() == DiskStorageType.IMAGE ? ((DiskImage) disk).getCreationDate() : null, "140px"); //$NON-NLS-1$ panel.setSpacing(1); panel.setWidth("100%"); //$NON-NLS-1$ vPanel.add(panel); } TreeItem treeItem = new TreeItem(vPanel); treeItem.setUserObject(disks.get(0).getId()); return treeItem; } }