View Javadoc
1   package com.github.mygreen.cellformatter;
2   
3   import java.util.Date;
4   import java.util.TimeZone;
5   
6   import com.github.mygreen.cellformatter.lang.MSColor;
7   
8   
9   /**
10   * フォーマット結果を保持するクラス。
11   * <p>条件に色が付与されている場合などの情報を保持する。
12   * 
13   * @version 0.6
14   * @author T.TSUCHIE
15   *
16   */
17  public class CellFormatResult {
18      
19      /**
20       * フォーマットする際に使用した値
21       */
22      private Object value;
23      
24      /**
25       * フォーマット後の値
26       */
27      private String text;
28      
29      /**
30       * フォーマット後の色。nullの場合がある。
31       */
32      private MSColor textColor;
33      
34      /**
35       * 一致したExcelのセクションの書式。
36       */
37      private String sectionPattern;
38      
39      /**
40       * フォーマットした際のセルの種類
41       */
42      private FormatCellType cellType;
43      
44      /**
45       * フォーマット対象の値を取得する。
46       * <p>具体的に値を取得する際には、キャストして利用する。
47       * @return フォーマット対象の値。
48       */
49      public Object getValue() {
50          return value;
51      }
52      
53      /**
54       * フォーマット対象の値をdouble型として取得する。
55       * @return 数値の値を返す。{@link #isNumber()}の値が{@literal true}の時に値が取得可能。
56       * @throws ClassCastException 書式が一致しない場合
57       */
58      public double getValueAsDoulbe() {
59          return (double) value;
60      }
61      
62      /**
63       * フォーマット対象の値を日時型として取得する。
64       * @return タイムゾーンが考慮された日時です。タイムゾーンはデフォルトです。
65       *         {@link #isDate()}の値が{@literal true}の時に値が取得可能。
66       * @throws ClassCastException 書式が一致しない場合
67       */
68      public Date getValueAsDate() {
69          return getValueAsDate(null);
70      }
71      
72      /**
73       * タイムゾーンを指定して、フォーマット対象の値を日時型として取得する。
74       * @since 0.6
75       * @param tz タイムゾーン。値がnullの場合は、デフォルトを使用します。
76       * @return タイムゾーンを考慮した日時オブジェクト。
77       *          {@link #isDate()}の値が{@literal true}の時に値が取得可能。
78       * @throws ClassCastException 書式が一致しない場合
79       */
80      public Date getValueAsDate(final TimeZone tz) {
81          long time = ((Date) value).getTime();
82          long offset;
83          if(tz == null) {
84              offset = TimeZone.getDefault().getRawOffset();
85          } else {
86              offset = tz.getRawOffset();
87          }
88          
89          return new Date(time - offset);
90      }
91      
92      /**
93       * フォーマット対象の値を文字列型として取得する。
94       * @return 文字列の値。{@link #isText()}の値が{@literal true}の時に値が取得可能。
95       * @throws ClassCastException 書式が一致しない場合
96       */
97      public String getValueAsString() {
98          return (String) value;
99      }
100     
101     /**
102      * フォーマット対象の値をブール型として取得する。
103      * @return {@link #isBoolean()}の値が{@literal true}の時に値が取得可能。
104      * @throws ClassCastException 書式が一致しない場合
105      */
106     public boolean getValueAsBoolean() {
107         return (boolean) value;
108     }
109     
110     /**
111      * 値がブランクかどうか。
112      * @return true:空。
113      */
114     public boolean isBlank() {
115         return getCellType() == FormatCellType.Blank;
116     }
117     
118     /**
119      * 値がブール値かどうか
120      * @return true:ブール型の場合
121      */
122     public boolean isBoolean() {
123         return getCellType() == FormatCellType.Boolean;
124     }
125     
126     /**
127      * 値が日付型かどうか。
128      * @return true:日時型の場合。
129      */
130     public boolean isDate() {
131         return getCellType() == FormatCellType.Date;
132     }
133     
134     /**
135      * 値が数値型かどうか。
136      * @return true:数値型の場合。
137      */
138     public boolean isNumber() {
139         return getCellType() == FormatCellType.Number;
140     }
141     
142     /**
143      * 値が文字列型かどうか。
144      * @return true:文字列型の場合。
145      */
146     public boolean isText() {
147         return getCellType() == FormatCellType.Text;
148     }
149     
150     /**
151      * 値がエラー型かどうか。
152      * @return true:エラーの場合。
153      */
154     public boolean isError() {
155         return getCellType() == FormatCellType.Error;
156     }
157     
158     /**
159      * フォーマット対象の値を設定する。
160      * @param value 値。
161      */
162     public void setValue(Object value) {
163         this.value = value;
164     }
165     
166     /**
167      * 文字色を取得する。
168      * @return 書式に色が適用されていない場合は、nullを返す。
169      */
170     public MSColor getTextColor() {
171         return textColor;
172     }
173     
174     /**
175      * 書式の文字色を設定する。
176      * @param textColor 文字色。
177      */
178     public void setTextColor(MSColor textColor) {
179         this.textColor = textColor;
180     }
181     
182     /**
183      * フォーマットした文字列を取得する
184      * @return フォーマットした文字列。
185      */
186     public String getText() {
187         return text;
188     }
189     
190     /**
191      * フォーマットした文字列を設定する
192      * @param text
193      */
194     public void setText(String text) {
195         this.text = text;
196     }
197     
198     /**
199      * フォーマットの際、一致した書式内のセクションの書式を返す。
200      * @return 一致したセクションの書式。
201      */
202     public String getSectionPattern() {
203         return sectionPattern;
204     }
205     
206     /**
207      * フォーマットの際、一致した書式内のセクションの書式を設定する
208      * @param sectionPattern 一致したセクションの書式。
209      */
210     public void setSectionPattern(String sectionPattern) {
211         this.sectionPattern = sectionPattern;
212     }
213     
214     
215     /**
216      * セルの種類を取得する
217      * <p>各メソッド{@link #isText()}などのisXXX()メソッドの判定に利用する。
218      * @return フォーマットした結果のセルの種類。
219      */
220     public FormatCellType getCellType() {
221         return cellType;
222     }
223     
224     /**
225      * セルの種類を設定する。
226      * @param cellType
227      */
228     public void setCellType(FormatCellType cellType) {
229         this.cellType = cellType;
230     }
231 }