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