package org.ovirt.mobile.movirt.ui.dashboard.general; import android.database.Cursor; import android.os.Bundle; import android.support.v4.content.Loader; import android.widget.TextView; import org.androidannotations.annotations.AfterViews; import org.androidannotations.annotations.Bean; import org.androidannotations.annotations.EFragment; import org.androidannotations.annotations.ViewById; import org.ovirt.mobile.movirt.R; import org.ovirt.mobile.movirt.facade.DiskFacade; import org.ovirt.mobile.movirt.facade.VmFacade; import org.ovirt.mobile.movirt.model.Disk; import org.ovirt.mobile.movirt.model.Vm; import org.ovirt.mobile.movirt.provider.OVirtContract; import org.ovirt.mobile.movirt.provider.ProviderFacade; import org.ovirt.mobile.movirt.provider.SortOrder; import org.ovirt.mobile.movirt.ui.MainActivityFragments; import org.ovirt.mobile.movirt.ui.dashboard.PercentageCircleView; import org.ovirt.mobile.movirt.ui.dashboard.general.resources.UtilizationResource; import org.ovirt.mobile.movirt.util.usage.MemorySize; import java.util.List; import static org.ovirt.mobile.movirt.provider.OVirtContract.SnapshotEmbeddableEntity.SNAPSHOT_ID; import static org.ovirt.mobile.movirt.provider.OVirtContract.Vm.STATUS; @EFragment(R.layout.fragment_dashboard_virtual_general) public class DashboardVirtualGeneralFragment extends DashboardGeneralFragment { private static final String TAG = DashboardVirtualGeneralFragment.class.getSimpleName(); private static final int VM_LOADER = 1; private static final int DISK_LOADER = 2; @Bean ProviderFacade provider; @Bean VmFacade vmFacade; @Bean DiskFacade diskFacade; @AfterViews void init() { initLoaders(); } @Override protected int[] getLoaders() { return new int[]{VM_LOADER, DISK_LOADER}; } @ViewById public void summaryMemoryPercentageCircle(TextView summaryMemoryPercentageCircle) { super.summaryMemoryPercentageCircle = summaryMemoryPercentageCircle; } @ViewById public void summaryCpuPercentageCircle(TextView summaryCpuPercentageCircle) { super.summaryCpuPercentageCircle = summaryCpuPercentageCircle; } @ViewById public void summaryStoragePercentageCircle(TextView summaryStoragePercentageCircle) { super.summaryStoragePercentageCircle = summaryStoragePercentageCircle; } @ViewById public void cpuPercentageCircle(PercentageCircleView cpuPercentageCircle) { super.cpuPercentageCircle = cpuPercentageCircle; } @ViewById public void memoryPercentageCircle(PercentageCircleView memoryPercentageCircle) { super.memoryPercentageCircle = memoryPercentageCircle; } @ViewById public void storagePercentageCircle(PercentageCircleView storagePercentageCircle) { super.storagePercentageCircle = storagePercentageCircle; } @Override public Loader<Cursor> onCreateLoader(int id, Bundle bundle) { Loader<Cursor> loader = null; switch (id) { case VM_LOADER: loader = provider.query(Vm.class).empty(SNAPSHOT_ID).where(STATUS, Vm.Status.UP.toString()).asLoader(); break; case DISK_LOADER: loader = provider.query(Disk.class).empty(SNAPSHOT_ID).asLoader(); break; default: break; } return loader; } @Override public void onLoadFinished(Loader<Cursor> loader, Cursor data) { switch (loader.getId()) { case VM_LOADER: List<Vm> vmList = vmFacade.mapAllFromCursor(data); StartActivityAction cpuAction = new StartActivityAction(MainActivityFragments.VMS, OVirtContract.Vm.CPU_USAGE, SortOrder.DESCENDING); StartActivityAction memoryAction = new StartActivityAction(MainActivityFragments.VMS, OVirtContract.Vm.MEMORY_USAGE, SortOrder.DESCENDING); renderCpuPercentageCircle(getCpuUtilization(vmList).first, cpuAction); renderMemoryPercentageCircle(getMemoryUtilization(vmList), memoryAction); break; case DISK_LOADER: List<Disk> diskList = diskFacade.mapAllFromCursor(data); renderStoragePercentageCircle(getDisksUtilization(diskList), null); break; default: break; } } protected UtilizationResource getDisksUtilization(List<Disk> diskList) { MemorySize used = new MemorySize(); MemorySize total = new MemorySize(); MemorySize available; for (Disk disk : diskList) { total.addValue(disk.getSize()); used.addValue(disk.getUsedSize()); } available = new MemorySize(total.getValue() - used.getValue()); return new UtilizationResource(used, total, available); } }