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.develop; 017 018import java.util.List; 019import java.util.ArrayList; 020import java.util.Map; 021 022import org.opengion.hayabusa.develop.AbstractJspCreate; 023import org.opengion.hayabusa.develop.JspConvertEntity; 024import org.opengion.fukurou.xml.OGElement; 025import org.opengion.fukurou.xml.OGAttributes; 026 027/** 028 * entry.jspの<og:tableUpdateParam>タグを作成します。 029 * tableUpdateParam は、tableUpdate タグのBODY部に記述されます。 030 * tableUpdateParam で書き換えが発生するのは、対象テーブルと、omitNames属性です。 031 * where条件の書き換えは行いません。(雛形読み込み時のまま使用します。) 032 * テーブルの書き間違いで、異なるUNIQ番号の更新を避ける意味合いで、 033 * UNIQ=[UNIQ]以外のキーを条件に入れておくと、より安全です。 034 * 035 * ●使用例 036 * <og:tableUpdate command="{@command}" queryType="JDBCTableUpdate" debug="false"> 037 * <og:tableUpdateParam 038 * sqlType = "{@sqlType}" 039 * table = "GF02" 040 * where = "UNIQ=[UNIQ] and DYSET=[DYSET]" 041 * omitNames = "SYSTEM_ID,TBLSYU,TABLESPACE_NAME" 042 * /> 043 * </og:tableUpdate> 044 * 045 * @og.rev 5.6.1.2 (2013/02/22) 文字列連結から、XML処理するように変更します。 046 * @author Takeshi.Takada 047 * 048 */ 049public class JspCreate_TABLE_UPDATE extends AbstractJspCreate { 050 //* このプログラムのVERSION文字列を設定します。 {@value} */ 051 private static final String VERSION = "5.6.1.2 (2013/02/22)" ; 052 053 private List<JspConvertEntity> RESULT_ROWS ; 054 private boolean IS_NULL ; 055 056 /** 057 * 初期化メソッド 058 * 059 * 内部で使用する JspConvertEntityのリストのマップを受け取り、初期化を行います。 060 * 061 * @og.rev 5.2.1.0 (2010/10/01) 名前空間を、og 決め打ちから、名前空間指定無しに変更します。 062 * @og.rev 5.6.1.2 (2013/02/22) 対象ファイルを、result だけから、update も含めるように変更。 063 * 064 * @param master JspConvertEntityのリストのマップ 065 */ 066 @Override 067 protected void init( final Map<String,List<JspConvertEntity>> master ) { 068 RESULT_ROWS = master.get( "RESULT" ); 069 IS_NULL = !isNotEmpty( RESULT_ROWS ); 070 KEY = ":tableUpdateParam"; 071 NAME = "entry"; 072 } 073 074 /** 075 * JSPに出力するタグの内容を作成します。 076 * 引数より作成前のタグの属性内容を確認するする事が出来ます。 077 * 078 * @og.rev 5.2.1.0 (2010/10/01) メソッドの引数を、OGAttributes から OGElement に変更します。 079 * @og.rev 5.2.1.0 (2010/10/01) 名前空間を、og 決め打ちから、引数を使用するように変更します。 080 * 081 * @param ele OGElementエレメントオブジェクト 082 * @param nameSpace このドキュメントのnameSpace( og とか mis とか ) 083 * 084 * @return 変換された文字列 085 * @throws Throwable 変換時のエラー 086 */ 087 @Override 088 protected String execute( final OGElement ele , final String nameSpace ) throws Throwable { 089 if( IS_NULL ) { return ""; } 090 091 String table = null; 092 List<String> omitNames = new ArrayList<String>(); 093 for(JspConvertEntity column : RESULT_ROWS){ 094 // 非表示は、GF92の属性(Remarks)に、何もセットされていないカラムの事 095 String remks = column.getRemarks(); 096 String astbl = column.getAsTableName(); 097 098 // DISP で、別名がA1以外の場合、データ登録しないので、omit カラムになる。 099 if ( "DISP".equalsIgnoreCase( remks ) && !"A1".equalsIgnoreCase( astbl ) ) { 100 omitNames.add( column.getColumnName() ); 101 } 102 103 // 最初の1回だけ取り込む 104 if( table == null && "A1".equalsIgnoreCase( astbl ) ) { 105 table = column.getTableName(); 106 } 107 } 108 109 OGAttributes attri = ele.getOGAttributes(); // OGElementの内部オブジェクトなので、副作用あり 110 attri.setUseCR( true ); 111 attri.setVal( "table" , table ); 112 113 if ( ! omitNames.isEmpty() ) { 114 attri.setVal( "omitNames" , chainChar( omitNames ,",") ); // あれば更新、なければ追加 115 } 116 117 return ele.getText( 1 ); 118 } 119}