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