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