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    }