    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}