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; 021import org.opengion.hayabusa.db.Selection; 022import org.opengion.hayabusa.db.SelectionFactory; // 6.0.4.0 (2014/11/28) 023 024/** 025 * MENU レンデラーは、カラムのデータをコードリソースに対応したラベルで 026 * プルダウンメニュー表示する場合に使用するクラスです。 027 * 028 * カラムの表示に必要な属性は、DBColumn オブジェクト より取り出します。 029 * このクラスは、DBColumn オブジェクト毎に1つ作成されます。 030 * 031 * @og.group データ表示 032 * 033 * @version 4.0 034 * @author Kazuhiko Hasegawa 035 * @since JDK5.0, 036 */ 037public class Renderer_MENU extends AbstractRenderer { 038 /** このプログラムのVERSION文字列を設定します。 {@value} */ 039 private static final String VERSION = "6.2.6.0 (2015/06/19)" ; 040 041 /** 3.2.3.0 (2003/06/06) final を削除。サブクラスからアクセスできるように変更。 */ 042 private final Selection selection ; 043 private final String useSLabel ; // 5.5.1.0 (2012/04/03) 044 045 private String errMsg ; // 6.0.4.0 (2014/11/28) 046 047 /** 048 * デフォルトコンストラクター。 049 * このコンストラクターで、基本オブジェクトを作成します。 050 * 051 * @og.rev 3.1.1.1 (2003/04/03) 各オブジェクトから自分のインスタンスを返すファクトリメソッドを追加。 052 * @og.rev 3.2.3.0 (2003/06/06) key 変数をローカル化。 053 * @og.rev 5.5.1.0 (2012/04/03) Slabel対応 054 * 055 */ 056 public Renderer_MENU() { 057 super(); // 6.4.1.1 (2016/01/16) PMD refactoring. It is a good practice to call super() in a constructor 058 selection = null; 059 useSLabel = "auto"; // 5.5.1.0 (2012/04/03) 060 } 061 062 /** 063 * デフォルトコンストラクター。 064 * 065 * @og.rev 3.1.1.1 (2003/04/03) 各オブジェクトから自分のインスタンスを返すファクトリメソッドを追加。 066 * @og.rev 3.2.3.0 (2003/06/06) key 変数をローカル化。 067 * @og.rev 3.3.1.1 (2003/07/03) CodeSelection の設定において、バグ修正。 068 * @og.rev 3.5.4.2 (2003/12/15) makeCodeSelection メソッドを CodeSelectionクラスに変更。 069 * @og.rev 3.5.5.7 (2004/05/10) SelectionFactory を使用して、オブジェクト作成 070 * @og.rev 4.0.0.0 (2005/01/31) Selection_CODE の作成の引数を CodeData に変更。 071 * @og.rev 4.0.0.0 (2007/11/07) SelectionオブジェクトをDBColumnから取得 072 * @og.rev 5.5.1.0 (2012/04/03) Slabel対応 073 * @og.rev 6.0.4.0 (2014/11/28) selection が null の場合、警告表示します。 074 * @og.rev 6.0.4.0 (2014/11/28) サブクラスで タイプを指定するための対応 075 * @og.rev 6.2.0.0 (2015/02/27) キー:ラベル形式で表示するかどうかを、指定できるようにします。 076 * @og.rev 6.2.6.0 (2015/06/19) type別Selectionの場合、ラベルリソースを使用する為、言語を引数で渡す。 077 * 078 * @param clm DBColumnオブジェクト 079 * @param type MENUのサブクラスのタイプ(KEYVAL) 080 */ 081 protected Renderer_MENU( final DBColumn clm , final String type ) { 082 super(); // 6.4.1.1 (2016/01/16) PMD refactoring. It is a good practice to call super() in a constructor 083 useSLabel = clm.getUseSLabel() ; // 5.5.1.0 (2012/04/03) 084 085 final String lang = clm.getLang(); // 6.2.6.0 (2015/06/19) 086 final String addKeyLabel = clm.getAddKeyLabel(); // 6.2.0.0 (2015/02/27) キー:ラベル形式 087 088 // 6.0.4.0 (2014/11/28) selection は、Column から取得するのではなく、Factory で作成する。 089 // 6.4.1.1 (2016/01/16) PMD refactoring. Avoid if (x != y) ..; else ..; 090 selection = type == null 091 ? SelectionFactory.newSelection( "MENU",clm.getCodeData(),addKeyLabel ) 092 : SelectionFactory.newSelection( type,clm.getRendererParam(),lang ); // 6.2.6.0 (2015/06/19) 093 094 // 6.0.4.0 (2014/11/28) selection が null の場合、警告表示します。 095 if( selection == null ) { 096 errMsg = "codeData が未設定です。" 097 + " name=" + clm.getName() 098 + " label=" + clm.getLabel() 099 + " rendType=" + clm.getRenderer() ; 100 System.out.println( errMsg ); 101 } 102 } 103 104 /** 105 * 各オブジェクトから自分のインスタンスを返します。 106 * 自分自身をキャッシュするのか、新たに作成するのかは、各サブクラスの実装に 107 * まかされます。 108 * 109 * @og.rev 3.1.1.1 (2003/04/03) 各オブジェクトから自分のインスタンスを返すファクトリメソッドを追加。 110 * @og.rev 3.1.2.1 (2003/04/10) synchronized を、削除します。 111 * @og.rev 6.0.4.0 (2014/11/28) サブクラスで タイプを指定するための対応 112 * 113 * @param clm DBColumnオブジェクト 114 * 115 * @return CellRendererオブジェクト 116 * @og.rtnNotNull 117 */ 118 public CellRenderer newInstance( final DBColumn clm ) { 119 return new Renderer_MENU( clm , null ); 120 } 121 122 /** 123 * データの表示用文字列を返します。 124 * 125 * @og.rev 5.5.1.0 (2012/04/03) Slabel対応 126 * @og.rev 6.0.4.0 (2014/11/28) selection が null の場合、警告表示します。 127 * 128 * @param value 入力値 129 * 130 * @return データの表示用文字列 131 */ 132 @Override 133 public String getValue( final String value ) { 134 // 6.0.4.0 (2014/11/28) selection が null の場合、警告表示します。 135 if( selection == null ) { 136 return "<span class=\"error\">" + errMsg + " value=" + value + "</span>"; 137 } 138 139 final boolean useSlbl = "true".equals(useSLabel); // 6.0.4.0 (2014/11/28) 140 return selection.getValueLabel( value,useSlbl ); // 5.5.1.0 (2012/04/03) 141 } 142 143 /** 144 * name属性を変えた、データ表示/編集用のHTML文字列を作成します。 145 * テーブル上の name に 行番号を付加して、名前_行番号 で登録するキーを作成し、 146 * リクエスト情報を1つ毎のフィールドで処理できます。 147 * 148 * @og.rev 4.0.0.0 (2005/11/30) 一覧表示では、短縮ラベルを使用します。 149 * @og.rev 5.5.1.0 (2012/04/03) Slabel対応 150 * @og.rev 6.0.4.0 (2014/11/28) selection が null の場合、警告表示します。 151 * 152 * @param row 行番号 153 * @param value 入力値 154 * 155 * @return データ表示/編集用の文字列 156 */ 157 @Override 158 public String getValue( final int row,final String value ) { 159 // 6.0.4.0 (2014/11/28) selection が null の場合、警告表示します。 160 if( selection == null ) { 161 return "<span class=\"error\">" + errMsg + " value=" + value + " row=" + row + "</span>"; 162 } 163 164 final boolean useSlbl = "auto".equalsIgnoreCase( useSLabel ) || "true".equalsIgnoreCase( useSLabel ); // 5.5.1.0 (2012/04/03) 165 return selection.getValueLabel( value,useSlbl ); 166 } 167}