1600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangpackage gov.nist.javax.sip.header;
2600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
3600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport java.util.HashMap;
4600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport java.lang.reflect.Field;
5600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport java.lang.reflect.Modifier;
6600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
7600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang/**
8600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @author yanick.belanger
9600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */
10600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangpublic abstract class SIPHeaderNamesCache
11600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang{
12600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    private static final HashMap lowercaseMap = new HashMap();
13600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
14600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    static {
15600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        Field[] fields = SIPHeaderNames.class.getFields();
16600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        for (int i = 0; i < fields.length; i++) {
17600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            Field field = fields[i];
18600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            if (field.getType().equals(String.class) && Modifier.isStatic(field.getModifiers())) {
19600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                try {
20600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    String value = (String) field.get(null);
21600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    String lowerCase = value.toLowerCase();
22600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    lowercaseMap.put(value, lowerCase);
23600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    lowercaseMap.put(lowerCase, lowerCase);
24600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                } catch (IllegalAccessException e) {
25600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                }
26600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            }
27600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        }
28600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
29600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
30600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public static String toLowerCase(String headerName) {
31600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        String lowerCase = (String) lowercaseMap.get(headerName);
32600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        if (lowerCase == null) {
33600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            return headerName.toLowerCase();
34600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        }
35600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        else {
36600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            return lowerCase;
37600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        }
38600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
39600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang}
40