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 */ 016 package org.opengion.hayabusa.develop; 017 018 import java.util.Map; 019 import java.util.List; 020 021 import org.opengion.fukurou.xml.JspParserFilter; 022 import org.opengion.fukurou.xml.OGDocument; 023 import org.opengion.fukurou.xml.OGElement; 024 import org.opengion.fukurou.xml.OGNode; 025 026 import 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 */ 043 public 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 }