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 }