View Javadoc
1   /*
2    * This file is part of ***  M y C o R e  ***
3    * See http://www.mycore.de/ for details.
4    *
5    * MyCoRe is free software: you can redistribute it and/or modify
6    * it under the terms of the GNU General Public License as published by
7    * the Free Software Foundation, either version 3 of the License, or
8    * (at your option) any later version.
9    *
10   * MyCoRe is distributed in the hope that it will be useful,
11   * but WITHOUT ANY WARRANTY; without even the implied warranty of
12   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13   * GNU General Public License for more details.
14   *
15   * You should have received a copy of the GNU General Public License
16   * along with MyCoRe.  If not, see <http://www.gnu.org/licenses/>.
17   */
18  
19  package org.mycore.datamodel.language;
20  
21  import java.util.HashMap;
22  import java.util.Locale;
23  import java.util.Map;
24  
25  /**
26   * Represents a language in the datamodel, independent of the type of code used to encode it.
27   * 
28   * @author Frank L\u00FCtzenkirchen
29   */
30  public class MCRLanguage {
31  
32      /**
33       * A map from codes used for this language, by code type
34       */
35      private Map<MCRLanguageCodeType, String> codesByType = new HashMap<>();
36  
37      /**
38       * A map of labels for this language, by language 
39       */
40      private Map<MCRLanguage, String> labelsByLanguage = new HashMap<>();
41  
42      private Locale locale;
43  
44      /**
45       * Language instances are created by the package itself, do not use on your own, use MCRLanguageFactory instead.
46       * 
47       * @see MCRLanguageFactory
48       */
49      MCRLanguage() {
50      }
51  
52      /**
53       * Sets the language code of the given type
54       */
55      void setCode(MCRLanguageCodeType type, String code) {
56          codesByType.put(type, code);
57      }
58  
59      /**
60       * Returns the code of this language for the given type
61       */
62      public String getCode(MCRLanguageCodeType type) {
63          return codesByType.get(type);
64      }
65  
66      /**
67       * Returns all language codes used for this language
68       */
69      public Map<MCRLanguageCodeType, String> getCodes() {
70          return codesByType;
71      }
72  
73      /**
74       * Sets the label in the given language
75       */
76      void setLabel(MCRLanguage language, String label) {
77          labelsByLanguage.put(language, label);
78      }
79  
80      /**
81       * Returns the label in the given language
82       */
83      public String getLabel(MCRLanguage language) {
84          return labelsByLanguage.get(language);
85      }
86  
87      /**
88       * Returns the label in the given language
89       */
90      public String getLabel(String languageCode) {
91          MCRLanguage language = MCRLanguageFactory.instance().getLanguage(languageCode);
92          return labelsByLanguage.get(language);
93      }
94  
95      /**
96       * Returns all labels used for this language
97       */
98      public Map<MCRLanguage, String> getLabels() {
99          return labelsByLanguage;
100     }
101 
102     @Override
103     public boolean equals(Object obj) {
104         if (obj instanceof MCRLanguage) {
105             return this.toString().equals(obj.toString());
106         } else {
107             return false;
108         }
109     }
110 
111     @Override
112     public int hashCode() {
113         return toString().hashCode();
114     }
115 
116     @Override
117     public String toString() {
118         return getCode(MCRLanguageCodeType.xmlCode);
119     }
120 
121     public Locale getLocale() {
122         return locale;
123     }
124 
125     void setLocale(Locale locale) {
126         this.locale = locale;
127     }
128 }