1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.codelibs.fess.util;
17
18 import java.util.ArrayList;
19 import java.util.Collection;
20 import java.util.Collections;
21 import java.util.LinkedHashSet;
22 import java.util.List;
23 import java.util.Map;
24 import java.util.Set;
25
26 public class DocMap implements Map<String, Object> {
27
28 private static final String LANG_KEY = "lang";
29 private final Map<String, Object> parent;
30
31 public DocMap(final Map<String, Object> parent) {
32 this.parent = parent;
33 }
34
35 @Override
36 public int size() {
37 return parent.size();
38 }
39
40 @Override
41 public boolean isEmpty() {
42 return parent.isEmpty();
43 }
44
45 @Override
46 public boolean containsKey(final Object key) {
47 return parent.containsKey(key);
48 }
49
50 @Override
51 public boolean containsValue(final Object value) {
52 return parent.containsValue(value);
53 }
54
55 @Override
56 public Object get(final Object key) {
57 return parent.get(key);
58 }
59
60 @Override
61 public Object put(final String key, final Object value) {
62 return parent.put(key, value);
63 }
64
65 @Override
66 public Object remove(final Object key) {
67 return parent.remove(key);
68 }
69
70 @Override
71 public void putAll(final Map<? extends String, ? extends Object> m) {
72 parent.putAll(m);
73 }
74
75 @Override
76 public void clear() {
77 parent.clear();
78 }
79
80 @Override
81 public Set<String> keySet() {
82 return parent.keySet();
83 }
84
85 @Override
86 public Collection<Object> values() {
87 return parent.values();
88 }
89
90 @Override
91 public Set<java.util.Map.Entry<String, Object>> entrySet() {
92 if (parent.containsKey(LANG_KEY)) {
93 final List<java.util.Map.Entry<String, Object>> list = new ArrayList<>(parent.entrySet());
94 Collections.sort(list, (o1, o2) -> {
95 final String k1 = o1.getKey();
96 if (LANG_KEY.equals(k1)) {
97 return -1;
98 }
99 final String k2 = o2.getKey();
100 if (LANG_KEY.equals(k2)) {
101 return -1;
102 }
103 return k1.compareTo(k2);
104 });
105 return new LinkedHashSet<>(list);
106 }
107 return parent.entrySet();
108 }
109
110 }