package org.ovirt.engine.core.bll;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import org.ovirt.engine.core.common.action.VdcActionParametersBase;
import org.ovirt.engine.core.common.action.VdcActionType;
import org.ovirt.engine.core.common.businessentities.VM;
import org.ovirt.engine.core.common.businessentities.VmsComparer;
import org.ovirt.engine.core.compat.Guid;
import org.ovirt.engine.core.dal.dbbroker.DbFacade;
public class MigrateVMActionRunner extends SortedMultipleActionsRunnerBase {
public MigrateVMActionRunner(VdcActionType actionType,
ArrayList<VdcActionParametersBase> parameters,
boolean isInternal) {
super(actionType, parameters, isInternal);
}
@Override
protected void SortCommands() {
ArrayList<CommandBase> commands = getCommands();
final Map<Guid, VM> vms = new HashMap<Guid, VM>(commands.size());
for (CommandBase<VdcActionParametersBase> cmd : commands) {
vms.put(cmd.getVmId(), DbFacade.getInstance().getVmDAO().get(cmd.getVmId()));
}
Collections.sort(commands, Collections.reverseOrder(new Comparator<CommandBase>() {
private final VmsComparer vmComparator = new VmsComparer();
@Override
public int compare(CommandBase o1, CommandBase o2) {
VM vm1 = vms.get(o1.getVmId());
VM vm2 = vms.get(o2.getVmId());
return vmComparator.Compare(vm1, vm2);
}
}));
}
}