package org.ovirt.engine.ui.webadmin.section.main.view.tab;
import org.ovirt.engine.core.common.businessentities.Quota;
import org.ovirt.engine.core.common.businessentities.QuotaCluster;
import org.ovirt.engine.core.common.businessentities.QuotaStorage;
import org.ovirt.engine.core.common.utils.SizeConverter;
import org.ovirt.engine.core.searchbackend.QuotaConditionFieldAutoCompleter;
import org.ovirt.engine.ui.common.idhandler.ElementIdHandler;
import org.ovirt.engine.ui.common.uicommon.model.MainModelProvider;
import org.ovirt.engine.ui.common.widget.renderer.DiskSizeRenderer;
import org.ovirt.engine.ui.common.widget.table.column.AbstractTextColumn;
import org.ovirt.engine.ui.uicommonweb.UICommand;
import org.ovirt.engine.ui.uicommonweb.models.quota.QuotaListModel;
import org.ovirt.engine.ui.webadmin.ApplicationConstants;
import org.ovirt.engine.ui.webadmin.ApplicationMessages;
import org.ovirt.engine.ui.webadmin.gin.AssetProvider;
import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.MainTabQuotaPresenter;
import org.ovirt.engine.ui.webadmin.section.main.view.AbstractMainTabWithDetailsTableView;
import org.ovirt.engine.ui.webadmin.widget.action.WebAdminButtonDefinition;
import org.ovirt.engine.ui.webadmin.widget.table.column.AbstractQuotaPercentColumn;
import org.ovirt.engine.ui.webadmin.widget.table.column.QuotaDcStatusColumn;
import com.google.gwt.core.client.GWT;
import com.google.gwt.i18n.client.NumberFormat;
import com.google.inject.Inject;
public class MainTabQuotaView extends AbstractMainTabWithDetailsTableView<Quota, QuotaListModel> implements MainTabQuotaPresenter.ViewDef {
private static final NumberFormat decimalFormat = NumberFormat.getDecimalFormat();
private static final DiskSizeRenderer<Number> diskSizeRenderer =
new DiskSizeRenderer<>(SizeConverter.SizeUnit.GiB);
interface ViewIdHandler extends ElementIdHandler<MainTabQuotaView> {
ViewIdHandler idHandler = GWT.create(ViewIdHandler.class);
}
private static final ApplicationConstants constants = AssetProvider.getConstants();
private static final ApplicationMessages messages = AssetProvider.getMessages();
@Inject
public MainTabQuotaView(MainModelProvider<Quota, QuotaListModel> modelProvider) {
super(modelProvider);
ViewIdHandler.idHandler.generateAndSetIds(this);
initTable();
initWidget(getTable());
}
void initTable() {
getTable().enableColumnResizing();
QuotaDcStatusColumn dcStatusColumn = new QuotaDcStatusColumn();
dcStatusColumn.setContextMenuTitle(constants.dcStatusQuota());
getTable().addColumn(dcStatusColumn, constants.empty(), "30px"); //$NON-NLS-1$
AbstractTextColumn<Quota> nameColumn = new AbstractTextColumn<Quota>() {
@Override
public String getValue(Quota object) {
return object.getQuotaName() == null ? "" : object.getQuotaName(); //$NON-NLS-1$
}
};
nameColumn.makeSortable(QuotaConditionFieldAutoCompleter.NAME);
getTable().addColumn(nameColumn, constants.nameQuota(), "120px"); //$NON-NLS-1$
AbstractTextColumn<Quota> descriptionColumn = new AbstractTextColumn<Quota>() {
@Override
public String getValue(Quota object) {
return object.getDescription() == null ? "" : object.getDescription(); //$NON-NLS-1$
}
};
descriptionColumn.makeSortable(QuotaConditionFieldAutoCompleter.DESCRIPTION);
getTable().addColumn(descriptionColumn, constants.descriptionQuota(), "120px"); //$NON-NLS-1$
getTable().addColumn(new AbstractQuotaPercentColumn<Quota>() {
@Override
protected Integer getProgressValue(Quota object) {
int value;
long allocated = 0;
long used = 0;
if (object.getGlobalQuotaCluster() != null) {
allocated = object.getGlobalQuotaCluster().getMemSizeMB();
used = object.getGlobalQuotaCluster().getMemSizeMBUsage();
} else {
for (QuotaCluster quotaCluster : object.getQuotaClusters()) {
if (!QuotaCluster.UNLIMITED_MEM.equals(quotaCluster.getMemSizeMB())) {
allocated += quotaCluster.getMemSizeMB() != null ? quotaCluster.getMemSizeMB() : 0;
used += quotaCluster.getMemSizeMBUsage();
} else {
allocated = QuotaCluster.UNLIMITED_MEM;
break;
}
}
}
if (allocated == 0) {
return 0;
}
value = (int)(((double)used/allocated) * 100);
return allocated < 0 ? -1 : value > 100 ? 100 : value;
}
},
constants.usedMemoryQuota(), "100px"); //$NON-NLS-1$
getTable().addColumn(new AbstractTextColumn<Quota>() {
@Override
public String getValue(Quota object) {
int value;
long allocated = 0;
long used = 0;
if (object.getGlobalQuotaCluster() != null) {
allocated = object.getGlobalQuotaCluster().getMemSizeMB();
used = object.getGlobalQuotaCluster().getMemSizeMBUsage();
} else {
for (QuotaCluster quotaCluster : object.getQuotaClusters()) {
if (!QuotaCluster.UNLIMITED_MEM.equals(quotaCluster.getMemSizeMB())) {
allocated += quotaCluster.getMemSizeMB() != null ? quotaCluster.getMemSizeMB() : 0;
used += quotaCluster.getMemSizeMBUsage();
} else {
allocated = QuotaCluster.UNLIMITED_MEM;
break;
}
}
}
value = (int)(allocated-used);
String returnVal;
if (allocated < 0) {
returnVal = constants.unlimited();
} else if (value <= 0){
returnVal = messages.megabytes("0"); //$NON-NLS-1$
} else if (value <= 5*1024) {
returnVal = messages.megabytes(String.valueOf(value));
} else {
returnVal = messages.gigabytes(decimalFormat.format((double)value/1024));
}
return returnVal;
}
}, constants.freeMemory(), "80px"); //$NON-NLS-1$
getTable().addColumn(new AbstractQuotaPercentColumn<Quota>() {
@Override
protected Integer getProgressValue(Quota object) {
int value;
int allocated = 0;
int used = 0;
if (object.getGlobalQuotaCluster() != null) {
allocated =
object.getGlobalQuotaCluster().getVirtualCpu() != null ? object.getGlobalQuotaCluster()
.getVirtualCpu() : 0;
used = object.getGlobalQuotaCluster().getVirtualCpuUsage();
} else {
for (QuotaCluster quotaCluster : object.getQuotaClusters()) {
if (!QuotaCluster.UNLIMITED_VCPU.equals(quotaCluster.getVirtualCpu())) {
allocated += quotaCluster.getVirtualCpu();
used += quotaCluster.getVirtualCpuUsage();
} else {
allocated = QuotaCluster.UNLIMITED_VCPU;
break;
}
}
}
if (allocated == 0) {
return 0;
}
value = (int)(((double)used/allocated) * 100);
return allocated < 0 ? -1 : value > 100 ? 100 : value;
}
},
constants.runningCpuQuota(), "100px"); //$NON-NLS-1$
getTable().addColumn(new AbstractTextColumn<Quota>() {
@Override
public String getValue(Quota object) {
int value;
int allocated = 0;
int used = 0;
if (object.getGlobalQuotaCluster() != null) {
allocated =
object.getGlobalQuotaCluster().getVirtualCpu() != null ? object.getGlobalQuotaCluster()
.getVirtualCpu() : 0;
used = object.getGlobalQuotaCluster().getVirtualCpuUsage();
} else {
for (QuotaCluster quotaCluster : object.getQuotaClusters()) {
if (!QuotaCluster.UNLIMITED_VCPU.equals(quotaCluster.getVirtualCpu())) {
allocated += quotaCluster.getVirtualCpu();
used += quotaCluster.getVirtualCpuUsage();
} else {
allocated = QuotaCluster.UNLIMITED_VCPU;
break;
}
}
}
value = allocated - used;
String returnVal;
if (allocated < 0) {
returnVal = constants.unlimited();
} else if (value <= 0) {
returnVal = "0"; //$NON-NLS-1$
} else {
returnVal = value + ""; //$NON-NLS-1$
}
return returnVal;
}
}, constants.freeVcpu(), "80px"); //$NON-NLS-1$
getTable().addColumn(new AbstractQuotaPercentColumn<Quota>() {
@Override
protected Integer getProgressValue(Quota object) {
int value;
double allocated = 0;
double used = 0;
if (object.getGlobalQuotaStorage() != null) {
allocated = object.getGlobalQuotaStorage().getStorageSizeGB();
used = object.getGlobalQuotaStorage().getStorageSizeGBUsage();
} else {
for (QuotaStorage quotaStorage : object.getQuotaStorages()) {
if (!QuotaStorage.UNLIMITED.equals(quotaStorage.getStorageSizeGB())) {
allocated += quotaStorage.getStorageSizeGB();
used += quotaStorage.getStorageSizeGBUsage();
} else {
allocated = QuotaStorage.UNLIMITED;
break;
}
}
}
if (allocated == 0) {
return 0;
}
value = (int)((used/allocated) * 100);
return allocated < 0 ? -1 : value > 100 ? 100 : value;
}
},
constants.usedStorageQuota(), "100px"); //$NON-NLS-1$
getTable().addColumn(new AbstractTextColumn<Quota>() {
@Override
public String getValue(Quota object) {
double value;
double allocated = 0;
double used = 0;
if (object.getGlobalQuotaStorage() != null) {
allocated = object.getGlobalQuotaStorage().getStorageSizeGB();
used = object.getGlobalQuotaStorage().getStorageSizeGBUsage();
} else {
for (QuotaStorage quotaStorage : object.getQuotaStorages()) {
if (!QuotaStorage.UNLIMITED.equals(quotaStorage.getStorageSizeGB())) {
allocated += quotaStorage.getStorageSizeGB();
used += quotaStorage.getStorageSizeGBUsage();
} else {
allocated = QuotaStorage.UNLIMITED;
break;
}
}
}
value = allocated - used;
String returnVal;
if (allocated < 0) {
returnVal = constants.unlimited();
} else if (value <= 0) {
returnVal = messages.gigabytes("0"); //$NON-NLS-1$
} else {
returnVal = diskSizeRenderer.render(value);
}
return returnVal;
}
}, constants.freeStorage(), "80px"); //$NON-NLS-1$
getTable().addActionButton(new WebAdminButtonDefinition<Quota>(constants.addQuota()) {
@Override
protected UICommand resolveCommand() {
return getMainModel().getCreateCommand();
}
});
getTable().addActionButton(new WebAdminButtonDefinition<Quota>(constants.editQuota()) {
@Override
protected UICommand resolveCommand() {
return getMainModel().getEditCommand();
}
});
getTable().addActionButton(new WebAdminButtonDefinition<Quota>(constants.copyQuota()) {
@Override
protected UICommand resolveCommand() {
return getMainModel().getCloneCommand();
}
});
getTable().addActionButton(new WebAdminButtonDefinition<Quota>(constants.removeQuota()) {
@Override
protected UICommand resolveCommand() {
return getMainModel().getRemoveCommand();
}
});
}
}