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