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.fukurou.util;
017    
018    // import java.text.DateFormat;
019    // import java.text.SimpleDateFormat;
020    // import java.util.Locale;
021    // import java.util.Calendar;
022    import java.util.ArrayList;
023    import java.util.Map;
024    import java.util.HashMap;
025    
026    /**
027     * SystemParameter ã¯ã€{@XXXX} æ–?­—å?ã‚’å?ç?™ã‚‹ã‚¯ãƒ©ã‚¹ã§ã™ã?
028     * ã“ã?クラスã§ã¯ã€{@XXXX} æ–?­—å?ã‚’åˆ¥ã®æ–?­—å?ã¨ç½®ãæ›ãˆã‚‹ã“ã¨ã‚??
029     * 予ã‚予ç´?•れã¦ã?‚‹äºˆç´?ª?{@SYS.XXXX} æ–?­—å?ã‚’ç½®ãæ›ãˆã¾ã™ã?
030     * 通常㮠{@XXXX} æ–?­—å?ã®ç½®ãæ›ãˆã?ã€ã‚­ãƒ¼ã¨å€¤ã®ãƒšã‚¢ã‚’ã?HybsEntry オブジェクトã«
031     * ã‚»ãƒ?ƒˆã—ã¦ã€ãã®é…å?ã‚’å—ã‘å–ã£ã¦å‡¦ç?—ã¾ã™ã?
032     *
033     * 以下ã?値ã¯ã‚らã‹ã˜ã‚ã?å‹•çš„ã«ä½œæ?ã•れã¾ã™ã?
034     * ・SYS.YMD       ?˜byte ã®ä»Šæ—¥ã®ã‚·ã‚¹ãƒ?ƒ æ—¥ä»?yyyyMMdd)
035     * ・SYS.YMDH    ?‘ï¼”byte ã®ä»Šæ—¥ã®ã‚·ã‚¹ãƒ?ƒ æ—¥æ™?yyyyMMddHHmmss)
036     * ・SYS.HMS       ?–byte ã®ä»Šæ—¥ã®ã‚·ã‚¹ãƒ?ƒ æ™‚é–“(HHmmss)
037     *
038     * @og.group ユーãƒ?‚£ãƒªãƒ?‚£
039     *
040     * @version  4.0
041     * @author   Kazuhiko Hasegawa
042     * @since    JDK5.0,
043     */
044    public final class SystemParameter {
045    
046    //      private final Map<String,String> sysMap = new HashMap<String,String>();
047            /** 改行コー�*/
048            public static final String CR = System.getProperty("line.separator");   // 5.1.9.0 (2010/08/01) 追�
049    
050            //      5.5.7.2 (2012/10/09) HybsDateUtil を利用ã™ã‚‹ãŸã‚ã€å‰Šé™¤ã—ã¾ã™ã?
051    //      private static final Map<String,String>   DATE_FORMAT = new HashMap<String,String>();       // 5.3.4.0 (2011/04/01)
052    //      static {
053    //              DATE_FORMAT.put( "SYS.YMD"              ,"yyyyMMdd"                             );
054    //              DATE_FORMAT.put( "SYS.YMDH"     ,"yyyyMMddHHmmss"               );
055    //              DATE_FORMAT.put( "SYS.HMS"              ,"HHmmss"                               );
056    //              DATE_FORMAT.put( "DATE.YMD"     ,"yyyyMMdd"                     );
057    //              DATE_FORMAT.put( "DATE.Y2MD"    ,"yyMMdd"                               );
058    //              DATE_FORMAT.put( "DATE.YM"              ,"yyyyMM"                               );
059    //              DATE_FORMAT.put( "DATE.HMS"     ,"HHmmss"                               );
060    //              DATE_FORMAT.put( "DATE.YMDHMS"  ,"yyyyMMddHHmmss"               );
061    //              DATE_FORMAT.put( "DATE.YMDF"    ,"yyyy/MM/dd"                   );
062    //              DATE_FORMAT.put( "DATE.Y2MDF"   ,"yy/MM/dd"                     );
063    //              DATE_FORMAT.put( "DATE.YMF"     ,"yyyy/MM"                              );
064    //              DATE_FORMAT.put( "DATE.HMSF"    ,"HH:mm:ss"                     );
065    //              DATE_FORMAT.put( "DATE.YMDHMSF" ,"yyyy/MM/dd/ HH:mm:ss" );
066    //              DATE_FORMAT.put( "DATE.EEE"     ,"EEE"                                  );
067    //      }
068    
069            private final String    original ;
070            // 5.5.7.2 (2012/10/09) Calendarオブジェクトã‹ã‚‰ã?String時刻ã«å¤‰æ›´ã€?
071    //      private final Calendar  rightNow;                                                                       // 5.3.4.0 (2011/04/01)
072            private final String    RIGHT_NOW = HybsDateUtil.getDate( "yyyyMMdd" );
073    
074            private final String[] clms;
075            private final String[] formats;
076    
077            /**
078             *  {&#064;XXXX} ã®ç‰¹æ®Šæ–‡å­—ã‚’å«ã‚?–‡å­—å?ã‚’ã?ç½®ãæ›ãˆã¾ã™ã?
079             * 対象外ã?æ–?­—å?ã¯ã€ãã®ã¾ã¾ã€æ®‹ã•れã¾ã™ã?
080             *
081             * @og.rev 5.1.8.0 (2010/07/01) パã?ス方法見直ã?StringTokenizerã§ã¯ã€{&#064;XXXX}ãŒé?ç¶šã—ã¦ã‚ã‚‹å ´åˆã«å¯¾å¿œã§ããªã?
082             * @og.rev 5.3.2.0 (2011/02/01) original ãƒ??ã‚¿ã‚’ã?パã?ã‚¹çµæžœã‚’利用ã™ã‚‹ã‚ˆã†ã«ä¿®æ­£ã™ã‚‹ã€?
083             * @og.rev 5.3.4.0 (2011/04/01) {&#064;DATE.XXXX} ã‚’å?ç?§ãるよã†ã«æ©Ÿè?追åŠ?
084             * @og.rev 5.3.5.0 (2011/05/01) {&#064;SYS.XXXX} ã¯ã€å»?­¢
085             * @og.rev 5.5.7.2 (2012/10/09) rightNow ã‚’Calendarオブジェクãƒ?ã§ã¯ãªãã?String時刻ã¨ã—ã¾ã™ã?
086             * @og.rev 5.5.7.2 (2012/10/09) HybsDateUtil を利用ã™ã‚‹ã‚ˆã†ã«ä¿®æ­£ã—ã¾ã™ã?
087             *
088             * @param       orig    変æ›ã™ã‚‹æ–?­—å?(オリジナル)
089             */
090            public SystemParameter( final String orig ) {
091    //              rightNow = Calendar.getInstance();
092    
093                    if( orig == null || orig.length() == 0 || orig.indexOf( "{@" ) < 0 ) {
094                            clms     = null;
095                            formats  = null;
096                            original = orig;                // 5.3.2.0 (2011/02/01)
097                    }
098                    else {
099                            StringBuilder buf = new StringBuilder(orig.length());           // 5.3.2.0 (2011/02/01)
100    
101                            ArrayList<String> fmtList = new ArrayList<String>();
102                            ArrayList<String> clmList = new ArrayList<String>();
103    
104                            // 5.1.8.0 (2010/07/01) パã?ス方法見直ã?
105                            int start = 0;
106                            int index = orig.indexOf( "{@" );
107                            String val ;
108                            while( index >= 0 ) {
109    //                              buf.append(  orig.substring( start, index ) );          // 5.3.2.0 (2011/02/01)
110    //                              fmtList.add( orig.substring( start, index ) );
111                                    val = orig.substring( start, index );                                   // 5.3.4.0 (2011/04/01)
112                                    buf.append(  val );
113                                    fmtList.add( val );
114                                    int end = orig.indexOf( '}',index );
115                                    if( end < 0 ) {
116                                            String errMsg = "{@ 㨠} ã¨ã®å¯¾å¿œé–¢ä¿‚ãŒãšã‚Œã¦ã?¾ã™ã?" + CR
117                                                                    + "str=[" + orig + "] : index=" + index ;
118                                            throw new RuntimeException( errMsg );
119                                    }
120                                    String param = orig.substring( index+2,end );
121    //                              if( param.startsWith( "SYS." ) || param.startsWith( "DATE." ) ) {
122                                    if( param.startsWith( "DATE." ) ) {             // 5.3.5.0 (2011/05/01) {&#064;SYS.XXXX} ã¯ã€å»?­¢
123    //                                      val = getDateFormat( param );
124                                            val = getDateFormat( param.substring( 5 ) );    // 5.5.7.2 (2012/10/09) HybsDateUtil を利用時㫠"DATE." ã¯ä¸è¦?
125                                            clmList.add( null );            // パã?ス下å?åˆã?ã€clmList ã¯ã€ä½¿ç”¨ã—ãªã??
126                                            buf.append( val );
127                                    }
128                                    else {
129                                            clmList.add( param );
130                                            buf.append( "{@" ).append( param ).append( "}" );               // å…??ã¾ã¾ã®æ–?­—å?を生æˆ?
131                                    }
132                                    start = end+1;
133                                    index = orig.indexOf( "{@",start );
134                            }
135    //                      buf.append(  orig.substring( start, orig.length() ) );          // 5.3.2.0 (2011/02/01)
136    //                      fmtList.add( orig.substring( start, orig.length() ) );
137                            val = orig.substring( start, orig.length() );                           // 5.3.4.0 (2011/04/01)
138                            buf.append(  val );
139                            fmtList.add( val );
140    
141                            original = buf.toString();              // 5.3.2.0 (2011/02/01)
142                            if( original.indexOf( "{@" ) < 0 ) {
143                                    clms     = null;
144                                    formats  = null;
145                            }
146                            else {
147                                    clms    = clmList.toArray( new String[clmList.size()] );
148                                    formats = fmtList.toArray( new String[fmtList.size()] );
149                            }
150                    }
151            }
152    
153            /**
154             * 日付関係ã?æƒ??を簡易的ã«å–り出ã™å?ç?‚’行ã„ã¾ã™ã?
155             *
156             * ã“れã¯ã€{&#064;DATE.XXXX AA BB} 引数処ç?‚’ãŠã“ãªã?Ÿã‚ã?ã€ã‚µãƒã?トメソãƒ?ƒ‰ã§ã™ã?
157             * 引数ã¯ã€?DATE.XXXX AA BB" ã¨ã?†çŠ¶æ…‹ã§å—ã‘å–りã¾ã™ã?
158             * "XXXX" ã¯ã€æ—¥ä»˜å?ç?‚’行ã†ã‚­ãƒ¼æ–?­—å?ã§äºˆç´?ªžã«ãªã£ã¦ã?¾ã™ã?
159             * ・YMDã€???šï¼˜æ–‡å­—ã?日付データ(200Xå¹´XXæœ?Xæ—¥)を扱ã?¾ã™ã?
160             * ・Y2MDã€??šï¼–文字ã?日付データ(0Xå¹´XXæœ?Xæ—¥)を扱ã?¾ã™ã?
161             * ・YMã€?? ?šï¼–文字ã?日付データ(200Xå¹´XXæœ?を扱ã?¾ã™ã?
162             * ・HMSã€???šï¼–文字ã?時刻ãƒ??ã‚¿(XX時XXåˆ?Xç§?を扱ã?¾ã™ã?
163             * ・YMDHMS ?šï¼‘4文字ã?日付データ(200Xå¹´XXæœ?Xæ—¥XX時XXåˆ?Xç§?を扱ã?¾ã™ã?
164             * ・EEEã€???šæ›œæ—¥ã‚’ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆãƒ­ã‚±ãƒ¼ãƒ«ã§è¡¨ç¤ºã—ã¾ã™ã?
165             *
166             * F付ãã¯ã€ãƒ•ォーマットã•ã‚ŒãŸæ—¥ä»˜ã‚’è¿”ã—ã¾ã™ã?
167             * ・YMDFã€??šï¼‘ï¼æ–‡å­—ã?日付表ç¾(yyyy/MM/dd)を扱ã?¾ã™ã?
168             * ・Y2MDFã€?¼šï¼˜æ–‡å­—ã?日付表ç¾(yy/MM/dd)を扱ã?¾ã™ã?
169             * ・YMFã€???šï¼—文字ã?日付表ç¾(yyyy/MM)を扱ã?¾ã™ã?
170             * ・HMSFã€??šï¼˜æ–‡å­—ã?時刻表ç¾(HH:mm:ss)を扱ã?¾ã™ã?
171             * ・YMDHMSF?šï¼‘9文字ã?日付表ç¾(yyyy/MM/dd HH:mm:ss)を扱ã?¾ã™ã?
172             * ・MDFã€???šï¼•文字ã?月日表ç¾(MM/dd)を扱ã?¾ã™ã?
173             * ・MDEFã€??šï¼•æ–‡å­—ï¼‹æ›œæ—¥ã®æœˆæ—¥è¡¨ç¾(MM/dd(EEE))を扱ã?¾ã™ã?
174             * ・MD2Fã€??šå’Œæš¦ã®æœˆæ—¥è¡¨ç¾(MMæœ?dæ—¥)を扱ã?¾ã™ã?(5.5.5.2 追åŠ?
175             * ・GYMDFã€?¼šå’Œæš¦ã®å¹´æœˆæ—¥è¡¨ç¾(GGGGyyyyå¹´MMæœ?dæ—¥)を扱ã?¾ã™ã?
176             * ・G2YMDF ?šå’Œæš¦ã®æ—¥ä»˜è¡¨ç¾(Gyyyy/MM/dd)を扱ã?¾ã™ã?
177             * ・GYMFã€??šå’Œæš¦ã®å¹´æœˆè¡¨ç¾(GGGGyyyyå¹´MMæœ?を扱ã?¾ã™ã?
178             * ・GYFã€???šå’Œæš¦ã®å¹´è¡¨ç¾(GGGGyyyy)を扱ã?¾ã™ã?
179             *
180             * AA 引数ã¯ã€åŸºæº–ã¨ãªã‚‹æ—¥ä»˜ã‚’ã€YYYYMMDDå½¢å¼ã§æŒ?®šã—ã¾ã™ã?ç„¡æŒ?®šã?å ´åˆã?ã€?
181             * 処ç?™‚刻を基準ã«ã—ãŸã€åŒä¸?‚¿ã‚°å†?§ã®åŒä¸?—¥ä»?年月日時å?ç§?を使用ã—ã¦å€¤ã‚’å–å¾—ã—ã¾ã™ã?
182             * æŒ?®šã§ãる日付ã?ã€å¿?šã€YYYYMMDDå½¢å¼ã¨ã—ã?時å?ç§’ã? ゼロã«ãƒªã‚»ãƒ?ƒˆã•れãŸçŠ¶æ…‹ã«ãªã‚Šã¾ã™ã?
183             * AA ã«ã¯ã€æ•°å­—ã§å§‹ã¾ã‚?20050701ãªã©)実日付ã¨@ã§å§‹ã¾ã‚‹ãƒ‘ラメータãŒä½¿ç”¨ã§ãã¾ã™ã?
184             * ã“ã?パラメータã®å€¤ã¯ã€YYYYMMDDå½¢å¼ã?æ•°å­—ã‹ã€null(ã¾ãŸã?ゼロストリング)ã§ã™ã?nullã®
185             * å ´åˆã?ã€ãªã«ã‚‚指定ã•れã¦ã?ªã?¨åˆ¤æ–­ã—ã¦ã€å?ç?™‚刻を使用ã—ã¾ã™ã?
186             * 第?’引数ã¯ã€?æ•°å­—ã‹ã€@)以外ã?å ´åˆã?ã€çœç•¥ã•れãŸã¨åˆ¤æ–­ã•れã¾ã™ã?
187             *
188             * BB 引数ã¯ã€æ—¥ä»˜ã«ã¤ã?¦ã®åŠ?¸›ç®—å?ç?‚’行ã„ã¾ã™ã?
189             * çœç•¥ã™ã‚‹ã¨ã€ãªã«ã‚‚加減算å?ç?‚’行ã„ã¾ã›ã‚“ã€?
190             * ・SD ?šå½“æœˆã®æœ??ã®æ—¥ä»˜ã«ã‚»ãƒ?ƒˆã—ã¾ã™ã?(当月?‘æ—¥)
191             * ・ED ?šå½“æœˆã®æœ?¾Œã?日付ã«ã‚»ãƒ?ƒˆã—ã¾ã™ã?(当月月末)
192             * ・SW ?šæ—¥ä»˜å?ç??週åˆã‚(月曜日)ã«ã‚»ãƒ?ƒˆã—ã¾ã™ã?日付ã?当日よりå‰ã«ç§»å‹•ã—ã¾ã™ã?
193             * ・EW ?šæ—¥ä»˜å?ç??週末(日曜日)ã«ã‚»ãƒ?ƒˆã—ã¾ã™ã?日付ã?当日より後ã‚ã«ç§»å‹•ã—ã¾ã™ã?
194             * ・H1 ??HXXX ?šæ™‚ã‚’æŒ‡å®šã?åˆ? ã‘é?ã‚ã¾ã™ã?H1ãªã‚‰ï¼‘時間後ã?H24 ãªã‚‰ï¼’4時間å¾?5.5.5.6 (2012/08/31) 追åŠ?
195             * ・D1 ??DXXX ?šæ—¥ã‚’æŒ‡å®šã?åˆ? ã‘é?ã‚ã¾ã™ã?D1ãªã‚‰ç¿Œæ—¥ã€D200 ãªã‚?00æ—¥å¾?
196             * ・M1 ??MXXX ?šæœˆã‚’æŒ‡å®šã?åˆ? ã‘é?ã‚ã¾ã™ã?M1ãªã‚‰ç¿Œæœˆã€M6 ãªã‚‰åŠå¹´å¾?
197             * ・BSD ?šå?月ã?æœ??ã®æ—¥ä»˜ã«ã‚»ãƒ?ƒˆã—ã¾ã™ã?(先月?‘æ—¥)(5.5.5.2 追åŠ?
198             * ・BED ?šå?月ã?æœ?¾Œã?日付ã«ã‚»ãƒ?ƒˆã—ã¾ã™ã?(先月月末)(5.5.5.2 追åŠ?
199             * ・ASD ?šç¿Œæœˆã®æœ??ã®æ—¥ä»˜ã«ã‚»ãƒ?ƒˆã—ã¾ã™ã?(翌月?‘æ—¥)(5.5.5.2 追åŠ?
200             * ・AED ?šç¿Œæœˆã®æœ?¾Œã?日付ã«ã‚»ãƒ?ƒˆã—ã¾ã™ã?(翌月月末)(5.5.5.2 追åŠ?
201             *
202             * @og.rev 5.3.4.0 (2011/04/01) æ–°è¦è¿½åŠ?
203             * @og.rev 5.5.7.2 (2012/10/09) HybsDateUtil を利用ã™ã‚‹ã‚ˆã†ã«ä¿®æ­£ã—ã¾ã™ã?
204             * @og.rev 5.5.8.2 (2012/11/09) prmA ã®åˆ¤å®šã«ã€null 㨠ゼロæ–?­—å?を判定ã™ã‚‹ã?
205             *
206             * @param   value パラメータ(引数ã¯ã€?DATE.XXXX AA BB" ãªã©ã¨ã?†çжæ…?
207             *
208             * @return   メãƒ?‚»ãƒ¼ã‚¸æƒ??
209             */
210            private String getDateFormat( final String value ) {
211    //              Calendar now = (Calendar)rightNow.clone();
212    
213                    String[] vals = StringUtil.csv2Array( value,' ' );
214    
215                    String key = vals[0].trim() ;
216    
217                    String prmA = null;                             // 5.5.7.2 (2012/10/09) 引数ã¨ã—ã¦æ¸¡ã™ã?ã§ä¸Šä½ã§åˆæœŸåŒ–ã—ã¦ãŠãã€?
218                    String prmB = null;
219                    if( vals.length == 3 ) { prmB = vals[2].trim(); }
220    
221                    if( vals.length > 1 ) {
222    //                      String prmA = vals[1].trim();
223                            prmA = vals[1].trim();
224                            if( prmA.startsWith( "@" ) ) {
225                                    prmA = getDateFormat( prmA.substring(1) );
226                            }
227    
228                            // prmA ã®@è§£æžå¾Œã??˜ã‚±ã‚¿ä»¥ä¸‹ã?å ´åˆã?ã€ã‚³ãƒžãƒ³ãƒ‰ã¨ã¿ãªã—ã?prmB ã«ã‚»ãƒ?ƒˆã—ã?自身ã¯ã€null ã‚’ã‚»ãƒ?ƒˆã™ã‚‹ã€?
229                            if( prmA != null && prmA.length() < 8 ) {
230                                    prmB = prmA;
231                                    prmA = null;
232                            }
233    //                      if( prmA != null && prmA.length() > 0 ) {
234    //                              if( prmA.length() == 8 && prmA.charAt(0) >= '0' && prmA.charAt(0) <= '9' ) {
235    //                                      int yy  = Integer.parseInt( prmA.substring( 0,4 ) );
236    //                                      int mm  = Integer.parseInt( prmA.substring( 4,6 ) ) - 1;
237    //                                      int dd  = Integer.parseInt( prmA.substring( 6,8 ) );
238    //                                      now.clear();
239    //                                      now.set( yy,mm,dd );
240    //                              }
241    //                              else {
242    //                                      prmB = prmA;
243    //                              }
244    //                      }
245                    }
246    
247    //              if( prmA == null ) { prmA = RIGHT_NOW; }                                                // 5.5.7.2 (2012/10/09) åˆæœŸå€¤ã¨ã—ã¦ã€è¨­å®šã™ã‚‹ã?
248                    if( prmA == null || prmA.isEmpty() ) { prmA = RIGHT_NOW; }              // 5.5.8.2 (2012/11/09) null 㨠ゼロæ–?­—å?を判定ã™ã‚‹ã?
249                    return HybsDateUtil.getDateFormat( key,prmA,prmB );                             // 5.5.7.2 (2012/10/09) HybsDateUtil を利用ã™ã‚‹
250    
251    //              if( prmB != null ) {
252    //                      if( "SD".equals( prmB ) ) { now.set( Calendar.DATE,1 ); }
253    //                      else if( "ED".equals( prmB ) ) { now.set( Calendar.DATE,now.getActualMaximum( Calendar.DATE ) ); }
254    //                      else if( "SM".equals( prmB ) ) { now.set( Calendar.MONTH,Calendar.JANUARY  ); }
255    //                      else if( "EM".equals( prmB ) ) { now.set( Calendar.MONTH,Calendar.DECEMBER  ); }
256    //                      else if( "SW".equals( prmB ) ) {
257    //                              // 日付型æ–?­—å?入力データã®é–‹å§‹æ—¥ã‚’月曜日ã«ã‚»ãƒ?ƒˆã—ã¾ã™ã?
258    //                              // SUNDAY=1 , MONDAY=2 ã«ãªã‚Šã¾ã™ã?月曜日ã¨ã®å·®ã?‘ã€å‰ã«æˆ»ã—ã¾ã™ã?
259    //                              // æŒ?®šæ—¥ãŒæ—¥æ›œæ—¥ã®å ´åˆã?ã€æœˆæ›œæ—¥ã¾ã§æˆ»ã—ã¾ã™ã?
260    //                              int shu = now.get( Calendar.DAY_OF_WEEK ) - Calendar.MONDAY ;
261    // 
262    //                              if(      shu > 0 ) { now.add( Calendar.DATE, -shu ); }
263    //                              else if( shu < 0 ) { now.add( Calendar.DATE, -6 );   }       // 日曜日ã®å‡¦ç?
264    // 
265    //                      }
266    //                      else if( "EW".equals( prmB ) ) {
267    //                              // 日付型æ–?­—å?入力データã®çµ‚äº?—¥ã‚’日曜日ã«ã‚»ãƒ?ƒˆã—ã¾ã™ã?
268    //                              // SUNDAY=1 , MONDAY=2 ã«ãªã‚Šã¾ã™ã?日曜日ã«ãªã‚‹ã‚ˆã?«ã€å?ã«é€²ã‚ã¾ã™ã?
269    //                              int shu = now.get( Calendar.DAY_OF_WEEK ) ;
270    // 
271    //                              if( shu != Calendar.SUNDAY ) { now.add( Calendar.DATE, 8-shu ); }
272    //                      }
273    //                      else if( prmB.startsWith( "D" ) && prmB.length() > 1 ) {
274    //                              int day = Integer.parseInt( prmB.substring( 1 ) );
275    //                              now.add( Calendar.DATE, day );
276    //                      }
277    //                      else if( prmB.startsWith( "M" ) && prmB.length() > 1 ) {
278    //                              int month = Integer.parseInt( prmB.substring( 1 ) );
279    //                              now.add( Calendar.MONTH , month );
280    //                      }
281    //                      else {
282    //                              String errMsg = "日付変数パラメータã«ã€ä¸æ­£ãªå€¤ãŒæŒ‡å®šã•れã¾ã—ãŸã€‚以下ã?中ã‹ã‚‰æŒ?®šã—ãªãŠã—ã¦ãã ã•ã„ã€?
283    //                                                      + "æŒ?®šå¯èƒ½?š[SD,ED,SM,EM,SW,EW,D1?žDXXX,M1?žMXXX]"
284    //                                                      + " value=[" + prmB + "]" ;
285    //                              throw new RuntimeException( errMsg );
286    //                      }
287    //              }
288    // 
289    //              String format = DATE_FORMAT.get( key );
290    //              if( format == null ) {
291    //                      String errMsg = "日付変数キーã«ã€ä¸æ­£ãªå€¤ãŒæŒ‡å®šã•れã¾ã—ãŸã€‚以下ã?中ã‹ã‚‰æŒ?®šã—ãªãŠã—ã¦ãã ã•ã„ã€?
292    //                                              + "æŒ?®šå¯èƒ½?š[" + DATE_FORMAT.keySet().toString() + "] , "
293    //                                              + " key=[" + value + "]" ;
294    //                      throw new RuntimeException( errMsg );
295    //              }
296    // 
297    //              DateFormat formatter = new SimpleDateFormat( format,Locale.JAPAN );
298    // 
299    //              return formatter.format( now.getTime() );
300            }
301    
302            /**
303             *  {&#064;XXXX} ã®ç‰¹æ®Šæ–‡å­—ã‚’å«ã‚?–‡å­—å?ã‚’ã?ç½®ãæ›ãˆã¾ã™ã?
304             * 対象外ã?æ–?­—å?ã¯ã€ãã®ã¾ã¾ã€æ®‹ã•れã¾ã™ã?
305             *
306             * @og.rev 5.3.4.0 (2011/04/01) 判定方�修正
307             *
308             * @param       entry   ç½®æ›æ–‡å­—å?ã®ã‚­ãƒ¼ã¨å€¤ã®ãƒšã‚¢ã‚’管ç?—ã¦ã?‚‹Entryオブジェクトã?é…å?
309             *
310             * @return      ç½®æ›å¾Œã?æ–?­—å?
311             */
312            public String replace( final HybsEntry[] entry ) {
313    //              if( orginal == null ) { return null; }
314    //              int index = orginal.indexOf( "{@" );
315    //              if( index < 0 ) { return orginal; }
316    //              if( formats == null || clms == null ) { return original; }
317                    if( formats == null ) { return original; }              // 5.3.4.0 (2011/04/01) 判定方�修正
318                    if( entry == null || entry.length == 0 ) { return original; }
319    
320                    // HybsEntry[] ãƒ??ã‚¿ã‚’ã?Mapã«ãƒžãƒƒãƒ”ングã—ã¾ã™ã?
321                    Map<String, String> sysMap = new HashMap<String, String>();
322    //              if( entry != null ) {
323                            int size = entry.length;
324                            for( int i=0; i<size; i++ ) {
325                                    sysMap.put( entry[i].getKey(),entry[i].getValue() );
326                            }
327    //              }
328                    return replace( sysMap );
329            }
330    
331            /**
332             *  {&#064;XXXX} ã®ç‰¹æ®Šæ–‡å­—ã‚’å«ã‚?–‡å­—å?ã‚’ã?ç½®ãæ›ãˆã¾ã™ã?
333             * 対象外ã?æ–?­—å?ã¯ã€ãã®ã¾ã¾ã€æ®‹ã•れã¾ã™ã?
334             *
335             * @param  map  ç½®æ›æ–‡å­—å?ã®ã‚­ãƒ¼ã¨å€¤ã®ãƒšã‚¢ã‚’管ç?—ã¦ã?‚‹Mapオブジェクãƒ?
336             *
337             * @return      ç½®æ›å¾Œã?æ–?­—å?
338             */
339            public String replace( final Map<String,String> map ) {
340    //              if( formats == null || clms == null ) { return original; }
341                    if( formats == null ) { return original; }              // 5.3.4.0 (2011/04/01) 判定方�修正
342    //              if( map == null || map.size() == 0 ) { return original; }
343                    if( map == null || map.isEmpty() ) { return original; }
344    
345                    StringBuilder sb = new StringBuilder();
346                    for( int i=0; i<formats.length; i++ ) {
347                            sb.append( formats[i] );
348                            if( i < clms.length && clms[i] != null ) {           // 5.3.4.0 (2011/04/01) nullãƒã‚§ãƒ?‚¯è¿½åŠ?
349                                    sb.append(  StringUtil.nval( map.get( clms[i] ), "" ) );
350                            }
351                    }
352    
353                    return sb.toString();
354            }
355    
356            /**
357             * フォーマットをパã?スã—ãŸçµæžœã‹ã‚‰ã€ã‚«ãƒ©ãƒ?¸?¦§ã‚’é?列形å¼ã§è¿”ã—ã¾ã™ã?
358             *
359             * @og.rev 5.1.7.0 (2010/06/01) æ–°è¦ä½œæ?
360             *
361             * @return カラ�?�
362             */
363            public String[] getColumns() {
364                    if( clms == null ) { return new String[0]; }
365                    return clms.clone();
366            }
367    
368            /**
369             * フォーマットをパã?スã—ãŸçµæžœã‹ã‚‰ã€ãƒ•ォーマットä¸?¦§ã‚’é?列形å¼ã§è¿”ã—ã¾ã™ã?
370             *
371             * @og.rev 5.1.7.0 (2010/06/01) æ–°è¦ä½œæ?
372             *
373             * @return フォーマットé?åˆ?
374             */
375            public String[] getFormats() {
376                    if( formats == null ) { return new String[0]; }
377                    return formats.clone();
378            }
379    }