View Javadoc
1   /*
2    * Copyright 2012-2021 CodeLibs Project and the Others.
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    *     http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
13   * either express or implied. See the License for the specific language
14   * governing permissions and limitations under the License.
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 }