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.db;
017
018import org.opengion.hayabusa.common.HybsSystem;
019import org.opengion.fukurou.util.StringFormat;
020import org.opengion.fukurou.util.StringUtil;
021
022/**
023 * 動的プルダウンなどで利用されるイベントカラムの各種情報を保持するための
024 * 管理クラスです。
025 *
026 * 内容を置き換えるカラム(子カラム)の名前をキーに、イベントカラム(親カラム)や、
027 * イベント発行時の処理URL等を管理します。
028 *
029 * これらの情報は、ColumnTagやSelectTag、ViewFormTagなどで登録され、その結果を
030 * JavaScriptのコードとして出力します。(common/eventColumn.jsp)
031 *
032 * ここで出力された情報をイベント発行時に、JavaScriptが参照し、処理URLに渡す
033 * ことで、動的な項目の入れ替えを実現しています。
034 *
035 * @og.rev 5.1.7.0 (2010/06/01) 新規追加
036 * @og.rev 5.9.0.1 (2015/09/11) アンダースコア対応
037 *
038 * @version  4.0
039 * @author   Hiroki Nakamura
040 * @since    JDK5.0,
041 */
042public class DBEventColumn {
043
044        private static final String EVENT_COLUMN_URL = HybsSystem.sys( "JSP" ) + "/" + HybsSystem.sys( "EVENT_COLUMN_URL" );
045
046        final String name;                      // 内容を置き換えるカラム(子カラム)
047        final String evCol;                     // イベントカラム(親カラム・カンマ区切り)
048        final String eventUrl;          // イベント発行時の処理URL
049        final String renderer;          // 子カラムのレンデラー
050        final String editor;            // 子カラムのエディター
051        final String rendParam;         // 子カラムの表示パラメーター
052        final String editParam;         // 子カラムの編集パラメーター
053
054        /**
055         * 初期情報を含んだ新規オブジェクトを作成します。
056         *
057         * @param name 内容を置き換えるカラム(子カラム)
058         * @param evCol イベントカラム(親カラム・カンマ区切り)
059         * @param eventUrl イベント発行時の処理URL
060         * @param renderer 子カラムのレンデラー
061         * @param editor 子カラムのエディター
062         * @param rendParam 子カラムの表示パラメーター
063         * @param editParam 子カラムの編集パラメーター
064         */
065        public DBEventColumn( final String name, final String evCol, final String eventUrl,
066                                                        final String renderer, final String editor, final String rendParam, final String editParam ) {
067                this.name               = name;
068                this.evCol              = evCol;
069                 // 5.1.9.0 (2010/08/01) 動的プルダウン不具合対応
070                this.eventUrl   = ( eventUrl != null && eventUrl.length() > 0 ) ? eventUrl : EVENT_COLUMN_URL;
071                this.renderer   = renderer;
072                this.editor             = editor;
073                this.rendParam  = rendParam;
074                this.editParam  = editParam;
075        }
076
077        /**
078         * 内容を置き換えるカラム(子カラム)を返します。
079         *
080         * @return 内容を置き換えるカラム(子カラム)
081         */
082        public String getName() { return name; }
083
084        /**
085         * イベントカラム(親カラム・カンマ区切り)を返します。
086         *
087         * @return イベントカラム(親カラム・カンマ区切り)
088         */
089        public String getEventColumn() { return evCol; }
090
091        /**
092         * イベント発行時の処理URLを返します。
093         *
094         * @og.rev 5.1.8.0 (2010/07/01) getEventUrl ⇒ getEventURL に変更
095         *
096         * @return イベント発行時の処理URL
097         */
098//      public String getEventUrl() { return eventUrl; }
099        public String getEventURL() { return eventUrl; }
100
101        /**
102         * 子カラムのレンデラーを返します。
103         *
104         * @return 子カラムのレンデラー
105         */
106        public String getRenderer() { return renderer; }
107
108        /**
109         * 子カラムのエディターを返します。
110         *
111         * @return 子カラムのエディター
112         */
113        public String getEditor() { return editor; }
114
115        /**
116         * 子カラムの表示パラメーターを返します。
117         * 
118         * @og.rev 5.9.0.1 (2015/09/11) アンダースコア対応
119         *
120         * @return 子カラムの表示パラメーター
121         */
122        public String getRendParam() {
123                StringFormat sf = new StringFormat(
124                                                        rendParam
125//                                                      ,"{@" + evCol.replace( ",", "}:{@" ) + "}"
126                                                        ,"{@" + evColReplace(evCol).replace( ",", "}:{@" ) + "}"
127                                                        ,name );
128                return sf.format();
129        }
130
131        /**
132         * 子カラムの編集パラメーターを返します。
133         * 
134         * @og.rev 5.9.0.1 (2015/09/11) アンダースコア対応
135         *
136         * @return 子カラムの編集パラメーター
137         */
138        public String getEditParam() {
139                StringFormat sf = new StringFormat(
140                                                        editParam
141//                                                      ,"{@" + evCol.replace( ",", "}:{@" ) + "}"
142                                                        ,"{@" + evColReplace(evCol).replace( ",", "}:{@" ) + "}"
143                                                        ,name );
144                return sf.format();
145        }
146        
147        /**
148         * カンマ区切りのカラム名から先頭のアンダースコアを外します。
149         *
150         * @og.rev 5.9.0.1 (2015/09/11) 新規作成
151         *
152         * @param inStr カンマ区切りイベントカラム
153         * @return 先頭アンダースコアを外したカンマ区切り文字列
154         */
155        private String evColReplace( final String inStr ){
156                final String[] to;
157                if( inStr != null && inStr.indexOf( ',' ) >= 0 ) {
158                        to = StringUtil.csv2Array( inStr, ',' );
159                }
160                else {
161                        to = new String[] { inStr };
162                }
163                
164
165                for( int i = 0; i < to.length; i++ ) {
166                        if( to[i].charAt( 0 ) == '_'){
167                                to[i] = to[i].substring( 1 );
168                        }
169                }
170                
171                return org.opengion.fukurou.util.StringUtil.array2csv(to);
172        }
173}