BooleanFormatter.java

  1. package com.gh.mygreen.xlsmapper.textformatter;

  2. import java.util.Collections;
  3. import java.util.HashMap;
  4. import java.util.LinkedHashSet;
  5. import java.util.Map;
  6. import java.util.Set;

  7. import com.github.mygreen.cellformatter.lang.ArgUtils;

  8. /**
  9.  * Booleanのフォーマッタ。
  10.  *
  11.  * @since 2.0
  12.  * @author T.TSUCHIE
  13.  *
  14.  */
  15. public class BooleanFormatter implements TextFormatter<Boolean> {
  16.    
  17.     private static final String[] DEFAULT_READ_TRUE_VALUES = new String[] {"true", "1", "yes", "on", "y", "t"};
  18.     private static final String[] DEFAULT_READ_FALSE_VALUES = new String[] {"false", "0", "no", "off", "f", "n"};
  19.    
  20.     private static final String DEFAULT_WRITE_TRUE_VALUE = "true";
  21.     private static final String DEFAULT_WRITE_FALSE_VALUE = "false";
  22.    
  23.     private final Set<String> loadTrueValues;
  24.    
  25.     private final Set<String> loadFalseValues;
  26.    
  27.     private final String saveTrueValue;
  28.    
  29.     private final String saveFalseValue;
  30.    
  31.     private boolean ignoreCase;
  32.    
  33.     private boolean failToFalse;
  34.    
  35.     public BooleanFormatter() {
  36.         this(DEFAULT_READ_TRUE_VALUES, DEFAULT_READ_FALSE_VALUES,
  37.                 DEFAULT_WRITE_TRUE_VALUE, DEFAULT_WRITE_FALSE_VALUE,
  38.                 true, false);
  39.     }
  40.    
  41.     public BooleanFormatter(final String[] loadTrueValues, final String[] loadFalseValues,
  42.             final String saveTrueValue, final String saveFalseValue,
  43.             final boolean ignoreCase, boolean failToFalse) {
  44.        
  45.         ArgUtils.notNull(loadTrueValues, "loadTrueValues");
  46.         ArgUtils.notNull(loadFalseValues, "loadFalseValues");
  47.        
  48.         this.loadTrueValues = toSet(loadTrueValues);
  49.         this.loadFalseValues = toSet(loadFalseValues);
  50.         this.saveTrueValue = saveTrueValue;
  51.         this.saveFalseValue = saveFalseValue;
  52.         this.ignoreCase = ignoreCase;
  53.         this.failToFalse = failToFalse;
  54.     }
  55.    
  56.     private static Set<String> toSet(final String[] values) {
  57.        
  58.         Set<String> set = new LinkedHashSet<>();
  59.         Collections.addAll(set, values);
  60.         return Collections.unmodifiableSet(set);
  61.        
  62.     }
  63.    
  64.     @Override
  65.     public Boolean parse(final String text) {
  66.        
  67.         if(contains(loadTrueValues, text, ignoreCase) ) {
  68.             return Boolean.TRUE;
  69.            
  70.         } else if(contains(loadFalseValues, text, ignoreCase) ) {
  71.             return Boolean.FALSE;
  72.            
  73.         } else {
  74.             if(failToFalse) {
  75.                 return Boolean.FALSE;
  76.             } else {
  77.                 final Map<String, Object> vars = new HashMap<>();
  78.                 vars.put("trueValues", loadTrueValues);
  79.                 vars.put("falseValues", loadFalseValues);
  80.                
  81.                 vars.put("ignoreCase", ignoreCase);
  82.                 vars.put("failToFalse", failToFalse);
  83.                
  84.                 throw new TextParseException(text, Boolean.class, vars);
  85.             }
  86.         }
  87.     }
  88.    
  89.     private static boolean contains(final Set<String> set, final String value, final boolean ignoreCase) {
  90.        
  91.         if(ignoreCase) {
  92.             for(String element : set) {
  93.                 if(element.equalsIgnoreCase(value)) {
  94.                     return true;
  95.                 }
  96.             }
  97.            
  98.             return false;
  99.         } else {
  100.             return set.contains(value);
  101.         }
  102.        
  103.     }
  104.    
  105.     @Override
  106.     public String format(final Boolean object) {
  107.        
  108.         return object ? saveTrueValue : saveFalseValue;
  109.        
  110.     }
  111.    
  112.     public boolean isIgnoreCase() {
  113.         return ignoreCase;
  114.     }
  115.    
  116.     public void setIgnoreCase(boolean ignoreCase) {
  117.         this.ignoreCase = ignoreCase;
  118.     }
  119.    
  120.     public boolean isFailToFalse() {
  121.         return failToFalse;
  122.     }
  123.    
  124.     public void setFailToFalse(boolean failToFalse) {
  125.         this.failToFalse = failToFalse;
  126.     }
  127.    
  128.     public Set<String> getLoadTrueValues() {
  129.         return loadTrueValues;
  130.     }
  131.    
  132.     public Set<String> getLoadFalseValues() {
  133.         return loadFalseValues;
  134.     }
  135.    
  136.     public String getSaveTrueValue() {
  137.         return saveTrueValue;
  138.     }
  139.    
  140.     public String getSaveFalseValue() {
  141.         return saveFalseValue;
  142.     }
  143. }