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