blob: 7260e9ec3ebd253696c900c05f2b0ba7575df42d [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.unomi.api;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
* A time-bounded interaction between a user (via their associated {@link Profile}) and a unomi-enabled application. A session represents a sequence of operations the user
* performed during its duration. In the context of web applications, sessions are usually linked to HTTP sessions.
*/
public class Session extends Item implements TimestampedItem {
/**
* The Session ITEM_TYPE.
*
* @see Item for a discussion of ITEM_TYPE
*/
public static final String ITEM_TYPE = "session";
private static final long serialVersionUID = 4628640198281687336L;
private String profileId;
private Profile profile;
private Map<String, Object> properties = new HashMap<>();
private Map<String, Object> systemProperties = new HashMap<>();
private Date timeStamp;
private String scope;
private Date lastEventDate;
private int size = 0;
private int duration = 0;
/**
* Instantiates a new Session.
*/
public Session() {
}
/**
* Instantiates a new Session.
*
* @param itemId the identifier for this Session
* @param profile the associated {@link Profile}
* @param timeStamp the time stamp
* @param scope the scope
*/
public Session(String itemId, Profile profile, Date timeStamp, String scope) {
super(itemId);
this.profile = profile;
this.profileId = profile.getItemId();
this.timeStamp = timeStamp;
this.scope = scope;
}
/**
* Retrieves the identifier of the associated Profile.
*
* @return the identifier of the associated Profile
*/
public String getProfileId() {
return profileId;
}
/**
* Retrieves the associated Profile.
*
* @return the associated profile
*/
public Profile getProfile() {
return profile;
}
/**
* Sets the associated Profile.
*
* @param profile the associated Profile
*/
public void setProfile(Profile profile) {
this.profileId = profile.getItemId();
this.profile = profile;
}
/**
* Sets the property identified by the specified name to the specified value. If a property with that name already exists, replaces its value, otherwise adds the new
* property with the specified name and value.
*
* @param name the name of the property to set
* @param value the value of the property
*/
public void setProperty(String name, Object value) {
properties.put(name, value);
}
/**
* Retrieves the property identified by the specified name.
*
* @param name the name of the property to retrieve
* @return the value of the specified property or {@code null} if no such property exists
*/
public Object getProperty(String name) {
return properties.get(name);
}
/**
* Retrieves a Map of all property name - value pairs.
*
* @return a Map of all property name - value pairs
*/
public Map<String, Object> getProperties() {
return properties;
}
/**
* Sets the property name - value pairs.
*
* @param properties a Map containing the property name - value pairs
*/
public void setProperties(Map<String, Object> properties) {
this.properties = properties;
}
/**
* Retrieves a Map of system property name - value pairs. System properties can be used by implementations to store non-user visible properties needed for
* internal purposes.
*
* @return a Map of system property name - value pairs
*/
public Map<String, Object> getSystemProperties() {
return systemProperties;
}
/**
* Specifies the system property name - value pairs.
*
* @param systemProperties a Map of system property name - value pairs
*/
public void setSystemProperties(Map<String, Object> systemProperties) {
this.systemProperties = systemProperties;
}
/**
* Retrieves the session creation timestamp.
*
* @return the session creation timestamp
*/
public Date getTimeStamp() {
return timeStamp;
}
/**
* Retrieves the last event date.
*
* @return the last event date
*/
public Date getLastEventDate() {
return lastEventDate;
}
/**
* Sets the last event date.
*
* @param lastEventDate the last event date
*/
public void setLastEventDate(Date lastEventDate) {
this.lastEventDate = lastEventDate;
if (lastEventDate != null) {
duration = (int) (lastEventDate.getTime() - timeStamp.getTime());
}
}
/**
* Retrieves the duration.
*
* @return the duration
*/
public int getDuration() {
return duration;
}
/**
* Retrieves the size.
*
* @return the size
*/
public int getSize() {
return size;
}
/**
* Sets the size.
*
* @param size the size
*/
public void setSize(int size) {
this.size = size;
}
public String getScope() {
return scope;
}
public void setScope(String scope) {
this.scope = scope;
}
}