package org.ovirt.engine.ui.uicommonweb.models.vms;
import java.util.ArrayList;
import java.util.List;
import org.ovirt.engine.ui.frontend.AsyncQuery;
import org.ovirt.engine.ui.uicommonweb.Linq;
import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider;
import org.ovirt.engine.ui.uicommonweb.models.EntityModel;
import org.ovirt.engine.ui.uicompat.ConstantsManager;
public class PriorityUtil {
private UnitVmModel model;
private Integer cachedMaxPriority;
public PriorityUtil(UnitVmModel model) {
this.model = model;
}
public void initPriority(final int priority, final PriorityUpdatingCallbacks callbacks) {
AsyncDataProvider.getInstance().getMaxVmPriority(new AsyncQuery<>(
returnValue -> {
cachedMaxPriority = returnValue;
int value = AsyncDataProvider.getInstance().getRoundedPriority(priority, cachedMaxPriority);
EntityModel tempVar = new EntityModel();
tempVar.setEntity(value);
before(callbacks);
model.getPriority().setSelectedItem(tempVar);
after(callbacks);
updatePriority(callbacks);
}));
}
private void updatePriority(final PriorityUpdatingCallbacks callbacks) {
if (cachedMaxPriority == null) {
AsyncDataProvider.getInstance().getMaxVmPriority(new AsyncQuery<>(
returnValue -> {
cachedMaxPriority = returnValue;
postUpdatePriority(callbacks);
}));
}
else {
postUpdatePriority(callbacks);
}
}
private void postUpdatePriority(PriorityUpdatingCallbacks callbacks) {
before(callbacks);
List<EntityModel<Integer>> items = new ArrayList<>();
EntityModel tempVar = new EntityModel();
tempVar.setTitle(ConstantsManager.getInstance().getConstants().lowTitle());
tempVar.setEntity(1);
items.add(tempVar);
EntityModel tempVar2 = new EntityModel();
tempVar2.setTitle(ConstantsManager.getInstance().getConstants().mediumTitle());
tempVar2.setEntity(cachedMaxPriority / 2);
items.add(tempVar2);
EntityModel tempVar3 = new EntityModel();
tempVar3.setTitle(ConstantsManager.getInstance().getConstants().highTitle());
tempVar3.setEntity(cachedMaxPriority);
items.add(tempVar3);
// If there was some priority selected before, try select it again.
EntityModel<Integer> oldPriority = model.getPriority().getSelectedItem();
model.getPriority().setItems(items);
if (oldPriority != null) {
for (EntityModel<Integer> item : items) {
Integer val1 = item.getEntity();
Integer val2 = oldPriority.getEntity();
if (val1 != null && val1.equals(val2)) {
model.getPriority().setSelectedItem(item);
break;
}
}
}
else {
model.getPriority().setSelectedItem(Linq.firstOrNull(items));
}
after(callbacks);
}
private void before(PriorityUpdatingCallbacks callbacks) {
if (callbacks != null) {
callbacks.beforeUpdates();
}
}
private void after(PriorityUpdatingCallbacks callbacks) {
if (callbacks != null) {
callbacks.afterUpdates();
}
}
public interface PriorityUpdatingCallbacks {
void beforeUpdates();
void afterUpdates();
}
}