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 */ 016package org.opengion.plugin.column; 017 018import org.opengion.fukurou.util.HybsDateUtil; 019 020import org.opengion.hayabusa.db.AbstractRenderer; 021import org.opengion.hayabusa.db.CellRenderer; 022import org.opengion.hayabusa.db.DBColumn; 023 024/** 025 * TMSTMP レンデラーは、日付ネイティブのカラムのデータから、数字部分だけをピックアップし、 026 * 日時(年/月/日 時:分:秒)または、日付(年/月/日)表示する場合に使用するクラスです。 027 * 数字以外は、各データベースによって、まちまちなので、'/',':','-',' ' を削除します。 028 * なお、並び順は、必須に、YYYYMMDDHHMISS の順番とし、January 8 などの形式や、 029 * 04:05 AM 、1/8/1999 などの形式は受け付けることは出来ません。 030 * あくまで、先頭から 数字を順次取得し、YYYYMMDDHHMISS 形式に当てはめていきます。 031 * また、時刻部分 HHMISS が 000000 の場合は、日付のみに自動的にします。 032 * これは、日付ネイティブでは、時刻情報も持っているため、使っているのかどうかの 033 * 判定は、実際のデータが、000000 に設定されているかどうかでしか判断できないためです。 034 * 自動判定がまずい場合は、通常のレンデラーで、表示桁数制限しても構いません。 035 * 036 * このクラスは、不変オブジェクトとして、共有されます。 037 * 038 * @og.group データ表示 039 * 040 * @og.rev 5.3.10.0 (2011/10/01) synchronized を、削除します。 041 * 042 * @version 4.0 043 * @author Kazuhiko Hasegawa 044 * @since JDK5.0, 045 */ 046public class Renderer_TMSTMP extends AbstractRenderer { 047 //* このプログラムのVERSION文字列を設定します。 {@value} */ 048 private static final String VERSION = "5.5.7.2 (2012/10/09)" ; 049 050 private static final CellRenderer dbCell = new Renderer_TMSTMP() ; 051 052 /** 053 * 各オブジェクトから自分のインスタンスを返します。 054 * 自分自身をキャッシュするのか、新たに作成するのかは、各サブクラスの実装に 055 * まかされます。 056 * 057 * @param clm DBColumnオブジェクト 058 * 059 * @return CellRendererオブジェクト 060 */ 061 public CellRenderer newInstance( final DBColumn clm ) { 062 return dbCell; 063 } 064 065 /** 066 * データの表示用文字列を返します。 067 * 日時(年/月/日 時:分:秒)または、日付(年/月/日)表示する場合に使用するクラスです。 068 * 数字以外は、各データベースによって、まちまちなので、'/',':','-',' ' を削除します。 069 * なお、並び順は、必須に、YYYYMMDDHHMISS の順番とし、January 8 などの形式や、 070 * 04:05 AM 、1/8/1999 などの形式は受け付けることは出来ません。 071 * あくまで、先頭から 数字を順次取得し、YYYYMMDDHHMISS 形式に当てはめていきます。 072 * また、時刻部分 HHMISS が 000000 の場合は、日付のみに自動的にします。 073 * これは、日付ネイティブでは、時刻情報も持っているため、使っているのかどうかの 074 * 判定は、実際のデータが、000000 に設定されているかどうかでしか判断できないためです。 075 * 自動判定がまずい場合は、通常のレンデラーで、表示桁数制限しても構いません。 076 * 077 * ここでは、規定のフォーマット(8ケタ OR 14ケタ)でない場合は、エラー表示を行います。 078 * 079 * @og.rev 5.5.7.2 (2012/10/09) HybsDateUtil を利用するように修正します。 080 * 081 * @param value 入力値 082 * 083 * @return データの表示用文字列 084 */ 085 @Override 086 public String getValue( final String value ) { 087 if( value == null || value.length() == 0 ) { return ""; } 088 089 String rtn = value; 090 091 if( rtn.length() != 8 && rtn.length() != 14 ) { 092 rtn = HybsDateUtil.parseNumber( value ); 093 } 094 095 char[] ch1 = new char[19]; 096 if( rtn.length() == 8 || rtn.length() == 14 ) { 097 ch1[0] = rtn.charAt(0); 098 ch1[1] = rtn.charAt(1); 099 ch1[2] = rtn.charAt(2); 100 ch1[3] = rtn.charAt(3); 101 ch1[4] = '/' ; 102 ch1[5] = rtn.charAt(4); 103 ch1[6] = rtn.charAt(5); 104 ch1[7] = '/' ; 105 ch1[8] = rtn.charAt(6); 106 ch1[9] = rtn.charAt(7); 107 108 if( rtn.length() == 8 || ( rtn.length() == 14 && rtn.endsWith( "000000" ) ) ) { 109 rtn = new String( ch1 , 0 , 10 ); // YYYY/MM/DD 形式を返す。 110 } 111 else { 112 ch1[10] = ' '; 113 ch1[11] = rtn.charAt(8); 114 ch1[12] = rtn.charAt(9); 115 ch1[13] = ':'; 116 ch1[14] = rtn.charAt(10); 117 ch1[15] = rtn.charAt(11); 118 ch1[16] = ':'; 119 ch1[17] = rtn.charAt(12); 120 ch1[18] = rtn.charAt(13); 121 rtn = new String( ch1 ); // YYYY/MM/DD HH:MM:SS 形式を返す。 122 } 123 } 124 else { 125 rtn = "<span class=\"error\">" + value + "</span>"; 126 } 127 128 return rtn ; 129 } 130}