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.system.HybsConst; 019import org.opengion.fukurou.util.StringFormat; 020import org.opengion.fukurou.db.DBUtil; 021import org.opengion.fukurou.db.ApplicationInfo; 022import org.opengion.hayabusa.common.HybsSystem; 023 024/** 025 * plugin.column パッケージ内で使用する、QUERY系の重複処理を解消するためのクラスです。 026 * 027 * 機能的には、フォーマット処理で、AAA:BBB:CCC:DDD を $1,$2,$3,$4 に割り当てなおして、 028 * QUERYを実行する処理を行います。 029 * 030 * @og.rev 8.5.7.0 (2024/03/29) 新規作成 031 * @og.group その他 032 * 033 * @version 8.5 034 * @author Kazuhiko Hasegawa 035 * @since JDK21.0, 036 */ 037// /* default */ final class RowSizeUtil { 038/* default */ final class QueryFormat { 039 /** このプログラムのVERSION文字列を設定します。 {@value} */ 040 private static final String VERSION = "8.5.7.0 (2024/03/29)" ; 041 042 private final String query ; 043 private final String dbid ; 044 private final String name ; 045 046 /** 3.8.7.0 (2006/12/15) アクセスログ取得の為、ApplicationInfoオブジェクトを設定 */ 047 private final ApplicationInfo appInfo; 048 049 /** コネクションにアプリケーション情報を追記するかどうか指定 */ 050 private static final boolean USE_DB_APPLICATION_INFO = HybsSystem.sysBool( "USE_DB_APPLICATION_INFO" ) ; 051 private static final String SYSTEM_ID = HybsSystem.sys( "SYSTEM_ID" ) ; 052 053 /** 054 * デフォルトコンストラクタ 055 * 056 * 基本的には使用しない(Editor_QUERY,Renderer_QUERY の関係上)。 057 * 058 * @og.rev 8.5.7.0 (2024/03/29) 新規作成 059 */ 060 public QueryFormat() { 061 query = null; 062 dbid = null; 063 name = null; 064 appInfo = makeApplicationInfo( null ); 065 } 066 067 /** 068 * query,dbid,name を引数に持つ コンストラクタ 069 * 070 * @og.rev 8.5.7.0 (2024/03/29) 新規作成 071 * 072 * @param query DB検索を行うオリジナルのQUERY文 073 * @param dbid DB接続先ID 074 * @param name カラム名 075 */ 076 public QueryFormat( final String query, final String dbid, final String name ) { 077 this.query = query; 078 this.dbid = dbid; 079 this.name = name; 080 appInfo = makeApplicationInfo( name ); 081 } 082 083 /** 084 * アクセスログ取得の為、ApplicationInfoオブジェクトを作成します。 085 * 086 * @og.rev 8.5.7.0 (2024/03/29) 新規作成 087 * 088 * @param name オブジェクト 089 * 090 * @return ApplicationInfoオブジェクト 091 */ 092 private ApplicationInfo makeApplicationInfo( final String name ) { 093 // 6.3.9.1 (2015/11/27) Found 'DD'-anomaly for variable(PMD) 094 final ApplicationInfo infoTemp ; 095 096 // 3.8.7.0 (2006/12/15) アクセスログ取得の為、ApplicationInfoオブジェクトを設定 097 if( USE_DB_APPLICATION_INFO ) { 098 infoTemp = new ApplicationInfo(); 099 // ユーザーID,IPアドレス,ホスト名 100 infoTemp.setClientInfo( SYSTEM_ID,HybsSystem.HOST_ADRS,HybsSystem.HOST_NAME ); 101 // 画面ID,操作,プログラムID 102 infoTemp.setModuleInfo( "Editor_QUERY",null,name ); 103 } 104 else { 105 infoTemp = null; // 6.3.9.1 (2015/11/27) 106 } 107 108 return infoTemp ; 109 } 110 111 /** 112 * データのDB検索結果の文字列を返します。 113 * 114 * ここでは、AAA:BBB:CCC:DDD という値を、$1,$2,$3,$4 に割り当てなおして、 115 * QUERYを実行します。また、$1 は、本来の値として、メニューの初期値設定等に 116 * 使用します。上記の例では、AAA が値で、それ以降は、引数になります。 117 * さらに、元の文字列"AAA:BBB:CCC:DDD"は、$0 に割り当てられます。割り当てがない 118 * 変数は、""(ゼロ文字列)として、扱われます。 119 * 又、$Cには自分自身のカラム名を割り当てます。 120 * 121 * @og.rev 8.5.7.0 (2024/03/29) 新規作成 122 * 123 * @param value 入力値 124 * 125 * @return DB検索結果の文字列(1行目1列目の値) 126 */ 127 public String getValue( final String value ) { 128 final String[][] rtn = dbExecute( value ); 129 130 final String rtnVal ; 131 if( rtn == null ) { // DB検索エラー 132 rtnVal = StringFormat.getValue( value ) ; // 6.4.5.3 (2016/05/13) 本来、QUERYで変換すべきだが、元の値を設定する。 133 } 134 else { 135 rtnVal = rtn[0] == null || rtn[0][0] == null ? "" : rtn[0][0]; // 6.4.2.1 (2016/02/05) PMD refactoring. Useless parentheses. 136 } 137 138 return rtnVal ; 139 } 140 141 /** 142 * データのDB検索結果を返します。 143 * 144 * ここでは、AAA:BBB:CCC:DDD という値を、$1,$2,$3,$4 に割り当てなおして、 145 * QUERYを実行します。また、$1 は、本来の値として、メニューの初期値設定等に 146 * 使用します。上記の例では、AAA が値で、それ以降は、引数になります。 147 * さらに、元の文字列"AAA:BBB:CCC:DDD"は、$0 に割り当てられます。割り当てがない 148 * 変数は、""(ゼロ文字列)として、扱われます。 149 * 又、$Cには自分自身のカラム名を割り当てます。 150 * 151 * ※ Renderer_MULTIQUERY との共存のため、DB検索結果の配列を返します。 152 * ※ エラー判定のため、エラー時は null を返します。 153 * 154 * @og.rev 8.5.7.0 (2024/03/29) 新規作成 155 * 156 * @param value 入力値 157 * 158 * @return DB検索結果の文字列(1行目1列目の値) 159 */ 160 public String[][] dbExecute( final String value ) { 161 // StringFormat format = new StringFormat( query,value ); 162 final StringFormat format = new StringFormat( query,value,name ); // 4.3.4.0 (2008/12/01) 163 final String str = format.format(); 164 165 // 5.7.9.0 (2014/08/08) DBUtil.dbExecute 実行時エラーを回避 166 // 8.5.6.1 (2024/03/29) 引数が null の場合は、""(ゼロ文字列)を返す。 167// String rtnVal = StringFormat.getValue( value ) ; // 6.4.5.3 (2016/05/13) 本来、QUERYで変換すべきだが、元の値を設定する。 168 try { 169 return DBUtil.dbExecute( str,null,appInfo,dbid ); 170 } 171 catch( final RuntimeException ex ) { 172 final String errMsg = "SQL文の処理に失敗しました。" + HybsConst.CR 173 + "query=" + query + " , inValue=" + value + " , name=" + name 174 + HybsConst.CR 175 + ex.getMessage() ; 176 System.err.println( errMsg ); 177 } 178 179 return null; // エラー時 180 } 181}