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.Map;
020
021import org.opengion.hayabusa.develop.AbstractJspCreate;
022import org.opengion.hayabusa.develop.JspConvertEntity;
023import org.opengion.fukurou.xml.OGElement;
024import org.opengion.fukurou.xml.OGNode;
025import org.opengion.fukurou.xml.OGNodeType;
026
027/**
028 * query.jspの <og:hideMenu>タグ 内の <og:column>タグを作成します。
029 * column タグは、部分置換ではなく、hideMenu内の、table 部分からの全面置換です。(部分置換は難しかったので)
030 * hideMenu は、通常の column タグの出力制限以上のカラムを書き出します。
031 * 具体的には、TD_COUNT(初期値=3)* TR_COUNT(初期値=2)を超える検索条件の時のみ行います。
032 * それ以下の場合は、hideMenu タグは書き出しません。
033 * 
034 * これと、JspCreate_COLUMN クラスは、密接に関連していますので、ご注意ください。
035 *
036 * ●使用例
037 *      <table summary = "layout" >
038 *          <tr><og:column ・・・ /> ・・・TD_COUNT(初期値=3)</tr>
039 *                  ・・・・ TR_COUNT(初期値=2)
040 *      </table>
041 *   <og:hideMenu>
042 *      <table summary = "layout" >
043 *          <tr>
044 *              <og:column
045 *                  name       = column.getColumnName() 
046 *                  defaultVal = column.getDefaultValue()
047 *                  must       = "true"         ("1".equals( column.getMust() ))
048 *                  clazz      = "aimai"        (ope.startsWith( "lk" ))
049 *              />
050 *              <og:column
051 *                  ・・・・
052 *              />
053 *          </tr>
054 *          <tr>
055 *                  ・・・・
056 *          </tr>
057 *      </table>
058 *   </og:hideMenu>
059 *
060 * @og.rev 5.6.4.4 (2013/05/31) 新規作成。hideMenu の対応
061 *
062 * @version  5.0
063 * @author       Kazuhiko Hasegawa
064 * @since    JDK7.0,
065 */
066public class JspCreate_HIDEMENU extends JspCreate_COLUMN {
067        //* このプログラムのVERSION文字列を設定します。   {@value} */
068        private static final String VERSION = "5.6.4.4 (2013/05/31)" ;
069
070        private List<JspConvertEntity> QUERY_ROWS ;
071        private boolean IS_NULL ;
072
073        /**
074         * 初期化メソッド
075         *
076         * 内部で使用する JspConvertEntity の リスト のマップを受け取り、初期化を行います。
077         *
078         * @param       master  JspConvertEntityのリストのマップ
079         */
080        @Override
081        protected void init( final Map<String,List<JspConvertEntity>> master ) {
082                QUERY_ROWS = master.get("QUERY");
083                IS_NULL = !isNotEmpty( QUERY_ROWS );
084                KEY  = ":hideMenu";
085                NAME = "query";
086        }
087
088        /**
089         * JSPに出力するタグの内容を作成します。
090         * 引数より作成前のタグの属性内容を確認するする事が出来ます。
091         *
092         * @param ele OGElementエレメントオブジェクト
093         * @param       nameSpace       このドキュメントのnameSpace( og とか mis とか )
094         *
095         * @return      変換された文字列
096         * @throws Throwable 変換時のエラー
097         */
098        @Override
099        protected String execute( final OGElement ele , final String nameSpace )  throws Throwable {
100                if( IS_NULL ) { return ""; }
101
102                if( QUERY_ROWS.size() <= TD_COUNT*TR_COUNT ) { return ""; }          // 指定以上のカラムがないと、hideMenu を作成しません。
103
104                // 既存の設定値をすべて削除します。ホントは自動登録した分だけを削除すべき。
105                OGElement newEle  = new OGElement( "og:hideMenu" );
106
107                OGElement tblEle  = new OGElement( "table" );
108                newEle.addNode( tblEle );
109
110                OGElement tr = null;
111                        for( int i=(TD_COUNT*TR_COUNT); i<QUERY_ROWS.size(); i++ ) {
112                                JspConvertEntity column = QUERY_ROWS.get(i);
113                                if( i%TD_COUNT == 0 ) {
114                                        tr = new OGElement( "tr" );
115                                        tblEle.addNode( tr );
116                                }
117                                tr = trElement( tr,column );
118                        }
119
120                return newEle.getText( 0 );
121        }
122
123        /**
124         * JSPに出力するタグの内容を作成します。
125         * 引数より作成前のタグの属性内容を確認するする事が出来ます。
126         *
127         * @og.rev 5.2.1.0 (2010/10/01) メソッドの引数を、OGAttributes から OGElement に変更します。
128         * @og.rev 5.2.1.0 (2010/10/01) 名前空間を、og 決め打ちから、引数を使用するように変更します。
129         * @og.rev 5.6.1.2 (2013/02/22) XML処理するように変更します。
130         *
131         * @param ele OGElementエレメントオブジェクト
132         * @param       nameSpace       このドキュメントのnameSpace( og とか mis とか )
133         *
134         * @return      変換された文字列
135         * @throws Throwable 変換時のエラー
136         */
137//      @Override
138//      protected String execute( final OGElement ele , final String nameSpace )  throws Throwable {
139//              if( IS_NULL ) { return ""; }
140//
141//              String ns = (nameSpace.length() == 0) ? "" : nameSpace + ":" ;  // 5.2.1.0 (2010/10/01) 名前空間
142//
143//              // TODO Auto-generated method stub
144//              //書き出す文字列を作成開始。
145//              StringBuilder sbTub = new StringBuilder();
146//
147//              sbTub.append( "<table summary=\"layout\">" ).append( CR );
148//              for( int i=0; i<QUERY_ROWS.size(); i++ ) {
149//                      JspConvertEntity column = QUERY_ROWS.get(i);
150//                      if( i%TD_COUNT == 0 ) {
151//                              if( i>0 ) { sbTub.append( "  </tr>" ).append( CR ); }
152//                              sbTub.append( "  <tr>" ).append( CR );
153//                      }
154//                      sbTub.append( "\t<" ).append( ns ).append( "column name=\"" );
155//
156//                      sbTub.append( column.getColumnName() );
157//                      sbTub.append( "\"" );
158//                      if ( column.getDefaultValue() != null && column.getDefaultValue().trim().length() > 0) {
159//                              sbTub.append( " defaultVal=\"");
160//                              sbTub.append( column.getDefaultValue() );
161//                              sbTub.append( "\" ");
162//                      }
163//                      if ( "1".equals( column.getMust() )){
164//                              sbTub.append( " must=\"true\" ");
165//                      }
166//                      String ope = column.getRemarks();
167//                      if( ope != null && ope.startsWith( "lk" ) ) { sbTub.append( " clazz=\"aimai\" "); }
168//
169//                      sbTub.append( " />" ).append( CR );
170//              }
171//              sbTub.append( "  </tr>" ).append( CR );
172//              sbTub.append( "</table>" ).append( CR );
173//
174//              return sbTub.toString();
175//      }
176}