Revision 3108

View differences:

org.gvsig.tools/library/trunk/org.gvsig.tools/org.gvsig.tools.lib/src/main/java/org/gvsig/tools/dynobject/impl/DefaultDynField.java
25 25
import java.io.File;
26 26
import java.net.URI;
27 27
import java.net.URL;
28
import java.nio.charset.Charset;
29
import java.util.Arrays;
28 30
import java.util.Collection;
29 31
import java.util.Date;
30 32
import java.util.Iterator;
31 33
import java.util.List;
34
import java.util.Locale;
32 35
import java.util.Map;
33 36
import java.util.Set;
37
import java.util.SortedMap;
34 38
import java.util.function.Supplier;
35 39
import org.apache.commons.lang3.StringUtils;
36 40
import org.gvsig.tools.ToolsLocator;
......
327 331
    @Override
328 332
    public DynField setSubtype(String subtype) {
329 333
        this.subtype = subtype;
334
        if(this.availableValues == null) {
335
            switch (this.getType()) {
336
                case DataTypes.STRING:
337
                    if(StringUtils.equalsIgnoreCase(subtype, "locale")) {
338
                        this.availableValues = getAvailableLocaleLanguageTags();
339
                    } else if(StringUtils.equalsIgnoreCase(subtype, "charset")) {
340
                        this.availableValues = getAvailableCharsetValues();
341
                    }
342
                    break;
343
                case DataTypes.LOCALE:
344
                    if(StringUtils.equalsIgnoreCase(subtype, "locale")) {
345
                        this.availableValues = getAvailableLocaleValues();
346
                    }
347
            }
348
        }
330 349
        return this;
331 350
    }
351
    
352
    private DynObjectValueItem[] getAvailableCharsetValues() {
353
        SortedMap<String, Charset> charsets = Charset.availableCharsets();
354
        DynObjectValueItem[] availableValues = new DynObjectValueItem[charsets.size()+1];
355
        int i = 0;
356
        availableValues[i++] = new DynObjectValueItem("DEFAULT", "Default (use system language)");
357
        for (Map.Entry<String, Charset> entry : charsets.entrySet()) {
358
            String key = entry.getKey();
359
            Charset value = entry.getValue();
360
            availableValues[i++] = new DynObjectValueItem(value, key);
361
        }
332 362

  
363
        return availableValues;
364
    }
365

  
366
    private DynObjectValueItem[] getAvailableLocaleLanguageTags() {
367
        Locale[] locales = Locale.getAvailableLocales();
368
        Arrays.sort(locales, (Locale o1, Locale o2) -> {
369
            if (o1 == null) {
370
                return -1;
371
            }
372
            if (o2 == null) {
373
                return 1;
374
            }
375
            return o1.getDisplayName().compareToIgnoreCase(o2.getDisplayName());
376
        });
377
        DynObjectValueItem[] availableValues = new DynObjectValueItem[locales.length+1];
378
        availableValues[0] = new DynObjectValueItem("DEFAULT", "Default (use system locale)");
379
        for (int i = 0; i < locales.length; i++) {
380
            String theLabel = locales[i].getDisplayName();
381
            if(StringUtils.isBlank(theLabel)){
382
                theLabel = locales[i].toLanguageTag();
383
            }
384
            availableValues[i+1] = new DynObjectValueItem(locales[i].toLanguageTag(), theLabel);
385
        }
386
        return availableValues;
387

  
388
    }
389

  
390
    private DynObjectValueItem[] getAvailableLocaleValues() {
391
        Locale[] locales = Locale.getAvailableLocales();
392
        Arrays.sort(locales, (Locale o1, Locale o2) -> {
393
            if (o1 == null) {
394
                return -1;
395
            }
396
            if (o2 == null) {
397
                return 1;
398
            }
399
            return o1.getDisplayName().compareToIgnoreCase(o2.getDisplayName());
400
        });
401
        DynObjectValueItem[] availableValues = new DynObjectValueItem[locales.length+1];
402
        availableValues[0] = new DynObjectValueItem("DEFAULT", "Default (use system locale)");
403
        for (int i = 0; i < locales.length; i++) {
404
            String theLabel = locales[i].getDisplayName();
405
            if(StringUtils.isBlank(theLabel)){
406
                theLabel = locales[i].toLanguageTag();
407
            }
408
            availableValues[i+1] = new DynObjectValueItem(locales[i], theLabel);
409
        }
410
        return availableValues;
411

  
412
    }
413

  
414

  
333 415
    @Override
334 416
    public String getSubtype() {
335 417
        return subtype;

Also available in: Unified diff