1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package org.esigate.url;
16
17 import org.esigate.api.BaseUrlRetrieveStrategy;
18 import org.esigate.http.IncomingRequest;
19
20 public class IpHashBaseUrlRetrieveStrategy implements BaseUrlRetrieveStrategy {
21 private final String[] urls;
22
23 public IpHashBaseUrlRetrieveStrategy(String[] urls) {
24 this.urls = urls;
25 }
26
27 @Override
28 public String getBaseURL(IncomingRequest originalRequest) {
29 int index = getHashCode(originalRequest.getRemoteAddr()) % this.urls.length;
30 return this.urls[Math.abs(index)];
31 }
32
33 private int getHashCode(String ip) {
34 final int prime = 31;
35 int result = 1;
36 int ipHashcode = 0;
37 if (ip != null) {
38 ipHashcode = ip.hashCode();
39 }
40 result = prime * result + ipHashcode;
41 return result;
42 }
43
44 }