• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2007 The Android Open Source Project
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, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.ide.common.resources.configuration;
18 
19 import java.util.Locale;
20 import java.util.regex.Pattern;
21 
22 /**
23  * Resource Qualifier for Language.
24  */
25 public final class LanguageQualifier extends ResourceQualifier {
26     private final static Pattern sLanguagePattern = Pattern.compile("^[a-z]{2}$"); //$NON-NLS-1$
27 
28     public static final String FAKE_LANG_VALUE = "__"; //$NON-NLS-1$
29     public static final String NAME = "Language";
30 
31     private String mValue;
32 
33     /**
34      * Creates and returns a qualifier from the given folder segment. If the segment is incorrect,
35      * <code>null</code> is returned.
36      * @param segment the folder segment from which to create a qualifier.
37      * @return a new {@link LanguageQualifier} object or <code>null</code>
38      */
getQualifier(String segment)39     public static LanguageQualifier getQualifier(String segment) {
40         if (sLanguagePattern.matcher(segment).matches()) {
41             LanguageQualifier qualifier = new LanguageQualifier();
42             qualifier.mValue = segment;
43 
44             return qualifier;
45         }
46         return null;
47     }
48 
49     /**
50      * Returns the folder name segment for the given value. This is equivalent to calling
51      * {@link #toString()} on a {@link LanguageQualifier} object.
52      * @param value the value of the qualifier, as returned by {@link #getValue()}.
53      */
getFolderSegment(String value)54     public static String getFolderSegment(String value) {
55         String segment = value.toLowerCase(Locale.US);
56         if (sLanguagePattern.matcher(segment).matches()) {
57             return segment;
58         }
59 
60         return null;
61     }
62 
LanguageQualifier()63     public LanguageQualifier() {
64 
65     }
66 
LanguageQualifier(String value)67     public LanguageQualifier(String value) {
68         mValue = value;
69     }
70 
getValue()71     public String getValue() {
72         if (mValue != null) {
73             return mValue;
74         }
75 
76         return ""; //$NON-NLS-1$
77     }
78 
79     @Override
getName()80     public String getName() {
81         return NAME;
82     }
83 
84     @Override
getShortName()85     public String getShortName() {
86         return NAME;
87     }
88 
89     @Override
since()90     public int since() {
91         return 1;
92     }
93 
94     @Override
isValid()95     public boolean isValid() {
96         return mValue != null;
97     }
98 
99     @Override
hasFakeValue()100     public boolean hasFakeValue() {
101         return FAKE_LANG_VALUE.equals(mValue);
102     }
103 
104     @Override
checkAndSet(String value, FolderConfiguration config)105     public boolean checkAndSet(String value, FolderConfiguration config) {
106         LanguageQualifier qualifier = getQualifier(value);
107         if (qualifier != null) {
108             config.setLanguageQualifier(qualifier);
109             return true;
110         }
111 
112         return false;
113     }
114 
115     @Override
equals(Object qualifier)116     public boolean equals(Object qualifier) {
117         if (qualifier instanceof LanguageQualifier) {
118             if (mValue == null) {
119                 return ((LanguageQualifier)qualifier).mValue == null;
120             }
121             return mValue.equals(((LanguageQualifier)qualifier).mValue);
122         }
123 
124         return false;
125     }
126 
127     @Override
hashCode()128     public int hashCode() {
129         if (mValue != null) {
130             return mValue.hashCode();
131         }
132 
133         return 0;
134     }
135 
136     /**
137      * Returns the string used to represent this qualifier in the folder name.
138      */
139     @Override
getFolderSegment()140     public String getFolderSegment() {
141         if (mValue != null) {
142             return getFolderSegment(mValue);
143         }
144 
145         return ""; //$NON-NLS-1$
146     }
147 
148     @Override
getShortDisplayValue()149     public String getShortDisplayValue() {
150         if (mValue != null) {
151             return mValue;
152         }
153 
154         return ""; //$NON-NLS-1$
155     }
156 
157     @Override
getLongDisplayValue()158     public String getLongDisplayValue() {
159         if (mValue != null) {
160             return String.format("Language %s", mValue);
161         }
162 
163         return ""; //$NON-NLS-1$
164     }
165 }
166