PropertyPath.java

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

  2. import java.io.Serializable;
  3. import java.util.ArrayList;
  4. import java.util.List;


  5. /**
  6.  * 解析済みのプロパティ式のオブジェクト。
  7.  *
  8.  * @since 1.0
  9.  * @author T.TSUCHIE
  10.  *
  11.  */
  12. public class PropertyPath implements Serializable {
  13.    
  14.     /** serialVersionUID */
  15.     private static final long serialVersionUID = -4273945900442385415L;
  16.    
  17.     /**
  18.      * 解析元のパス
  19.      */
  20.     private final String path;
  21.    
  22.     /**
  23.      * パスを解析してトークンに分解した結果。
  24.      */
  25.     private final List<Token> tokens;
  26.    
  27.     /**
  28.      * 解析元のパスを指定するコンストラクタ。
  29.      * @param path 解析元のパス
  30.      * @throws IllegalArgumentException path is null or empty.
  31.      */
  32.     public PropertyPath(final String path) {
  33.         ArgUtils.notEmpty(path, "path");
  34.         this.path = path;
  35.         this.tokens = new ArrayList<>();
  36.     }
  37.    
  38.     /**
  39.      * 解析元のパスを取得する。
  40.      * @return
  41.      */
  42.     public String getPath() {
  43.         return path;
  44.     }
  45.    
  46.     /**
  47.      * トークンを追加する。
  48.      * @param token
  49.      */
  50.     public void add(final Token token) {
  51.         this.tokens.add(token);
  52.     }
  53.    
  54.     /**
  55.      * トークンに分割した結果を取得する。
  56.      * @return
  57.      */
  58.     public List<Token> getPathAsToken() {
  59.         return new ArrayList<>(tokens);
  60.     }
  61.    
  62.     /**
  63.      * パスを分割したもの。
  64.      * @since 1.0
  65.      * @author T.TSUCHIE
  66.      *
  67.      */
  68.     public static class Token implements Serializable {
  69.        
  70.         /** serialVersionUID */
  71.         private static final long serialVersionUID = 2281725403723210214L;
  72.        
  73.         /** トークンの文字 */
  74.         private final String token;
  75.        
  76.         /**
  77.          * エスケープ文字を除去したした文字
  78.          */
  79.         private final String value;
  80.        
  81.         public Token(String token) {
  82.             this.token = token;
  83.             this.value = Utils.removeEscapeChar(token, '\\');
  84.         }
  85.        
  86.         /**
  87.          * トークンの値を取得する
  88.          * @return
  89.          */
  90.         public String getToken() {
  91.             return token;
  92.         }
  93.        
  94.         /**
  95.          * エスケープ文字を取得する。
  96.          * @return
  97.          */
  98.         public String getValue() {
  99.             return value;
  100.         }
  101.        
  102.         /**
  103.          * 括弧で囲まれた条件の書式'[キー]'を表すトークン。
  104.          */
  105.         public static class Key extends Token {
  106.            
  107.             /** serialVersionUID */
  108.             private static final long serialVersionUID = -5951809427315756202L;

  109.             public Key(String value) {
  110.                 super(value);
  111.             }
  112.            
  113.             /**
  114.              * 括弧を除いた条件の値の取得。
  115.              * @return
  116.              */
  117.             public String getKey() {
  118.                 int length = getValue().length();
  119.                 return getValue().substring(1, length-1);
  120.             }
  121.            
  122.         }
  123.        
  124.         /**
  125.          * パスの区切り文字"."を表すトークン。
  126.          *
  127.          */
  128.         public static class Separator extends Token {
  129.            
  130.             /** serialVersionUID */
  131.             private static final long serialVersionUID = -9021975741257702192L;
  132.            
  133.             public Separator() {
  134.                 super(".");
  135.             }
  136.            
  137.         }
  138.        
  139.         /**
  140.          * プロパティ名を表すトークン。
  141.          *
  142.          */
  143.         public static class Name extends Token {
  144.            
  145.             /** serialVersionUID */
  146.             private static final long serialVersionUID = -1196971215805919815L;
  147.            
  148.             public Name(String value) {
  149.                 super(value);
  150.             }
  151.            
  152.         }
  153.     }
  154.    
  155. }