package org.zstack.network.service.virtualrouter.vyos;
import org.springframework.beans.factory.annotation.Autowire;
import org.springframework.beans.factory.annotation.Configurable;
import org.zstack.header.network.l3.L3NetworkInventory;
import org.zstack.network.service.virtualrouter.VirtualRouterOfferingInventory;
import org.zstack.network.service.virtualrouter.VirtualRouterOfferingSelector;
import org.zstack.network.service.virtualrouter.VirtualRouterSystemTags;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
/**
* Created by xing5 on 2016/11/2.
*/
@Configurable(preConstruction = true, autowire = Autowire.BY_TYPE)
public class VyosOfferingSelector implements VirtualRouterOfferingSelector {
@Override
public VirtualRouterOfferingInventory selectVirtualRouterOffering(L3NetworkInventory l3, List<VirtualRouterOfferingInventory> candidates) {
Map<String, List<String>> tags = VirtualRouterSystemTags.VYOS_OFFERING.getTags(candidates.stream().map(VirtualRouterOfferingInventory::getUuid).collect(Collectors.toList()));
if (tags.isEmpty()) {
Optional p = candidates.stream().filter(VirtualRouterOfferingInventory::isDefault).findAny();
return p.isPresent() ? (VirtualRouterOfferingInventory) p.get() : candidates.get(0);
} else {
List<VirtualRouterOfferingInventory> offerings = candidates.stream().filter(i->tags.containsKey(i.getUuid())).collect(Collectors.toList());
Optional p = offerings.stream().filter(VirtualRouterOfferingInventory::isDefault).findAny();
return p.isPresent() ? (VirtualRouterOfferingInventory) p.get() : offerings.get(0);
}
}
}