Clover coverage report - brownies library - 1.0-beta-1 Coverage timestamp: 月 8 16 2004 17:14:42 GMT+09:00 FRAMES NO FRAMES |
file stats: | LOC: | 274 |  | Methods: | 26
| NCLOC: | 181 |  | Classes: | 3
30 day Evaluation Version distributed via the Maven Jar Repository. Clover is not free. You have 30 days to evaluate it. Please visit http://www.thecortex.net/clover to obtain a licensed version of Clover
Source file | Conditionals | Statements | Methods | TOTAL
JpDateFormat.java | 84.6% | 91.7% | 88.5% | 89.5% |

1 |  |
     /*
2 |  |
      * Joey and its relative products are published under the terms
3 |  |
      * of the Apache Software License.
4 |  |
      */
5 |  |
     package org.asyrinx.brownie.core.util.jp;
6 |  |
7 |  |
     import java.text.DateFormat;
8 |  |
     import java.text.DateFormatSymbols;
9 |  |
     import java.text.FieldPosition;
10 |  |
     import java.text.ParsePosition;
11 |  |
     import java.text.SimpleDateFormat;
12 |  |
     import java.util.Calendar;
13 |  |
     import java.util.Date;
14 |  |
     import java.util.Iterator;
15 |  |
     import java.util.Locale;
16 |  |
17 |  |
     import org.asyrinx.brownie.core.lang.StringUtils;
18 |  |
     import org.asyrinx.brownie.core.util.Era;
19 |  |
     import org.asyrinx.brownie.core.util.SimpleDate;
20 |  |
21 |  |
     /**
22 |  |
      * @author Akima
23 |  |
      */
24 |  |
     public class JpDateFormat extends DateFormat {
25 |  |
26 |  |
         public static final String FORMAT_DATE_TIME_1 = "jEEjyy年MM月dd日 hh時mm分";
27 |  |
28 |  |
         public static final String FORMAT_DATE_TIME_2 = "jEjyy年MM月dd日 hh時mm分";
29 |  |
30 |  |
         public static final String FORMAT_DATE_TIME_3 = "jejyy/MM/dd hh:mm";
31 |  |
32 |  |
         public static final String FORMAT_DATE_TIME_4 = "jEjyy/MM/dd hh:mm";
33 |  |
34 |  |
         public static final String FORMAT_DATE_1 = "jEEjyy年MM月dd日";
35 |  |
36 |  |
         public static final String FORMAT_DATE_2 = "jEjyy年MM月dd日";
37 |  |
38 |  |
         public static final String FORMAT_DATE_3 = "jejyy/MM/dd";
39 |  |
40 |  |
         public static final String FORMAT_DATE_4 = "jEjyy/MM/dd";
41 |  |
42 |  |
         /**
43 |  |
          * Constructor for JpDateFormat.
44 |  |
          *
45 |  |
          * @param pattern
46 |  |
          */
47 | 4 |
         public JpDateFormat(String pattern) {
48 | 4 |
             this(pattern, Locale.getDefault());
49 |  |
         }
50 |  |
51 |  |
         /**
52 |  |
          * Constructor for JpDateFormat.
53 |  |
          *
54 |  |
          * @param pattern
55 |  |
          * @param loc
56 |  |
          */
57 | 4 |
         public JpDateFormat(String pattern, Locale locale) {
58 | 4 |
             this(pattern, new DateFormatSymbols(locale));
59 |  |
         }
60 |  |
61 |  |
         /**
62 |  |
          * Constructor for JpDateFormat.
63 |  |
          *
64 |  |
          * @param pattern
65 |  |
          * @param dateFormatSymbols
66 |  |
          */
67 | 4 |
         public JpDateFormat(String pattern, DateFormatSymbols dateFormatSymbols) {
68 | 4 |
             super();
69 | 4 |
             this.pattern = pattern;
70 | 4 |
             this.dateFormatSymbols = dateFormatSymbols;
71 |  |
         }
72 |  |
73 |  |
         private String pattern;
74 |  |
75 |  |
         private DateFormatSymbols dateFormatSymbols;
76 |  |
77 | 12 |
         public String toPattern() {
78 | 12 |
             return this.pattern;
79 |  |
         }
80 |  |
81 | 0 |
         public void applyPattern(String p) {
82 | 0 |
             this.pattern = p;
83 |  |
         }
84 |  |
85 |  |
         /**
86 |  |
          * @return
87 |  |
          */
88 | 0 |
         public DateFormatSymbols getDateFormatSymbols() {
89 | 0 |
             return dateFormatSymbols;
90 |  |
         }
91 |  |
92 |  |
         /**
93 |  |
          * @param symbols
94 |  |
          */
95 | 0 |
         public void setDateFormatSymbols(DateFormatSymbols symbols) {
96 | 0 |
             dateFormatSymbols = symbols;
97 |  |
         }
98 |  |
99 | 8 |
         private DateFormat newDateFormat(String p) {
100 | 8 |
             return new SimpleDateFormat(p, dateFormatSymbols);
101 |  |
         }
102 |  |
103 |  |
         /**
104 |  |
          *
105 |  |
          * @param date
106 |  |
          * @param toAppendTo
107 |  |
          * @param pos
108 |  |
          * @return @see java.text.DateFormat#format(java.util.Date,
109 |  |
          *           java.lang.StringBuffer, java.text.FieldPosition)
110 |  |
          */
111 | 4 |
         public StringBuffer format(Date date, StringBuffer toAppendTo,
112 |  |
                 FieldPosition pos) {
113 | 4 |
             if (date == null)
114 | 0 |
                 throw new NullPointerException("failed to format. date was null.");
115 | 4 |
             final Era era = JpEra.ERA_GROUP.getEra(new SimpleDate(date));
116 | 4 |
             final StringBuffer patternBuf = new StringBuffer(toPattern());
117 | 4 |
             for (int i = 0; i < PATTERNS.length; i++) {
118 | 16 |
                 final JpPattern jpPattern = PATTERNS[i];
119 | 16 |
                 if (jpPattern.contained(patternBuf.toString()))
120 | 6 |
                     jpPattern.format(patternBuf, era, date);
121 |  |
             }
122 | 4 |
             final DateFormat innerFormat = newDateFormat(patternBuf.toString());
123 | 4 |
             return innerFormat.format(date, toAppendTo, pos);
124 |  |
         }
125 |  |
126 |  |
         /**
127 |  |
          *
128 |  |
          * @param text
129 |  |
          * @param pos
130 |  |
          * @return @see java.text.DateFormat#parse(java.lang.String,
131 |  |
          *           java.text.ParsePosition)
132 |  |
          */
133 | 4 |
         public Date parse(String text, ParsePosition pos) {
134 | 4 |
             final StringBuffer patternBuf = new StringBuffer(toPattern());
135 | 4 |
             final StringBuffer textBuf = new StringBuffer(text);
136 | 4 |
             final JpEraPattern eraPattern = findEraPattern(toPattern(), pos
137 |  |
                     .getIndex());
138 | 4 |
             final Era era = (eraPattern == null) ? null : eraPattern.findEra(
139 |  |
                     textBuf, patternBuf, pos.getIndex());
140 | 4 |
             for (int i = 0; i < PATTERNS_YEAR.length; i++)
141 | 4 |
                 StringUtils.replace(patternBuf, PATTERNS_YEAR[i].pattern, "yyyy");
142 | 4 |
             final DateFormat innerFormat = newDateFormat(patternBuf.toString());
143 | 4 |
             final Calendar cal = Calendar.getInstance();
144 | 4 |
             cal.set(Calendar.YEAR, 0);
145 | 4 |
             final Date superResult = innerFormat.parse(textBuf.toString(), pos);
146 | 4 |
             if (superResult != null)
147 | 4 |
                 cal.setTime(superResult);
148 | 4 |
             if (era != null)
149 | 3 |
                 cal.set(Calendar.YEAR, era.toAnnoDomini(cal.get(Calendar.YEAR)));
150 | 4 |
             return cal.getTime();
151 |  |
         }
152 |  |
153 | 4 |
         private JpEraPattern findEraPattern(String text, int position) {
154 | 4 |
             for (int i = 0; i < PATTERNS_ERA.length; i++) {
155 | 9 |
                 final JpEraPattern eraPattern = PATTERNS_ERA[i];
156 | 9 |
                 int pos = text.indexOf(eraPattern.pattern, position);
157 | 9 |
                 if (pos > -1)
158 | 3 |
                     return PATTERNS_ERA[i];
159 |  |
             }
160 | 1 |
             return null;
161 |  |
         }
162 |  |
163 |  |
         static public final JpEraPattern ERA_ALPH_SHORT = new JpEraPattern("je") {
164 | 1 |
             public boolean needSingleQuote() {
165 | 1 |
                 return true;
166 |  |
             }
167 |  |
168 | 4 |
             protected String toEraStr(Era era) {
169 | 4 |
                 return era.getFirstLetter();
170 |  |
             }
171 |  |
         };
172 |  |
173 |  |
         static public final JpEraPattern ERA_KANJI_SHORT = new JpEraPattern("jE") {
174 | 1 |
             public boolean needSingleQuote() {
175 | 1 |
                 return true;
176 |  |
             }
177 |  |
178 | 4 |
             protected String toEraStr(Era era) {
179 | 4 |
                 return era.getCaptionShort();
180 |  |
             }
181 |  |
         };
182 |  |
183 |  |
         static public final JpEraPattern ERA_KANJI_LONG = new JpEraPattern("jEE") {
184 | 1 |
             public boolean needSingleQuote() {
185 | 1 |
                 return true;
186 |  |
             }
187 |  |
188 | 5 |
             protected String toEraStr(Era era) {
189 | 5 |
                 return era.getCaption();
190 |  |
             }
191 |  |
         };
192 |  |
193 |  |
         static public final JpPattern YEAR_NUMERIC = new JpPattern("jyy") {
194 | 3 |
             public String newString(Era era, Date d) {
195 | 3 |
                 return String
196 |  |
                         .valueOf(JpEra.ERA_GROUP.getEraYear(new SimpleDate(d)));
197 |  |
             }
198 |  |
199 | 3 |
             public boolean needSingleQuote() {
200 | 3 |
                 return false;
201 |  |
             }
202 |  |
         };
203 |  |
204 |  |
         static private JpPattern[] PATTERNS = new JpPattern[] { ERA_ALPH_SHORT,
205 |  |
                 ERA_KANJI_LONG, ERA_KANJI_SHORT, YEAR_NUMERIC, };
206 |  |
207 |  |
         static private JpEraPattern[] PATTERNS_ERA = new JpEraPattern[] {
208 |  |
                 ERA_ALPH_SHORT, ERA_KANJI_LONG, ERA_KANJI_SHORT };
209 |  |
210 |  |
         static private JpPattern[] PATTERNS_YEAR = new JpPattern[] { YEAR_NUMERIC };
211 |  |
212 |  |
     }
