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.hayabusa.db.AbstractRenderer; 019import org.opengion.hayabusa.db.CellRenderer; 020import org.opengion.hayabusa.db.DBColumn; 021 022/** 023 * YMD レンデラーは、カラムのデータを日付(年/月/日)表示する場合に使用するクラスです。 024 * 025 * このクラスは、不変オブジェクトとして、共有されます。 026 * 027 * @og.group データ表示 028 * 029 * @version 4.0 030 * @author Kazuhiko Hasegawa 031 * @since JDK5.0, 032 */ 033public class Renderer_YMD extends AbstractRenderer { 034 /** このプログラムのVERSION文字列を設定します。 {@value} */ 035 private static final String VERSION = "6.4.2.0 (2016/01/29)" ; 036 037 private static final CellRenderer DB_CELL = new Renderer_YMD() ; 038 039 /** 040 * デフォルトコンストラクター 041 * 042 * @og.rev 6.4.2.0 (2016/01/29) PMD refactoring. Each class should declare at least one constructor. 043 */ 044 public Renderer_YMD() { super(); } // これも、自動的に呼ばれるが、空のメソッドを作成すると警告されるので、明示的にしておきます。 045 046 /** 047 * 各オブジェクトから自分のインスタンスを返します。 048 * 自分自身をキャッシュするのか、新たに作成するのかは、各サブクラスの実装に 049 * まかされます。 050 * 051 * @og.rev 3.1.1.1 (2003/04/03) 各オブジェクトから自分のインスタンスを返すファクトリメソッドを追加。 052 * @og.rev 3.1.2.1 (2003/04/10) synchronized を、削除します。 053 * 054 * @param clm DBColumnオブジェクト 055 * 056 * @return CellRendererオブジェクト 057 * @og.rtnNotNull 058 */ 059 public CellRenderer newInstance( final DBColumn clm ) { 060 return DB_CELL; 061 } 062 063 /** 064 * データの表示用文字列を返します。 065 * ここでは、null か ゼロ文字列の場合は、ゼロ文字列を返します。 066 * 8ケタ以下のデータは、エラー表示を行います。 067 * 8ケタ以上の場合は、YYYYMMDDxxxxxx として、YYYY/MM/DD を返します。 068 * 069 * @og.rev 3.8.1.1 (2005/11/21) フォーマットエラー時には、class="error" を付けて表示させる。 070 * @og.rev 5.5.7.2 (2012/10/09) 処理ロジックの見直し 071 * @og.rev 6.0.4.0 (2014/11/28) ロジックの共通化 072 * 073 * @param value 入力値 074 * 075 * @return データの表示用文字列 076 * @og.rtnNotNull 077 */ 078 @Override 079 public String getValue( final String value ) { 080 return getValue( value , true ); 081 } 082 083 /** 084 * データ出力用の文字列を作成します。 085 * ファイル等に出力する形式を想定しますので、HTMLタグを含まない 086 * データを返します。 087 * 基本は、#getValue( String ) をそのまま返します。 088 * 089 * @og.rev 6.0.4.0 (2014/11/28) データ出力用のレンデラー 090 * 091 * @param value 入力値 092 * 093 * @return データ出力用の文字列 094 * @og.rtnNotNull 095 * @see #getValue( String ) 096 */ 097 @Override 098 public String getWriteValue( final String value ) { 099 return getValue( value , false ); 100 } 101 102 /** 103 * データ表示用/出力用の文字列を作成します。 104 * 第二引数の isView == true で、データ表示用文字列を、false で 105 * データ出力用の文字列を作成します。 106 * 処理の共通化を行うためのメソッドです。 107 * 108 * @og.rev 6.0.4.0 (2014/11/28) ロジックの共通化 109 * 110 * @param value 入力値 111 * @param isView データ表示用かどうか(true:表示用/false:出力用) 112 * 113 * @return データ表示用/出力用の文字列 114 * @og.rtnNotNull 115 * @see #getValue( String ) 116 */ 117 private String getValue( final String value , final boolean isView ) { 118 119 if( value == null || value.isEmpty() ) { return ""; } 120 121 String rtn = value; // 初期値:isView = false の時の値 122 123 if( rtn.length() >= 8 ) { 124 char[] ch1 = new char[10]; 125 ch1[0] = rtn.charAt(0); 126 ch1[1] = rtn.charAt(1); 127 ch1[2] = rtn.charAt(2); 128 ch1[3] = rtn.charAt(3); 129 ch1[4] = '/' ; 130 ch1[5] = rtn.charAt(4); 131 ch1[6] = rtn.charAt(5); 132 ch1[7] = '/' ; 133 ch1[8] = rtn.charAt(6); 134 ch1[9] = rtn.charAt(7); 135 136 rtn = new String( ch1 ); 137 } 138 else { 139 if( isView ) { 140 rtn = "<span class=\"error\">" + value + "</span>"; 141 } 142 } 143 return rtn; 144 } 145}