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.resource;
017    
018    import java.sql.SQLException;
019    import java.util.ArrayList;
020    import java.util.Arrays;
021    import java.util.HashMap;
022    import java.util.List;
023    import java.util.Map;
024    import java.util.Set;
025    
026    import org.opengion.fukurou.db.DBSimpleTable;
027    import org.opengion.fukurou.db.DBUtil;
028    import org.opengion.fukurou.util.ApplicationInfo;
029    import org.opengion.fukurou.util.Cleanable;
030    import org.opengion.fukurou.util.HybsEntry;
031    import org.opengion.fukurou.util.LogWriter;
032    import org.opengion.hayabusa.common.HybsSystem;
033    import org.opengion.hayabusa.common.HybsSystemException;
034    import org.opengion.hayabusa.common.UserSummary;
035    import org.opengion.hayabusa.db.DBEditConfig;
036    import org.opengion.hayabusa.db.DBEditConfigManager;
037    
038    /**
039     * 繝ヲ繝シ繧カ繝シ諠??縺ョ蜿門セ励?轤コ縺ョ繧、繝ウ繧ソ繝シ繝輔ぉ繝シ繧ケ繧貞ョ溯」?@縺溘け繝ゥ繧ケ縺ァ縺吶?
040     *
041     * 繝ュ繧ー繧、繝ウ譎ゅ?繝代せ繝ッ繝シ繝峨?繝√ぉ繝?け繧?蝗ス蜷阪?隴伜挨ID?後?繝シ繧ソ繝ォ繝壹?繧ク縺ョURL縺ェ縺ゥ
042     * 蛟倶ココ諠??繧堤ョ。逅?&縺帙∪縺吶?
043     * 迚ケ縺ォ,逕サ髱「繧「繧ッ繧サ繧ケ譎ゅ?讓ゥ髯舌d繝。繝シ繝ォ縺ョ騾∽ソ。?悟推逕サ髱「縺ォ繝ヲ繝シ繧カ繝シ諠??繧定。ィ遉コ縺励◆繧?
044     * 繧ィ繝ゥ繝シ譎ゅ?繝ュ繧ー繝輔ぃ繧、繝ォ?後ユ繝ウ繝昴Λ繝ェ繝?ぅ繝ャ繧ッ繝医Μ縺ェ縺ゥ繧らョ。逅?@縺セ縺吶?
045     *
046     * {@USER.XXXX} 縺ァ縲々XXX 驛ィ縺ォ縲ゞserInfo 繧ェ繝悶ず繧ァ繧ッ繝医〒螳夂セゥ縺輔l縺ヲ縺?k
047     * 螻樊?諠??繧貞叙繧雁?縺吶%縺ィ縺悟?譚・縺セ縺吶?
048     *
049     * 莉・荳九?蛟、縺ッ UserInfo 繧ェ繝悶ず繧ァ繧ッ繝医?鬆?岼縺九i蜿門セ励@縺セ縺吶?
050     * 繝サJNAME      繝ヲ繝シ繧カ繝シ譌・譛ャ隱槫錐遘ー
051     * 繝サID         繝ヲ繝シ繧カ繝シ?ゥ?、
052     * 繝サINFO       繝ヲ繝シ繧カ繝シ諠??(繝ヲ繝シ繧カ繝シID?壽律譛ャ隱槫錐遘ー)
053     * 繝サLANG       險?ェ?
054     * 繝サROLES      繝ュ繝シ繝ォ
055     * 繝サIPADDRESS  IP繧「繝峨Ξ繧ケ
056     * 繝サLOGINTIME  繝ュ繧ー繧、繝ウ譎ょ綾
057     * 繝サLASTACCESS 譛?オゅい繧ッ繧サ繧ケ逕サ髱「ID
058     *
059     * 莉・荳九?蛟、縺ッ縺ゅi縺九§繧√?蜍慕噪縺ォ菴懈?縺輔l縺セ縺吶?
060     * 繝サYMD       ?話yte 縺ョ莉頑律縺ョ繧キ繧ケ繝?Β譌・莉?
061     * 繝サYMDH    ?托シ巴yte 縺ョ莉頑律縺ョ繧キ繧ケ繝?Β譌・譎?
062     *
063     * 縺昴l莉・螟悶?,螟夜Κ繧医j險ュ螳壹&繧後◆蛟、縺ァ縺吶?
064     * 蠕捺擂縺ッ縲ゞSER.IDNO 縺ッUSER.ID 縺鯉シ稗yte莉・荳翫?譎ゅ?縺ソ蜈磯??第枚蟄励r髯、縺?◆繝ヲ繝シ繧カ繝シ?ゥ?、縺ィ縺励※
065     * 繧ェ繝悶ず繧ァ繧ッ繝磯?逶ョ縺九i縺ョ蜿門セ励〒縺励◆縺後?迴セ蝨ィ縺ッ蛻晄悄蛟、縺ィ縺励※險ュ螳壹@縺ヲ縺ゅj縺セ縺吶?
066     * 螟夜Κ繧医j蜀崎ィュ螳壼庄閭ス縺ォ縺ェ縺」縺ヲ縺?∪縺吶?
067     *
068     * @og.group 繝ェ繧ス繝シ繧ケ邂。逅?
069     *
070     * @version  4.0
071     * @author   Kazuhiko Hasegawa
072     * @since    JDK5.0,
073     */
074    public class UserInfo implements UserSummary , Cleanable {
075            private static final long serialVersionUID = 568120130913L ;    // 5.6.8.1 (2013/09/13)
076    
077            // 繝ヲ繝シ繧カ繝シ繝ェ繧ス繝シ繧ケ縺ョ繧ュ繝シ謖?ョ夊ェュ縺ソ霎シ縺ソ縺ョ繧ッ繧ィ繝ェ繝シ 
078            private static final String QUERY_PARAM = HybsSystem.sys( "USER_PARAMETER_SQL" );
079    
080            /** 5.6.8.1 (2013/09/13) 譛?オゅΜ繧ッ繧ィ繧ケ繝域ュ蝣ア縺ョ繝ヲ繝シ繧カ繝シ豌ク邯壼喧諠??(GE20)縺ク縺ョ繧サ繝シ繝悶↓菴ソ逕ィ縺吶k繧ュ繝シ縺ョ謗・鬆ュ隱?*/
081            private static final String LAST_REQUEST_DATA_SUFIX = "LAST_REQUEST_" ;
082    
083            // ?ア?ク?セ?ス邨ア險茨セ?スー?鯉セ橸セ?GE15)縺ク縺ョ謗・邯壼?繧偵?繝ェ繧ス繝シ繧ケ縺ョ謗・邯壼?繧医j蜿門セ励@縺セ縺吶?
084            private final String DBID = HybsSystem.sys( "RESOURCE_DBID" );
085    
086            //private static final String YOYAKU = "|JNAME|ID|INFO|LANG|ROLES|IPADDRESS|LOGINTIME|LASTACCESS|YMD|YMDH|" ;
087            private static final String YOYAKU = "|JNAME|ID|INFO|LANG|ROLES|IPADDRESS|LOGINTIME|LASTACCESS|YMD|YMDH|LASTGAMENNM" ; // 4.4.0.1 (2009/08/08)
088    
089            private final boolean useAccessTable = HybsSystem.sysBool( "USE_ACCESS_TOKEI_TABLE" );
090    //      private final String  accessPastDays = HybsSystem.sys( "ACCESS_TOKEI_PAST_DAYS" ); // 4.1.0.1 (2008/01/31)
091    
092            private final String    userID  ;
093    //      private final String    lang    ;
094            private       String    lang    ;       // 5.1.4.0 (2010/03/01) lang 繧呈嶌縺肴鋤縺亥庄閭ス縺ィ縺吶k縲?
095            private final String    jname   ;
096            private final String    roles   ;
097            private final String    droles  ; // 4.4.0.0 (2009/08/02) 繝??繧ソ繝ュ繝シ繝ォ蟇セ蠢?
098    //      private final String[]  userRoles       ;
099            private final String    ipAddress       ;
100            private final long              loginTime       ;
101            private final Map<String,String>  attribute  ;
102            private final RoleMode  roleMode ;              // 繝ュ繝シ繝ォ繧コ縺ィ繝「繝シ繝峨r邂。逅?☆繧九が繝悶ず繧ァ繧ッ繝?
103            private final DataRole  dataRole ;              // 繝??繧ソ繝ュ繝シ繝ォ繧堤ョ。逅?☆繧九が繝悶ず繧ァ繧ッ繝?
104    
105    //      private final boolean   isRootRole      ;                               // 4.3.0.0 (2008/07/04) 蟒?ュ「
106            private final int               hashcode        ;                               // 3.5.6.0 (2004/06/18)
107            private Map<String,GUIInfo>       guiMap  ;                               // 4.0.0 (2005/01/31)
108            private           boolean       isInfoSet       = false;                        // 4.0.0 (2005/01/31)
109            private           long          usedTime        = 0L;                           // 4.0.0 (2005/01/31)
110            private final Map<String,String>  paramMap = new HashMap<String,String>();
111            private final Object    guiLock         = new Object();
112            private final String    systemId        ;
113            private Map<String,FavoriteGUIData> favoriteGuiMap = null;        // 4.1.1.0 (2008/01/22)
114            private Set<String> forbidAddrSet         = null;                 // 5.2.0.0 (2010/09/01)
115            private final DBEditConfigManager editMgr = new DBEditConfigManager(); // 5.3.6.0 (2011/06/01)
116    
117            private final Map<String,String>  lastRequestMap = new HashMap<String,String>();    // 5.6.8.1 (2013/09/13)
118    
119            /** 繧ウ繝阪け繧キ繝ァ繝ウ縺ォ繧「繝励Μ繧ア繝シ繧キ繝ァ繝ウ諠??繧定ソス險倥☆繧九°縺ゥ縺?°謖?ョ?*/
120            public static final boolean USE_DB_APPLICATION_INFO  = HybsSystem.sysBool( "USE_DB_APPLICATION_INFO" ) ;
121    
122            // 3.8.7.0 (2006/12/15) 繧「繧ッ繧サ繧ケ繝ュ繧ー蜿門セ励?轤コ,ApplicationInfo繧ェ繝悶ず繧ァ繧ッ繝医r險ュ螳?
123            private final ApplicationInfo appInfo;
124    
125            // 繝ヲ繝シ繧カ繝シ豌ク邯壼喧諠??(GE20)繝??繝悶Ν 隱ュ縺ソ霎シ縺ソ逕ィSQL
126            // 4.3.4.0 (2008/12/01) ROLE='*'繧よ、懃エ「縺ァ縺阪k繧医≧縺ォ縺吶k
127            // 5.3.6.0 (2011/06/01) USERID='*'繧よ、懃エ「縺ァ縺阪k繧医≧縺ォ縺吶k
128            private static final String QUERY_GE20  = "select PARAM_ID,PARAM from GE20"
129                                                                                            +       " where SYSTEM_ID = ? and USERID in ( ?, '*' )"
130                                                                                            +       " and ROLES in ( ?, '*' ) and FGJ = '1'"
131                                                                                            +       " order by USERID,ROLES";
132    
133            // 4.3.4.0 (2008/12/01) 繝ヲ繝シ繧カ繝シ豌ク邯壼喧諠??(GE20)縺ォ繧サ繝シ繝匁凾縺ォ蟄伜惠繝√ぉ繝?け繧定。後≧縺溘a縺ョSQL
134            // 4.3.4.4 (2009/01/01) private static 繧剃サ伜刈
135            private static final String QUERY_GE20_KEY      = "select KBSET from GE20"
136                                                                                            +       " where SYSTEM_ID = ? and USERID = ?"
137                                                                                            +       " and ROLES = ? and PARAM_ID = ? and FGJ = '1'";
138    
139            // 5.2.3.0 (2010/12/01) 繧「繧ッ繧サ繧ケ螻・豁エ邂。逅?
140            private GUIInfo lastGuiInfo = null;
141    
142            /**
143             * 繧ウ繝ウ繧ケ繝医Λ繧ッ繧ソ繝シ
144             *
145             * @og.rev 3.0.0.1 (2003/02/14) 繝ヲ繝シ繧カ繝シ豈弱?繧ィ繝ウ繧ウ繝シ繝画欠螳壽婿豕輔r蟒?ュ「縺励∪縺吶?
146             * @og.rev 3.1.3.0 (2003/04/10) 繝ヲ繝シ繧カ繝シ諠??縺九i縲√お繝ウ繧ウ繝シ繝画ュ蝣ア繧貞炎髯、縺吶k縲?
147             * @og.rev 3.4.0.3 (2003/09/10) "root","manager","admin" 縺ョ繝ュ繝シ繝ォ繧偵?縺吶∋縺ヲ root 讓ゥ髯舌r荳弱∴繧九?
148             * @og.rev 3.8.5.3 (2006/06/30) USE_USER_IDNO_C_SAPLESS 繧貞愛螳壽擅莉カ縺ォ蜉?∴繧九?
149             * @og.rev 3.8.7.0 (2006/12/15) 繧「繧ッ繧サ繧ケ繝ュ繧ー蜿門セ励?轤コ,ApplicationInfo繧ェ繝悶ず繧ァ繧ッ繝医r險ュ螳?
150             * @og.rev 4.3.0.0 (2008/07/04) 繝ュ繝シ繝ォ繝「繝シ繝峨?繝ォ繝∝ッセ蠢?
151             * @og.rev 4.4.0.0 (2009/08/02) 繝??繧ソ繝ュ繝シ繝ォ蟇セ蠢?
152             * @og.rev 5.3.6.0 (2011/06/01) 繝ヲ繝シ繧カ繝シ豌ク邯壼喧諠??(GE20)縺ョ隱ュ縺ソ霎シ縺ソ繧旦serInfoFactory縺九i遘サ蜍?
153             *
154             * @param       userID          繝ヲ繝シ繧カ繝シ
155             * @param       lang            險?ェ?
156             * @param       jname           譌・譛ャ隱槫錐遘ー
157             * @param       roles           繝ュ繝シ繝ォ
158             * @param       droles          繝??繧ソ繝ュ繝シ繝ォ
159             * @param       systemId        繧キ繧ケ繝?ΒID
160             * @param       ipAddress       IP繧「繝峨Ξ繧ケ
161             * @param   appInfo             繧「繝励Μ諠??繧ェ繝悶ず繧ァ繧ッ繝?
162             */
163            public UserInfo( final String userID            ,
164                                             final String lang                      ,
165                                             final String jname                     ,
166                                             final String roles                     ,
167                                             final String droles            , // 4.4.0.0 (2009/08/02)
168                                             final String systemId          ,
169                                             final String ipAddress         ,
170                                             final ApplicationInfo appInfo  ) {
171                    this.userID             = userID        ;
172                    this.lang               = lang          ;
173                    this.jname              = jname         ;
174                    this.roles              = roles         ;
175                    this.droles             = droles        ; // 4.4.0.0 (2009/08/02)
176                    this.systemId   = systemId      ;
177    //              userRoles               = StringUtil.csv2Array( roles,HybsSystem.GUI_DELIMITER );
178                    this.roleMode   = RoleMode.newInstance( roles );        // 4.3.0.0 (2008/07/04) 繝ュ繝シ繝ォ繝「繝シ繝?
179                    this.dataRole   = DataRole.newInstance( droles, systemId, appInfo ); // 4.4.0.0 (2009/08/02)
180                    this.ipAddress  = ipAddress     ;
181                    this.appInfo    = appInfo       ;
182                    loginTime               = System.currentTimeMillis();
183                    usedTime                = loginTime;
184                    attribute               = new HashMap<String,String>();
185    
186                    // 3.4.0.3 (2003/09/10) "root","manager","admin" 縺ョ繝ュ繝シ繝ォ繧偵?縺吶∋縺ヲ root 讓ゥ髯舌r荳弱∴繧九?
187                    // 4.3.0.0 (2008/07/04) 蟒?ュ「
188    //              isRootRole = "root".equals( roles ) || "manager".equals( roles ) || "admin".equals( roles ) ;
189    
190                    // 3.5.6.0 (2004/06/18) hashCode 繧定ィ育ョ励@縺ヲ縺翫″縺セ縺吶?
191                    hashcode = (int)(loginTime^(loginTime>>>32)) ;
192    
193                    // 3.8.1.2 (2005/12/19) USER.IDNO 繧但ttribute縺ォ繧サ繝?ヨ縺吶k縲?
194                    // 3.8.5.3 (2006/06/30) USE_USER_IDNO_C_SAPLESS 繧貞愛螳壽擅莉カ縺ォ蜉?∴繧九?
195                    boolean IDNO_C_SAPLESS = HybsSystem.sysBool( "USE_USER_IDNO_C_SAPLESS" );
196                    String idno = ( userID.length() > 5 && IDNO_C_SAPLESS ) ? userID.substring(1) : userID ;
197                    attribute.put( "IDNO",idno ) ;                          // 繧ウ繝ウ繧ケ繝医Λ繧ッ繧ソ蜀?↑縺ョ縺ァ縲∝酔譛溷?逅??蜈・繧後※縺?∪縺帙s縲?
198    
199                    // 繝ヲ繝シ繧カ繝シ繝代Λ繝。繝シ繧ソ縺ェ縺ゥ縺ョ蛻晄悄險ュ螳壹r陦後>縺セ縺吶?
200                    initLoad() ;
201    
202                    // 5.3.6.0 (2011/06/01) 繝ヲ繝シ繧カ繝シ豌ク邯壼喧諠??(GE20)縺九iDB縺ォ菫晏ュ倥&繧後◆UserInfo諠??繧定ェュ縺ソ蜃コ縺励∪縺吶?
203                    dbLoad();
204    
205                    // 5.3.6.0 (2011/06/01) Edit諠??縺ョ荳?ヲァ繧剃ス懈?縺励∪縺吶?
206                    makeEditConfigMap();
207            }
208    
209            /**
210             * 繝ヲ繝シ繧カ繝シ繝代Λ繝。繝シ繧ソ繧貞叙蠕励@縺セ縺吶?
211             * 繝ヲ繝シ繧カ繝シ繝代Λ繝。繝シ繧ソ繝シ縺ッ縲??蟶ク縲;E16 繝??繝悶Ν繧医j蜿門セ励@縺セ縺吶?
212             * 蜿門セ励☆繧鬼QL譁??縲ヾystemData 縺ョ USER_PARAMETER_SQL 縺ォ險倩ソー縺励※縺翫″縺セ縺吶?
213             * 繝ヲ繝シ繧カ繝シ繝代Λ繝。繝シ繧ソ縺ォ縲∝?縺悟ュ伜惠縺励↑縺??蜷医?縲√す繧ケ繝?Β繝ェ繧ス繝シ繧ケ繧医j
214             * 蜿門セ励@縺セ縺吶?
215             *
216             * @param       key     繝代Λ繝。繝シ繧ソ繧ュ繝シ
217             *
218             * @return      繝代Λ繝。繝シ繧ソ蛟、(繝ヲ繝シ繧カ繝シ繝代Λ繝。繝シ繧ソ縺ォ縺ェ縺代l縺ー縲√す繧ケ繝?Β繝ェ繧ス繝シ繧ケ繧医j蜿門セ?
219             */
220            public String getParameter( final String key ) {
221                    String val = null;
222                    if( key != null ) {
223                            synchronized( paramMap ) {
224                                    val = paramMap.get( key );
225                            }
226                            if( val == null ) { val = HybsSystem.sys( key ); }
227                    }
228                    return val;
229            }
230    
231            /**
232             * 繝ヲ繝シ繧カ繝シ繝ュ繧ー繧、繝ウ譎ょ綾繧貞叙蠕励@縺セ縺吶?
233             *
234             * @return      繝ュ繧ー繧、繝ウ譎ょ綾
235             */
236            public long getLoginTime() {
237                    return loginTime;
238            }
239    
240            /**
241             * 繝ヲ繝シ繧カ繝シ縺ョ繝ュ繧ー繧、繝ウIP繧「繝峨Ξ繧ケ繧貞叙蠕励@縺セ縺吶?
242             *
243             * @return      IP繧「繝峨Ξ繧ケ
244             *
245             */
246            public String getIPAddress() {
247                    return ipAddress;
248            }
249    
250            /**
251             * 繝ヲ繝シ繧カ繝シ繧貞叙蠕励@縺セ縺吶?
252             *
253             * @return      繝ヲ繝シ繧カ繝シ
254             *
255             */
256            public String getUserID() {
257                    return userID;
258            }
259    
260            /**
261             * 繝ヲ繝シ繧カ繝シ諠??繝ュ繧ア繝シ繝ォ(險?ェ?繧貞叙蠕励@縺セ縺吶?
262             *
263             * @return      繝ュ繧ア繝シ繝ォ(險?ェ?
264             */
265            public String getLang() {
266                    return lang ;
267            }
268    
269            /**
270             * 繝ヲ繝シ繧カ繝シ諠??繝ュ繧ア繝シ繝ォ(險?ェ?繧偵そ繝?ヨ縺励∪縺吶?
271             *
272             * @og.rev 5.1.4.0 (2010/03/01) lang 繧呈嶌縺肴鋤縺亥庄閭ス縺ィ縺吶k縲?
273             *
274             * @param newLang       繝ュ繧ア繝シ繝ォ(險?ェ?
275             */
276            public void setLang( final String newLang ) {
277                    lang = newLang ;
278            }
279    
280            /**
281             * 繝ヲ繝シ繧カ繝シ諠?? 蜷咲ァー(譌・譛ャ隱?繧貞叙蠕励@縺セ縺吶?
282             *
283             * @return      蜷咲ァー(譌・譛ャ隱?
284             */
285            public String getJname() {
286                    return jname ;
287            }
288    
289            /**
290             * 繝ヲ繝シ繧カ繝シ諠?? 繝ュ繝シ繝ォ(蠖ケ蜑イ)繧貞叙蠕励@縺セ縺吶?
291             *
292             * @return      繝ュ繝シ繝ォ(蠖ケ蜑イ)
293             */
294            public String getRoles() {
295                    return roles ;
296            }
297    
298            /**
299             * 繝ュ繝シ繝ォ繝「繝シ繝画ュ蝣ア繧貞叙蠕励@縺セ縺吶?
300             *
301             * @og.rev 4.3.0.0 (2008/07/04) 譁ー隕剰ソス蜉?
302             *
303             * @return      繝ュ繝シ繝ォ繝「繝シ繝画ュ蝣ア
304             */
305            public RoleMode getRoleMode() {
306                    return roleMode ;
307            }
308    
309            /**
310             * 繧ェ繝悶ず繧ァ繧ッ繝医?隴伜挨蟄舌→縺励※?後Θ繝シ繧カ繝シ諠??繧定ソ斐@縺セ縺吶?
311             *
312             * @return  繝ヲ繝シ繧カ繝シ諠??
313             */
314            public String getInfo() {
315                    StringBuilder rtn = new StringBuilder( HybsSystem.BUFFER_MIDDLE );
316                    rtn.append( userID ).append( " ??" );
317                    rtn.append( jname  ).append( HybsSystem.CR );
318                    return rtn.toString();
319            }
320    
321            /**
322             * UserInfo縺ョ螻樊?譁?ュ怜?繧堤匳骭イ縺励∪縺吶?
323             *
324             * 莠育エ?枚蟄?JNAME,ID,INFO,LANG,ROLES,IPADDRESS,LOGINTIME,LASTACCESS,YMD,YMDH,LASTGAMENNM)繧?
325             * 逋サ骭イ縺励h縺?→縺励◆蝣エ蜷医?縲√お繝ゥ繝シ縺ォ縺励∪縺吶?
326             *
327             * @param       key     繧ュ繝シ
328             * @param       value   蛟、
329             * @param       save    繝ヲ繝シ繧カ繝シ豌ク邯壼喧諠??(GE20)縺ォ諠??繧剃ソ晏ュ倥☆繧九°
330             * @throws HybsSystemException
331             */
332            public void setAttribute( final String key,final String value, final boolean save ) {
333                    setAttribute( key, value, save, false );
334            }
335    
336            /**
337             * UserInfo縺ョ螻樊?譁?ュ怜?繧堤匳骭イ縺励∪縺吶?
338             *
339             * 莠育エ?枚蟄?JNAME,ID,INFO,LANG,ROLES,IPADDRESS,LOGINTIME,LASTACCESS,YMD,YMDH,LASTGAMENNM)繧?
340             * 逋サ骭イ縺励h縺?→縺励◆蝣エ蜷医?縲√お繝ゥ繝シ縺ォ縺励∪縺吶?
341             *
342             * @og.rev 3.5.6.0 (2004/06/18) synchronized 繧誕ttribute 縺ォ陦後>縺セ縺吶?
343             * @og.rev 4.3.4.0 (2008/12/01) 繝ヲ繝シ繧カ繝シ豌ク邯壼喧諠??(GE20)縺ク逋サ骭イ縺吶k縺九?繝輔Λ繧ー繧定ソス蜉?
344             * @og.rev 5.3.6.0 (2011/06/01) 繝ヲ繝シ繧カ繝シ豌ク邯壼喧諠??(GE20)縺ク逋サ骭イ譎ゅ↓蜈ィ繝ヲ繝シ繧カ繝シ蜈ャ髢九☆繧九°縺ョ繝輔Λ繧ー繧定ソス蜉?
345             * @og.rev 5.6.8.1 (2013/09/13) 蛟、縺?null縲√∪縺溘?繧シ繝ュ譁?ュ怜?縺ョ蝣エ蜷医?蜃ヲ逅?@縺セ縺帙s縲?
346             *
347             * @param       key     繧ュ繝シ
348             * @param       value   蛟、
349             * @param       save    繝ヲ繝シ繧カ繝シ豌ク邯壼喧諠??(GE20)縺ォ諠??繧剃ソ晏ュ倥☆繧九°
350             * @param       common  繝ヲ繝シ繧カ繝シ豌ク邯壼喧諠??(GE20)縺ォ菫晏ュ倥@縺滓ュ蝣ア繧貞?繝ヲ繝シ繧カ繝シ蜈ャ髢九☆繧九°
351             * @throws HybsSystemException
352             */
353    //      public void setAttribute( final String key,final String value ) {
354    //      public void setAttribute( final String key,final String value, final boolean save ) {
355            private void setAttribute( final String key,final String value, final boolean save, final boolean common ) {
356                    if( key != null && YOYAKU.indexOf( "|" + key + "|" ) < 0 ) {
357                            // 5.6.8.1 (2013/09/13) 蛟、縺?null縲√∪縺溘?繧シ繝ュ譁?ュ怜?縺ョ蝣エ蜷医?蜃ヲ逅?@縺セ縺帙s縲?
358                            if( value != null && value.length() > 0 ) {
359                                    synchronized( attribute ) {
360                                            attribute.put( key,value ) ;
361                                    }
362    
363                                    // 4.3.4.0 (2008/12/01) 霑ス蜉?
364                                    if( save ) {
365                                            savePermanently( key ,value, common );
366                                    }
367                            }
368                    }
369                    else {
370                            String errMsg = "螻樊?譁?ュ怜?繧ュ繝シ縺御ク肴ュ」縺ァ縺吶? key=[" + key + "]"
371                                                    + HybsSystem.CR
372                                                    + "null 縺セ縺溘?莠育エ?ェ?" + YOYAKU + ") 縺ッ謖?ョ壹〒縺阪∪縺帙s縲?;
373                            throw new HybsSystemException( errMsg );
374                    }
375            }
376    
377            /**
378             * 繝ヲ繝シ繧カ繝シ縺ョ繝ュ繝シ繝ォ縺後?"root" 讓ゥ髯舌′縺ゅk縺九←縺?°縲∬ソ斐@縺セ縺吶?
379             *
380             * "root" 讓ゥ髯舌→縺ッ縲√Ο繝シ繝ォ縺後?"root","manager","admin" 縺ョ縺?★繧後°縺ョ蝣エ蜷医?
381             *
382             * @og.rev 3.4.0.3 (2003/09/10) 譁ー隕剰ソス蜉?
383             * @og.rev 4.3.0.0 (2008/07/04) 蟒?ュ「
384             *
385             * @return  "root" 讓ゥ髯舌°縺ゥ縺?°
386             */
387    //      public boolean isRoot() {
388    //              return isRootRole ;
389    //      }
390    
391            /**
392             * UserInfo縺ョ螻樊?譁?ュ怜?繧貞叙蠕励@縺セ縺吶?
393             *
394             * 莉・荳九?蛟、縺ッ UserInfo 繧ェ繝悶ず繧ァ繧ッ繝医?鬆?岼縺九i蜿門セ励@縺セ縺吶?
395             * <pre>
396             * 繝サJNAME      繝ヲ繝シ繧カ繝シ譌・譛ャ隱槫錐遘ー
397             * 繝サID         繝ヲ繝シ繧カ繝シ?ゥ?、
398             * 繝サIDNO       (蛻晄悄蛟、)USER.ID 縺鯉シ稗yte莉・荳翫?譎ゅ?縺ソ蜈磯??第枚蟄励r髯、縺?◆繝ヲ繝シ繧カ繝シ?ゥ?、
399             * 繝サINFO       繝ヲ繝シ繧カ繝シ諠??(繝ヲ繝シ繧カ繝シID?壽律譛ャ隱槫錐遘ー)
400             * 繝サLANG       險?ェ?
401             * 繝サROLES      繝ュ繝シ繝ォ
402             * 繝サIPADDRESS  IP繧「繝峨Ξ繧ケ
403             * 繝サLOGINTIME  繝ュ繧ー繧、繝ウ譎ょ綾
404             * 繝サLASTACCESS 譛?オゅい繧ッ繧サ繧ケ逕サ髱「ID
405             * 繝サLASTGAMENNM 譛?オゅい繧ッ繧サ繧ケ逕サ髱「蜷?
406             *
407             * 莉・荳九?蛟、縺ッ縺ゅi縺九§繧√?蜍慕噪縺ォ菴懈?縺輔l縺セ縺吶?
408             * 繝サYMD       ?話yte 縺ョ莉頑律縺ョ繧キ繧ケ繝?Β譌・莉?
409             * 繝サYMDH    ?托シ巴yte 縺ョ莉頑律縺ョ繧キ繧ケ繝?Β譌・譎?
410             * </pre>
411             *
412             * 縺昴l莉・螟悶?,螟夜Κ繧医j險ュ螳壹&繧後◆蛟、縺ァ縺吶?
413             *
414             * @og.rev 2.1.0.2 (2002/11/07) USER.IDNO 縺ョ霑斐☆蛟、繧旦SER.ID 縺鯉シ稗yte莉・荳翫?譎ゅ?縺ソ縲?
415             * 蜈磯?1譁?ュ励r髯、縺?◆蛟、繧定ソ斐☆讒倥↓螟画峩縲ゅ◎繧御サ・螟悶?縲ゞSER.ID繧定ソ斐☆縲?
416             *
417             * @og.rev 2.2.0.0 (2002/12/17) 荳ュ蝗ス隱?蝗ス髫帛喧)蟇セ蠢? ENCODE 霑ス蜉?
418             * @og.rev 3.1.3.0 (2003/04/10) 繝ヲ繝シ繧カ繝シ諠??縺九i縲√お繝ウ繧ウ繝シ繝画ュ蝣ア繧貞炎髯、縺吶k縲?
419             * @og.rev 3.5.4.2 (2003/12/15) ENAME,MAILTO縲`AILUSERID縲`AILPASSWD縲;ROUP縲 ̄ROJECT繧貞炎髯、縺吶k縲?
420             * @og.rev 3.5.6.0 (2004/06/18) synchronized 繧誕ttribute 縺ォ陦後>縺セ縺吶?
421             * @og.rev 3.6.0.0 (2004/09/17) PASSWD 繧貞炎髯、縺吶k縲?
422             * @og.rev 3.8.1.2 (2005/12/19) USER.IDNO 繧貞炎髯、縺吶k縲?螟夜Κ險ュ螳壼庄閭ス縺ォ縺吶k縺溘a)
423             * @og.rev 3.8.7.0 (2006/12/15) ApplicationInfo繧ェ繝悶ず繧ァ繧ッ繝医°繧画怙邨ゅい繧ッ繧サ繧ケ逕サ髱「繧貞叙蠕?
424             * @og.rev 4.4.0.0 (2009/08/02) 繝??繧ソ繝ュ繝シ繝ォ螻樊?蟇セ蠢?
425             * @og.rev 4.4.0.1 (2009/08/08) LASTGAMENNM霑ス蜉?
426             *
427             * @param       key     繧ュ繝シ
428             *
429             * @return      UserInfo縺ョ螻樊?譁?ュ怜?
430             */
431            public String getAttribute( final String key ) {
432                    if( key == null ) { return null; }
433                    String rtn = null;
434    
435                    if(      key.equalsIgnoreCase( "JNAME"  ) ) { rtn = jname; }
436                    else if( key.equalsIgnoreCase( "ID"             ) ) { rtn = userID; }
437                    else if( key.equalsIgnoreCase( "INFO"           ) ) { rtn = getInfo(); }
438                    else if( key.equalsIgnoreCase( "LANG"           ) ) { rtn = lang; }
439                    else if( key.equalsIgnoreCase( "ROLE"           ) ) { rtn = roles; }
440                    else if( key.equalsIgnoreCase( "ROLES"          ) ) { rtn = roles; }
441                    else if( key.equalsIgnoreCase( "DROLES"         ) ) { rtn = droles; } // 4.4.0.0 (2009/08/02)
442                    else if( key.equalsIgnoreCase( "IPADDRESS"      ) ) { rtn = ipAddress; }
443                    else if( key.equalsIgnoreCase( "LOGINTIME"      ) ) {
444                            rtn = HybsSystem.getDate( loginTime );
445                    }
446                    else if( key.equalsIgnoreCase( "LASTACCESS"  ) ) {              // 3.8.7.0 (2006/12/15)
447                            if( appInfo != null ) { rtn = appInfo.getGamenId(); }
448                    }
449                    else if( key.equalsIgnoreCase( "YMD" ) ) {
450                            rtn = HybsSystem.getDate( "yyyyMMdd" );
451                    }
452                    else if ( key.equalsIgnoreCase( "LASTGAMENNM" ) ){              // 4.4.0.1 (2009/08/08)
453                            if( appInfo != null && appInfo.getGamenId() != null){
454                                    if( getGUIInfo( appInfo.getGamenId() ) != null){
455                                            rtn = getGUIInfo( appInfo.getGamenId() ).getName();
456                                    }
457                            }
458                    }
459                    else if( key.equalsIgnoreCase( "YMDH" ) ) {
460                            rtn = HybsSystem.getDate( "yyyyMMddHHmmss" );
461                    }
462                    else {
463                            synchronized( attribute ) {
464                                    rtn = attribute.get( key ) ;
465                            }
466                    }
467                    return rtn ;
468            }
469    
470            /**
471             * UserInfo縺ョ螻樊?譁?ュ怜?縺ョ蜀?Κ諠??繧定ソ斐@縺セ縺吶?
472             * 縺薙?蜀?Κ諠??縺ョ荳ュ縺ォ縺ッ縲ゞserInfo 閾ェ霄ォ縺ョ邂。逅?ュ蝣ア繧ょ性繧√∪縺吶?
473             * 迢ャ閾ェ邂。逅?く繝シ縺ッ縲゛NAME,ID,IDNO,INFO,LANG,ROLES,IPADDRESS,LOGINTIME,LASTACCESS,LASTGAMENNM 縺ァ縺吶?
474             *
475             * 縺昴l莉・螟悶?,螟夜Κ繧医j險ュ螳壹&繧後◆蛟、縺ァ縺吶?
476             *
477             * @og.rev 4.0.0.0 (2004/12/31) 譁ー隕丈ス懈?
478             * @og.rev 4.4.0.1 (2009/08/08) LASTGAMENNM霑ス蜉?
479             *
480             * @return 螻樊?譁?ュ怜?縺ョHybsEntry繧ェ繝悶ず繧ァ繧ッ繝磯?蛻?
481             */
482            public HybsEntry[] getEntrys() {
483                    List<HybsEntry> list = new ArrayList<HybsEntry>();
484    
485                    list.add( new HybsEntry( "JNAME"                , getAttribute( "JNAME"         ) ,"繝ヲ繝シ繧カ繝シ譌・譛ャ隱槫錐遘ー" ) );
486                    list.add( new HybsEntry( "ID"                   , getAttribute( "ID"            ) ,"繝ヲ繝シ繧カ繝シ?ゥ?、" ) );
487                    list.add( new HybsEntry( "IDNO"                 , getAttribute( "IDNO"          ) ,"USER.ID 縺鯉シ稗yte莉・荳翫?譎ゅ?縺ソ蜈磯??第枚蟄励r髯、縺?◆繝ヲ繝シ繧カ繝シ?ゥ?、" ) );
488                    list.add( new HybsEntry( "INFO"                 , getAttribute( "INFO"          ) ,"繝ヲ繝シ繧カ繝シ諠??(繝ヲ繝シ繧カ繝シID?壽律譛ャ隱槫錐遘ー)" ) );
489                    list.add( new HybsEntry( "LANG"                 , getAttribute( "LANG"          ) ,"險?ェ? ) );
490                    list.add( new HybsEntry( "ROLES"                , getAttribute( "ROLES"         ) ,"繝ュ繝シ繝ォ繧コ" ) );
491                    list.add( new HybsEntry( "IPADDRESS"    , getAttribute( "IPADDRESS" ) ,"IP繧「繝峨Ξ繧ケ" ) );
492                    list.add( new HybsEntry( "LOGINTIME"    , getAttribute( "LOGINTIME" ) ,"繝ュ繧ー繧、繝ウ譎ょ綾" ) );
493                    list.add( new HybsEntry( "LASTACCESS"   , getAttribute( "LASTACCESS" ) ,"譛?オゅい繧ッ繧サ繧ケ逕サ髱「ID" ) );
494                    list.add( new HybsEntry( "LASTGAMENNM"  , getAttribute( "LASTGAMENNM") ,"譛?オゅい繧ッ繧サ繧ケ逕サ髱「蜷? ) ); // 4.4.0.1 (2009/08/08)
495                    list.add( new HybsEntry( "YMD"                  , getAttribute( "YMD"           ) ,"縲?シ話yte 縺ョ莉頑律縺ョ繧キ繧ケ繝?Β譌・莉? ) );
496                    list.add( new HybsEntry( "YMDH"                 , getAttribute( "YMDH"          ) ,"?托シ巴yte 縺ョ莉頑律縺ョ繧キ繧ケ繝?Β譌・譎? ) );
497    
498                    synchronized( attribute ) {
499                            String[] keys = attribute.keySet().toArray( new String[attribute.size()] );
500                            Arrays.sort( keys );
501                            for( int i=0; i<keys.length; i++ ) {
502                                    list.add( new HybsEntry( keys[i],getAttribute( keys[i] ) ) );
503                            }
504                    }
505                    return list.toArray( new HybsEntry[list.size()] );
506            }
507    
508            /**
509             * UserInfo縺ョ螻樊?譁?ュ怜?繧貞炎髯、縺励∪縺吶?
510             *
511             * @param       key     繧ュ繝シ
512             * @param       save    繝ヲ繝シ繧カ繝シ豌ク邯壼喧諠??(GE20)縺九i諠??繧貞炎髯、縺吶k縺?
513             */
514            public void removeAttribute( final String key, final boolean save ) {
515                    removeAttribute( key, save, false );
516            }
517    
518            /**
519             * UserInfo縺ョ螻樊?譁?ュ怜?繧貞炎髯、縺励∪縺吶?
520             *
521             * @og.rev 3.5.6.0 (2004/06/18) synchronized 繧誕ttribute 縺ォ陦後>縺セ縺吶?
522             * @og.rev 5.3.6.0 (2011/06/01) 繝ヲ繝シ繧カ繝シ豌ク邯壼喧諠??(GE20)縺九i蜑企勁縺吶k縺九?繝輔Λ繧ー繧定ソス蜉?
523             *
524             * @param       key     繧ュ繝シ
525             * @param       save    繝ヲ繝シ繧カ繝シ豌ク邯壼喧諠??(GE20)縺九i諠??繧貞炎髯、縺吶k縺?
526             * @param       common  繝ヲ繝シ繧カ繝シ豌ク邯壼喧諠??(GE20)縺九i諠??蜑企勁譎ゅ?蜈ィ繝ヲ繝シ繧カ繝シ蜈ャ髢区ュ蝣ア繧貞炎髯、縺吶k縺?
527             */
528            private void removeAttribute( final String key, final boolean save, final boolean common ) {
529                    synchronized( attribute ) {
530                            attribute.remove( key ) ;
531                    }
532    
533                    if( save ) {
534                            deletePermanently( key, common );
535                    }
536            }
537    
538            /**
539             * 繝ヲ繝シ繧カ繝シ蛟句挨縺ョ逕サ髱「繧ェ繝悶ず繧ァ繧ッ繝医?繝槭ャ繝励r繧サ繝?ヨ縺励∪縺吶?
540             *
541             * @og.rev 3.8.7.0 (2006/12/15) 繧「繧ッ繧サ繧ケ繝ュ繧ー蜿門セ励?轤コ,ApplicationInfo繧ェ繝悶ず繧ァ繧ッ繝医r險ュ螳?
542             * @og.rev 4.0.0.0 (2005/01/31) 譁ー隕剰ソス蜉?
543             * @og.rev 4.1.1.0 (2008/01/29) 逕サ髱「縺ョ譬シ荳翫£縺ィ縺頑ー励↓蜈・繧翫?繝??菴懈?縺ッ繧ッ繝ゥ繧ケUserAccessTable縺ォ萓晞?
544             * @og.rev 5.2.0.0 (2010/09/01) 繧「繧ッ繧サ繧ケ遖∵ュ「繧「繝峨Ξ繧ケ縺ォ繧医k荳肴ュ」繧「繧ッ繧サ繧ケ髦イ豁「讖溯?霑ス蜉?
545             *
546             * @param       newGuiMap                       逕サ髱「繧ェ繝悶ず繧ァ繧ッ繝医?繝槭ャ繝?
547             * @param       newForbidAddrSet        繧「繧ッ繧サ繧ケ遖∵ュ「繧「繝峨Ξ繧ケ繧サ繝?ヨ
548             */
549    //      public void setGUIMap( final Map<String,GUIInfo> newGuiMap ) {
550            public void setGUIMap( final Map<String,GUIInfo> newGuiMap, final Set<String> newForbidAddrSet ) {
551                    if( newGuiMap != null ) {
552                            synchronized( guiLock ) {
553                                    guiMap = newGuiMap ;
554                                    forbidAddrSet = newForbidAddrSet;
555                                    favoriteGuiMap = UserAccessTable.makeAccessDB( guiMap,systemId,userID,lang );
556                                    isInfoSet = true;
557                            }
558                    }
559            }
560    
561            /**
562             * 繝ヲ繝シ繧カ繝シ蛟句挨縺ョ逕サ髱「繧ェ繝悶ず繧ァ繧ッ繝医r蜿門セ励@縺セ縺吶?
563             * 繧「繧ッ繧サ繧ケ縺ァ縺阪↑縺?判髱「ID縺梧欠螳壹&繧後◆縺ィ縺阪?縲]ull 縺瑚ソ斐j縺セ縺吶?
564             *
565             * @og.rev 4.0.0.0 (2005/01/31) 譁ー隕剰ソス蜉?
566             * @og.rev 5.2.0.0 (2010/09/01) guiMap 縺ョ null 蛻、螳壹r霑ス蜉?
567             *
568             * @param       gamenId 逕サ髱「ID
569             *
570             * @return      逕サ髱「繧ェ繝悶ず繧ァ繧ッ繝?
571             */
572            public GUIInfo getGUIInfo( final String gamenId ) {
573                    synchronized( guiLock ) {
574                            if( guiMap != null) {                                           // 5.2.0.0 (2010/09/01) guiMap 縺ョ null 蛻、螳?
575                                    return guiMap.get( gamenId );
576                            }
577                            else {
578                                    return null;                                                    // 5.2.0.0 (2010/09/01) 
579                            }
580                    }
581            }
582    
583            /**
584             * 繝ヲ繝シ繧カ繝シ蛟句挨縺ョ逕サ髱「繧ェ繝悶ず繧ァ繧ッ繝医?繝槭ャ繝励r蜿門セ励@縺セ縺吶?
585             *
586             * @og.rev 4.0.0.0 (2005/01/31) 譁ー隕剰ソス蜉?
587             * @og.rev 5.2.0.0 (2010/09/01) guiMap 縺ョ null 蛻、螳壹r霑ス蜉?
588             *
589             * @return      逕サ髱「繧ェ繝悶ず繧ァ繧ッ繝医?驟榊?
590             */
591            public GUIInfo[] getGUIInfos() {
592                    synchronized( guiLock ) {
593                            if( guiMap != null) {                                           // 5.2.0.0 (2010/09/01) guiMap 縺ョ null 蛻、螳?
594                                    return guiMap.values().toArray( new GUIInfo[ guiMap.size() ] ) ;
595                            }
596                            else {
597                                    return null;                                                    // 5.2.0.0 (2010/09/01) 
598                            }
599                    }
600            }
601    
602            /**
603             * 繧「繧ッ繧サ繧ケ縺瑚ィア蜿ッ縺輔l縺ヲ縺?k繧「繝峨Ξ繧ケ縺九←縺?°繧偵メ繧ァ繝?け縺励∪縺吶?
604             *
605             * 繝√ぉ繝?け縺ョ譁ケ豕輔?縲√ヶ繝ゥ繝?け繝ェ繧ケ繝域婿蠑上〒縺吶?
606             * 逕サ髱「繝ェ繧ス繝シ繧ケ縺ォ逋サ骭イ縺輔l縺滉ク?ヲァ縺ョ蜀??縺昴?繝ヲ繝シ繧カ繝シ縺瑚ィア蜿ッ縺輔l縺ヲ縺?↑縺?い繝峨Ξ繧ケ縺ォ
607             * 蟇セ縺励※縺ョ縺ソfalse縺瑚ソ斐j縺セ縺吶?
608             * 逕サ髱「繝ェ繧ス繝シ繧ケ縺ォ逋サ骭イ縺輔l縺ヲ縺?↑縺?い繝峨Ξ繧ケ繧??繧「繝峨Ξ繧ケ縺ォURL縺ョ蛹コ蛻?j譁?ュ?/)縺?
609             * 蜷ォ縺セ繧後※縺?k蝣エ蜷医?繝√ぉ繝?け縺輔l縺セ縺帙s縲?true縺瑚ソ斐j縺セ縺?
610             *
611             * @og.rev 5.2.0.0 (2010/09/01) 譁ー隕剰ソス蜉?
612             *
613             * @param addr 繝√ぉ繝?け蟇セ雎。縺ョ繧「繝峨Ξ繧ケ
614             *
615             * @return 繧「繧ッ繧サ繧ケ縺瑚ィア蜿ッ縺輔l縺ヲ縺?k繧「繝峨Ξ繧ケ縺九←縺?°
616             */
617            public boolean isValidAddr( final String addr ) {
618                    synchronized( guiLock ) {
619                            return ( forbidAddrSet == null || !forbidAddrSet.contains( addr ) );
620                    }
621            }
622    
623            /**
624             * 繝ヲ繝シ繧カ繝シ蛟句挨縺ョ縺頑ー励↓蜈・繧顔判髱「繧ェ繝悶ず繧ァ繧ッ繝医?繝槭ャ繝励r蜿門セ励@縺セ縺吶?
625             *
626             * @og.rev 4.1.1.0 (2008/01/31) 譁ー隕剰ソス蜉?
627             *
628             * @return      縺頑ー励↓蜈・繧顔判髱「繧ェ繝悶ず繧ァ繧ッ繝医?繝槭ャ繝?
629             */
630            public Map<String,FavoriteGUIData> getFavoriteMap() {
631                    return favoriteGuiMap;
632            }
633    
634            /**
635             * 逕サ髱「繧ェ繝悶ず繧ァ繧ッ繝医?繝槭ャ繝励′繧サ繝?ヨ貂医∩縺九←縺?°繧貞叙蠕励@縺セ縺吶?
636             *
637             * @og.rev 4.0.0.0 (2005/01/31) 譁ー隕剰ソス蜉?
638             *
639             * @return 逕サ髱「繧ェ繝悶ず繧ァ繧ッ繝医?繝槭ャ繝励′繧サ繝?ヨ貂医∩縺九←縺?°(true:繧サ繝?ヨ貂医∩ / false:譛ェ繧サ繝?ヨ)
640             */
641            public boolean isGUIInfoSet() {
642                    return isInfoSet ;
643            }
644    
645            /**
646             * 謖?ョ壹?繝ヲ繝シ繧カ繝シ繝ュ繝シ繝ォ縺ォ蟇セ縺吶k譛?オら噪縺ェ繧「繧ッ繧サ繧ケ譚。莉カ繧貞叙蠕励@縺セ縺吶?
647             * 繧「繧ッ繧サ繧ケ譚。莉カ縺ッ縲∬、?焚縺ゅk繝ヲ繝シ繧カ繝シ繝ュ繝シ繝ォ縺ョ荳ュ縺ァ縲∵怙螟ァ縺ョ繧「繧ッ繧サ繧ケ譚。莉カ繧堤ョ怜?縺励∪縺吶?
648             * 萓九∴縺ー縲、AA(-r)|BBB(-w)|CCC(mr) 縺ョ?薙▽縺ョ繝ュ繝シ繝ォ/繝「繝シ繝峨′險ュ螳壹&繧後※縺?k蝣エ蜷医?
649             * 繝ヲ繝シ繧カ繝シ縺後?AAA 縺?¢縺ョ蝣エ蜷医?縲?r 縺ァ縺吶′縲、AA|BBB 繧呈戟縺」縺ヲ縺?k蝣エ蜷医?縲?w 縺ォ縺ェ繧翫∪縺吶?
650             * 縺輔i縺ォ縲。BB|CCC 縺ィ謖√▲縺ヲ縺?k蝣エ蜷医?縲?-w:譖ク縺崎セシ縺ソ險ア蜿ッ)縺ィ(mr:繝。繝九Η繝シ縺九i隱ュ蜿冶ィア蜿ッ)縺ョ
651             * 讓ゥ髯舌↓繧医j縲[w:繝。繝九Η繝シ縺九i縺ョ譖ク縺崎セシ縺ソ險ア蜿ッ縺御ク弱∴繧峨l縺セ縺吶?
652             * 繝「繝シ繝画欠螳壹′縺ゅk蝣エ蜷医?縲、ND貍皮ョ励↓縺ェ繧翫∪縺吶?
653             * 萓九∴縺ー縲、AA(-r)|BBB(-w)|CCC(mr) 縺ィ BBB|CCC(-r) 縺ョ蝣エ蜷医?(-r)+(-w)+(mr)*(-r)=-w 縺ォ
654             * 縺ェ繧翫∪縺吶?繝ュ繝シ繝ォ縺ッ縲^R 縺ァ縺吶′縲√Δ繝シ繝峨?縲∝酔荳?Ο繝シ繝ォ縺ァ縺ョAND 縺ォ縺ェ繧翫∪縺吶?
655             * 螳滄圀縺ォ縺ッ縲√Γ繝九Η繝シ陦ィ遉コ縺ョ蜿ッ蜷ヲ縺ッ縲√?繝??繧「繝??邉サ縺ォ繧医¥逕ィ縺?i繧後∪縺吶?縺ァ縲∽ク願ィ倥?繧医≧縺ェ
656             * 險ア蜿ッ縺悟ョ滄圀縺ォ縺ゅk縺九←縺?°縺ッ荳肴?縺ァ縺吶′縲√☆縺ケ縺ヲ縺ョ繝「繝シ繝峨?OR譚。莉カ縺ァ縺ョ邨仙粋縺ォ縺ェ繧翫∪縺吶?
657             *
658             * @og.rev 4.3.0.0 (2008/07/04) 繝ュ繝シ繝ォ繝「繝シ繝峨?繝ォ繝∝ッセ蠢?
659             *
660             * @param       other   繝ュ繝シ繝ォ繝「繝シ繝?
661             *
662             * @return 繧「繧ッ繧サ繧ケ繝薙ャ繝?
663             */
664            public byte getAccessBitMode( final RoleMode other ) {
665                    return roleMode.getAccessBitMode( other );
666            }
667    
668            /**
669             * 謖?ョ壹?繝ヲ繝シ繧カ繝シ繝ュ繝シ繝ォ縺ォ蟇セ縺吶k譛?オら噪縺ェ繧「繧ッ繧サ繧ケ譚。莉カ繧貞叙蠕励@縺セ縺吶?
670             *
671             * @og.rev 4.3.0.0 (2008/07/04) 繝ュ繝シ繝ォ繝「繝シ繝峨?繝ォ繝∝ッセ蠢?
672             *
673             * @param       roles   繝ュ繝シ繝ォ譁?ュ怜?
674             *
675             * @return 繧「繧ッ繧サ繧ケ繝薙ャ繝?
676             */
677    //      public byte getAccessBitMode( final String roles ) {
678    //              return roleMode.getAccessBitMode( RoleMode.newInstance( roles ) );
679    //      }
680    
681            /**
682             * 縺薙?繝ヲ繝シ繧カ繝シ縺ョ讓ゥ髯舌〒縲∵欠螳壹?繝ュ繝シ繝ォ縺瑚ィア蜿ッ縺輔l縺ヲ縺?k縺九←縺?°繧貞愛螳壹@縺セ縺吶?
683             *
684             * @og.rev 4.3.0.0 (2008/07/04) 繝ュ繝シ繝ォ繝「繝シ繝峨?繝ォ繝∝ッセ蠢?
685             * @og.rev 4.3.0.1 (2008/08/11) 繝ュ繝シ繝ォ繝√ぉ繝?け譎ゅ?蠑墓焚髢馴&縺??譏ッ豁」
686             *
687             * @param       role    繝√ぉ繝?け繧定。後≧繝ュ繝シ繝ォ
688             *
689             * @return      繧「繧ッ繧サ繧ケ縺ァ縺阪k(true)/蜃コ譚・縺ェ縺?false)
690             */
691            public boolean isAccess( final String role ) {
692                    if( role == null || role.length() == 0 ) {
693                            return true;
694                    }
695    
696    //              return ( roleMode.getAccessBitMode( RoleMode.newInstance( roles ) ) > 0 );
697                    return ( roleMode.getAccessBitMode( RoleMode.newInstance( role ) ) > 0 );            // 4.3.0.1 (2008/08/11)
698            }
699    
700            /**
701             * 縺薙?繝ヲ繝シ繧カ繝シ縺ョ讓ゥ髯舌〒縲∵欠螳壹?繝ュ繝シ繝ォ縺瑚ィア蜿ッ縺輔l縺ヲ縺?k縺九←縺?°繧貞愛螳壹@縺セ縺吶?
702             *
703             * @og.rev 4.3.0.0 (2008/07/04) 繝ュ繝シ繝ォ繝「繝シ繝峨?繝ォ繝∝ッセ蠢?
704             *
705             * @param otherRoles 繝√ぉ繝?け繧定。後≧繝ュ繝シ繝ォ
706             *
707             * @return 繧「繧ッ繧サ繧ケ縺ァ縺阪k(true)/蜃コ譚・縺ェ縺?false)
708             */
709    ////    public boolean isAccess( final String role ) {
710    //      public boolean isAccess( final String otherRoles ) {
711    //              // 繝ヲ繝シ繧カ繝シ縺後Ν繝シ繝医°縲∵欠螳壹?繝ュ繝シ繝ォ縺檎┌縺??蜷医?縲∫┌蛻カ髯舌い繧ッ繧サ繧ケ蜿ッ閭ス
712    ////            if( isRootRole || role == null || role.length() == 0 ) {
713    //              if( otherRoles == null || otherRoles.length() == 0 ) {
714    //                      return true;
715    //              }
716    //
717    //              // 繝ヲ繝シ繧カ繝シ繝ュ繝シ繝ォ縺檎┌縺??蜷医?縲√い繧ッ繧サ繧ケ荳崎ィア蜿ッ
718    //              if( roles == null || roles.length() == 0 ) {
719    //                      return false;
720    //              }
721    //
722    //              // 4.3.0.0 (2008/07/04) 繝ュ繝シ繝ォ繝「繝シ繝峨?繝ォ繝∝ッセ蠢?
723    //              RoleMode otherRoleMode = RoleMode.newInstance( otherRoles );
724    //              byte bit = roleMode.getAccessBitMode( otherRoleMode );
725    //
726    //              return bit > 0 ;
727    //
728    ////            // 繝ヲ繝シ繧カ繝シ繝ュ繝シ繝ォ縺檎┌縺??蜷医?縲√い繧ッ繧サ繧ケ荳崎ィア蜿ッ
729    ////            if( userRoles == null || userRoles.length == 0 ) {
730    ////                    return false;
731    ////            }
732    ////
733    ////            String[] otherRoles = StringUtil.csv2Array( role,HybsSystem.GUI_DELIMITER );
734    ////            for( int g=0; g<otherRoles.length; g++ ) {
735    ////                    if( otherRoles[g] != null ) {
736    ////                            for( int u=0; u<userRoles.length; u++ ) {
737    ////                                    if( otherRoles[g].equalsIgnoreCase( userRoles[u] ) ) {
738    ////                                            return true;
739    ////                                    }
740    ////                            }
741    ////                    }
742    ////            }
743    ////            return false;
744    //      }
745    
746            /**
747             * 蛻晄悄蛹?繧ッ繝ェ繧「)縺励∪縺?org.opengion.fukurou.util.Cleanable 縺ョ螳溯」?縲?
748             * 逕サ髱「繧ェ繝悶ず繧ァ繧ッ繝医?繝槭ャ繝励r繧ッ繝ェ繧「縺励?繧サ繝?ヨ貂医∩繝輔Λ繧ー繧呈悴繧サ繝?ヨ縺ォ險ュ螳壹@縺セ縺吶?
749             * 繧キ繧ケ繝?Β繝ェ繧ス繝シ繧ケ縺ョ USE_ACCESS_TOKEI_TABLE 縺?true 縺ョ蝣エ蜷医?縲?
750             * 逕サ髱「繧「繧ッ繧サ繧ケ迥カ豕√r縲?スア?ク?セ?ス邨ア險茨セ?スー?鯉セ橸セ?GE15)縺ォ譖ク縺崎セシ縺ソ縺セ縺吶?
751             * 繝ヲ繝シ繧カ繝シ蜊倅ス阪?繝代Λ繝。繝シ繧ソ縺ッ縲√す繧ケ繝?Β繝ェ繧ス繝シ繧ケ縺ョ USER_PARAMETER_SQL 縺ァ
752             * 螳夂セゥ縺輔l縺溷?繧呈、懃エ「縺励※縲∝叙繧願セシ縺ソ縺セ縺吶?
753             *
754             * @og.rev 3.8.7.0 (2006/12/15) 繧「繧ッ繧サ繧ケ繝ュ繧ー蜿門セ励?轤コ,ApplicationInfo繧ェ繝悶ず繧ァ繧ッ繝医r險ュ螳?
755             * @og.rev 4.0.0.0 (2005/01/31) 譁ー隕剰ソス蜉?
756             * @og.rev 5.6.8.1 (2013/09/13) lastRequestMap 繧?繝ヲ繝シ繧カ繝シ豌ク邯壼喧諠??(GE20) 縺ォ譖ク縺崎セシ縺ソ縺セ縺吶?
757             */
758            public void clear() {
759                    if( useAccessTable && isInfoSet ) { saveGUIAccessInfo(); }
760                    initLoad() ;
761    
762                    saveLastRequestValues();        // 5.6.8.1 (2013/09/13) lastRequestMap 繧?繝ヲ繝シ繧カ繝シ豌ク邯壼喧諠??(GE20) 縺ォ譖ク縺崎セシ縺ソ縺セ縺吶?
763            }
764    
765            /**
766             * 繝ヲ繝シ繧カ繝シ繝代Λ繝。繝シ繧ソ繧貞叙蠕励@縺セ縺吶?
767             * 逕サ髱「繧ェ繝悶ず繧ァ繧ッ繝医?繝槭ャ繝励r繧ッ繝ェ繧「縺励?繧サ繝?ヨ貂医∩繝輔Λ繧ー繧呈悴繧サ繝?ヨ縺ォ險ュ螳壹@縺セ縺吶?
768             * 繝ヲ繝シ繧カ繝シ蜊倅ス阪?繝代Λ繝。繝シ繧ソ縺ッ縲√す繧ケ繝?Β繝ェ繧ス繝シ繧ケ縺ョ USER_PARAMETER_SQL 縺ァ
769             * 螳夂セゥ縺輔l縺溷?繧呈、懃エ「縺励※縲∝叙繧願セシ縺ソ縺セ縺吶?
770             *
771             * @og.rev 4.0.0.0 (2005/01/31) 譁ー隕剰ソス蜉?
772             */
773            private void initLoad() {
774    
775                    // 繝ヲ繝シ繧カ繝シ繝代Λ繝。繝シ繧ソ縺ョ蜿門セ?
776                    if( QUERY_PARAM != null && QUERY_PARAM.length() > 0 ) {
777                            String[] args = new String[] { systemId,userID };
778                            // 逕サ髱「ID,謫堺ス?繝励Ο繧ー繝ゥ繝?D
779                            if( appInfo != null ) {
780                                    // 逕サ髱「ID,謫堺ス?繝励Ο繧ー繝ゥ繝?D
781                                    appInfo.setModuleInfo( "UserInfo",null,"initLoad" );
782                            }
783                            String[][] vals = DBUtil.dbExecute( QUERY_PARAM,args,appInfo,DBID );
784    
785                            synchronized( paramMap ) {
786                                    paramMap.clear();
787                                    for( int i=0; i<vals.length; i++ ) {
788                                            String key   = vals[i][0];
789                                            String val   = vals[i][1];
790                                            if( val != null && val.length() == 0 ) { continue; }
791                                            paramMap.put( key,val );
792                                    }
793                            }
794                    }
795            }
796    
797            /**
798             * 繝ヲ繝シ繧カ繝シ豌ク邯壼喧諠??(GE20)縺九iDB縺ォ菫晏ュ倥&繧後◆UserInfo縺ョ繝代Λ繝。繝シ繧ソ繝シ繧貞叙蠕励@縺セ縺吶?
799             *
800             * 縺薙%縺ァ縺ッ縲√く繝シ縺ョ蜈磯?縺後?LAST_REQUEST_DATA_SUFIX(="LAST_REQUEST_")譁?ュ怜?縺後?
801             * 莉倥>縺ヲ縺?k迚ゥ縺?¢ lastRequestMap 繝槭ャ繝励↓險ュ螳壹@縺セ縺吶?(蛻?¢縺ヲ邂。逅?@縺セ縺?
802             *
803             * @og.rev 5.3.6.0 (2011/06/01) 譁ー隕剰ソス蜉?
804             * @og.rev 5.6.8.1 (2013/09/13) setAttribute 繝。繧ス繝?ラ縺ァ縺ッ縺ェ縺上?逶エ謗・ Map縺ォ逋サ骭イ縺励∪縺吶?
805             *
806             * 窶サ 繧ウ繝ウ繧ケ繝医Λ繧ッ繧ソ縺ョ縺ソ縺ァ蜻シ縺ー繧後k縺溘a縲《ynchronized 縺ッ蜈・繧後※縺?∪縺帙s縲?
807             * @see         #LAST_REQUEST_DATA_SUFIX
808             */
809            private void dbLoad() {
810                    // 繝ヲ繝シ繧カ繝シ豌ク邯壼喧諠??(GE20)繝??繝悶Ν隱ュ縺ソ霎シ縺ソ
811                    String[] argsGe20 = new String[] { systemId,userID,roles };
812                    String[][] valsGe20 = DBUtil.dbExecute( QUERY_GE20,argsGe20,appInfo,DBID );
813    
814                    for( int i=0; i<valsGe20.length; i++ ) {
815                            // 4.3.4.0 (2008/12/01) 繝ヲ繝シ繧カ繝シ豌ク邯壼喧諠??(GE20)縺九i隱ュ縺ソ霎シ繧薙〒縺?k縺ョ縺ァ縲∝ス鍋┯菫晏ュ倥@縺ェ縺?
816    //                      setAttribute( valsGe20[i][0], valsGe20[i][1], false );
817                            String key = valsGe20[i][0];
818                            String val = valsGe20[i][1];
819                            if( key != null && key.length() > 0 ) {
820                                    if( key.startsWith( LAST_REQUEST_DATA_SUFIX ) ) {
821                                            // val 縺?null 縺九←縺?°縺ッ蝠上o縺ェ縺?
822                                            lastRequestMap.put( key.substring( LAST_REQUEST_DATA_SUFIX.length() ) , val );
823                                    }
824                                    else {
825                                            // val 縺?null 縺ョ蝣エ蜷医?縲∫匳骭イ縺励↑縺??
826                                            if( val != null && val.length() > 0 ) {
827                                                    attribute.put( key,val ) ;
828                                            }
829                                    }
830                            }
831                    }
832            }
833    
834            /**
835             * 螻樊?荳?ヲァ縺九iEDIT險ュ螳壽ュ蝣ア繧偵が繝悶ず繧ァ繧ッ繝亥喧縺励?逕サ髱「ID豈弱?繝槭ャ繝励↓逋サ骭イ縺励∪縺吶?
836             *
837             * 窶サ 繧ウ繝ウ繧ケ繝医Λ繧ッ繧ソ縺ョ縺ソ縺ァ蜻シ縺ー繧後k縺溘a縲《ynchronized 縺ッ蜈・繧後※縺?∪縺帙s縲?
838             *
839             * @og.rev 5.3.6.0 (2011/06/01) 譁ー隕剰ソス蜉?
840             */
841            private void makeEditConfigMap() {
842                    String[] keys = attribute.keySet().toArray( new String[0] );
843                    String[][] keySet = DBEditConfig.getKeySet( keys );
844                    if( keySet != null ) {
845                            for( String[] set : keySet ) {
846                                    String guikey = set[0];
847                                    String editName = set[1];
848                                    String[] editKeys = DBEditConfig.getEditKeys( guikey, editName );
849                                    String[] editVals = new String[editKeys.length];
850                                    for( int i=0; i<editKeys.length; i++ ) {
851                                            editVals[i] = attribute.get( editKeys[i] );
852                                    }
853                                    editMgr.addEditConfig( guikey, editName, new DBEditConfig( editVals ) );
854                            }
855                    }
856            }
857    
858            /**
859             * 蠑墓焚縺ョ逕サ髱「縺ァ逋サ骭イ縺輔l縺ヲ縺?k繧ィ繝?ぅ繝?ヨ險ュ螳壹r驟榊?縺ァ霑斐@縺セ縺吶?
860             * 霑斐&繧後k驟榊?縺ッ縲√お繝?ぅ繝?ヨ蜷埼?縺ォ繧ス繝シ繝医&繧後◆迥カ諷九〒霑斐&繧後∪縺吶?
861             *
862             * @og.rev 5.3.6.0 (2011/06/01) 譁ー隕剰ソス蜉?
863             *
864             * @param guikey 逕サ髱「ID
865             *
866             * @return 繧ィ繝?ぅ繝?ヨ險ュ螳?驟榊?)
867             */
868            public DBEditConfig[] getEditConfigs( final String guikey ) {
869                    return editMgr.getEditConfigs( guikey );
870            }
871    
872            /**
873             * 逕サ髱「ID縲√お繝?ぅ繝?ヨ蜷阪h繧翫お繝?ぅ繝?ヨ險ュ螳壹が繝悶ず繧ァ繧ッ繝医r霑斐@縺セ縺吶?
874             * 縺セ縺溘?縺薙%縺ァ謖?ョ壹&繧後◆繧ィ繝?ぅ繝?ヨ蜷阪′縺薙?逕サ髱「縺ァ縺ョ驕ク謚樊ク医∩繧ィ繝?ぅ繝?ヨ縺ィ縺励※逋サ骭イ縺輔l縺セ縺吶?
875             *
876             * @og.rev 5.3.6.0 (2011/06/01) 譁ー隕剰ソス蜉?
877             *
878             * @param guikey 逕サ髱「ID
879             * @param editName 繧ィ繝?ぅ繝?ヨ蜷?
880             *
881             * @return 繧ィ繝?ぅ繝?ヨ驟榊?
882             */
883            public DBEditConfig getEditConfig( final String guikey, final String editName ) {
884                    if( editName != null ) {
885                            String selEditName = getSelectedEdit( guikey );
886                            if( !editName.equals( selEditName ) ) {
887                                    setSelectedEdit( guikey, editName );
888                            }
889                    }
890            //      else {
891            //              setSelectedEdit( guikey, null );
892            //      }
893                    return editMgr.getEditConfig( guikey, editName );
894            }
895    
896            /**
897             * 謖?ョ壹?逕サ髱「ID縲√お繝?ぅ繝?ヨ蜷阪〒繧ィ繝?ぅ繝?ヨ險ュ螳壹が繝悶ず繧ァ繧ッ繝医r霑ス蜉?@縺セ縺吶?
898             * 譌「縺ォ逋サ骭イ縺輔l縺ヲ縺?k蝣エ蜷医?縲∵里蟄倥?繧ィ繝?ぅ繝?ヨ諠??繧呈峩譁ー縺励∪縺吶?
899             *
900             * @og.rev 5.3.6.0 (2011/06/01) 譁ー隕剰ソス蜉?
901             *
902             * @param guikey 逕サ髱「ID
903             * @param editName 繧ィ繝?ぅ繝?ヨ蜷?
904             * @param config 繧ィ繝?ぅ繝?ヨ險ュ螳壹が繝悶ず繧ァ繧ッ繝?
905             */
906            public void addEditConfig( final String guikey, final String editName, final DBEditConfig config ) {
907                    if( config == null ) { return; }
908    
909                    boolean isCommon = config.isCommon();
910                    String[] editKeys = DBEditConfig.getEditKeys( guikey, editName );
911                    String[] editVals = config.getEditVals();
912    
913                    // 蛟句挨險ュ螳壹?蝣エ蜷医?蜷後§繧ュ繝シ縺ァ蜈ア騾壽ュ蝣ア縺悟ュ伜惠縺励※縺?◆蝣エ蜷医?繧ィ繝ゥ繝シ縺ィ縺吶k縲?
914                    if( !isCommon && isExistValue( editKeys[0], "*", "*" ) ) {
915                            String msg = "蜷後§邱ィ髮?錐縺ァ蜈ア騾夊ィュ螳壹&繧後※縺?k縺溘a蛟句挨邱ィ髮?r菫晏ュ倥〒縺阪∪縺帙s縲?;
916                            throw new HybsSystemException( msg );
917                    }
918                    // 蜈ア騾夊ィュ螳壹?蝣エ蜷医?蜷後§繧ュ繝シ縺ァ蛟句挨諠??縺悟ュ伜惠縺励※縺?◆蝣エ蜷医?繧ィ繝ゥ繝シ縺ィ縺吶k縲?
919                    if( isCommon && isExistValue( editKeys[0], userID, "*" ) ) {
920                            String msg = "蜷後§邱ィ髮?錐縺ァ蛟句挨險ュ螳壹&繧後※縺?k縺溘a蜈ア騾夂キィ髮?r菫晏ュ倥〒縺阪∪縺帙s縲?;
921                            throw new HybsSystemException( msg );
922                    }
923    
924                    editMgr.addEditConfig( guikey, editName, config );
925                    for( int i=0; i<editKeys.length; i++ ) {
926                            if( editVals[i] != null && editVals[i].length() > 0 ) {
927                                    setAttribute( editKeys[i], editVals[i], true, isCommon );
928                            }
929                            else {
930                                    removeAttribute( editKeys[i], true, isCommon );
931                            }
932                    }
933            }
934    
935            /**
936             * 謖?ョ壹?逕サ髱「ID縲√お繝?ぅ繝?ヨ蜷阪?繧ィ繝?ぅ繝?ヨ險ュ螳壹r蜑企勁縺励∪縺吶?
937             *
938             * @og.rev 5.3.6.0 (2011/06/01) 譁ー隕剰ソス蜉?
939             *
940             * @param guikey 逕サ髱「ID
941             * @param editName 繧ィ繝?ぅ繝?ヨ蜷?
942             */
943            public void deleteEditConfig( final String guikey, final String editName ) {
944                    DBEditConfig config = editMgr.deleteEditConfig( guikey, editName );
945                    if( config != null ) {
946                            boolean isCommon = config.isCommon();
947                            String[] editKeys = DBEditConfig.getEditKeys( guikey, editName );
948                            // 繧ィ繝?ぅ繝?ヨ險ュ螳壹′蟄伜惠縺励↑縺??蜷医お繝ゥ繝シ縲?
949                            if( !isExistValue( editKeys[0], ( isCommon ? "*" : userID ), "*" ) ) {
950                                    String msg = "繧ィ繝?ぅ繝?ヨ險ュ螳壹′蟄伜惠縺励∪縺帙s縲?;
951                                    throw new HybsSystemException( msg );
952                            }
953                            for( int i=0; i<editKeys.length; i++ ) {
954                                    removeAttribute( editKeys[i], true, isCommon );
955                            }
956                    }
957    
958            //      if( editName != null ) {
959            //              String selEditName = getSelectedEdit( guikey );
960            //              if( !editName.equals( selEditName ) ) {
961            //                      setSelectedEdit( guikey, null );
962            //              }
963            //      }
964            }
965    
966            /**
967             * 謖?ョ壹?逕サ髱「ID縺ォ蟇セ縺励※驕ク謚樊ク医∩縺ョ繧ィ繝?ぅ繝?ヨ蜷阪r逋サ骭イ縺励∪縺吶?
968             *
969             * @og.rev 5.3.6.0 (2011/06/01) 譁ー隕剰ソス蜉?
970             *
971             * @param guikey 逕サ髱「ID
972             * @param editName 繧ィ繝?ぅ繝?ヨ蜷?
973             */
974            public void setSelectedEdit( final String guikey, final String editName ) {
975                    setAttribute( "EDIT_NAME_SELECTED_" + guikey, editName, true );
976            }
977    
978            /**
979             * 謖?ョ壹?逕サ髱「ID縺ォ蟇セ縺励※驕ク謚樊ク医∩縺ョ繧ィ繝?ぅ繝?ヨ蜷阪r霑斐@縺セ縺吶?
980             *
981             * @og.rev 5.3.6.0 (2011/06/01) 譁ー隕剰ソス蜉?
982             *
983             * @param guikey 逕サ髱「ID
984             *
985             * @return 驕ク謚樊ク医∩繧ィ繝?ぅ繝?ヨ蜷?
986             */
987            public String getSelectedEdit( final String guikey ) {
988                    return getAttribute( "EDIT_NAME_SELECTED_" + guikey );
989            }
990    
991            /**
992             * 譛?セ後↓菴ソ逕ィ縺輔l縺溘Μ繧ッ繧ィ繧ケ繝亥、画焚縺ョ蛟、繧偵?Map繧定ェュ縺ソ蜿悶▲縺ヲ逋サ骭イ縺励∪縺吶?
993             *
994             * 隱ュ縺ソ蜿悶j蟇セ雎。縺ッ縲∝?縺ォ lastRequestMap 縺ォ逋サ骭イ貂医∩縺ョ繧ュ繝シ縺?¢縺ァ縺吶?
995             * 縺昴?縺溘a縲+&#064;LAST.XXXX} 縺ァ蛟、繧定ヲ∵アゅ&繧後◆縺ィ縺阪↓縲√く繝シ縺?
996             * 逋サ骭イ縺輔l縺ヲ縺?↑縺??蜷医?縲√く繝シ縺?¢(蛟、 null縺ァ)逋サ骭イ縺励※縺翫″縺セ縺吶?
997             *
998             * @og.rev 5.6.8.1 (2013/09/13) 譁ー隕剰ソス蜉?
999             *
1000             * @param reqMap 繝ェ繧ッ繧ィ繧ケ繝亥、画焚縺ョMap
1001             */
1002            public void setLastRequestMap( final Map<String,String[]> reqMap ) {
1003                    if( reqMap != null ) {
1004                            synchronized( lastRequestMap ) {
1005                                    for( String key : lastRequestMap.keySet() ) {
1006                                            String[] vals = reqMap.get( key );
1007                                            if( vals != null ) {
1008                                                    String val = null;
1009                                                    for( int i=0; i<vals.length; i++ ) {
1010                                                            val = vals[i];
1011                                                            if( ! "0".equals( val ) ) { break; }    // 繝√ぉ繝?け繝懊ャ繧ッ繧ケ蟇セ蠢?
1012                                                    }
1013                                                    lastRequestMap.put( key, val );                         // val 縺ッ縲]ull 繧ゅ≠繧雁セ励k縲?
1014                                            }
1015                                    }
1016                            }
1017                    }
1018            }
1019    
1020            /**
1021             * 譛?セ後↓菴ソ逕ィ縺輔l縺溘Μ繧ッ繧ィ繧ケ繝亥、画焚縺ョ蛟、繧偵?險ュ螳壹@縺セ縺吶?
1022             *
1023             * 縺薙?蜃ヲ逅??縲+&#064;LAST.XXXX} 縺ッ縲√Μ繧ッ繧ィ繧ケ繝亥?縺後≠繧後?縲√◎繧後′蜆ェ蜈育噪縺ォ
1024             * 菴ソ繧上l縺セ縺吶?
1025             *
1026             * @og.rev 5.6.8.1 (2013/09/13) 譁ー隕剰ソス蜉?
1027             *
1028             * @param  key 繝ェ繧ッ繧ィ繧ケ繝医く繝シ
1029             * @param  val 險ュ螳壼?
1030             */
1031            public void setLastRequestValue( final String key,final String val ) {
1032                    if( key != null && key.length() > 0) {
1033                            synchronized( lastRequestMap ) {
1034                                    lastRequestMap.put( key, val );
1035                            }
1036                    }
1037            }
1038    
1039            /**
1040             * 譛?セ後↓菴ソ逕ィ縺輔l縺溘Μ繧ッ繧ィ繧ケ繝亥、画焚縺ョ蛟、繧偵?蜿門セ励@縺セ縺吶?
1041             *
1042             * 逕サ髱「縺ァ邁。邏?↓菴ソ逕ィ縺ァ縺阪k繧医≧縺ォ縲∝ー代@迚ケ谿翫↑蜃ヲ逅?r陦後>縺セ縺吶?
1043             * query 逕サ髱「縺ァ {&#064;LAST.XXXX} 繧貞他縺カ縺ィ縲〕astRequestMap 縺ォ繧ュ繝シ縺後↑縺代l縺ー縲?
1044             * 繧ュ繝シ縺?¢蜈医↓霑ス蜉?@縺セ縺吶?縺ゅl縺ー縲∝?繧貞叙蠕励☆繧九□縺代〒縺吶?
1045             * 縺昴@縺ヲ縲〉esult逕サ髱「縺ァ command="NEW" 縺ョ蝣エ蜷医?縺ソ縲√Μ繧ッ繧ィ繧ケ繝域ュ蝣ア縺ョMap縺九i縲?
1046             * lastRequestMap 縺ォ謖√▲縺ヲ縺?k繧ュ繝シ縺ァ(NULL縺ァ縺ェ縺??蜷医?)荳頑嶌縺阪そ繝?ヨ縺励∪縺吶?
1047             * 繧ュ繝」繝?す繝・驥上r貂帙i縺吶%縺ィ縺ィ縲∝?逅??蟇セ雎。繧ュ繝シ繧呈ク帙i縺呎э蜻ウ繧呈戟縺」縺ヲ縺?∪縺吶?
1048             *
1049             * @og.rev 5.6.8.1 (2013/09/13) 譁ー隕剰ソス蜉?
1050             *
1051             * @param  key 繝ェ繧ッ繧ィ繧ケ繝医く繝シ
1052             * @return 險ュ螳壼?
1053             */
1054            public String getLastRequestValue( final String key ) {
1055                    String rtn = null;
1056                    if( key != null && key.length() > 0) {
1057                            synchronized( lastRequestMap ) {
1058                                    if( lastRequestMap.containsKey( key ) ) {       // 繧ュ繝シ繧呈戟縺」縺ヲ縺?k縺九←縺?°繧貞愛螳?
1059                                            rtn = lastRequestMap.get( key );
1060                                    }
1061                                    else {
1062                                            lastRequestMap.put( key, null );                // 繧ュ繝シ縺?¢逋サ骭イ縺励※縺翫¥縲?
1063                                    }
1064                            }
1065                    }
1066                    return rtn ;
1067            }
1068    
1069            /**
1070             * lastRequestMap 繧?繝ヲ繝シ繧カ繝シ豌ク邯壼喧諠??(GE20) 縺ォ譖ク縺崎セシ縺ソ縺セ縺吶?
1071             *
1072             * clear() 蜃ヲ逅?′螳溯。後&繧後◆蝣エ蜷医↓縲√∪縺ィ繧√※ 繝ヲ繝シ繧カ繝シ豌ク邯壼喧諠??(GE20) 縺ォ譖ク縺崎セシ縺ソ縺セ縺吶?
1073             * 繧ソ繧、繝溘Φ繧ー逧?↓縺ッ縲《aveGUIAccessInfo() 繝。繧ス繝?ラ縺ィ蜷後§縺ァ縺吶′縲《aveGUIAccessInfo() 縺ッ縲?
1074             * 譖ク縺崎セシ繧?擅莉カ( useAccessTable && isInfoSet ) 縺後≠繧翫∪縺吶?
1075             * 繧サ繝シ繝悶☆繧区凾縺ォ縺ッ縲∽サ悶?螻樊?縺ィ蛹コ蛻・縺吶k縺溘a縲∵磁鬆ュ隱?LAST_REQUEST_DATA_SUFIX(="LAST_REQUEST_") 繧?
1076             * 繧ュ繝シ縺ォ莉倥¢縺ヲ貂。縺励∪縺吶?
1077             * 
1078             * 隱ュ縺ソ蜿悶j縺ッ縲‥bLoad() 縺ァ縲‖ttribute 縺ィ蜷後§繧ソ繧、繝溘Φ繧ー縺ァ縲√さ繝ウ繧ケ繝医Λ繧ッ繧ソ縺ァ縲∬。後>縺セ縺吶?
1079             *
1080             * @og.rev 5.6.8.1 (2013/09/13) 譁ー隕剰ソス蜉?
1081             *
1082             * @see         #clear()
1083             * @see         #dbLoad()
1084             */
1085            private void saveLastRequestValues() {
1086                    int cnt = 0;
1087                    synchronized( lastRequestMap ) {
1088                            for( String key : lastRequestMap.keySet() ) {
1089                                    String val = lastRequestMap.get( key );
1090                                    // 蜀?Κ蜃ヲ逅?噪縺ォ縺ッ蜀鈴聞縺?′縲∝ョ溯。碁?蠎ヲ縺悟ー代↑縺??縺ァ縲∬ィア縺吶?
1091                                    savePermanently( LAST_REQUEST_DATA_SUFIX + key,val,false );
1092                            }
1093                            cnt = lastRequestMap.size();
1094                    }
1095    //              System.out.println();
1096                    System.out.println( "  [" + userID + "] 譛?オゑセ假スク?エ?ス??ュ蝣ア({@LAST.XXXX})繧偵?(GE20)縺ォ縲ー" + cnt + "]莉カ縲∫匳骭イ縺励∪縺励◆縲? );
1097            }
1098    
1099            /**
1100             * 繧「繧ッ繧サ繧ケ繝ュ繧ー蜿門セ励?轤コ,ApplicationInfo繧ェ繝悶ず繧ァ繧ッ繝医r霑斐@縺セ縺吶?
1101             *
1102             * @og.rev 3.8.7.0 (2006/12/15) 譁ー隕剰ソス蜉?
1103             *
1104             * @param       gamenId 螳溯。御クュ縺ョ逕サ髱「ID
1105             * @param       prgId   螳溯。御クュ縺ョ繝励Ο繧ー繝ゥ繝?D
1106             *
1107             * @return      ApplicationInfo繧ェ繝悶ず繧ァ繧ッ繝?
1108             */
1109            public ApplicationInfo getApplicationInfo( final String gamenId,final String prgId ) {
1110                    if( appInfo != null ) {
1111                            // 逕サ髱「ID,謫堺ス?繝励Ο繧ー繝ゥ繝?D
1112                            appInfo.setModuleInfo( gamenId,null,prgId );
1113                    }
1114                    return appInfo;
1115            }
1116    
1117            /**
1118             * 閾ェ辟カ豈碑シ?Γ繧ス繝?ラ
1119             * 繧、繝ウ繧ソ繝輔ぉ繝シ繧ケ Comparable 縺ョ 螳溯」?〒縺吶?
1120             * 繝ヲ繝シ繧カ繝シ縺ョ鬆?コ上?縲√Θ繝シ繧カ繝シID 縺昴?繧ゅ?縺ョ鬆?コ上〒縺ゅi繧上&繧後∪縺吶?
1121             * 蜷御ク?Θ繝シ繧カ繝シ縺ョ蝣エ蜷医??後Ο繧ー繧、繝ウ繧ソ繧、繝??鬆?分縺ォ縺ェ繧翫∪縺吶?
1122             *
1123             * @og.rev 5.1.8.0 (2010/07/01) UserSummary 縺ョ Comparable 繧貞梛險ュ螳?
1124             *
1125             * @param       object  豈碑シ?ッセ雎。縺ョObject
1126             *
1127             * @return      縺薙?繧ェ繝悶ず繧ァ繧ッ繝医′謖?ョ壹&繧後◆繧ェ繝悶ず繧ァ繧ッ繝医h繧雁ー上&縺??蜷医?雋??謨エ謨ー縲∫ュ峨@縺??蜷医?繧シ繝ュ縲∝、ァ縺阪>蝣エ蜷医?豁」縺ョ謨エ謨ー
1128             */
1129            @Override
1130            public int compareTo( final UserSummary object ) {
1131    //              if( object instanceof UserInfo ) {
1132    //                      int test1 = userID.compareTo( ((UserInfo)object).getUserID() );
1133                            int test1 = userID.compareTo( object.getUserID() );
1134                            if( test1 == 0 ) {
1135    //                              test1 = (int)( loginTime - ((UserInfo)object).getLoginTime() ) ;
1136                                    test1 = (int)( loginTime - object.getLoginTime() ) ;
1137                            }
1138                            return test1;
1139    //              }
1140    //              throw new ClassCastException();
1141            }
1142    
1143            /**
1144             * 縺薙?繧ェ繝悶ず繧ァ繧ッ繝医→莉悶?繧ェ繝悶ず繧ァ繧ッ繝医′遲峨@縺?°縺ゥ縺?°繧堤、コ縺励∪縺吶?
1145             * 繧、繝ウ繧ソ繝輔ぉ繝シ繧ケ Comparable 縺ョ 螳溯」?↓髢「騾」縺励※縲∝?螳夂セゥ縺励※縺?∪縺吶?
1146             * 繝ヲ繝シ繧カ繝シ縺ッ縲√Θ繝シ繧カ繝シID縺檎ュ峨@縺上?縺九▽ 繝ュ繧ー繧、繝ウ譎ょ綾縺悟酔荳??蝣エ蜷医↓縲?
1147             * 遲峨@縺?→蛻、譁ュ縺輔l縺セ縺吶?
1148             *
1149             * @param   object 豈碑シ?ッセ雎。縺ョ蜿ら?繧ェ繝悶ず繧ァ繧ッ繝?
1150             *
1151             * @return      蠑墓焚縺ォ謖?ョ壹&繧後◆繧ェ繝悶ず繧ァ繧ッ繝医→縺薙?繧ェ繝悶ず繧ァ繧ッ繝医′遲峨@縺??蜷医? true縲√◎縺?〒縺ェ縺??蜷医? false
1152             */
1153            @Override
1154            public boolean equals( final Object object ) {
1155                    if( object instanceof UserInfo ) {
1156                            return ( userID.equals( ((UserInfo)object).getUserID()  )  &&
1157                                             loginTime == ( ((UserInfo)object).getLoginTime() )   );
1158                    }
1159                    return false ;
1160            }
1161    
1162            /**
1163             * 繧ェ繝悶ず繧ァ繧ッ繝医?繝上ャ繧キ繝・繧ウ繝シ繝牙?繧定ソ斐@縺セ縺吶?
1164             * 縺薙?繝。繧ス繝?ラ縺ッ縲)ava.util.Hashtable 縺ォ繧医▲縺ヲ謠蝉セ帙&繧後k繧医≧縺ェ
1165             * 繝上ャ繧キ繝・繝??繝悶Ν縺ァ菴ソ逕ィ縺吶k縺溘a縺ォ逕ィ諢上&繧後※縺?∪縺吶?
1166             * equals( Object ) 繝。繧ス繝?ラ繧偵が繝シ繝舌?繝ゥ繧、繝医@縺溷?蜷医?縲”ashCode() 繝。繧ス繝?ラ繧?
1167             * 蠢?★ 險倩ソー縺吶k蠢?ヲ√′縺ゅj縺セ縺吶?
1168             * 縺薙%縺ァ縺ッ縲√Ο繧ー繧、繝ウ譎ょ綾(long 蛟、)縺ョ荳贋ス?32 繝薙ャ繝医→荳倶ス?32 繝薙ャ繝医?謗剃サ也噪隲也炊蜥?
1169             * 繧呈アゅa縺ヲ縺?∪縺吶?
1170             * (int)(this.longValue()^(this.longValue()&gt;&gt;&gt;32))
1171             *
1172             * 窶サ hashCode 縺ョ 蜷御ク?が繝悶ず繧ァ繧ッ繝医↓縺ッ蜷御ク?ワ繝?す繝・繧ウ繝シ繝峨→縺?≧隕丞援縺ィ
1173             *    逋コ逕滄?蠎ヲ,繝ゥ繝ウ繝?Β諤ァ繧定?諷ョ縺吶l縺ー縲√Ο繧ー繧、繝ウ譎ょ綾縺昴?繧ゅ?(long)縺ョ
1174             *    繝上ャ繧キ繝・繧ウ繝シ繝峨〒繧る°逕ィ荳翫?蜈ィ縺丞撫鬘後↑縺?→閠?∴繧峨l縺セ縺吶?
1175             *
1176             * @og.rev 3.5.6.0 (2004/06/18) 譁ー隕剰ソス蜉?
1177             *
1178             * @return  縺薙?繧ェ繝悶ず繧ァ繧ッ繝医?繝上ャ繧キ繝・繧ウ繝シ繝牙?
1179             *
1180             */
1181            @Override
1182            public int hashCode() {
1183                    return hashcode ;
1184            }
1185    
1186            /**
1187             * 繧ェ繝悶ず繧ァ繧ッ繝医?隴伜挨蟄舌→縺励※?瑚ゥウ邏ー縺ェ繝ヲ繝シ繧カ繝シ諠??繧定ソ斐@縺セ縺吶?
1188             *
1189             * @return  隧ウ邏ー縺ェ繝ヲ繝シ繧カ繝シ諠??
1190             */
1191            @Override
1192            public String toString() {
1193                    StringBuilder rtn = new StringBuilder( HybsSystem.BUFFER_MIDDLE );
1194                    rtn.append( "userID   :" ).append( userID        ).append( HybsSystem.CR );
1195                    rtn.append( "lang     :" ).append( lang          ).append( HybsSystem.CR );
1196                    rtn.append( "jname    :" ).append( jname         ).append( HybsSystem.CR );
1197                    rtn.append( "roles    :" ).append( roles         ).append( HybsSystem.CR );
1198                    rtn.append( "IPAddress:" ).append( ipAddress ).append( HybsSystem.CR );
1199                    rtn.append( "loginTime:" ).append( loginTime ).append( HybsSystem.CR );
1200                    return rtn.toString();
1201            }
1202    
1203            // saveGUIAccessInfo() 繝。繧ス繝?ラ縺ァ縺励°菴ソ逕ィ縺励↑縺??螳壽焚螳」險?
1204            private static final int C_SYSTEM_ID            = 0 ;
1205            private static final int C_USERID                       = 1 ;
1206            private static final int C_USERADRS                     = 2 ;
1207            private static final int C_HOSTADRS                     = 3 ;
1208            private static final int C_GUIKEY                       = 4 ;
1209            private static final int C_DYLOGIN                      = 5 ;
1210            private static final int C_DYLOGOUT                     = 6 ;
1211            private static final int C_USED_TIME            = 7 ;
1212            private static final int C_CNT_ACCESS           = 8 ;
1213            private static final int C_CNT_ERROR            = 9 ;
1214            private static final int C_CNT_READ                     = 10 ;
1215            private static final int C_CNT_WRITE            = 11 ;
1216            private static final int C_TM_TOTAL_QUERY       = 12 ;
1217            private static final int C_TM_MAX_QUERY         = 13 ;
1218            private static final int C_MAX_QUERY            = 14 ;
1219            private static final int C_FGJ                          = 15 ;
1220            private static final int C_DYSET                        = 16;
1221            private static final int C_DYUPD                        = 17;
1222            private static final int C_USRSET                       = 18;
1223            private static final int C_USRUPD                       = 19;
1224            private static final int C_PGUPD                        = 20;
1225    
1226            /**
1227             * 繝ヲ繝シ繧カ繝シ蛟句挨縺ョ逕サ髱「繧ェ繝悶ず繧ァ繧ッ繝医?譏守エー諠??繧抵スア?ク?セ?ス邨ア險茨セ?スー?鯉セ橸セ?GE15)縺ォ逋サ骭イ縺励∪縺吶?
1228             *
1229             * @og.rev 3.8.7.0 (2006/12/15) 繧「繧ッ繧サ繧ケ繝ュ繧ー蜿門セ励?轤コ,ApplicationInfo繧ェ繝悶ず繧ァ繧ッ繝医r險ュ螳?
1230             * @og.rev 4.0.0.0 (2005/01/31) 譁ー隕剰ソス蜉?
1231             * @og.rev 4.0.0.0 (2007/10/05) SQLServer 莠呈鋤諤ァ縺ョ轤コ縲ヾUBSTRB 繧貞サ?ュ「縺励∪縺吶?
1232             * @og.rev 4.1.1.0 (2008/01/30) 繝ヲ繝シ繧カ繝シ繧「繧ッ繧サ繧ケ逕サ髱「邂。逅?ユ繝シ繝悶Ν縺ォ逕サ髱「縺ョ譛?オゅい繧ッ繧サ繧ケ譎る俣繧呈峩譁ー
1233             * @og.rev 5.0.2.0 (2009/11/01) 菴懈?繝サ譖エ譁ー譌・莉倥′繧サ繝?ヨ縺輔l縺ヲ縺?↑縺?ヰ繧ー繧剃ソョ豁」
1234             * @og.rev 5.2.3.0 (2010/12/01) 逕サ髱「繧「繧ッ繧サ繧ケ縺ョ螻・豁エ(鬆?分)繧堤ョ。逅?☆繧区ゥ溯?繧定ソス蜉?
1235             * @og.rev 5.5.5.1 (2012/08/07) 繝ェ繧ス繝シ繧ケ邉サDBID 莉倥¢蠢倥l蟇セ遲?
1236             */
1237            private void saveGUIAccessInfo() {
1238            //      if( !useAccessTable || !isInfoSet ) { return ; }
1239    
1240                    final GUIInfo[] infos ;
1241                    synchronized( guiLock ) {
1242                            infos = getGUIInfos() ;
1243                            guiMap = null;
1244                            isInfoSet = false;
1245                    }
1246    
1247                    long crntTime = System.currentTimeMillis();
1248    
1249                    String[] names = new String[] { "SYSTEM_ID","USERID","USERADRS","HOSTADRS","GUIKEY","DYLOGIN","DYLOGOUT",
1250                                                                                    "USED_TIME","CNT_ACCESS","CNT_ERROR","CNT_READ","CNT_WRITE",
1251    //                                                                              "TM_TOTAL_QUERY","TM_MAX_QUERY","MAX_QUERY","FGJ" };
1252                                                                                    "TM_TOTAL_QUERY","TM_MAX_QUERY","MAX_QUERY","FGJ","DYSET","DYUPD","USRSET","USRUPD","PGUPD" };
1253                    String[] values = new String[names.length];
1254    
1255                    values[C_SYSTEM_ID              ] = HybsSystem.sys( "SYSTEM_ID" );
1256                    values[C_USERID                 ] = userID;
1257                    values[C_USERADRS               ] = ipAddress;
1258                    values[C_HOSTADRS               ] = HybsSystem.sys( "HOST_ADRS" );
1259                    values[C_GUIKEY                 ] = "";
1260                    values[C_DYLOGIN                ] = HybsSystem.getDate( loginTime,"yyyyMMddHHmmss" );
1261                    values[C_DYLOGOUT               ] = HybsSystem.getDate( "yyyyMMddHHmmss" );
1262                    values[C_USED_TIME              ] = String.valueOf( Math.round( (crntTime-usedTime) / 1000.0d ) );      // 遘偵↓螟画鋤
1263                    values[C_CNT_ACCESS             ] = "0";
1264                    values[C_CNT_ERROR              ] = "0";
1265                    values[C_CNT_READ               ] = "0";
1266                    values[C_CNT_WRITE              ] = "0";
1267                    values[C_TM_TOTAL_QUERY ] = "0";
1268                    values[C_TM_MAX_QUERY   ] = "0";
1269                    values[C_MAX_QUERY              ] = "";
1270                    values[C_FGJ                    ] = "1";
1271                    values[C_DYSET                  ] = HybsSystem.getDate( "yyyyMMddHHmmss" );
1272                    values[C_DYUPD                  ] = HybsSystem.getDate( "yyyyMMddHHmmss" );
1273                    values[C_USRSET                 ] = "userInfo";
1274                    values[C_USRUPD                 ] = "userInfo";
1275                    values[C_PGUPD                  ] = "userInfo";
1276    
1277                    usedTime = crntTime ;
1278    
1279                    DBSimpleTable dbTable = new DBSimpleTable( names );
1280                    // 逕サ髱「ID,謫堺ス?繝励Ο繧ー繝ゥ繝?D
1281                    getApplicationInfo( "UserInfo","saveGUI" );
1282                    dbTable.setApplicationInfo( appInfo );  // 3.8.7.0 (2006/12/15)
1283                    dbTable.setConnectionID( DBID );                // 5.5.5.1 (2012/08/07) 繝ェ繧ス繝シ繧ケ邉サDBID 莉倥¢蠢倥l蟇セ蠢?
1284                    dbTable.setTable( "GE15" );
1285                    // 4.0.0.0 (2007/10/05) SQLServer 莠呈鋤諤ァ縺ョ轤コ縲,LOB蛹悶@縺セ縺吶?
1286            //      dbTable.addConstrain( names[C_MAX_QUERY],"SUBSTRB(?,1,4000)" );
1287    
1288                    boolean okFlag = false;
1289                    try {
1290                            dbTable.startInsert();
1291    
1292                            // UserInfo 縺ォ髢「縺吶k諠??縺ョ逋サ骭イ
1293                            dbTable.execute( values );
1294    
1295                            // GUIInfo 縺ォ髢「縺吶k諠??縺ョ逋サ骭イ
1296                            if( infos != null ) {
1297                                    values[C_USED_TIME] = "0";      // USED_TIME 繧偵け繝ェ繧「縺励※縺翫″縺セ縺吶?
1298                                    String logoutTime = HybsSystem.getDate( "yyyyMMddHHmmss" );
1299                                    for( int i=0; i<infos.length; i++ ) {
1300                                            GUIAccessCount access = infos[i].getGUIAccessCount();
1301                                            int cnt = access.getAccessCount();
1302                                            if( cnt > 0 ) {
1303                                                    values[C_GUIKEY                 ] = access.getKey();
1304                                                    values[C_CNT_ACCESS             ] = String.valueOf( cnt );
1305                                                    values[C_CNT_ERROR              ] = String.valueOf( access.getErrorCount() );
1306                                                    values[C_CNT_READ               ] = String.valueOf( access.getReadCount() );
1307                                                    values[C_CNT_WRITE              ] = String.valueOf( access.getWriteCount() );
1308                                                    values[C_TM_TOTAL_QUERY ] = String.valueOf( access.getQueryTime() );
1309                                                    values[C_TM_MAX_QUERY   ] = String.valueOf( access.getMaxQueryTime() );
1310                                                    values[C_MAX_QUERY              ] = access.getMaxQuery();
1311            //                                      dbTable.addValues( values );
1312                                                    dbTable.execute( values );
1313                                                    // 4.1.1.0(2008/01/28)逕サ髱「繧「繧ッ繧サ繧ケ譎る俣縺ョ譖エ譁ー
1314                                                    // 5.2.3.0 (2010/12/01) 逕サ髱「繧「繧ッ繧サ繧ケ縺ョ螻・豁エ(鬆?分)繧堤ョ。逅?☆繧区ゥ溯?繧定ソス蜉?
1315                                                    String keys = infos[i].getNextGuiKeys();
1316    //                                              UserAccessTable.updateLastAccessTime( systemId,userID,access.getKey(),logoutTime );
1317                                                    UserAccessTable.updateLastAccessTime( systemId,userID,access.getKey(),logoutTime,keys );
1318                                            }
1319                                    }
1320                            }
1321                            okFlag = true;
1322                    }
1323                    catch (SQLException ex) {
1324                            LogWriter.log( "  [" + userID + "] ?ア?ク?セ?ス邨ア險茨セ?スー?鯉セ橸セ?GE15)逋サ骭イ譎ゅ↓繧ィ繝ゥ繝シ縺檎匱逕溘@縺セ縺励◆" );
1325                            LogWriter.log( ex.getMessage() );
1326                    }
1327                    finally {
1328                            int cnt = dbTable.close( okFlag );
1329    //                      System.out.println();
1330                            System.out.println( "  [" + userID + "] ?ア?ク?セ?ス邨ア險茨セ?スー?鯉セ橸セ?GE15)縺ォ縲ー" + cnt + "]莉カ縲∬ソス蜉?@縺セ縺励◆縲? );
1331                    }
1332            }
1333    
1334            // 繝ヲ繝シ繧カ繝シ豌ク邯壼喧諠??(GE20)險ュ螳壹〒縺励°菴ソ逕ィ縺励↑縺?、画焚縺ョ螳」險?
1335            private static final int C_GE20_SYSTEM_ID       = 0;
1336            private static final int C_GE20_USERID          = 1;
1337            private static final int C_GE20_ROLES           = 2;
1338            private static final int C_GE20_PARAM_ID        = 3;
1339            private static final int C_GE20_PARAM           = 4;
1340            private static final int C_GE20_KBSET           = 5;
1341            private static final int C_GE20_FGJ                     = 6;
1342            private static final int C_GE20_DYSET           = 7;
1343            private static final int C_GE20_DYUPD           = 8;
1344            private static final int C_GE20_USRSET          = 9;
1345            private static final int C_GE20_USRUPD          = 10;
1346            private static final int C_GE20_PGUPD           = 11;
1347    
1348            private static final int GE20_KBSET_READONLY    = 1;
1349            private static final int GE20_KBSET_WRITABLE    = 2;
1350    
1351            // 繝ュ繝シ繝ォ縺ッ蜈ィ縺ヲ*縺ァ逋サ骭イ縺吶k縲ゅい繝励Μ繧ア繝シ繧キ繝ァ繝ウ縺九i蜍慕噪縺ォ逋サ骭イ縺輔l繧句?繧偵?
1352            // 繝ュ繝シ繝ォ蜊倅ス崎ィュ螳壹@縺ヲ繧ゅ?繝ュ繝シ繝ォ螟画峩譎ゅ↓謨エ蜷域?縺悟粋繧上↑縺?庄閭ス諤ァ螟ァ縺ェ縺ョ縺ァ縲?
1353            // UserInfo縺ァ險ュ螳壹☆繧句?蜷医?縲∝?縺ヲ縺ョ繝ュ繝シ繝ォ縺ァ譛牙柑縺ィ縺吶k縲?
1354            private static final String GE20_ROLES = "*";
1355    
1356            /**
1357             * userInfo縺ォ繧サ繝?ヨ縺輔l縺溷?/繧ュ繝シ繧奪B縺ォ逋サ骭イ縺励∪縺吶?
1358             * 譌「縺ォ繧ュ繝シ縺悟ュ伜惠縺励※縺?k蝣エ蜷医?縲∵里蟄倥ョ繝シ繧ソ繧呈峩譁ー縺励?縺ェ縺代l縺ー霑ス蜉?@縺セ縺吶?
1359             *
1360             * @og.rev 5.3.6.0 (2011/06/01) 蜈ィ繝ヲ繝シ繧カ繝シ諠??縺ィ縺励※菫晏ュ倥〒縺阪k繧医≧縺ォ蟇セ蠢?
1361             * @og.rev 5.5.5.1 (2012/08/07) 繝ェ繧ス繝シ繧ケ邉サDBID 莉倥¢蠢倥l蟇セ遲?
1362             *
1363             * @param key 繧ュ繝シ
1364             * @param value 蛟、
1365             * @param isCommon 繝ヲ繝シ繧カ繝シID='*'(蜈ィ繝ヲ繝シ繧カ繝シ蜈ャ髢?縺ィ縺励※逋サ骭イ縺吶k縺九←縺?°
1366             */
1367    //      private void savePermanently( final String key, final String value ) {
1368            private void savePermanently( final String key, final String value, final boolean isCommon ) {
1369    
1370                    // 霑ス蜉?、画峩譎ゅ↓蜈ア騾壹〒繧サ繝?ヨ縺輔l繧句?繧定ィュ螳?
1371                    String[] names = new String[] { "SYSTEM_ID","USERID","ROLES","PARAM_ID","PARAM","KBSET"
1372                                                                                    ,"FGJ","DYSET","DYUPD","USRSET","USRUPD","PGUPD" };
1373                    String[] values = new String[names.length];
1374                    values[C_GE20_SYSTEM_ID ] = HybsSystem.sys( "SYSTEM_ID" );
1375    //              values[C_GE20_USERID    ] = userID;
1376                    values[C_GE20_USERID    ] = ( isCommon ? "*" : userID );
1377                    values[C_GE20_ROLES             ] = GE20_ROLES;
1378                    values[C_GE20_PARAM_ID  ] = key;
1379                    values[C_GE20_PARAM             ] = value;
1380                    values[C_GE20_KBSET             ] = String.valueOf( GE20_KBSET_WRITABLE );
1381                    values[C_GE20_FGJ               ] = "1";
1382                    values[C_GE20_DYSET             ] = HybsSystem.getDate( "yyyyMMddHHmmss" );
1383                    values[C_GE20_DYUPD             ] = HybsSystem.getDate( "yyyyMMddHHmmss" );
1384                    values[C_GE20_USRSET    ] = userID;
1385                    values[C_GE20_USRUPD    ] = userID;
1386                    values[C_GE20_PGUPD     ] = "UserInfo";
1387    
1388                    // 逕サ髱「ID,謫堺ス?繝励Ο繧ー繝ゥ繝?D
1389                    getApplicationInfo( "UserInfo","registValueToDB" );
1390    
1391                    DBSimpleTable dbTable = new DBSimpleTable( names );
1392                    dbTable.setApplicationInfo( appInfo );  // 3.8.7.0 (2006/12/15)
1393                    dbTable.setConnectionID( DBID );                // 5.5.5.1 (2012/08/07) 繝ェ繧ス繝シ繧ケ邉サDBID 莉倥¢蠢倥l蟇セ蠢?
1394                    dbTable.setTable( "GE20" );
1395    
1396                    boolean okFlag = false;
1397                    try {
1398    //                      if( isExistValue( key, GE20_ROLES ) ) {
1399                            if( isExistValue( key, ( isCommon ? "*" : userID ), GE20_ROLES ) ) {
1400                                    String where = "SYSTEM_ID = [SYSTEM_ID] and USERID = [USERID] and ROLES = [ROLES] and PARAM_ID = [PARAM_ID] and FGJ='1'";
1401                                    dbTable.setWhere( where );
1402                                    dbTable.startUpdate();
1403                            }
1404                            else {
1405                                    dbTable.startInsert();
1406                            }
1407                            dbTable.execute( values );
1408                            okFlag = true;
1409                    }
1410                    catch ( SQLException ex ) {
1411                            throw new HybsSystemException( "繝ヲ繝シ繧カ繝シ豌ク邯壼喧諠??(GE20)險ュ螳壽凾縺ォ繧ィ繝ゥ繝シ縺檎匱逕溘@縺セ縺励◆", ex );
1412                    }
1413                    finally {
1414                            dbTable.close( okFlag );
1415                    }
1416            }
1417    
1418            /**
1419             * userInfo縺九i蜑企勁縺輔l縺溷?/繧ュ繝シ繧奪B縺九i繧ょ炎髯、縺励∪縺吶?
1420             *
1421             * @og.rev 5.3.6.0 (2011/06/01) 譁ー隕剰ソス蜉?
1422             * @og.rev 5.5.5.1 (2012/08/07) 繝ェ繧ス繝シ繧ケ邉サDBID 莉倥¢蠢倥l蟇セ遲?
1423             *
1424             * @param key 繧ュ繝シ
1425             * @param isCommon 繝ヲ繝シ繧カ繝シID='*'(蜈ィ繝ヲ繝シ繧カ繝シ蜈ャ髢?縺九i蜑企勁縺吶k縺九←縺?°
1426             */
1427            private void deletePermanently( final String key, final boolean isCommon ) {
1428    
1429                    // 霑ス蜉?、画峩譎ゅ↓蜈ア騾壹〒繧サ繝?ヨ縺輔l繧句?繧定ィュ螳?
1430                    String[] names = new String[] { "SYSTEM_ID","USERID","ROLES","PARAM_ID" };
1431                    String[] values = new String[names.length];
1432                    values[C_GE20_SYSTEM_ID ] = HybsSystem.sys( "SYSTEM_ID" );
1433                    values[C_GE20_USERID    ] = ( isCommon ? "*" : userID );
1434                    values[C_GE20_ROLES             ] = GE20_ROLES;
1435                    values[C_GE20_PARAM_ID  ] = key;
1436    
1437                    // 逕サ髱「ID,謫堺ス?繝励Ο繧ー繝ゥ繝?D
1438                    getApplicationInfo( "UserInfo","deleteValueFromDB" );
1439    
1440                    DBSimpleTable dbTable = new DBSimpleTable( names );
1441                    dbTable.setApplicationInfo( appInfo );
1442                    dbTable.setConnectionID( DBID );                // 5.5.5.1 (2012/08/07) 繝ェ繧ス繝シ繧ケ邉サDBID 莉倥¢蠢倥l蟇セ蠢?
1443                    dbTable.setTable( "GE20" );
1444    
1445                    boolean okFlag = false;
1446                    try {
1447                            String where = "SYSTEM_ID = [SYSTEM_ID] and USERID = [USERID] and ROLES = [ROLES] and PARAM_ID = [PARAM_ID] and FGJ='1'";
1448                            dbTable.setWhere( where );
1449                            dbTable.startDelete();
1450                            dbTable.execute( values );
1451                            okFlag = true;
1452                    }
1453                    catch ( SQLException ex ) {
1454                            throw new HybsSystemException( "繝ヲ繝シ繧カ繝シ豌ク邯壼喧諠??(GE20)蜑企勁譎ゅ↓繧ィ繝ゥ繝シ縺檎匱逕溘@縺セ縺励◆", ex );
1455                    }
1456                    finally {
1457                            dbTable.close( okFlag );
1458                    }
1459            }
1460    
1461            /**
1462             * 繝ヲ繝シ繧カ繝シ豌ク邯壼喧諠??(GE20)縺ォ隧イ蠖薙?繧ュ繝シ縺悟ュ伜惠縺吶k縺九r繝√ぉ繝?け縺励∪縺吶?
1463             *
1464             * @og.rev 5.3.6.0 (2011/06/01) 蜈ィ繝ヲ繝シ繧カ繝シ諠??縺ィ縺励※菫晏ュ倥〒縺阪k繧医≧縺ォ蟇セ蠢?
1465             * @og.rev 5.5.5.1 (2012/08/07) 繝ェ繧ス繝シ繧ケ邉サDBID 莉倥¢蠢倥l蟇セ遲?
1466             *
1467             * @param key 繧ュ繝シ
1468             * @param userid 繝ヲ繝シ繧カ繝シID
1469             * @param roles 繝ュ繝シ繝ォ
1470             *
1471             * @return true:蟄伜惠縺励※縺?k/false:蟄伜惠縺励※縺?↑縺?
1472             */
1473    //      private boolean isExistValue( final String key, final String roles ) {
1474            private boolean isExistValue( final String key, final String userid, final String roles ) {
1475    //              String[] args = { HybsSystem.sys( "SYSTEM_ID" ), userID, roles, key };
1476                    String[] args = { HybsSystem.sys( "SYSTEM_ID" ), userid, roles, key };
1477    
1478                    // 逕サ髱「ID,謫堺ス?繝励Ο繧ー繝ゥ繝?D
1479                    getApplicationInfo( "UserInfo","isExistValue" );
1480    
1481    //              String[][] rtn = DBUtil.dbExecute( QUERY_GE20_KEY, args, appInfo );
1482                    String[][] rtn = DBUtil.dbExecute( QUERY_GE20_KEY, args, appInfo, DBID );       // 5.5.5.1 (2012/08/07)
1483                    if( rtn == null || rtn.length == 0 ) {
1484                            return false;
1485                    }
1486                    else if( rtn[0].length > 0 ) {
1487                            if( String.valueOf( GE20_KBSET_READONLY ).equals( rtn[0][0] ) ) {
1488                                    throw new HybsSystemException( "隱ュ縺ソ蜿悶j蟆ら畑諠??縺ョ縺溘a縲∵嶌縺崎セシ縺ソ縺ァ縺阪∪縺帙s" );
1489                            }
1490                            else {
1491                                    return true;
1492                            }
1493                    }
1494                    else {
1495                            throw new HybsSystemException( "繝ヲ繝シ繧カ繝シ豌ク邯壼喧諠??(GE20)讀懃エ「譎ゅ↓繧ィ繝ゥ繝シ縺檎匱逕溘@縺セ縺励◆縲? );
1496                    }
1497            }
1498    
1499            /**
1500             * 謖?ョ壹&繧後◆繧ォ繝ゥ繝?く繝シ縺ォ蟇セ蠢懊☆繧九ョ繝シ繧ソ縺ョ譚。莉カ蠑上r霑斐@縺セ縺吶?
1501             *
1502             * @og.rev 4.4.0.0 (2009/08/02) 譁ー隕剰ソス蜉?
1503             *
1504             * @param clm 繧ォ繝ゥ繝?錐
1505             *
1506             * @return 繝??繧ソ縺ョ譚。莉カ蠑?
1507             */
1508            public String getDataCondition ( final String clm ) {
1509                    return dataRole.getCondition( clm );
1510            }
1511    
1512            /**
1513             * 縺薙?繝ヲ繝シ繧カ繝シ縺ァ繧「繧ッ繧サ繧ケ縺輔l縺溽判髱「繧ェ繝悶ず繧ァ繧ッ繝医r險ュ螳壹@縺セ縺吶?
1514             *
1515             * 縺薙l縺ッ縲∫判髱「繧「繧ッ繧サ繧ケ縺ョ螻・豁エ(鬆?分)繧堤ョ。逅?☆繧区ゥ溯?縺ォ菴ソ縺?∪縺吶?
1516             *
1517             * @og.rev 5.2.3.0 (2010/12/01) 譁ー隕剰ソス蜉?
1518             *
1519             * @param guiInfo 逕サ髱「繧ェ繝悶ず繧ァ繧ッ繝?
1520             */
1521            public void setAccessGui( final GUIInfo guiInfo ) {
1522                    if( lastGuiInfo != null && guiInfo != null ) {
1523                            lastGuiInfo.setNextGuiKey( guiInfo.getKey() );
1524                    }
1525                    lastGuiInfo = guiInfo ;         // 譛?セ後↓繧「繧ッ繧サ繧ケ縺励◆ GUIInfo 繧定ィュ螳?
1526            }
1527    }