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.taglib;
017    
018    import org.opengion.hayabusa.common.HybsSystem;
019    import org.opengion.hayabusa.common.HybsSystemException;
020    import org.opengion.hayabusa.db.DBTableModel;
021    import org.opengion.hayabusa.db.DBColumn;
022    import org.opengion.hayabusa.db.DBTableModelUtil;
023    import org.opengion.hayabusa.resource.LDAPSearch;
024    
025    import org.opengion.fukurou.util.ErrorMessage;
026    import org.opengion.fukurou.util.StringUtil ;
027    import static org.opengion.fukurou.util.StringUtil.nval ;
028    
029    import java.util.List;
030    import java.util.Locale;
031    
032    /**
033     * LDAPのå†?®¹を検索するための、ldapQueryタグですã?
034     *
035     * 検索した結果は、DBTableModel にセãƒ?ƒˆされるためã?
036     * JDBCQuery と同様に、viewタグで表示させることが可能ですã?
037     *
038     * 下記ã?é ?›®につã�?�¦は、src/resource/シスãƒ?ƒ パラメータ に、予め
039     * 設定しておくことで、タグごとにæŒ?®šするå¿?¦�がなくなりますã?
040     * ・LDAP_INITIAL_CONTEXT_FACTORY
041     * ・LDAP_PROVIDER_URL
042     * ・LDAP_ENTRYDN
043     * ・LDAP_SEARCH_BASE
044     * ・LDAP_SEARCH_SCOPE
045     *
046     * こã?タグリブでは、検索のみサポã?トしてã�?�¾すã?
047     *
048     * @og.formSample
049     * ●形式ï¼?
050     *     <og:ldapQuery  debug="false"
051     *         command     = "NEW"                                       NEW,RENEW が使用可能ですã?
052     *         initctx     = "com.sun.jndi.ldap.LdapCtxFactory"          初期コンãƒ?‚­ストファクトリ
053     *         providerURL = "ldap://ldap.opengion.org:389"              サービスプロバイãƒ??構æ?æƒ??
054     *         entrydn     = "cn=inquiry-sys,o=opengion,c=JP"            属æ?の取得å?のオブジェクトã?名前
055     *         password    = "xxxxxx"                                    属æ?の取得å?のオブジェクトã?パスワーãƒ?
056     *         searchbase  = "soouid=employeeuser,o=opengion,c=JP"       検索するコンãƒ?‚­ストまたã?オブジェクトã?ベã?スå�?
057     *         filter      = "(objectClass=person)"                      検索に使用するフィルタ式ã?null は不可
058     *         attributes  = "uid,cn,officeName,ou,mail,belongOUID"      属æ?を識別する属æ? IDをカンマ区åˆ?‚ŠでæŒ?®?
059     *         searchScope = "SUBTREE"                                   検索ç¯?›²を設å®?『OBJECT』ã?ONELEVEL』ã?SUBTREE』ã?どれか)
060     *         maxRowCount = "0"                                         検索時ã?æœ?¤§検索数(0は、無制限:デフォルãƒ?
061     *     />
062     * ●body?šなã�?
063     *
064     * ●Tag定義??
065     *   <og:ldapQuery
066     *       initctx            【TAG】å?期コンãƒ?‚­ストファクトリを指定しまã�?(初期値:LDAP_INITIAL_CONTEXT_FACTORY[=com.sun.jndi.ldap.LdapCtxFactory])
067     *       providerURL        【TAG】サービスプロバイãƒ??構æ?æƒ??を指定しまã�?(初期値:LDAP_PROVIDER_URL[=ldap://ldap.opengion.org:389])
068     *       entrydn            【TAG】属æ?の取得å?のオブジェクトã?名前を設定しまã�?(初期値:LDAP_ENTRYDN[=cn=inquiry-sys,o=opengion,c=JP])
069     *       password           【TAG】属æ?の取得å?のオブジェクトã?パスワードを設定しまã�?(初期値:LDAP_PASSWORD[=password])
070     *       searchbase         【TAG】検索するコンãƒ?‚­ストまたã?オブジェクトã?名前を設定しまã�?(初期値:LDAP_SEARCH_BASE[=soouid=employeeuser,o=opengion,c=JP])
071     *       filter           ○ã?TAG】検索に使用するフィルタå¼?例:belongOUID=61200)(å¿??)ã€?
072     *       searchScope        【TAG】検索ç¯?›²(OBJECT/ONELEVEL/SUBTREE)を設定しまã�?(初期値:LDAP_SEARCH_SCOPE[=SUBTREE])
073     *       timeLimit          【TAG】これらの SearchControls の時間制限をミリ秒単位で設定しまã�?初期値:0[無制限])
074     *       derefLinkFlag      【TAG】検索中のリンクへの間接参ç?を有効またã?無効[true/false]にしまã�?初期値:false)
075     *       maxRowCount        【TAG】レジストリのæœ?¤§検索件数をセãƒ?ƒˆしまã�?初期値:0[無制限])
076     *       returningObjFlag   【TAG】結果のä¸?ƒ¨としてオブジェクトを返すことを有効またã?無効[true/false]にしまã�?初期値:false)
077     *       attributes         【TAG】検索のä¸?ƒ¨として返される属æ?をCSVでè¤?•°æŒ?®šしまã�?
078     *       columns            【TAG】作æ?する DBTableModel のカラãƒ?��をCSV形式でæŒ?®šしまã�?
079     *       orderBy            【TAG】検索した結果を表示する表示é ?‚’ファイル属æ?名でæŒ?®šしまã�?
080     *       tableId            【TAGã€?通常は使ã�?�¾せん)結果をDBTableModelに書き込んで、sessionに登録するときã?キーを指定しまã�?
081     *       command            【TAG】コマンãƒ?NEW,RENEW)をセãƒ?ƒˆしまã�?初期値:NEW)
082     *       displayMsg         【TAG】検索結果を画面上に表示するメãƒ?‚»ージリソースIDを指定しまã�?初期値は検索件数)
083     *       notfoundMsg        【TAG】検索結果がゼロ件の場合に表示するメãƒ?‚»ージリソースIDを指定しまã�?初期値:MSG0077[対象ãƒ??タはありませんでした])
084     *       overflowMsg        【TAG】オーバã?フロー時に画面上に表示するメãƒ?‚»ージIDを指定しまã�?初期値:MSG0007)
085     *       scope              【TAG】キャãƒ?‚·ュする場合ã?スコープ[request/page/session/applicaton]を指定しまã�?初期値:session)
086     *       mainTrans          【TAGã€?通常使ã�?�¾せん)タグで処ç�?�•れる処ç�?�Œメインとなるトランザクション処ç�?�‹どã�?�‹を指定しまã�?初期値:false)
087     *       debug              【TAG】デバッグæƒ??をå?力するかどã�?�‹[true/false]を指定しまã�?初期値:false)
088     *   />
089     *
090     * ●使用ä¾?
091     *     シスãƒ?ƒ パラメータ に、å¿?¦�なLDAP定数を定義しておいたå?合ã?、下記ã?タグで検索できますã?
092     *     例では、filter にあいまã�?¤œ索(*)とAND条件(&(条件A)(条件B)) を指定した例を挙げておきますã?
093     *     filter の形式と解釈ã?、RFC 2254 に準拠してã�?�¾すã?
094     *     (RFC 2254 で定義されてã�?‚‹演算子ã?すべてをすべての属æ?に適用できるわけではありませんã€?
095     *
096     *      <og:ldapQuery  debug="false"
097     *          command     = "NEW"
098     *          filter      = "(&(cnphoneticlangjp=OPENGION*)(businessName=*COMMON*))"
099     *          attributes  = "uid,cn,officeName,ou,mail,belongOUID"
100     *      />
101     *
102     *    ・queryOption タグのå†?ƒ¨に記述すれば、ã?ルãƒ?‚¦ンメニューを作æ?することが可能ですã?
103     *    <og:select name="UID">
104     *        <og:queryOption>
105     *            <og:ldapQuery
106     *                filter      = "(&(|(belongOUID=60000)(belongOUID=70000))(uid=C*))"
107     *                attributes  = "uid,uid,sn"
108     *                orderBy     = "uid"
109     *            />
110     *        </og:queryOption>
111     *    </og:select>
112     *
113     * @og.rev 3.1.0.0 (2003/03/20) ?¬?¤?¡?°にアクセスできる、LDAPQueryTag.java を新規に作æ?ã€?
114     * @og.group そã?他å?åŠ?
115     *
116     * @version  4.0
117     * @author       Kazuhiko Hasegawa
118     * @since    JDK5.0,
119     */
120    public class LDAPQueryTag extends CommonTagSupport {
121            //* こã?プログラãƒ??VERSIONæ–?­—å?を設定しますã?       {@value} */
122            private static final String VERSION = "5.1.6.0 (2010/05/01)" ;
123    
124            private static final long serialVersionUID = 516020100501L ;
125    
126            /** command 引数に渡す事ã?出来ã‚?コマンãƒ? 新è¦?{@value} */
127            public static final String CMD_NEW       = "NEW" ;
128            /** command 引数に渡す事ã?出来ã‚?コマンãƒ? 再検索 {@value} */
129            public static final String CMD_RENEW = "RENEW" ;
130            /** command 引数に渡す事ã?出来ã‚?コマンãƒ?リスãƒ? */
131            private static final String[] COMMAND_LIST = new String[] { CMD_NEW , CMD_RENEW };
132    
133            private String                  initctx                         = HybsSystem.sys( "LDAP_INITIAL_CONTEXT_FACTORY" );
134            private String                  providerURL             = HybsSystem.sys( "LDAP_PROVIDER_URL" );
135            private String                  entrydn                         = HybsSystem.sys( "LDAP_ENTRYDN" );
136            private String                  password                        = HybsSystem.sys( "LDAP_PASSWORD" );            // 4.2.2.0 (2008/05/10)
137            private String                  searchbase                      = HybsSystem.sys( "LDAP_SEARCH_BASE" );
138            private String                  filter                          = null;         // "employeeNumber=87019";
139    
140            // 検索ç¯?›²。OBJECT_SCOPE、ONELEVEL_SCOPE、SUBTREE_SCOPE のどれか 1 つ
141            private String                  searchScope                     = HybsSystem.sys( "LDAP_SEARCH_SCOPE" );
142            private static final long       COUNTLIMIT              = 0;                    // 返すエントリのæœ?¤§数ã€? の場合ã?フィルタをæº?�Ÿすエントリをすべて返す
143            private int                             timeLimit                       = 0;                    // 結果が返されるまでのミリ秒数ã€? の場合ã?無制é™?
144            private String[]                attrs                           = null;                 // エントリとä¸?·’に返される属æ?の識別子ã?null の場合ã?すべての属æ?を返す。空の場合ã?属æ?を返さなã�?
145            private String[]                columns                         = null;                 // DBTableModel を作æ?する場合ã?カラãƒ?��になりますã?null の場合ã?、attributes 属æ?
146            private boolean                 returningObjFlag        = false;                // true の場合ã?エントリの名前にバインドされたオブジェクトを返す。false 場合ã?オブジェクトを返さなã�?
147            private boolean                 derefLinkFlag           = false;                // true の場合ã?検索中にリンクを間接参ç?する
148    
149            private String                  tableId                         = HybsSystem.TBL_MDL_KEY;       // session?·?°
150            private String                  orderBy                         = null;                                         // ?¿?°???目(csv)
151            private String                  command                         = CMD_NEW;                                      // ?º?�ンï¾?¾?
152            private int                             executeCount            = 0;                                            // 検索/実行件数
153            private int                             errCode                         = ErrorMessage.OK;                      // Ver4.3.1.1 (2008/09/05) 検索エラーコーãƒ?
154            private int                     maxRowCount                     = 0;                    // æœ?¤§検索数(0は無制é™?
155    //      private String                  displayMsg              = "MSG0033";    // 件検索しましたã€?
156            private String                  displayMsg                      = HybsSystem.sys( "VIEW_DISPLAY_MSG" );
157            private String                  overflowMsg             = "MSG0007";    // 検索結果がã?制限行数をè¶?�ˆましたので、残りはカãƒ?ƒˆされましたã€?
158            private String                  notfoundMsg                     = "MSG0077";    // 対象ãƒ??タはありませんでしたã€?
159            private boolean                 isMainTrans                     = true;                 // 5.1.6.0 (2010/05/01) DBLastSqlの処ç�??見直ã�?
160    
161            /**
162             * Taglibの終äº?‚¿グが見つかったときに処ç�?�™ã‚?doEndTag() ã‚?オーバã?ライドしますã?
163             *
164             * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応ã?release2() ã‚?doEndTag()で呼ぶã€?
165             * @og.rev 3.6.0.8 (2004/11/19) DBTableModel をセーブする時に、トランザクションチェãƒ?‚¯を行いますã?
166             * @og.rev 4.0.0.0 (2007/10/18) メãƒ?‚»ージリソース統å�? getResource().getMessage â‡?getResource().getLabel )
167             * @og.rev 4.3.1.1 (2008/09/03) 検索結果の件数、状況コードをリクエスト変数 "DB.COUNT"ã€?DB.ERR_CODE" にセãƒ?ƒˆするã€?
168             * @og.rev 5.1.6.0 (2010/05/01) DBLastSqlの処ç�??、DBTableModelが新規作æ?されたå?ç�?�§のみ行うã€?
169             *
170             * @return      後続å?ç�??æŒ?¤º
171             */
172            @Override
173            public int doEndTag() {
174                    debugPrint();           // 4.0.0 (2005/02/28)
175    
176                    // QueryOptionTag のå†?ƒ¨で記述されたå?合ã?処ç�??
177                    QueryOptionTag queryOption = (QueryOptionTag)findAncestorWithClass( this,QueryOptionTag.class );
178                    if( queryOption != null ) {
179                            queryOption.setTableModel( makeDBTable() );
180                            return(EVAL_PAGE);
181                    }
182    
183                    // 通常の LDAPQuery 処ç�?
184                    if( check( command, COMMAND_LIST ) ) {
185                            useMainTrans( isMainTrans );                    // 5.1.6.0 (2010/05/01) DBLastSqlの処ç�??見直ã�?
186                            startQueryTransaction( tableId );               // 3.6.0.8 (2004/11/19)
187    
188                            DBTableModel table = makeDBTable();
189    
190                            // 3.6.0.8 (2004/11/19) トランザクションチェãƒ?‚¯を行いますã?
191                            if( ! commitTableObject( tableId, table ) ) {
192                                    jspPrint( "LDAPQueryTag Query処ç�?�Œ割り込まれましたã€?BTableModel は登録しませんã€? );
193                                    return (SKIP_PAGE);
194                            }
195                            StringBuilder buf = new StringBuilder( HybsSystem.BUFFER_SMALL );
196    
197                            // 実行件数の表示 command="NEW" のときã?み、displayMsg を表示させますã?
198                            // 4.0.0 (2005/11/30) 出力é?の変更。ä¸?•ªæœ??に出力しますã?
199                            if( CMD_NEW.equals( command ) ) {
200                                    if( executeCount > 0 && displayMsg != null && displayMsg.length() > 0 ) {
201                                            buf.append( executeCount );
202                                            buf.append( getResource().getLabel( displayMsg ) );
203                                            buf.append( HybsSystem.BR );
204                                    }
205                                    else if( executeCount == 0 && notfoundMsg != null && notfoundMsg.length() > 0 ) {
206                                            buf.append( getResource().getLabel( notfoundMsg ) );
207                                            buf.append( HybsSystem.BR );
208                                    }
209                            }
210    
211                            if( maxRowCount > 0 && maxRowCount <= executeCount ) {
212                                    buf.append( getResource().getLabel( overflowMsg ) );
213                                    buf.append( HybsSystem.BR ).append( HybsSystem.CR );
214                            }
215                            // 4.3.1.1 (2008/09/03) 検索結果の件数、エラーコードをセãƒ?ƒˆするã€?
216                            setRequestAttribute( "DB.COUNT" , String.valueOf( executeCount ) );
217                            setRequestAttribute( "DB.ERR_CODE", String.valueOf( errCode ) );
218    
219                            jspPrint( buf.toString() );
220                    }
221    
222                    return(EVAL_PAGE);
223            }
224    
225            /**
226             * タグリブオブジェクトをリリースしますã?
227             * キャãƒ?‚·ュされて再利用されるã?で、フィールドã?初期設定を行いますã?
228             *
229             * @og.rev 2.0.0.4 (2002/09/27) カスタãƒ?‚¿グの release() メソãƒ?ƒ‰をã?追åŠ?
230             * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応ã?release2() ã‚?doEndTag()で呼ぶã€?
231             * @og.rev 4.2.2.0 (2008/05/10) password 追åŠ?
232             * @og.rev 5.1.6.0 (2010/05/01) DBLastSqlの処ç�??、DBTableModelが新規作æ?されたå?ç�?�§のみ行うã€?
233             *
234             */
235            @Override
236            protected void release2() {
237                    super.release2();
238    
239                    searchScope                     = HybsSystem.sys( "LDAP_SEARCH_SCOPE" );        // 検索ç¯?›²。OBJECT_SCOPE、ONELEVEL_SCOPE、SUBTREE_SCOPE のどれか 1 つ
240                    timeLimit                       = 0;                    // 結果が返されるまでのミリ秒数ã€? の場合ã?無制é™?
241                    derefLinkFlag           = false;                // true の場合ã?検索中にリンクを間接参ç?する
242                    returningObjFlag        = false;                // true の場合ã?エントリの名前にバインドされたオブジェクトを返す。false 場合ã?オブジェクトを返さなã�?
243                    attrs                           = null;                 // エントリとä¸?·’に返される属æ?の識別子ã?null の場合ã?すべての属æ?を返す。空の場合ã?属æ?を返さなã�?
244                    columns                         = null;                 // DBTableModel を作æ?する場合ã?カラãƒ?��になりますã?null の場合ã?、attributes 属æ?
245    
246                    initctx                         = HybsSystem.sys( "LDAP_INITIAL_CONTEXT_FACTORY" );
247                    providerURL             = HybsSystem.sys( "LDAP_PROVIDER_URL" );
248                    entrydn                         = HybsSystem.sys( "LDAP_ENTRYDN" );
249                    password                        = HybsSystem.sys( "LDAP_PASSWORD" );            // 4.2.2.0 (2008/05/10)
250                    searchbase                      = HybsSystem.sys( "LDAP_SEARCH_BASE" );
251                    filter                          = null;         // "employeeNumber=87019";
252    
253                    tableId                         = HybsSystem.TBL_MDL_KEY;       // session?·?°
254                    orderBy                         = null;                 // ?¿?°???目(csv)
255                    command                         = CMD_NEW;              // ?º?�ンï¾?¾?
256                    executeCount            = 0;                    // 検索/実行件数
257                    errCode                         = ErrorMessage.OK; // Ver4.3.1.1 (2008/09/05) 検索エラーコーãƒ?
258                    maxRowCount                     = 0;                    // æœ?¤§検索数(0は無制é™?
259    //              displayMsg              = "MSG0033";    // 件検索しましたã€?
260                    displayMsg                      = HybsSystem.sys( "VIEW_DISPLAY_MSG" );
261                    overflowMsg             = "MSG0007";    // 検索結果がã?制限行数をè¶?�ˆましたので、残りはカãƒ?ƒˆされましたã€?        */
262                    notfoundMsg                     = "MSG0077";    // 対象ãƒ??タはありませんでしたã€?
263                    isMainTrans                     = true;                 // 5.1.6.0 (2010/05/01) DBLastSqlの処ç�??見直ã�?
264            }
265    
266            /**
267             * LDPA から、å?を取りå?しã?DBTableModel を作æ?しますã?
268             *
269             * @og.rev 4.2.2.0 (2008/05/10) entrydn と、password 処ç�??追åŠ?
270             *
271             * @return      ãƒ??ブルモãƒ?ƒ«
272             */
273            private DBTableModel makeDBTable() {
274                    if( filter == null ) {
275                            String errMsg = "S検索フィルターに null が指定されましたã€? ;
276                            throw new HybsSystemException( errMsg );
277                    }
278    
279                    LDAPSearch serch = new LDAPSearch();
280                    serch.setSearchScope( searchScope ) ;
281                    serch.setTimeLimit( timeLimit ) ;
282                    serch.setDerefLinkFlag( derefLinkFlag ) ;
283                    serch.setReturningObjFlag( returningObjFlag ) ;
284                    serch.setMaxRowCount( maxRowCount ) ;
285                    serch.setAttributes( attrs ) ;
286                    serch.setInitctx( initctx ) ;
287                    serch.setProviderURL( providerURL ) ;
288                    serch.setSearchbase( searchbase ) ;
289                    if( entrydn != null  ) { serch.setEntrydn( entrydn ) ; }        //4 .2.2.0 (2008/05/10)
290                    if( password != null ) { serch.setPassword( password ) ; }      //4 .2.2.0 (2008/05/10)
291                    serch.setOrderBy( orderBy ) ;
292                    serch.init();
293    
294                    List<String[]> list = serch.search( filter );
295                    executeCount = list.size();
296    
297    //              DBTableModel table = DBTableModelUtil.newDBTable();
298                    String[] ids = serch.getAttributes();   // attrs ã�?null の場合ã?全件。それ以外ã?、attrs
299    
300                    // DBTableModel に使用するカラãƒ?��の登録
301                    if( columns != null && columns.length > 0 ) {
302                            if( ids.length != columns.length ) {
303                                    String errMsg = "attributes 属æ?とcolumns属æ?の個数が異なりますã?"
304                                                            + "attrs=[" + attrs.length + "]:" + StringUtil.array2csv( attrs )
305                                                            + HybsSystem.CR
306                                                            + " columns=[" + columns.length + "]:" + StringUtil.array2csv( columns )
307                                                            + HybsSystem.CR ;
308                                    throw new HybsSystemException( errMsg );
309                            }
310                            for( int i=0; i<columns.length; i++ ) {
311                                    // columns にカラãƒ?��が設定されてã�?‚‹場合ã?み、使用するã€?
312                                    if( columns[i] != null && columns[i].length() > 0 ) {
313                                            ids[i] = columns[i];
314                                    }
315                            }
316                    }
317    
318                    DBTableModel table = null;
319                    if( ids.length > 0 ) {
320                            table = DBTableModelUtil.newDBTable();
321                            table.init( ids.length );
322                            for( int clm=0; clm<ids.length; clm++ ) {
323                                    DBColumn dbColumn = getResource().makeDBColumn( ids[clm] );
324                                    table.setDBColumn( clm,dbColumn );
325                            }
326    
327                            for( int row=0; row<executeCount; row++ ) {
328                                    table.addColumnValues( list.get( row ) );
329                            }
330                    }
331                    return table ;
332            }
333    
334            /**
335             * 【TAG】検索ç¯?›²(OBJECT/ONELEVEL/SUBTREE)を設定しまã�?
336             *              (初期値:LDAP_SEARCH_SCOPE[={@og.value org.opengion.hayabusa.common.SystemData#LDAP_SEARCH_SCOPE}])ã€?
337             *
338             * @og.tag
339             * 検索ç¯?›²ã‚?OBJECT_SCOPE、ONELEVEL_SCOPE、SUBTREE_SCOPE のどれか 1 つですã?
340             * æŒ?®š文字å?は、それぞれã?OBJECT』ã?ONELEVEL』ã?SUBTREE』ですã?
341             * (初期値:シスãƒ?ƒ 定数のLDAP_SEARCH_SCOPE[={@og.value org.opengion.hayabusa.common.SystemData#LDAP_SEARCH_SCOPE}])ã€?
342             *
343             * @param       scope SearchControls の検索ç¯?›²
344             * @see         org.opengion.hayabusa.common.SystemData#LDAP_SEARCH_SCOPE
345             */
346            public void setSearchScope( final String scope ) {
347                    searchScope = nval( getRequestParameter( scope ), searchScope );
348            }
349    
350            /**
351             * 【TAG】これらの SearchControls の時間制限をミリ秒単位で設定しまã�?初期値:0[無制限])ã€?
352             *
353             * @og.tag
354             * 値ã�?0 の場合ã?無制限にå¾?�¤ことを意味しますã?
355             *
356             * @param       limit ミリ秒単位ã?時間制é™?初期値:無制é™?
357             */
358            public void setTimeLimit( final String limit ) {
359                    timeLimit = nval( getRequestParameter( limit ), timeLimit );
360            }
361    
362            /**
363             * 【TAG】検索中のリンクへの間接参ç?を有効またã?無効[true/false]にしまã�?初期値:false)ã€?
364             *
365             * @og.tag 検索中のリンクへの間接参ç?を有効またã?無効にしますã?
366             *
367             * @param       deref リンクをé?参ç?する場合ã? true、そã�?�§なã�??合ã? false(初期値:false)
368             */
369            public void setDerefLinkFlag( final String deref ) {
370                    derefLinkFlag = nval( getRequestParameter( deref ), derefLinkFlag );
371            }
372    
373            /**
374             * 【TAG】結果のä¸?ƒ¨としてオブジェクトを返すことを有効またã?無効[true/false]にしまã�?初期値:false)ã€?
375             *
376             * @og.tag
377             * 無効にした場合ã?オブジェクトã?名前およびクラスã�?�‘が返されますã?
378             * 有効にした場合ã?オブジェクトが返されますã?
379             *
380             * @param       pbjflag オブジェクトが返される場合ã? true、そã�?�§なã�??合ã? false(初期値:false)
381             */
382            public void setReturningObjFlag( final String pbjflag ) {
383                    returningObjFlag = nval( getRequestParameter( pbjflag ), returningObjFlag );
384            }
385    
386            /**
387             * 【TAG】レジストリのæœ?¤§検索件数をセãƒ?ƒˆしまã�?初期値:0[無制限])ã€?
388             *
389             * @og.tag
390             * DBTableModelのãƒ??タとして登録するæœ?¤§件数をこの値に設定しますã?
391             * サーバã?のメモリè³?º�と応答時間ã?確保ã?為ですã?
392             * 初期値はã€? は、無制限ですã?
393             *
394             * @param       count レジストリのæœ?¤§検索件数
395             */
396            public void setMaxRowCount( final String count ) {
397                    maxRowCount = nval( getRequestParameter( count ),maxRowCount );
398            }
399    
400            /**
401             * 【TAG】検索のä¸?ƒ¨として返される属æ?をCSVでè¤?•°æŒ?®šしますã?
402             *
403             * @og.tag
404             * null は属æ?が何も返されなã�?�“とを示しますã?
405             * こã?メソãƒ?ƒ‰からは、空の配å?をセãƒ?ƒˆすることは出来ませんã€?
406             *
407             * @og.rev 3.5.6.2 (2004/07/05) 先に配å?にåˆ?§£してからリクエスト変数の値を取å¾?
408             * @og.rev 3.7.0.4 (2005/03/18) リクエスト変数の値を取得後ã?åˆ?§£しますã?
409             *
410             * @param       val 返される属æ?を識別する属æ? ID のç¾??(カンマ区åˆ?‚Šæ–?­?
411             */
412            public void setAttributes( final String val ) {
413                    String att = nval( getRequestParameter( val ),null );
414                    if( att != null ) {
415                            attrs = StringUtil.csv2Array( att );
416                    }
417            }
418    
419            /**
420             * 【TAG】作æ?する DBTableModel のカラãƒ?��をCSV形式でæŒ?®šしますã?
421             *
422             * @og.tag
423             * なにも指定しなã�??合ã?、attributes 属æ?が使用されますã?
424             * LDAP検索結果に、別名をつけるイメージで使用しますã?
425             *
426             * @og.rev 3.7.1.0 (2005/04/26) 新規追åŠ?
427             *
428             * @param       clm 作æ?する DBTableModel のカラãƒ?��(カンマ区åˆ?‚Šæ–?­?
429             */
430            public void setColumns( final String clm ) {
431                    String cl = nval( getRequestParameter( clm ),null );
432                    if( cl != null ) {
433                            columns = StringUtil.csv2Array( cl );
434                    }
435            }
436    
437            /**
438             * 【TAG】å?期コンãƒ?‚­ストファクトリを指定しまã�?
439             *              (初期値:LDAP_INITIAL_CONTEXT_FACTORY[={@og.value org.opengion.hayabusa.common.SystemData#LDAP_INITIAL_CONTEXT_FACTORY}])ã€?
440             *
441             * @og.tag
442             * ä¾?com.sun.jndi.ldap.LdapCtxFactory
443             * (初期値:シスãƒ?ƒ 定数のLDAP_INITIAL_CONTEXT_FACTORY[={@og.value org.opengion.hayabusa.common.SystemData#LDAP_INITIAL_CONTEXT_FACTORY}])ã€?
444             *
445             * @param       ctx 初期コンãƒ?‚­ストファクトリ
446             * @see         org.opengion.hayabusa.common.SystemData#LDAP_INITIAL_CONTEXT_FACTORY
447             */
448            public void setInitctx( final String ctx ) {
449                    initctx = nval( getRequestParameter( ctx ), initctx );
450            }
451    
452            /**
453             * 【TAG】サービスプロバイãƒ??構æ?æƒ??を指定しまã�?
454             *              (初期値:LDAP_PROVIDER_URL[={@og.value org.opengion.hayabusa.common.SystemData#LDAP_PROVIDER_URL}])ã€?
455             *
456             * @og.tag
457             * プロトコルとサーバã?とポã?トをæŒ?®šしますã?
458             * ä¾?『ldap://ldap.opengion.org:389ã€?
459             * (初期値:シスãƒ?ƒ 定数のLDAP_PROVIDER_URL[={@og.value org.opengion.hayabusa.common.SystemData#LDAP_PROVIDER_URL}])ã€?
460             *
461             * @param       url サービスプロバイãƒ??構æ?æƒ??
462             * @see         org.opengion.hayabusa.common.SystemData#LDAP_PROVIDER_URL
463             */
464            public void setProviderURL( final String url ) {
465                    providerURL = nval( getRequestParameter( url ), providerURL );
466            }
467    
468            /**
469             * 【TAG】検索するコンãƒ?‚­ストまたã?オブジェクトã?名前を設定しまã�?
470             *              (初期値:LDAP_SEARCH_BASE[={@og.value org.opengion.hayabusa.common.SystemData#LDAP_SEARCH_BASE}])ã€?
471             *
472             * @og.tag
473             * ä¾?『soOUID=employeeuser,o=opengion,c=JPã€?
474             * (初期値:シスãƒ?ƒ 定数のLDAP_SEARCH_BASE[={@og.value org.opengion.hayabusa.common.SystemData#LDAP_SEARCH_BASE}])ã€?
475             *
476             * @param       base 検索ベã?ス
477             * @see         org.opengion.hayabusa.common.SystemData#LDAP_SEARCH_BASE
478             */
479            public void setSearchbase( final String base ) {
480                    searchbase = nval( getRequestParameter( base ), searchbase );
481            }
482    
483            /**
484             * 【TAG】検索に使用するフィルタå¼?例:belongOUID=61200)ã€?
485             *
486             * @og.tag
487             * ä¾?『belongOUID=61200ã€?
488             *
489             * @param       siki フィルタå¼?
490             */
491            public void setFilter( final String siki ) {
492                    filter = nval( getRequestParameter( siki ), filter );
493            }
494    
495            /**
496             * 【TAG】属æ?の取得å?のオブジェクトã?名前を設定しまã�?
497             *              (初期値:LDAP_ENTRYDN[={@og.value org.opengion.hayabusa.common.SystemData#LDAP_ENTRYDN}])ã€?
498             *
499             * @og.tag
500             * ä¾?『soOUID=opengion-sys,o=opengion,c=JPã€?
501             * (初期値:シスãƒ?ƒ 定数のLDAP_ENTRYDN[={@og.value org.opengion.hayabusa.common.SystemData#LDAP_ENTRYDN}])ã€?
502             *
503             * @og.rev 4.2.2.0 (2008/05/10) 初期値変更
504             *
505             * @param       dn 取得å?のオブジェクトã?名前
506             * @see         org.opengion.hayabusa.common.SystemData#LDAP_ENTRYDN
507             */
508            public void setEntrydn( final String dn ) {
509                    entrydn = nval( getRequestParameter( dn ), entrydn );
510            }
511    
512            /**
513             * 【TAG】属æ?の取得å?のオブジェクトã?パスワードを設定しまã�?
514             *              (初期値:LDAP_PASSWORD[={@og.value org.opengion.hayabusa.common.SystemData#LDAP_PASSWORD}])ã€?
515             *
516             * @og.tag
517             * (初期値:シスãƒ?ƒ 定数のLDAP_PASSWORD[={@og.value org.opengion.hayabusa.common.SystemData#LDAP_PASSWORD}])ã€?
518             *
519             * @og.rev 4.2.2.0 (2008/05/10) 新規追åŠ?
520             *
521             * @param       pwd 取得å?のオブジェクトã?パスワーãƒ?
522             * @see         org.opengion.hayabusa.common.SystemData#LDAP_PASSWORD
523             */
524            public void setPassword( final String pwd ) {
525                    password = nval( getRequestParameter( pwd ), password );
526            }
527    
528            /**
529             * 【TAGã€?通常は使ã�?�¾せん)結果のDBTableModelをã?sessionに登録するときã?キーを指定しまã�?
530             *              (初期値:HybsSystem#TBL_MDL_KEY[={@og.value org.opengion.hayabusa.common.HybsSystem#TBL_MDL_KEY}])ã€?
531             *
532             * @og.tag
533             * 検索結果より、DBTableModelオブジェクトを作æ?しますã?これをã?下流ã?viewタグ等に
534             * 渡すå?合にã€??常は、session を利用しますã?そã?場合ã?登録キーですã?
535             * query タグを同時に実行して、結果を求めるå?合ã?同ä¸?ƒ¡モリに配置される為ã€?
536             * こã? tableId 属æ?を利用して、メモリ空間をåˆ?�‘ますã?
537             *              (初期値:HybsSystem#TBL_MDL_KEY[={@og.value org.opengion.hayabusa.common.HybsSystem#TBL_MDL_KEY}])ã€?
538             *
539             * @param       id sessionに登録する時ã? ID
540             */
541            public void setTableId( final String id ) {
542                    tableId = nval( getRequestParameter( id ), tableId );
543            }
544    
545            /**
546             * 【TAG】検索した結果を表示する表示é ?‚’ファイル属æ?名でæŒ?®šしますã?
547             *
548             * @og.tag
549             * attributes 属æ?でæŒ?®šするキー、またã?、LDAPから返されたキーにつã�?�¦
550             * そã?属æ?でソートしますã?é€??を行う場合ã?、DESC を指定ã?カラãƒ?��の後ろに
551             * 付けて下さã�??
552             *
553             * @param       ordr    ソートキーを指定ã?
554             */
555            public void setOrderBy( final String ordr ) {
556                    orderBy = nval( getRequestParameter( ordr ), orderBy );
557                    if( orderBy != null ) { orderBy = orderBy.toUpperCase(Locale.JAPAN) ; }
558            }
559    
560            /**
561             * 【TAG】コマンãƒ?NEW,RENEW)をセãƒ?ƒˆしまã�?初期値:NEW)ã€?
562             *
563             * @og.tag
564             * コマンドã?,HTMLから(get/post)æŒ?®šされますã?で,CMD_xxx で設定される
565             * フィールド定数値のã�?�¥れかをã?æŒ?®šできますã?
566             * 何も設定されなã�??またã?、null の場合ã?ã€?NEW" がå?期å?にセãƒ?ƒˆされますã?
567             *
568             * @param       cmd コマンãƒ?public static final 宣è¨?�•れてã�?‚‹æ–?­—å?)
569             * @see         <a href="../../../../constant-values.html#org.opengion.hayabusa.taglib.LDAPQueryTag.CMD_NEW">コマンド定数</a>
570             */
571            public void setCommand( final String cmd ) {
572                    String cmd2 = getRequestParameter( cmd );
573                    if( cmd2 != null && cmd2.length() > 0 ) { command = cmd2.toUpperCase(Locale.JAPAN); }
574            }
575    
576            /**
577             * 【TAG】検索結果を画面上に表示するメãƒ?‚»ージリソースIDを指定しまã�?初期値は検索件数)ã€?
578             *
579             * @og.tag
580             * ここでは、検索結果の件数ã‚?™»録された件数をまずå?力しã€?
581             * そã?次に、ここでæŒ?®šしたメãƒ?‚»ージをリソースから取得して
582             * 表示しますã?
583             * 表示させたくなã�??合ã?, displayMsg = "" をセãƒ?ƒˆしてくださいã€?
584             * 初期値は、検索件数を表示しますã?
585             *
586             * @param       id ãƒ?‚£スプレイに表示させるメãƒ?‚»ージ ID
587             */
588            public void setDisplayMsg( final String id ) {
589                    displayMsg = getRequestParameter( id );
590            }
591    
592            /**
593             * 【TAG】検索結果がゼロ件の場合に表示するメãƒ?‚»ージリソースIDを指定しまã�?初期値:MSG0077[対象ãƒ??タはありませんでした])ã€?
594             *
595             * @og.tag
596             * ここでは、検索結果がゼロ件の場合ã?み、特別なメãƒ?‚»ージを表示させますã?
597             * 従来は、displayMsg と兼用で、ã?0ã€?»¶検索しました』とã�?�†表示でしたがã?
598             * displayMsg の初期表示は、OFF になりましたので、ゼロ件の場合ã?み別に表示させますã?
599             * 表示させたくなã�??合ã?, notfoundMsg = "" をセãƒ?ƒˆしてくださいã€?
600             * 初期値は、MSG0077[対象ãƒ??タはありませんでした]ですã?
601             *
602             * @param       id ãƒ?‚£スプレイに表示させるメãƒ?‚»ージ ID
603             */
604            public void setNotfoundMsg( final String id ) {
605                    String ids = getRequestParameter( id );
606                    if( ids != null ) { notfoundMsg = ids; }
607            }
608    
609            /**
610             * 【TAG】オーバã?フロー時に画面上に表示するメãƒ?‚»ージIDを指定しまã�?初期値:MSG0007)ã€?
611             *
612             * @og.tag
613             * 表示させたくなã�??合ã?, overflowMsg = "" をセãƒ?ƒˆしてくださいã€?
614             *
615             * @param       id ãƒ?‚£スプレイに表示させるメãƒ?‚»ージ ID
616             */
617            public void setOverflowMsg( final String id ) {
618                    overflowMsg = getRequestParameter( id );
619            }
620    
621            /**
622             * 【TAGã€?通常使ã�?�¾せん)タグで処ç�?�•れる処ç�?�Œメインとなるトランザクション処ç�?�‹どã�?�‹を指定しまã�?初期値:false)ã€?
623             *
624             * @og.tag
625             * こã?値は、ファイルãƒ?‚¦ンロードå?ç�?�«影響しますã?こã?値がtrueにæŒ?®šされた時にcommitされたDBTableModelã�?
626             * ファイルãƒ?‚¦ンロードã?対象の表になりますã?
627             *
628             * こã?パラメーターはã€??常、各タグにより実è£?�•れã?ユーザーが指定するå¿?¦�ã?ありませんã€?
629             * ä½?�—ã€?つのJSPå†?�§DBTableModelがè¤?•°生æ?されるå?合に、前に処ç�?�—たDBTableModelにつã�?�¦ファイルãƒ?‚¦ンロードをさせたい
630             * 場合ã?、後ろでDBTableModelを生成するタグで、æ?示çš?�«こã?値をfalseにæŒ?®šすることで、ファイルãƒ?‚¦ンロードå?ç�??対象から
631             * 除外することができますã?
632             *
633             * @og.rev 5.1.6.0 (2010/05/01) 新規作æ?
634             *
635             * @param  flag メイントランザクションかどã�?�‹
636             */
637            public void setMainTrans( final String flag ) {
638                    isMainTrans = nval( getRequestParameter( flag ),isMainTrans );
639            }
640    
641            /**
642             * こã?オブジェクトã?æ–?­—å?表現を返しますã?
643             * 基本çš?�«ãƒ?ƒ�ãƒ?‚°目çš?�«使用しますã?
644             *
645             * @return こã?クラスのæ–?­—å?表現
646             */
647            @Override
648            public String toString() {
649                    return org.opengion.fukurou.util.ToString.title( this.getClass().getName() )
650                                    .println( "VERSION"                             ,VERSION                )
651                                    .println( "initctx"                     ,initctx                )
652                                    .println( "providerURL"                 ,providerURL    )
653                                    .println( "entrydn"                     ,entrydn                )
654                                    .println( "searchbase"                  ,searchbase             )
655                                    .println( "filter"                              ,filter                 )
656                                    .println( "searchScope"                 ,searchScope    )
657                                    .println( "COUNTLIMIT"                  ,COUNTLIMIT             )
658                                    .println( "timeLimit"                   ,timeLimit              )
659                                    .println( "attrs"                               ,attrs                  )
660                                    .println( "columns"                             ,columns                )
661                                    .println( "returningObjFlag"    ,returningObjFlag)
662                                    .println( "derefLinkFlag"               ,derefLinkFlag  )
663                                    .println( "tableId"                     ,tableId                )
664                                    .println( "orderBy"                             ,orderBy                )
665                                    .println( "command"                             ,command                )
666                                    .println( "executeCount"                ,executeCount   )
667                                    .println( "errCode"                             ,errCode                )
668                                    .println( "maxRowCount"                 ,maxRowCount    )
669                                    .println( "displayMsg"                  ,displayMsg     )
670                                    .println( "overflowMsg"                 ,overflowMsg    )
671                                    .println( "Other..."                    ,getAttributes().getAttribute() )
672                                    .fixForm().toString() ;
673            }
674    }