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.hayabusa.develop; 017 018import java.util.Map; 019import java.util.List; 020 021import org.opengion.fukurou.xml.JspParserFilter; 022import org.opengion.fukurou.xml.OGDocument; 023import org.opengion.fukurou.xml.OGElement; 024import org.opengion.fukurou.xml.OGNode; 025 026import org.opengion.fukurou.util.FileUtil; 027 028/** 029 * コンストラクタに引数で与えられたマスタデータ情報を元に、特定のJSPタグ情報を生成する基底クラス。 030 * マスタデータ情報はGF92のNMSYORIカラムの種別毎にJspConvertEntityオブジェクトに事前に準備する必要がある。 031 * 032 * 例) 033 * JspConvertEntity e = new JspConvertEntity("RESULT"); 034 * e.setTableName("GF92"); 035 * e.setColumnName("NMSYORI"); 036 * 037 * 038 * 継承先のクラスのexecuteメソッドでは、引数のマスタデータ情報からJSPタグの文字列を生成する処理を実装します。 039 * 040 * @author Takeshi.Takada 041 * 042 */ 043public abstract class AbstractJspCreate implements JspParserFilter { 044 045 /** 出力先のシステムに応じた改行コード */ 046 public static final String CR = System.getProperty("line.separator"); 047 048 /** タブを定数化しておきます。 */ 049 public static final String T1 = "\t" ; // 5.6.4.4 (2013/05/31) タブを定数化しておきます。 050 public static final String T2 = "\t\t" ; // 5.6.4.4 (2013/05/31) タブを定数化しておきます。 051 public static final String T3 = "\t\t\t" ; // 5.6.4.4 (2013/05/31) タブを定数化しておきます。 052 053 // 5.6.1.2 (2013/02/22) 初期値を設定。NAME は、複数のファイル名をカンマ区切り文字で与えられるように想定を変更。 054 protected String KEY = null; 055 protected String NAME = ""; 056 057 /** 058 * ファイル名から、処理対象かどうかを判断します。 059 * ファイル名は、拡張子なしのファイル名(index,query,result,・・・)などになります。 060 * 先に指定しているファイル名と部分一致するかどうかで判定します。 061 * 062 * @og.rev 5.6.1.2 (2013/02/22) NAME は、複数のファイル名をカンマ区切り文字で与えられるように変更。 063 * 064 * @param name 処理対象のファイル名 065 * 066 * @return 処理対象なら true/ そうでなければ、false 067 */ 068 protected boolean isExecute( final String name ) { 069 return NAME.contains( FileUtil.getBaseName( name ) ) ; 070 } 071 072 /** 073 * 初期化メソッド 074 * 075 * 内部で使用する JspConvertEntity の List のマップを受け取り、初期化を行います。 076 * 077 * @param master JspConvertEntityのリストのマップ 078 */ 079 abstract protected void init( final Map<String,List<JspConvertEntity>> master ); 080 081 /** 082 * JSPに出力するタグの内容を作成します。 083 * 引数より作成前のタグの属性内容を確認するする事が出来ます。 084 * 085 * @og.rev 5.2.1.0 (2010/10/01) メソッドの引数を、OGAttributes から OGElement に変更します。 086 * 087 * @param ele エレメントオブジェクト 088 * @param nameSpace このドキュメントのnameSpace( og とか mis とか ) 089 * 090 * @return 変換された文字列 091 * @throws Throwable 変換時のエラー 092 */ 093 abstract protected String execute( final OGElement ele , final String nameSpace ) throws Throwable ; 094 095 /** 096 * ドキュメントオブジェクト を変換します。 097 * 098 * 引数に null が設定された場合も、正常に処理を行います。(return null とする) 099 * 後続処理を行いたくない場合にも、null を返します。 100 * 101 * @og.rev 5.2.1.0 (2010/10/01) メソッドの引数を、OGAttributes から OGElement に変更します。 102 * 103 * @param doc 処理を行う ドキュメントオブジェクト 104 * 105 * @return 処理した結果の ドキュメントオブジェクト 106 * @see org.opengion.fukurou.xml.JspParserFilter#filter( OGDocument ) 107 */ 108 @Override 109 public OGDocument filter( final OGDocument doc ) { 110 if( doc == null ) { return doc; } 111 OGDocument rtndoc = doc; 112 113 String name = doc.getFilename(); 114 if( isExecute( name ) && KEY != null ) { 115 try { 116 String nameSpace = doc.getNameSpace(); 117 String key = (KEY.indexOf( ':' ) == 0 ) ? nameSpace + KEY : KEY ; 118 119 List<OGElement> list = doc.getElementList( key ); 120 for( OGElement ele : list ) { 121 OGNode newNode = new OGNode( execute( ele,nameSpace ) ); // 5.2.1.0 (2010/10/01) 122 rtndoc.changeNode( ele,newNode ); 123 } 124 } catch ( Throwable th ) { 125 th.printStackTrace(); 126 } 127 } 128 return rtndoc; 129 } 130 131 /** 132 * 引数のリストを連結文字列で連結した文字列を作成して返します。 133 * 134 * @param list 処理を行うドキュメントリスト 135 * @param sep 連結する区切り文字 136 * 137 * @return 連結された文字列 138 */ 139 protected String chainChar( final List<String> list , final String sep ){ 140 StringBuilder buf = new StringBuilder(); 141 142 for( String st : list ) { 143 if( buf.length() > 0 ) { 144 buf.append( sep ) ; 145 } 146 buf.append( st ) ; 147 } 148 return buf.toString(); 149 } 150 151 /** 152 * 指定のListオブジェクトが null でなく、かつ、空でないか、判定する。 153 * 154 * @og.rev 5.2.1.0 (2010/10/01) 新規追加 155 * 156 * @param list 、判定するListオブジェクト 157 * 158 * @return nullでなく、かつ、空でない場合、true 159 */ 160 protected boolean isNotEmpty( final List<JspConvertEntity> list ) { 161 return list != null && !list.isEmpty() ; 162 } 163}