View Javadoc
1   package com.github.mygreen.supercsv.cellprocessor.conversion;
2   
3   import org.supercsv.cellprocessor.CellProcessorAdaptor;
4   import org.supercsv.cellprocessor.ift.CellProcessor;
5   import org.supercsv.cellprocessor.ift.StringCellProcessor;
6   import org.supercsv.util.CsvContext;
7   
8   /**
9    * 固定長にそろえる{@link CellProcessor}。
10   *
11   * @since 2.1
12   * @author T.TSUCHIE
13   *
14   */
15  public class MultiPad extends CellProcessorAdaptor implements StringCellProcessor {
16  
17      /**
18       * パディングのサイズ
19       */
20      private final int size;
21  
22      /**
23       * パディング文字
24       */
25      private final char padChar;
26  
27      /**
28       * 右詰めかどうか。
29       */
30      private final boolean rightAlign;
31  
32      /**
33       * 固定長を超える場合に切り出しをするかどうか。
34       */
35      private final boolean chopped;
36  
37      /**
38       * パディング処理の実装
39       */
40      private final PaddingProcessor paddingProcessor;
41  
42      /**
43       * コンストラクタ
44       *
45       * @param size パディングのサイズ
46       * @param padChar パディングする文字。
47       * @param rightAlign 右詰めするかどうか。
48       * @param chopped 処理対象の文字が固定長を超えている場合に、切り出すかどうか。
49       * @param paddingProcessor パディング処理の実装
50       * @throws IllegalArgumentException {@literal length <= 0.}
51       */
52      public MultiPad(final int size, final char padChar, final boolean rightAlign, final boolean chopped,
53              final PaddingProcessor paddingProcessor) {
54          super();
55  
56          checkPreconditions(size, paddingProcessor);
57  
58          this.size = size;
59          this.padChar = padChar;
60          this.rightAlign = rightAlign;
61          this.chopped = chopped;
62          this.paddingProcessor = paddingProcessor;
63      }
64  
65      /**
66       * コンストラクタ
67       *
68       * @param size パディングのサイズ
69       * @param padChar パディングする文字。
70       * @param rightAlign 右詰めするかどうか。
71       * @param chopped 処理対象の文字が固定長を超えている場合に、切り出すかどうか。
72       * @param paddingProcessor パディング処理の実装
73       * @param next チェインの中で呼ばれる次の{@link CellProcessor}.
74       * @throws IllegalArgumentException {@literal length <= 0.}
75       */
76      public MultiPad(final int size, final char padChar, final boolean rightAlign, final boolean chopped,
77              final PaddingProcessor paddingProcessor, final StringCellProcessor next) {
78          super(next);
79  
80          checkPreconditions(size, paddingProcessor);
81  
82          this.size = size;
83          this.padChar = padChar;
84          this.rightAlign = rightAlign;
85          this.chopped = chopped;
86          this.paddingProcessor = paddingProcessor;
87      }
88  
89      private static void checkPreconditions(final int size, final PaddingProcessor paddingProcessor) {
90  
91          if(size <= 0) {
92              throw new IllegalArgumentException(String.format("size should be > 0, but was %d.", size));
93          }
94  
95          if(paddingProcessor == null) {
96              throw new IllegalArgumentException("paddingProcessor should not be null.");
97          }
98  
99      }
100 
101     /**
102      * {@inheritDoc}
103      */
104     @Override
105     public <T> T execute(final Object value, final CsvContext context) {
106 
107         final String result = paddingProcessor.pad(value == null ? "" : (String) value,
108                 size, padChar, rightAlign, chopped);
109         return next.execute(result, context);
110 
111     }
112 
113     /**
114      * パディングのサイズを取得する。
115      * @return パディングのサイズ
116      */
117     public int getSize() {
118         return size;
119     }
120 
121     /**
122      * パディング文字を取得する。
123      * @return パディング文字
124      */
125     public char getPadChar() {
126         return padChar;
127     }
128 
129     /**
130      * 右詰めかどうかを取得する。
131      * @return 右詰めかどうか。
132      */
133     public boolean isRightAlign() {
134         return rightAlign;
135     }
136 
137     /**
138      * 固定長を超える場合に切り出しをするかどうか取得する。
139      * @return 固定長を超える場合に切り出しをするかどうか。
140      */
141     public boolean isChopped() {
142         return chopped;
143     }
144 
145     /**
146      * パディング処理の実装を取得する。
147      * @return パディング処理の実装
148      */
149     public PaddingProcessor getPaddingProcessor() {
150         return paddingProcessor;
151     }
152 
153 }