001: /*
002: * $Header: /cvsroot/mvnforum/mvnforum/src/com/mvnforum/auth/OnlineUserAction.java,v 1.27 2008/01/16 06:57:37 minhnn Exp $
003: * $Author: minhnn $
004: * $Revision: 1.27 $
005: * $Date: 2008/01/16 06:57:37 $
006: *
007: * ====================================================================
008: *
009: * Copyright (C) 2002-2007 by MyVietnam.net
010: *
011: * All copyright notices regarding mvnForum MUST remain
012: * intact in the scripts and in the outputted HTML.
013: * The "powered by" text/logo with a link back to
014: * http://www.mvnForum.com and http://www.MyVietnam.net in
015: * the footer of the pages MUST remain visible when the pages
016: * are viewed on the internet or intranet.
017: *
018: * This program is free software; you can redistribute it and/or modify
019: * it under the terms of the GNU General Public License as published by
020: * the Free Software Foundation; either version 2 of the License, or
021: * any later version.
022: *
023: * This program is distributed in the hope that it will be useful,
024: * but WITHOUT ANY WARRANTY; without even the implied warranty of
025: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
026: * GNU General Public License for more details.
027: *
028: * You should have received a copy of the GNU General Public License
029: * along with this program; if not, write to the Free Software
030: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
031: *
032: * Support can be obtained from support forums at:
033: * http://www.mvnForum.com/mvnforum/index
034: *
035: * Correspondence and Marketing Questions can be sent to:
036: * info at MyVietnam net
037: *
038: * @author: Minh Nguyen
039: * @author: Mai Nguyen
040: */
041: package com.mvnforum.auth;
042:
043: import java.sql.Timestamp;
044: import java.util.Locale;
045:
046: import javax.servlet.http.HttpServletRequest;
047:
048: import com.mvnforum.MVNForumResourceBundle;
049: import net.myvietnam.mvncore.util.DateUtil;
050: import net.myvietnam.mvncore.util.StringUtil;
051: import net.myvietnam.mvncore.web.GenericRequest;
052:
053: public class OnlineUserAction {
054:
055: private String url;
056: //private String desc;
057: private Action action;
058: private Timestamp firstRequestTime;
059: private Timestamp lastRequestTime;
060: private String remoteAddr;
061: private String userAgent;
062:
063: // NOTE: these 2 variables seam to duplicate variables in OnlineUserImpl
064: // but we need it when display all online users (listonlineuser)
065: private int memberID;
066: private String memberName;
067: private boolean invisible = false;
068:
069: private int sessionCount = 1;
070:
071: /**
072: * default constructor
073: */
074: OnlineUserAction() {
075: /*
076: * We must separate 2 duplicate method calls since we will
077: * update the lastRequestTime, but not firstRequestTime
078: */
079: firstRequestTime = DateUtil.getCurrentGMTTimestamp();
080: lastRequestTime = DateUtil.getCurrentGMTTimestamp();
081: }
082:
083: /****************************************************************
084: * Public method
085: ****************************************************************/
086:
087: public String getDesc(GenericRequest request) {
088: if (action == null) {
089: // This issue is in the Realm authentication integration
090: return "Cannot get description because action is null";
091: }
092: return action.getLocalizedDesc(request);
093: }
094:
095: public int getPageID() {
096: if (action == null) {
097: return 0;
098: }
099: return action.getPageID();
100: }
101:
102: public Object getPageParam() {
103: if (action == null) {
104: return null;
105: }
106: return action.getPageParam();
107: }
108:
109: public String getUrl() {
110: return url;
111: }
112:
113: public int getMemberID() {
114: return memberID;
115: }
116:
117: public String getMemberName() {
118: return memberName;
119: }
120:
121: public boolean isInvisibleMember() {
122: return invisible;
123: }
124:
125: public Timestamp getFirstRequestTime() {
126: return firstRequestTime;
127: }
128:
129: public Timestamp getLastRequestTime() {
130: return lastRequestTime;
131: }
132:
133: public int getSessionCount() {
134: return sessionCount;
135: }
136:
137: public void setSessionCount(int count) {
138: sessionCount = count;
139: }
140:
141: public void increaseSessionCount(int delta) {
142: sessionCount += delta;
143: }
144:
145: public void resetSessionCount() {
146: sessionCount = 1;
147: }
148:
149: // util method
150: public String getOnlineDurarionDesc(Timestamp currentTime,
151: Locale locale) {
152: int duration = (int) (currentTime.getTime() - firstRequestTime
153: .getTime());
154: return getTimeString(duration, locale);
155: }
156:
157: public String getDurationSinceLastRequestDesc(
158: Timestamp currentTime, Locale locale) {
159: int duration = (int) (currentTime.getTime() - lastRequestTime
160: .getTime());
161: return getTimeString(duration, locale);
162: }
163:
164: private String getTimeString(int duration, Locale locale) {
165: long hours = duration / DateUtil.HOUR;
166: long remain = duration - (hours * DateUtil.HOUR);
167: long minutes = remain / DateUtil.MINUTE;
168: StringBuffer time = new StringBuffer(64);
169:
170: if (hours > 0) {//there is hour
171: time.append(hours).append(" ");
172: if (hours == 1) {
173: time.append(MVNForumResourceBundle.getString(locale,
174: "mvnforum.common.date.1_hour"));
175: } else {
176: time.append(MVNForumResourceBundle.getString(locale,
177: "mvnforum.common.date.X_hour"));
178: }
179: }
180:
181: if (minutes > 0) {//there is minute
182: if (hours > 0) {
183: time.append(" ").append(
184: MVNForumResourceBundle.getString(locale,
185: "mvnforum.common.date.hhmm_and"))
186: .append(" ");
187: }
188: time.append(minutes).append(" ");
189: if (minutes == 1) {
190: time.append(MVNForumResourceBundle.getString(locale,
191: "mvnforum.common.date.1_minute"));
192: } else {
193: time.append(MVNForumResourceBundle.getString(locale,
194: "mvnforum.common.date.X_minutes"));
195: }
196: } else {// no minute
197: // if there is no hour, should show "0 minute"
198: if (hours == 0) {
199: time.append("0 ").append(
200: MVNForumResourceBundle.getString(locale,
201: "mvnforum.common.date.1_minute"));
202: }
203: }
204:
205: return time.toString();
206: }
207:
208: public String getRemoteAddr() {
209: return remoteAddr;
210: }
211:
212: public String getUserAgent() {
213: return userAgent;
214: }
215:
216: /****************************************************************
217: * Default package method
218: ****************************************************************/
219: protected void initRemoteAddr_UserAgent(HttpServletRequest request) {
220: setUserAgent(request.getHeader("User-Agent"));
221: setRemoteAddr(request.getRemoteAddr());
222: }
223:
224: protected void initRemoteAddr_UserAgent(GenericRequest request) {
225: if (request.isServletRequest()) {
226: setUserAgent(request.getServletRequest().getHeader(
227: "User-Agent"));
228: setRemoteAddr(request.getServletRequest().getRemoteAddr());
229: } else {
230: //@todo: implement it later
231: //setUserAgent(request.getHeader("User-Agent"));
232: setRemoteAddr(request.getRemoteAddr());
233: }
234: }
235:
236: void setAction(Action action) {
237: //this.desc = action.getDesc();
238: this .url = action.getUrl();
239: this .action = action;
240: }
241:
242: /** @todo use method DateUtil.updateCurrentGMTTimestamp() */
243: void updateLastRequestTime() {
244: DateUtil.updateCurrentGMTTimestamp(lastRequestTime);
245: }
246:
247: void setMemberID(int memberID) {
248: this .memberID = memberID;
249: }
250:
251: void setMemberName(String memberName) {
252: this .memberName = memberName;
253: }
254:
255: void setMemberInvisible(boolean invisible) {
256: this .invisible = invisible;
257: }
258:
259: public void setRemoteAddr(String remoteAddr) {
260: this .remoteAddr = remoteAddr;
261: }
262:
263: public void setUserAgent(String userAgent) {
264: this.userAgent = StringUtil.getEmptyStringIfNull(userAgent);
265: }
266: }
|