8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster/**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Copyright (c) 2005 Sun Microsystems Inc. All Rights Reserved
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * The contents of this file are subject to the terms
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * of the Common Development and Distribution License
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * (the License). You may not use this file except in
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * compliance with the License.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * You can obtain a copy of the License at
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * https://opensso.dev.java.net/public/CDDLv1.0.html or
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * opensso/legal/CDDLv1.0.txt
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * See the License for the specific language governing
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * permission and limitations under the License.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * When distributing Covered Code, include this CDDL
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Header Notice in each file and include the License file
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * at opensso/legal/CDDLv1.0.txt.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * If applicable, add the following below the CDDL Header,
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * with the fields enclosed by brackets [] replaced by
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * your own identifying information:
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * "Portions Copyrighted [year] [name of copyright owner]"
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * $Id: SessionInfo.java,v 1.3 2008/06/25 05:41:31 qcheng Exp $
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster/**
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott * Portions Copyrighted 2011-2015 ForgeRock AS.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterpackage com.iplanet.dpro.session.share;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
0fb4093da08d574d3d1b661d4425dfbac8e02aabJames Phillpottsimport com.fasterxml.jackson.annotation.JsonIgnore;
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshottimport com.sun.identity.shared.xml.XMLUtils;
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport java.util.Enumeration;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport java.util.Hashtable;
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshottimport java.util.concurrent.TimeUnit;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster/**
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott * <code>SessionInfo</code> class holds all the information about the
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * <code>Session</code>
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterpublic class SessionInfo {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott private static final char QUOTE = '\"';
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott private static final char NL = '\n';
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott private String sid;
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott private String secret;
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott private String stype;
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott private String cid;
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott private String cdomain;
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott private long maxtime;
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott private long maxidle;
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott private long maxcaching;
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott private long expiryTime;
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott private long lastActivityTime;
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott private String state;
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott private Hashtable<String, String> properties = new Hashtable<String, String>();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott /**
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott * Constructs <code> SessionInfo </code>
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott */
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott public SessionInfo() {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott /**
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott * translates the <code>Session</code> Information to an XML document
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott * String based
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott *
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott * @return An XML String representing the information
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott */
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott public String toXMLString() {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster StringBuilder xml = new StringBuilder(200);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster xml.append("<Session sid=").append(QUOTE).append(sid).append(QUOTE)
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster .append(" stype=").append(QUOTE).append(stype).append(QUOTE)
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster .append(" cid=").append(QUOTE).append(
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott XMLUtils.escapeSpecialCharacters(cid)).append(QUOTE)
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster .append(" cdomain=").append(QUOTE).append(
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott XMLUtils.escapeSpecialCharacters(cdomain))
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster .append(QUOTE).append(" maxtime=").append(QUOTE)
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster .append(maxtime).append(QUOTE).append(" maxidle=")
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster .append(QUOTE).append(maxidle).append(QUOTE).append(
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott " maxcaching=").append(QUOTE).append(maxcaching)
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster .append(QUOTE).append(" timeidle=").append(QUOTE).append(
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott getTimeIdle()).append(QUOTE).append(" timeleft=").append(
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott QUOTE).append(getTimeLeft()).append(QUOTE).append(" state=")
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster .append(QUOTE).append(state).append(QUOTE).append(">").append(
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott NL);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (properties != null) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster Enumeration enumerator = properties.keys();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster while (enumerator.hasMoreElements()) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String name = (String) enumerator.nextElement();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String value = (String) properties.get(name);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster xml.append("<Property name=").append(QUOTE).append(
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster XMLUtils.escapeSpecialCharacters(name)).append(QUOTE)
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster .append(" value=").append(QUOTE).append(
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott XMLUtils.escapeSpecialCharacters(value))
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster .append(QUOTE).append(">").append("</Property>")
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster .append(NL);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster xml.append("</Session>");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return xml.toString();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott /**
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott * <code>Session</code> id
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott */
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott public String getSessionID() {
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott return sid;
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott }
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott public void setSessionID(final String sid) {
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott this.sid = sid;
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott }
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott public String getSecret() {
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott return secret;
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott }
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott public void setSecret(final String secret) {
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott this.secret = secret;
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott }
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott /**
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott * <code>Session</code> type
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott */
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott public String getSessionType() {
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott return stype;
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott }
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott public void setSessionType(final String stype) {
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott this.stype = stype;
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott }
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott /**
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott * <code>Cookie</code> id
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott */
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott public String getClientID() {
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott return cid;
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott }
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott public void setClientID(final String cid) {
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott this.cid = cid;
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott }
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott /**
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott * <code> Cookie</code> domain
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott */
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott public String getClientDomain() {
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott return cdomain;
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott }
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott public void setClientDomain(final String cdomain) {
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott this.cdomain = cdomain;
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott }
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott /**
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott * Max <code>Session</code> Time in minutes.
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott */
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott public long getMaxTime() {
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott return maxtime;
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott }
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott public void setMaxTime(final long maxtime) {
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott this.maxtime = maxtime;
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott }
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott /**
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott * Max <code>Session</code> Idle time in minutes.
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott */
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott public long getMaxIdle() {
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott return maxidle;
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott }
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott public void setMaxIdle(final long maxidle) {
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott this.maxidle = maxidle;
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott }
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott /**
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott * Max <code>Session</code> Cache time in minutes.
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott */
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott public long getMaxCaching() {
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott return maxcaching;
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott }
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott public void setMaxCaching(final long maxcaching) {
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott this.maxcaching = maxcaching;
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott }
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott /**
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott * Time at which this session will expire in milliseconds from the UTC epoch.
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott */
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott public long getExpiryTime() {
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott return expiryTime;
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott }
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott public void setExpiryTime(final long expiryTime) {
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott this.expiryTime = expiryTime;
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott }
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott /**
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott * Indicates that the session should never expire.
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott *
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott * @param neverExpiring {@code true} if the session should never expire. If {@code false} this method does nothing.
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott */
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott public void setNeverExpiring(final boolean neverExpiring) {
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott if (neverExpiring) {
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott this.expiryTime = Long.MAX_VALUE;
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott }
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott }
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott /**
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott * Whether the session will ever expire or not.
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott */
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott public boolean isNeverExpiring() {
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott return this.expiryTime == Long.MAX_VALUE;
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott }
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott /**
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott * Time at which there was last activity on this session as milliseconds from the UTC epoch.
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott */
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott public long getLastActivityTime() {
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott return lastActivityTime;
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott }
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott public void setLastActivityTime(final long lastActivityTime) {
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott this.lastActivityTime = lastActivityTime;
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott }
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott /**
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott * <code>Session</code> idle time in seconds.
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott */
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott @JsonIgnore
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott public long getTimeIdle() {
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott if (isNeverExpiring()) {
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott return 0;
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott } else {
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott return TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis() - lastActivityTime);
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott }
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott }
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott public void setTimeIdle(final long timeidle) {
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott this.lastActivityTime = System.currentTimeMillis() - TimeUnit.SECONDS.toMillis(timeidle);
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott }
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott /**
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott * Time left for <code>Session</code> to become inactive, in seconds.
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott */
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott @JsonIgnore
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott public long getTimeLeft() {
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott if (isNeverExpiring()) {
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott return Long.MAX_VALUE;
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott } else {
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott return TimeUnit.MILLISECONDS.toSeconds(expiryTime - System.currentTimeMillis());
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott }
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott }
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott public void setTimeLeft(final long timeleft) {
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott expiryTime = TimeUnit.SECONDS.toMillis(timeleft) + System.currentTimeMillis();
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott // Check for overflow - expiryTime should always be positive
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott if (expiryTime < 0) {
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott expiryTime = Long.MAX_VALUE;
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott }
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott }
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott /**
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott * <code>Session</code> state
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott */
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott public String getState() {
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott return state;
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott }
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott public void setState(final String state) {
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott this.state = state;
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott }
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott public Hashtable<String, String> getProperties() {
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott return properties;
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott }
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott public void setProperties(final Hashtable<String, String> properties) {
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott this.properties = properties;
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott }
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott @Override
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott public boolean equals(final Object o) {
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott if (this == o) {
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott return true;
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott }
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott if (o == null || getClass() != o.getClass()) {
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott return false;
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott }
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott final SessionInfo that = (SessionInfo) o;
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott return maxcaching == that.maxcaching && maxidle == that.maxidle && maxtime == that.maxtime
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott && lastActivityTime == that.lastActivityTime && expiryTime == that.expiryTime
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott && !(cdomain != null ? !cdomain.equals(that.cdomain) : that.cdomain != null)
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott && !(cid != null ? !cid.equals(that.cid) : that.cid != null)
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott && !(properties != null ? !properties.equals(that.properties) : that.properties != null)
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott && !(secret != null ? !secret.equals(that.secret) : that.secret != null)
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott && !(sid != null ? !sid.equals(that.sid) : that.sid != null)
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott && !(state != null ? !state.equals(that.state) : that.state != null)
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott && !(stype != null ? !stype.equals(that.stype) : that.stype != null);
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott }
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott @Override
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott public int hashCode() {
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott int result = sid != null ? sid.hashCode() : 0;
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott result = 31 * result + (secret != null ? secret.hashCode() : 0);
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott result = 31 * result + (stype != null ? stype.hashCode() : 0);
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott result = 31 * result + (cid != null ? cid.hashCode() : 0);
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott result = 31 * result + (cdomain != null ? cdomain.hashCode() : 0);
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott result = 31 * result + (int) (maxtime ^ (maxtime >>> 32));
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott result = 31 * result + (int) (maxidle ^ (maxidle >>> 32));
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott result = 31 * result + (int) (maxcaching ^ (maxcaching >>> 32));
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott result = 31 * result + (int) (lastActivityTime ^ (lastActivityTime >>> 32));
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott result = 31 * result + (int) (expiryTime ^ (expiryTime >>> 32));
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott result = 31 * result + (state != null ? state.hashCode() : 0);
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott result = 31 * result + (properties != null ? properties.hashCode() : 0);
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott return result;
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott }
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott @Override
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott public String toString() {
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott return "SessionInfo{" +
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott "sid='" + sid + '\'' +
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott ", secret='" + secret + '\'' +
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott ", stype='" + stype + '\'' +
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott ", cid='" + cid + '\'' +
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott ", cdomain='" + cdomain + '\'' +
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott ", maxtime=" + maxtime +
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott ", maxidle=" + maxidle +
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott ", maxcaching=" + maxcaching +
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott ", expiryTime=" + expiryTime +
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott ", lastActivityTime=" + lastActivityTime +
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott ", state='" + state + '\'' +
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott ", properties=" + properties +
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott '}';
d0da70ccbba38b773e7a7cc71bc124b06206d201Robert Wapshott }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster}