001 /*
002 * Copyright (c) 2009 The openGion Project.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
013 * either express or implied. See the License for the specific language
014 * governing permissions and limitations under the License.
015 */
016 package org.opengion.plugin.view;
017
018 import org.opengion.hayabusa.common.HybsSystem;
019 import org.opengion.fukurou.util.StringUtil;
020 import org.opengion.fukurou.util.XHTMLTag;
021 import org.opengion.hayabusa.html.AbstractViewForm;
022 import org.opengion.hayabusa.html.ViewCalendarParam;
023
024 import java.util.Calendar;
025
026 /**
027 * ?‘ヶ月å?ã®ã‚«ãƒ¬ãƒ³ãƒ??å½¢å¼ã§ã€æ¤œç´¢çµæžœã‚’表示ã™ã‚‹ã€ã‚«ãƒ¬ãƒ³ãƒ??表示クラスã§ã™ã?
028 *
029 * AbstractViewForm ã«ã‚ˆã‚Šã€setter/getterメソãƒ?ƒ‰ã®ãƒ?ƒ•ォルト実è£?‚’æä¾›ã—ã¦ã?¾ã™ã?
030 * å„HTMLã®ã‚¿ã‚°ã«å¿?¦ãª setter/getterメソãƒ?ƒ‰ã®ã¿?Œè¿½åŠ?®šç¾©ã—ã¦ã?¾ã™ã?
031 *
032 * AbstractViewForm を継承ã—ã¦ã?‚‹ç‚º,ãƒã‚±ãƒ¼ãƒ«ã«å¿œã˜ãŸãƒ©ãƒ™ãƒ«ã‚’å?力ã•ã›ã‚‹äº‹ãŒå‡ºæ¥ã¾ã™ã?
033 *
034 * @og.group ç”»é¢è¡¨ç¤º
035 *
036 * @version 4.0
037 * @author Kazuhiko Hasegawa
038 * @since JDK5.0,
039 */
040 public class ViewForm_HTMLCalendar extends AbstractViewForm {
041 //* ã“ã?プãƒã‚°ãƒ©ãƒ??VERSIONæ–?—å?ã‚’è¨å®šã—ã¾ã™ã? {@value} */
042 private static final String VERSION = "5.1.6.0 (2010/05/01)" ;
043
044 private static final String[] WEEK_ja = { "æ—¥" ,"æœ? ,"ç«" ,"æ°´" ,"木" ,"é‡? ,"åœ? ,"æ—¥" ,"æœ? };
045 private static final String[] WEEK_en = { "SUN","MON","TUE","WED","THU","FRI","SAT","SUN","MON" };
046 private static final String[] WEEK_MK = { "SUN","", "", "", "", "", "SAT","SUN","" };
047
048 private String[] week ;
049 private String[] viewKeys ; // カレンãƒ?‚’æŒ?®šã™ã‚‹ã‚ーé…å? // 3.6.0.0 (2004/09/17)
050 private String ymKey ; // 年月ã?カラãƒ?
051 private String dayKey ; // 休日(0:通常ã€?:休日)ã®ã‚«ãƒ©ãƒ?
052 private String valKey ; // カレンãƒ?«è¡¨ç¤ºã™ã‚‹å€¤ã®ã‚«ãƒ©ãƒ?
053 private boolean valueBrFlag ; // 日付ã‘ã¨å€¤ã®é–“ã«ã€BRã‚¿ã‚°ã‚’å?れるã‹ã©ã?‹
054 private int firstWeek ; // 曜日ã®é–‹å§?0:æ—¥æ›?1:月曜)
055 private int columnSize ; // カレンãƒ??横方å‘ã?ç¹°ã‚Šè¿”ã—æ•° // 3.6.0.0 (2004/09/17)
056
057 // 4.3.4.4 (2009/01/01)
058 // /**
059 // * ãƒ?ƒ•ォルトコンストラクター
060 // *
061 // */
062 // public ViewForm_HTMLCalendar() {
063 // super();
064 // }
065
066 /**
067 * DBTableModel ã‹ã‚‰ HTMLæ–?—å?を作æ?ã—ã¦è¿”ã—ã¾ã™ã?
068 * startNo(表示開始ä½ç½®)ã‹ã‚‰ã€pageSize(表示件数)ã¾ã§ã®Viewæ–?—å?を作æ?ã—ã¾ã™ã?
069 * 表示残りãƒ??ã‚¿ã?pageSize 以下ã?å ´åˆã?,残りã®ãƒ??ã‚¿ã‚’ã™ã¹ã¦å‡ºåŠ›ã—ã¾ã™ã?
070 *
071 * @og.rev 3.5.2.1 (2003/10/27) 属æ?å€¤ã®æŒ?®šã?シングルクオートをãƒ?ƒ–ルクオートã«å¤‰æ›´ã€?
072 * @og.rev 3.6.0.0 (2004/09/17) è¤?•°ã‚«ãƒ¬ãƒ³ãƒ?«å¯¾å¿?
073 * @og.rev 3.6.0.5 (2004/10/18) calenderParam ã® viewKeys ãƒã‚°å¯¾å¿œã?
074 * @og.rev 3.7.0.1 (2005/01/31) 全件ãƒã‚§ãƒ?‚¯ã‚³ãƒ³ãƒˆãƒãƒ¼ãƒ«å‡¦ç?¤‰æ›´
075 *
076 * @param startNo 表示開始ä½ç½®
077 * @param pageSize 表示件数
078 *
079 * @return DBTableModelã‹ã‚‰ä½œæ?ã•れã?HTMLæ–?—å?
080 */
081 public String create( final int startNo, final int pageSize ) {
082 if( getRowCount() == 0 ) { return ""; } // 暫定å?ç½®
083
084 paramInit();
085
086 int lastNo = getLastNo( startNo, pageSize );
087
088 StringBuilder out = new StringBuilder( HybsSystem.BUFFER_LARGE );
089 out.append( "<table><tr>" ).append( HybsSystem.CR );
090
091 boolean onlyOne = ( ( lastNo - startNo ) == 1 ); // äº’æ›æ€§ã®ãŸã‚ã€?¼‘ä»¶ã®å‡¦ç??ã¿å¤‰æ›´
092
093 // 3.7.0.1 (2005/01/31) 全件ãƒã‚§ãƒ?‚¯ã‚³ãƒ³ãƒˆãƒãƒ¼ãƒ«å‡¦ç?¤‰æ›´
094 if( ! onlyOne && isUseCheckControl() && "checkbox".equals( getSelectedType() ) ) {
095 out.append( "<tr><td>" ).append( getAllCheckControl() ).append( "</td></tr>");
096 }
097
098 for( int row=startNo; row<lastNo; row++ ) {
099 out.append( "<td valign=\"top\">" );
100
101 if( isWritable( row ) ) {
102 if( onlyOne ) {
103 out.append( XHTMLTag.hidden( HybsSystem.ROW_SEL_KEY,String.valueOf( row ) ) );
104 out.append( HybsSystem.CR );
105 }
106 else {
107 out.append( "<input type=\"" ).append( getSelectedType() ).append( "\" " );
108 out.append( "name=\"" ).append( HybsSystem.ROW_SEL_KEY ).append( "\" " );
109 if( isChecked( row ) ) { out.append( " checked=\"checked\"" ); }
110 out.append( "value=\"" ).append( row ).append( "\" />" );
111 }
112 }
113
114 // 3.6.0.5 (2004/10/18)
115 for( int col = 0; col < viewKeys.length; col++ ) {
116 if( "_".equals( viewKeys[col] ) ) { continue; }
117 int newCol = getColumnNo( viewKeys[col] );
118 out.append("<span id=\"label\">");
119 out.append( getColumnLabel( newCol ) );
120 out.append( ":</span>" );
121 out.append( getValueLabel(row,newCol) );
122 out.append( " " );
123 }
124 out.append( HybsSystem.BR );
125
126 out.append( makeCalendarData( row ) );
127 out.append( "</td>" );
128 if( (row+1) % columnSize == 0 ) {
129 out.append( "</tr><tr>" ).append( HybsSystem.CR );
130 }
131 }
132 out.append( "</tr></table>" ).append( HybsSystem.CR );
133
134 return out.toString();
135 }
136
137 /**
138 * DBTableModel ã®æŒ?®šã?行番å·ã‚ˆã‚Šã€ã‚«ãƒ¬ãƒ³ãƒ??HTMLæ–?—å?を作æ?ã—ã¦è¿”ã—ã¾ã™ã?
139 *
140 * @og.rev 3.6.0.0 (2004/09/17) create( int startNo, int pageSize ) ã®ãƒã‚¸ãƒ?‚¯ã‚’ç§»å‹?
141 * @og.rev 3.6.0.5 (2004/10/18) å°åˆ·æ™‚ã?罫線å?力関連機è?ã®è¿½åŠ??id 属æ?ã‚’å?力ã—ã¾ã™ã?
142 *
143 * @param row æŒ?®šã?行番å·
144 *
145 * @return æŒ?®šã?行番å·ã®ã‚«ãƒ¬ãƒ³ãƒ??HTMLæ–?—å?
146 */
147 private String makeCalendarData( final int row ) {
148 String yyyymm = getValue( row,getColumnNo( ymKey ));
149 Calendar currentCal = getCalendar( yyyymm );
150
151 StringBuilder out = new StringBuilder( HybsSystem.BUFFER_LARGE );
152
153 out.append( "<table id=\"viewCalendar\" border=\"0\" cellpadding=\"1\" cellspacing=\"2\">" ).append( HybsSystem.CR ); // 3.6.0.5 (2004/10/18)
154 out.append( " <tr><td class=\"titleStyle\" colspan=\"7\">" ).append( HybsSystem.CR );
155 out.append( getValueLabel( row,getColumnNo( ymKey )) ).append( HybsSystem.CR );
156 out.append( " </td></tr>" ).append( HybsSystem.CR );
157
158 // ä»Šæœˆã®æœ?µ‚æ—¥
159 int daysInMonth = currentCal.getActualMaximum(Calendar.DAY_OF_MONTH);
160 // カレンãƒ??ã®é€±ã®åˆã‚ã‚’è¨å®šã™ã‚‹ã?月曜開始ã?カレンãƒ??を作æ?ã™ã‚‹ã¨ãã«åˆ©ç”¨
161 currentCal.setFirstDayOfWeek( Calendar.SUNDAY + firstWeek );
162
163 // 週を表ã™ç•ªå· ?~ï¼?ã®é–?
164 int culDay = (currentCal.get(Calendar.DAY_OF_WEEK)
165 + ( 7 - currentCal.getFirstDayOfWeek() )) % 7 ;
166
167 // 曜日æ¬?‚’記述ã—ã¾ã™ã?
168 out.append(" <tr>").append( HybsSystem.CR );
169 for( int i=0; i<7; i++ ) {
170 out.append(" <td width=\"14%\" class=\"dayHead" );
171 out.append( WEEK_MK[i+firstWeek] ).append( "\">" );
172 out.append( week[i+firstWeek] ).append( "</td>" );
173 out.append( HybsSystem.CR );
174 }
175 out.append(" </tr>").append( HybsSystem.CR );
176
177 // 第ä¸??ã®æ—¥ä»˜æ¬??空ãスペã?スã®è¨ˆç®?
178 if( culDay != 0 ) {
179 out.append(" <td colspan=\"" ).append( culDay ).append( "\"> </td>" );
180 }
181
182 // 日付æ¬?‚’埋ã‚ã¾ã™ã?
183 String BR = (valueBrFlag) ? "<br />" : "" ;
184 for(int day=1; day <= daysInMonth; day++) {
185 int daycol = getColumnNo( dayKey + day ); // 動的日付ã‘カラãƒ?•ªå·å–å¾?
186 String daylbl = getValueLabel( row,daycol,day ); // ãƒãƒ¼ã‚«ãƒ«ã®æ—¥ä»˜ã‘ラベルを求ã‚るメソãƒ?ƒ‰
187 String vallbl = "" ;
188 if( valKey != null ) {
189 int valcol = getColumnNo( valKey + day ); // 動的値カラãƒ?•ªå·å–å¾?
190 vallbl = BR + getValueLabel( row,valcol ); // 通常ã®å€¤ã‚’ラベルを求ã‚るメソãƒ?ƒ‰
191 }
192
193 if( "1".equals( getValue( row,daycol ))) {
194 out.append(" <td class=\"holyday\">" );
195 out.append( daylbl );
196 out.append( vallbl );
197 out.append("</td>");
198 } else {
199 out.append(" <td class=\"day" );
200 out.append( WEEK_MK[culDay+firstWeek] );
201 out.append("\">");
202 out.append( daylbl );
203 out.append( vallbl );
204 out.append("</td>");
205 }
206 out.append( HybsSystem.CR );
207
208 // 週ã®çµ‚ã‚りã§ã€è¡Œã‚’折り返ã™ã€?
209 if( culDay == 6 ) {
210 out.append(" </tr>\n <tr>").append( HybsSystem.CR );
211 culDay = 0;
212 } else {
213 culDay++;
214 }
215 }
216
217 // æœ?µ‚é?ã®æ—¥ä»˜æ¬??空ãスペã?スã®è¨ˆç®?
218 if((7-culDay) != 0) {
219 out.append(" <td colspan=\"" ).append( (7-culDay) ).append( "\"> </td>" );
220 }
221 out.append( HybsSystem.CR );
222
223 out.append( "</tr>" ).append( HybsSystem.CR );
224 out.append( "</table>" ).append( HybsSystem.CR );
225
226 return out.toString();
227 }
228
229 /**
230 * ã“ã?ビã?ã«å¯¾ã™ã‚‹ç‰¹åˆ¥ãªåˆæœŸåŒ–を行ã†ã€?
231 *
232 * @og.rev 3.5.4.0 (2003/11/25) TableFormatter クラスを使用ã™ã‚‹ã‚ˆã†ã«å¤‰æ›´ã€?
233 * @og.rev 3.5.5.9 (2004/06/07) ヘッãƒ??ã®æ—¥ä»˜ã‘表示ã«ã€Locale ã‚’åŠ å‘³ã§ãるよã†ã«å¤‰æ›´
234 * @og.rev 3.6.0.0 (2004/09/17) viewKeys , columnSize 属æ?ã®è¿½åŠ?
235 *
236 */
237 private void paramInit() {
238
239 String viewKeysCd = getParam( ViewCalendarParam.VIEW_KEYS ,ViewCalendarParam.VIEW_VALUES ); // 3.6.0.0 (2004/09/17)
240 ymKey = getParam( ViewCalendarParam.YM_KEY ,ViewCalendarParam.YM_VALUE );
241 dayKey = getParam( ViewCalendarParam.DAY_KEY ,ViewCalendarParam.DAY_VALUE );
242 valKey = getParam( ViewCalendarParam.VALUE_KEY ,null );
243 String valueBrCd = getParam( ViewCalendarParam.VALUE_BR_FLAG_KEY ,ViewCalendarParam.VALUE_BR_FLAG_VALUE );
244 String firstWeekCd = getParam( ViewCalendarParam.FIRSTWEEK_KEY ,ViewCalendarParam.FIRSTWEEK_VALUE );
245 String headerLocale = getParam( ViewCalendarParam.HEADER_LOCALE_KEY ,ViewCalendarParam.HEADER_LOCALE_VALUE );
246 String columnSizeCd = getParam( ViewCalendarParam.COLUMN_SIZE_KEY ,ViewCalendarParam.COLUMN_SIZE_VALUE ); // 3.6.0.0 (2004/09/17)
247
248 viewKeys = StringUtil.csv2Array( viewKeysCd );
249 firstWeek = Integer.parseInt( firstWeekCd );
250 valueBrFlag = Boolean.valueOf( valueBrCd ).booleanValue() ;
251 columnSize = Integer.parseInt( columnSizeCd ); // 3.6.0.0 (2004/09/17)
252
253 // 曜日ヘッãƒ??をコピã?ã—ã¦ä½œæ?ã—ã¾ã™ã?
254 if( "ja".equals( headerLocale ) ) {
255 week = WEEK_ja;
256 }
257 else {
258 week = WEEK_en;
259 }
260 }
261
262 /**
263 * row行,columåˆ?ã®ãƒ??ã‚¿ã®å€¤ã‚’HTMLæ–?—å?ã«å¤‰æ›ã—ã¦è¿”ã—ã¾ã™ã?
264 * リソースãƒãƒ³ãƒ‰ãƒ«ãŒç™»éŒ²ã•れã¦ã?‚‹å ´åˆã?,リソースã«å¿œã˜ã?
265 * HTMLæ–?—å?を作æ?ã—ã¾ã™ã?
266 * カレンãƒ??Viewã«ç‰¹åŒ–ã—ãŸã?ラベル値を返ã—ã¾ã™ã?
267 *
268 * @og.rev 3.8.0.9 (2005/10/17) writableControl 追åŠ?«ã‚ˆã‚‹å¼•数変更
269 *
270 * @param row 行番å·
271 * @param column カラãƒ?•ªå·
272 * @param day 日�
273 *
274 * @return row行,columåˆ?ã®ãƒ??ã‚¿ã®å€¤
275 */
276 private String getValueLabel( final int row, final int column, final int day ) {
277 if( isColumnWritable( column ) && isWritable( row ) ) {
278 String val = getValue( row,column ) ;
279 return day + getEditorValue( row,column,val );
280 }
281 else {
282 return String.valueOf( day );
283 }
284 }
285
286 /**
287 * æŒ?®šã?YYYYMMæ–?—å?ã‹ã‚‰ã€ã‚«ãƒ¬ãƒ³ãƒ??オブジェクトを作æ?ã—ã¦è¿”ã—ã¾ã™ã?
288 * æ—¥ã«ã¡ã¯ã€?¼‘æ—¥ã«ã‚»ãƒ?ƒˆã•れã¾ã™ã?
289 *
290 * @param ym YYYYMMæ–?—å?
291 *
292 * @return カレン�?オブジェク�
293 */
294 private Calendar getCalendar( final String ym ) {
295 Calendar cal = Calendar.getInstance();
296
297 if( ym != null && ym.length() == 6 ) {
298 int yyyy = Integer.parseInt( ym.substring( 0,4 ) );
299 int mm = Integer.parseInt( ym.substring( 4,6 ) ) - 1;
300 int dd = 1;
301 cal.set( yyyy,mm,dd,0,0,0 );
302 }
303 else {
304 // カレンãƒ??を今月ã®?‘æ—¥ã«è¨å®šã™ã‚‹ã?
305 cal.set(Calendar.DAY_OF_MONTH, 1);
306 }
307
308 return cal ;
309 }
310
311 /**
312 * フォーマットメソãƒ?ƒ‰ã‚’使用ã§ãã‚‹ã‹ã©ã?‹ã‚’å•ã?ˆã‚ã›ã¾ã™ã?
313 *
314 * @og.rev 3.6.0.0 (2004/09/17) 親クラス変更ã«ä¼´ãªã??追åŠ?
315 *
316 * @return 使用å¯èƒ½(true)/ 使用ä¸å¯èƒ½ (false)
317 */
318 public boolean canUseFormat() {
319 return false;
320 }
321
322 /**
323 * 表示é ?›®ã®ç·¨é›?ä¸¦ã³æ›¿ã?ãŒå¯èƒ½ã‹ã©ã?‹ã‚’è¿”ã—ã¾ã?
324 *
325 * @og.rev 5.1.6.0 (2010/05/01) æ–°è¦è¿½åŠ?
326 *
327 * @return 表示é ?›®ã®ç·¨é›?ä¸¦ã³æ›¿ã?ãŒå¯èƒ½ã‹ã©ã?‹(false:ä¸å¯èƒ½)
328 */
329 @Override
330 public boolean isEditable() {
331 return false;
332 }
333 }