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 org.opengion.hayabusa.common.HybsSystem;
019 import org.opengion.hayabusa.common.HybsSystemException;
020
021 import org.opengion.fukurou.util.ApplicationInfo;
022 import org.opengion.fukurou.db.DBUtil;
023
024 import java.util.Map;
025 import java.util.HashMap;
026 import java.util.LinkedHashMap;
027
028 /**
029 * ユーザーアクセス画面管?ーブルを維持する為のクラスです?
030 * @og.group リソース管?
031 *
032 * @version 4.1.1.0
033 * @author Sen.Li
034 * @since JDK5.0,
035 */
036 public final class UserAccessTable {
037 // 5.3.0.0 (2010/12/01) 画面アクセスの履歴(?)を管?る機?を追?
038 // private static final String GEA09_QUERY = "SELECT GUIKEY,SEQNO,NAME_JA,LAST_ACCESS,FGFAVORITE,CLASSIFY FROM GEA09"
039 // + " WHERE SYSTEM_ID=? AND USERID=?"
040 // + " ORDER BY SEQNO,CLASSIFY,GUIKEY";
041 private static final String GEA09_QUERY = "SELECT GUIKEY,SEQNO,NAME_JA,LAST_ACCESS,FGFAVORITE,CLASSIFY,NEXTGUI FROM GEA09"
042 + " WHERE SYSTEM_ID=? AND USERID=?"
043 + " ORDER BY SEQNO,CLASSIFY,GUIKEY";
044 private static final String GEA09_DELETE = "DELETE FROM GEA09"
045 + " WHERE SYSTEM_ID=? AND USERID=? AND GUIKEY=?";
046 private static final String GEA09_INSERT = "INSERT INTO GEA09(SYSTEM_ID,USERID,GUIKEY,SEQNO,NAME_JA,CLASSIFY,FGJ"
047 + ",DYSET,USRSET,PGUPD) VALUES(?,?,?,?,?,?,?,?,?,?)";
048 // 5.3.0.0 (2010/12/01) 画面アクセスの履歴(?)を管?る機?を追?
049 // private static final String GEA09_UPDATE = "UPDATE GEA09 SET LAST_ACCESS=?"
050 // + " WHERE SYSTEM_ID=? AND USERID=? AND GUIKEY=?";
051 private static final String GEA09_UPDATE = "UPDATE GEA09 SET LAST_ACCESS=?,NEXTGUI=?"
052 + " WHERE SYSTEM_ID=? AND USERID=? AND GUIKEY=?";
053
054 private static final String DBID = HybsSystem.sys( "RESOURCE_DBID" );
055 private static final int GEA09_GUIKEY = 0;
056 private static final int GEA09_SEQNO = 1;
057 private static final int GEA09_NAME_JA = 2;
058 private static final int GEA09_LAST_ACCESS = 3;
059 private static final int GEA09_FGFAVORITE = 4;
060 private static final int GEA09_CLASSIFY = 5;
061 private static final int GEA09_NEXTGUI = 6; // 5.3.0.0 (2010/12/01) 追?
062 private static final String FGFAVORITE_ON = "1";
063 private static enum FgKeys { GUIMAP_ONLY,GEA09_ONLY };
064
065 /**
066 * コンストラクター
067 * オブジェクトを作?できな??、privateにします?
068 *
069 * @og.rev 4.3.1.1 (2008/08/23) コンストラクタは、void 宣?付けません?
070 */
071 // private void UserAccessTable() { }
072 private UserAccessTable() { }
073
074 /**
075 * ユーザーアクセス画面管?ーブルを整?ます?
076 * こ?メソ?では guiMap へのセ?をして??副作用の扱??
077 *
078 * @og.rev 4.1.1.0 (2008/01/30) 新規追?
079 * @og.rev 5.3.0.0 (2010/12/01) 画面アクセスの履歴(?)を管?る機?を追?
080 *
081 * @param guiMap 画面オブジェクト???への参?
082 * @param systemId シス?ID
083 * @param userId ユーザーID
084 * @param lang ??
085 *
086 * @return お気に入り???
087 */
088 public static Map<String,FavoriteGUIData> makeAccessDB(
089 final Map<String,GUIInfo> guiMap,final String systemId,final String userId,final String lang ) {
090 String today = HybsSystem.getDate( "yyyyMMddHHmmss" );
091 Map<String,FgKeys> conGuiKey = new HashMap<String,FgKeys>();
092 /** コネクションにアプリケーション??を追記するかど???*/
093 boolean USE_DB_APPLICATION_INFO = HybsSystem.sysBool( "USE_DB_APPLICATION_INFO" ) ;
094 ApplicationInfo appInfo = null;
095 if( USE_DB_APPLICATION_INFO ) {
096 appInfo = new ApplicationInfo();
097 // ユーザーID,IPアドレス,ホスト名
098 appInfo.setClientInfo( systemId,HybsSystem.HOST_ADRS,HybsSystem.HOST_NAME );
099 // 画面ID,操?プログラ?D
100 appInfo.setModuleInfo( "UserAccessTable",userId,"makeAccessDB" );
101 }
102
103 // guiMapのキーで、新マップを作??
104 for( String conKey : guiMap.keySet() ) {
105 conGuiKey.put( conKey,FgKeys.GUIMAP_ONLY );
106 }
107
108 Map<String,FavoriteGUIData> favoriteGuiMap = new LinkedHashMap<String,FavoriteGUIData>();
109 // 4.1.1.0(2008/01/22)ユーザーアクセスの日付を取得し、accessPastDays 前?日付を計算する?
110 String accessPastDays = HybsSystem.sys( "ACCESS_TOKEI_PAST_DAYS" );
111 int diffDate = ( accessPastDays == null ) ? 0 : -Integer.parseInt( accessPastDays );
112 String judgeTime = HybsSystem.getDate( today.substring( 0,8 ),diffDate );
113 String lastAccessTime = null;
114 String key = null;
115 String[] args = new String[] { systemId,userId };
116 String[][] vals = DBUtil.dbExecute( GEA09_QUERY,args,appInfo,DBID );
117 int len = vals.length;
118
119 for( int i=0; i<len; i++ ) {
120 key = vals[i][GEA09_GUIKEY];
121 GUIInfo gui = guiMap.get( key );
122 if( gui == null ) {
123 conGuiKey.put( key,FgKeys.GEA09_ONLY );
124 }
125 else {
126 // 5.3.0.0 (2010/12/01) 画面アクセスの履歴(?)を管?る機?を追?
127 String nxtgui = vals[i][GEA09_NEXTGUI];
128 if( nxtgui != null ) {
129 String[] keys = nxtgui.split( "," );
130 for( String nextKey : keys ) {
131 gui.setNextGuiKey( nextKey ); // DB から復活
132 }
133 }
134
135 conGuiKey.remove( key );
136 // 4.1.1.0(2008/01/22)お気に入り???の作?
137 if( FGFAVORITE_ON.equals( vals[i][GEA09_FGFAVORITE] ) && gui.isRead() ) {
138 favoriteGuiMap.put( key,new FavoriteGUIData( vals[i][GEA09_GUIKEY],vals[i][GEA09_SEQNO]
139 ,vals[i][GEA09_NAME_JA],vals[i][GEA09_CLASSIFY] ) );
140 }
141 // 4.1.1.0(2008/01/22)ACCESS_TOKEI_PAST_DAYSに定義された期間以??画面を?上する?
142 lastAccessTime = vals[i][GEA09_LAST_ACCESS];
143 if( lastAccessTime.length() >= 8 ) {
144 if( lastAccessTime.compareTo( judgeTime ) >=0 ) {
145 gui.setLevelUp();
146 }
147 }
148 }
149 }
150
151 ResourceManager resource = ResourceFactory.newInstance( lang );
152 String undefined = resource.getLabel( "UNDEFINED" );
153 FgKeys fgKey = null;
154 for( String conKey : conGuiKey.keySet() ) {
155 fgKey = conGuiKey.get( conKey );
156 switch ( fgKey ) {
157 case GUIMAP_ONLY:
158 args = new String[] { systemId,userId,conKey,"9999999",guiMap.get(conKey).getLabel()
159 ,undefined,"1",today,userId,"UsrAccsTbl" };
160 DBUtil.dbExecute( GEA09_INSERT,args,appInfo,DBID );
161 break;
162 case GEA09_ONLY:
163 args = new String[] { systemId,userId,conKey };
164 DBUtil.dbExecute( GEA09_DELETE,args,appInfo,DBID );
165 break;
166 default:
167 String errMsg = "guiMapとGEA09の突合せフラグ?GUIMAP_ONLY と GEA09_ONLY 以外?値がセ?されて?す?"
168 + "画面ID?? + conKey + " フラグ?? + fgKey;
169 throw new HybsSystemException( errMsg );
170 }
171 }
172 return favoriteGuiMap;
173 }
174
175 /**
176 * ユーザーアクセス画面管?ーブルの?アクセス時間を更新します?
177 *
178 * @og.rev 4.1.1.0 (2008/01/30) 新規追?
179 * @og.rev 5.3.0.0 (2010/12/01) 画面アクセスの履歴(?)を管?る機?を追?
180 *
181 * @param systemId シス?ID
182 * @param userId ユーザーID
183 * @param guiKey 画面ID
184 * @param lastAccessTime 画面の?アクセス時間
185 * @param nextGuiKeys 次にアクセスして?画面IDのCSV??
186 */
187 // public static void updateLastAccessTime( final String systemId,final String userId,final String guiKey,final String lastAccessTime ) {
188 public static void updateLastAccessTime( final String systemId,final String userId,final String guiKey,final String lastAccessTime,final String nextGuiKeys ) {
189 /** コネクションにアプリケーション??を追記するかど???*/
190 boolean USE_DB_APPLICATION_INFO = HybsSystem.sysBool( "USE_DB_APPLICATION_INFO" ) ;
191 ApplicationInfo appInfo = null;
192 if( USE_DB_APPLICATION_INFO ) {
193 appInfo = new ApplicationInfo();
194 // ユーザーID,IPアドレス,ホスト名
195 appInfo.setClientInfo( systemId,HybsSystem.HOST_ADRS,HybsSystem.HOST_NAME );
196 // 画面ID,操?プログラ?D
197 appInfo.setModuleInfo( "UserAccessTable",userId,"updateLastAccessTime" );
198 }
199
200 // 5.3.0.0 (2010/12/01) 画面アクセスの履歴(?)を管?る機?を追?
201 // String[] args = new String[] { lastAccessTime,systemId,userId,guiKey };
202 String[] args = new String[] { lastAccessTime,nextGuiKeys,systemId,userId,guiKey };
203 DBUtil.dbExecute( GEA09_UPDATE,args,appInfo,DBID );
204 }
205 }