package com.workshare.msnos.usvc.api.routing.strategies; import java.util.ArrayList; import java.util.List; import com.workshare.msnos.core.geo.Location; import com.workshare.msnos.core.geo.Location.Match; import com.workshare.msnos.usvc.IMicroservice; import com.workshare.msnos.usvc.api.routing.ApiEndpoint; import com.workshare.msnos.usvc.api.routing.RoutingStrategy; public class LocationBasedStrategy implements RoutingStrategy { @Override public List<ApiEndpoint> select(IMicroservice from, List<ApiEndpoint> apis) { final Location target = from.getLocation(); if (target == null || target == Location.UNKNOWN) return apis; final List<ApiEndpoint> result = new ArrayList<ApiEndpoint>(); int currentBestMatch = 0; for (ApiEndpoint api : apis) { final Location location = api.location(); final Match match = target.match(location); final int value = match.value(); if (value > currentBestMatch) { currentBestMatch = value; result.clear(); result.add(api); } else if (value == currentBestMatch) { result.add(api); } } return result; } }