213 |  |
214 |  |
     abstract class JpPattern {
215 |  |
         protected String pattern;
216 |  |
217 | 4 |
         public JpPattern(String pattern) {
218 | 4 |
             super();
219 | 4 |
             this.pattern = pattern;
220 |  |
         }
221 |  |
222 | 16 |
         public boolean contained(String target) {
223 | 16 |
             return (target.indexOf(pattern) > -1);
224 |  |
         }
225 |  |
226 | 6 |
         public void format(StringBuffer value, Era era, Date d) {
227 | 6 |
             StringUtils.replace(value, this.pattern, newPattern(era, d));
228 |  |
         }
229 |  |
230 | 6 |
         private String newPattern(Era era, Date d) {
231 | 6 |
             String result = newString(era, d);
232 | 6 |
             if (needSingleQuote()) {
233 | 3 |
                 result = StringUtils.toQuoted(result, '\'');
234 |  |
             }
235 | 6 |
             return result;
236 |  |
         }
237 |  |
238 |  |
         abstract public boolean needSingleQuote();
239 |  |
240 |  |
         abstract public String newString(Era era, Date d);
241 |  |
     }
242 |  |
243 |  |
     abstract class JpEraPattern extends JpPattern {
244 | 3 |
         public JpEraPattern(String pattern) {
245 | 3 |
             super(pattern);
246 |  |
         }
247 |  |
248 | 3 |
         public String newString(Era era, Date d) {
249 | 3 |
             return toEraStr(era);
250 |  |
         }
251 |  |
252 | 3 |
         public Era findEra(StringBuffer textBuf, StringBuffer patternBuf,
253 |  |
                 int textIndex) {
254 | 3 |
             if (textBuf.length() < 1)
255 | 0 |
                 return null;
256 | 3 |
             int eraIndex = patternBuf.toString().indexOf(pattern) + textIndex;
257 | 3 |
             final Iterator iterator = JpEra.ERA_GROUP.getEras(Locale.JAPAN)
258 |  |
                     .iterator();
259 | 7 |
             while (iterator.hasNext()) {
260 | 7 |
                 final Era result = (Era) iterator.next();
261 | 7 |
                 final String val = toEraStr(result);
262 | 7 |
                 final String textSub = textBuf.toString().substring(textIndex,
263 |  |
                         textIndex + val.length());
264 | 7 |
                 if (val.equals(textSub)) {
265 | 3 |
                     patternBuf.delete(eraIndex, eraIndex + pattern.length());
266 | 3 |
                     textBuf.delete(eraIndex, eraIndex + toEraStr(result).length());
267 | 3 |
                     return result;
268 |  |
                 }
269 |  |
             }
270 | 0 |
             return null;
271 |  |
         }
272 |  |
273 |  |
         abstract protected String toEraStr(Era era);
274 |  |
     }