1 15 package org.apache.hivemind.util; 16 17 import java.util.Locale ; 18 import java.util.NoSuchElementException ; 19 20 import org.apache.hivemind.HiveMind; 21 22 29 30 public class LocalizedNameGenerator 31 { 32 private int _baseNameLength; 33 private String _suffix; 34 private StringBuffer _buffer; 35 private String _language; 36 private String _country; 37 private String _variant; 38 private int _state; 39 private int _prevState; 40 41 private static final int INITIAL = 0; 42 private static final int LCV = 1; 43 private static final int LC = 2; 44 private static final int LV = 3; 45 private static final int L = 4; 46 private static final int BARE = 5; 47 private static final int EXHAUSTED = 6; 48 49 public LocalizedNameGenerator(String baseName, Locale locale, String suffix) 50 { 51 _baseNameLength = baseName.length(); 52 53 if (locale != null) 54 { 55 _language = locale.getLanguage(); 56 _country = locale.getCountry(); 57 _variant = locale.getVariant(); 58 } 59 60 _state = INITIAL; 61 _prevState = INITIAL; 62 63 _suffix = suffix; 64 65 _buffer = new StringBuffer (baseName); 66 67 advance(); 68 } 69 70 private void advance() 71 { 72 _prevState = _state; 73 74 while (_state != EXHAUSTED) 75 { 76 _state++; 77 78 switch (_state) 79 { 80 case LCV : 81 82 if (HiveMind.isBlank(_variant)) 83 continue; 84 85 return; 86 87 case LC : 88 89 if (HiveMind.isBlank(_country)) 90 continue; 91 92 return; 93 94 case LV : 95 96 99 if (HiveMind.isBlank(_variant) || HiveMind.isBlank(_country)) 100 continue; 101 102 return; 103 104 case L : 105 106 if (HiveMind.isBlank(_language)) 107 continue; 108 109 return; 110 111 case BARE : 112 default : 113 return; 114 } 115 } 116 } 117 118 123 124 public boolean more() 125 { 126 return _state != EXHAUSTED; 127 } 128 129 136 137 public String next() 138 { 139 if (_state == EXHAUSTED) 140 throw new NoSuchElementException (); 141 142 String result = build(); 143 144 advance(); 145 146 return result; 147 } 148 149 private String build() 150 { 151 _buffer.setLength(_baseNameLength); 152 153 if (_state == LC || _state == LCV || _state == L) 154 { 155 _buffer.append('_'); 156 _buffer.append(_language); 157 } 158 159 162 if (_state == LC || _state == LCV || _state == LV) 163 { 164 _buffer.append('_'); 165 166 if (_state != LV) 167 _buffer.append(_country); 168 } 169 170 if (_state == LV || _state == LCV) 171 { 172 _buffer.append('_'); 173 _buffer.append(_variant); 174 } 175 176 if (_suffix != null) 177 _buffer.append(_suffix); 178 179 return _buffer.toString(); 180 } 181 182 public Locale getCurrentLocale() 183 { 184 switch (_prevState) 185 { 186 case LCV : 187 188 return new Locale (_language, _country, _variant); 189 190 case LC : 191 192 return new Locale (_language, _country, ""); 193 194 case LV : 195 196 return new Locale (_language, "", _variant); 197 198 case L : 199 200 return new Locale (_language, "", ""); 201 202 default : 203 return null; 204 } 205 } 206 } 207 | Popular Tags |