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.HybsSystemException;
019    import org.opengion.fukurou.util.StringUtil;
020    import org.opengion.fukurou.util.TagBuffer;
021    
022    /**
023     * option/ogTbodyMovable.js JavaScript を利用したマウスによる上下移動にシンクロ等させます?
024     *
025     * headタグで、useTbodyMovable="true" をセ?すると、?ウスまた?カーソルで?
026     * tbody 部を上下に移動させることが可能です?
027     * こ?タグは、その動作に関連付けて、同期して移動させたり??を?れ替えるカラ?
028     * ?に?1??1するカラ??移動?制限(?替対象にしな??ドラ?できな?ど??
029     * を指定します?
030     * 記述は、view の後で構いません?
031     *
032     * こ?タグを有効にするには、headタグで、useTbodyMovable="true" をセ?する?があります?
033     * なお?こ? JavaScript は?行単位に tbody を記述して? view であれば、有効です?
034     * ?で、tr ではなく?tbody を??て?ためです?
035     * ?つまり?ガント専用ではありませんが?HTMLTableには使えません。?
036     *
037     * こ?タグは、span タグを?力し、ogTbodyMovable.js で処?て?す?そ?際?キーとして?
038     * span タグ には、class="tbodyMovable" を付けて?す?
039     *
040     * @og.formSample
041     * ●形式?lt;og:tbodyMovable  ... />
042     * ●body?な?
043     * ●前提:headタグで、useTbodyMovable="true" を指定してください?
044     *
045     * ●Tag定義??
046     *   <og:tbodyMovable
047     *       seqclm             【TAG】移動時に値を?れ替えするカラ?(カンマ区?で??可能,先?名称で判断)(初期値:SEQ)
048     *       noMove             【TAG】?替制限す?tbodyのクラス?カンマ区?で??可能)
049     *       noDrag             【TAG】?ウスでドラ?できな?tbodyのクラス?カンマ区?で??可能)
050     *       adjustSeq          【TAG】上移?-1)、下移?+1)で、?をセ?するカラ?(?つのみ、seqclmで?されて??あ?
051     *       sync               【TAG】他?TABLEを同期して移動させる場合に、クラス/IDを指?
052     *       debug              【TAG】デバッグ??を?力するかど?[true/false]を指定しま?初期値:false)
053     *   />
054     *
055     * ●使用?
056     *   <og:tbodyMovable
057     *      seqclm      = "DYORDER,SEQ"
058     *      noMove      = "disMovable"
059     *      noDrag      = "disDragable"
060     *      adjustSeq   = "DYORDER"
061     *      sync        = "fixBodyDiv"
062     *   />
063     *
064     * @og.rev 5.6.3.3 (2013/04/19) 新規作?
065     * @og.group 画面部?
066     *
067     * @version  5.0
068     * @author       Kazuhiko Hasegawa
069     * @since    JDK6.0,
070     */
071    public class TbodyMovableTag extends CommonTagSupport {
072            //* こ?プログラ??VERSION??を設定します?       {@value} */
073            private static final String VERSION = "5.6.3.3 (2013/04/19)" ;
074    
075            private static final long serialVersionUID = 563320130419L ;
076    
077            private TagBuffer tag = new TagBuffer( "span" ) ;
078    
079            /**
080             * Taglibの終?グが見つかったときに処??doEndTag() ?オーバ?ライドします?
081             *
082             * @return      後続????
083             */
084            @Override
085            public int doEndTag() {
086                    debugPrint();           // 4.0.0 (2005/02/28)
087    
088                    tag.add( "class","tbodyMovable" );
089                    jspPrint( tag.makeTag() );
090    
091                    return(EVAL_PAGE);              // ペ?ジの残りを評価する?
092            }
093    
094            /**
095             * タグリブオブジェクトをリリースします?
096             * キャ?ュされて再利用される?で、フィールド?初期設定を行います?
097             *
098             */
099            @Override
100            protected void release2() {
101                    super.release2();
102                    tag = new TagBuffer( "span" );
103            }
104    
105            /**
106             * 【TAG】移動時に値を?れ替えするカラ?を指定しま?カンマ区?で??可能,先?名称で判断)(初期値:SEQ)?
107             *
108             * @og.tag
109             * 該当タグのseqclm属?値が存在する場合?シーケンスカラ?とします?
110             * 上下移動で、同期して動きますが、このカラ??値も?れ替わります?判りにくいですが?
111             * つまり位置は入れ替わらな??事です?
112             * 例えば、レコードに連番を振っておき、このカラ?け移動しな??で、当?の連番のままとなり?
113             * そ?値を?に、計算しなおすことで、納期調整を行ったりします?
114             * シーケンスは?カラ??先?名称で判断するので注意して下さ??
115             * ?:SEQの?でSEQUENCEカラ?判定されてしま?? 
116             * seqclm属?はカンマ区?で??可能です? 
117             * 初期値 は?SEQ" です?
118             *
119             * @param   seqclm 移動時に値を?れ替えた?ラ?(カンマ区?で??可能)
120             */
121            public void setSeqclm( final String seqclm ) {
122                    tag.add( "seqclm",StringUtil.nval( getRequestParameter( seqclm ),null ) );
123            }
124    
125            /**
126             * 【TAG】?替制?移動できな?する tbodyのクラス名を?しま?カンマ区?で??可能)?
127             *
128             * @og.tag
129             * tbody?入替制限する?合に、tbodyにここで?し?class 属?を付与しておくことで?
130             * 入れ替え対象から除外されます??簡単に?と、これを飛?越えて移動できません??
131             * 例えば、グループ化して?レコード??でしか入れ替えたくな??・・などの時に使用します?
132             * 
133             * ここでは、カンマ区?で?のクラス名を?可能です?
134             *
135             * @param   noMove 入替対象でな?tbodyのクラス?カンマ区?で??可能)
136             */
137            public void setNoMove( final String noMove ) {
138                    tag.add( "noMove",StringUtil.nval( getRequestParameter( noMove ),null ) );
139            }
140    
141            /**
142             * 【TAG】?ウスでドラ?できな?tbodyのクラス名を?しま?カンマ区?で??可能)?
143             *
144             * @og.tag
145             * tbody?ドラ?したくな??合に、tbodyにここで?し?class 属?を付与しておくことで?
146             * ドラ?対象から除外されます??簡単に?と、掴めません??
147             * これは、対象の tbody がつかめな?けで、その前後? tbody と入れ替え?されます?
148             * 位置はどこに行くか判りませんが?ここで?し?tbody の?は保証されます?
149             *
150             * 例えば、納期確定して?レコード?入れ替えたくな??・・などの時に使用します?
151             * 
152             * ここでは、カンマ区?で?のクラス名を?可能です?
153             *
154             * @param   noDrag マウスでドラ?できな?tbodyのクラス?カンマ区?で??可能)
155             */
156            public void setNoDrag( final String noDrag ) {
157                    tag.add( "noDrag",StringUtil.nval( getRequestParameter( noDrag ),null ) );
158            }
159    
160            /**
161             * 【TAG】上移?-1)、下移?+1)で、?をセ?するカラ?(?つのみ、seqclmで?されて??あ??
162             *
163             * @og.tag
164             * adjustSeq属?で?したカラ??eqclmで?されて??あり)??
165             * 上に動かした時?上?値から-1された?を?下に動かした時?下?値に+1した値?
166             * セ?するような動作になります?これは?つのみ?可能です?
167             * 
168             * 移動時に値を?れ替えするカラ?の特殊版と?ます?
169             * ここでは、カラ?は?つのみ?可能で、かつ、seqclmで?されて??があります?
170             *
171             * @param   adjustSeq 上移?-1)、下移?+1)で、?をセ?するカラ?
172             */
173            public void setAdjustSeq( final String adjustSeq ) {
174                    tag.add( "adjustSeq",StringUtil.nval( getRequestParameter( adjustSeq ),null ) );
175            }
176    
177            /**
178             * 【TAG】他?TABLEを同期して移動させる場合に、クラス/IDを指定します?
179             *
180             * @og.tag
181             * 左右??ント系の??ブル部とガント部に?れて?ような??ブルで、上下移動を
182             * 行う場合に、ドラ?して?レコードに同期させて移動させることが可能です?
183             * ここで?するクラスは、tableか?table直上?要??クラスのみ?可能です?
184             * また?tbodyMovableが?ある場合?先?の属?値がセ?されます?
185             *
186             * @param   sync 他?TABLEを同期して移動させる場合に?するクラス/ID
187             */
188            public void setSync( final String sync ) {
189                    tag.add( "sync",StringUtil.nval( getRequestParameter( sync ),null ) );
190            }
191    
192            /**
193             * タグの名称を?返します?
194             * 自??身のクラス名より?自動的に取り出せな?め?こ?メソ?をオーバ?ライドします?
195             *
196             * @return  タグの名称
197             */
198            @Override
199            protected String getTagName() {
200                    return "tbodyMovable" ;
201            }
202    
203            /**
204             * こ?オブジェクト???表現を返します?
205             * 基本???目?使用します?
206             *
207             * @return こ?クラスの??表現
208             */
209            @Override
210            public String toString() {
211                    return org.opengion.fukurou.util.ToString.title( this.getClass().getName() )
212                                    .println( "VERSION"             ,VERSION        )
213                                    .println( "tag"                 ,tag.makeTag()  )
214                                    .println( "Other..."    ,getAttributes().getAttribute() )
215                                    .fixForm().toString() ;
216            }
217    }