/*
* See the NOTICE file distributed with this work for additional
* information regarding copyright ownership.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package com.xpn.xwiki.stats.impl;
import java.util.Date;
import org.apache.commons.lang3.StringUtils;
import com.xpn.xwiki.stats.impl.StatsUtil.PeriodType;
/**
* The visit statistics database object.
*
* @version $Id: f92efeee2a26813fb1e3634e9d7ccc6c2b61cfaa $
*/
public class VisitStats extends XWikiStats
{
/**
* The properties of visit statistics object.
*
* @version $Id: f92efeee2a26813fb1e3634e9d7ccc6c2b61cfaa $
*/
public enum Property
{
/**
* The name of the property containing the number of saved pages during this visit.
*/
pageSaves,
/**
* The name of the property containing the number of downloaded pages during this visit.
*/
downloads,
/**
* The name of the property containing the starting date of the user visit.
*/
startDate,
/**
* The name of the property containing the ending date of the user visit.
*/
endDate,
/**
* The name of the property containing the unique id of the user visit.
*/
uniqueID,
/**
* The name of the property containing the cookie id of the user.
*/
cookie,
/**
* The name of the property containing the IP address of the user.
*/
ip,
/**
* The name of the property containing the user agent of the user.
*/
userAgent
}
/**
* The previous visit object.
*/
protected VisitStats oldObject;
/**
* Default {@link VisitStats} constructor.
*/
public VisitStats()
{
}
/**
* @param user the user name.
* @param uniqueID the visit object unique id.
* @param cookie the cookie id.
* @param ip the IP of the user.
* @param userAgent the user agent of the user.
* @param startDate the starting date of the visit.
* @param periodType the type of the period.
*/
public VisitStats(String user, String uniqueID, String cookie, String ip, String userAgent,
Date startDate, PeriodType periodType)
{
super(startDate, periodType);
setName(user);
setStartDate(startDate);
setUniqueID(uniqueID);
setCookie(cookie);
setIP(ip);
setUserAgent(userAgent);
}
/**
* Store previous object to be able to remove it from the database later.
*
* @param vobject the previous object.
*/
public void rememberOldObject(VisitStats vobject)
{
if (this.oldObject == null) {
this.oldObject = vobject;
}
}
/**
* Set old visit object to null.
*/
public void unrememberOldObject()
{
this.oldObject = null;
}
/**
* @return the previous visit object.
*/
public VisitStats getOldObject()
{
return this.oldObject;
}
/**
* @return the number of saved pages during this visit.
*/
public int getPageSaves()
{
return getIntValue(Property.pageSaves.toString());
}
/**
* @param pageSaves the number of saved pages during this visit.
*/
public void setPageSaves(int pageSaves)
{
setIntValue(Property.pageSaves.toString(), pageSaves);
}
/**
* Add 1 to the number of saved pages during this visit.
*/
public void incPageSaves()
{
setIntValue(Property.pageSaves.toString(), getPageSaves() + 1);
}
/**
* @return the number of downloaded pages during this visit.
*/
public int getDownloads()
{
return getIntValue(Property.downloads.toString());
}
/**
* @param downloads the number of downloaded pages during this visit.
*/
public void setDownloads(int downloads)
{
setIntValue(Property.downloads.toString(), downloads);
}
/**
* Add 1 to the number of downloaded pages during this visit.
*/
public void incDownloads()
{
setIntValue(Property.downloads.toString(), getDownloads() + 1);
}
/**
* @return the starting date of the user visit.
*/
public Date getStartDate()
{
return getDateValue(Property.startDate.toString());
}
/**
* @param startDate the starting date of the user visit.
*/
public void setStartDate(Date startDate)
{
setDateValue(Property.startDate.toString(), startDate);
}
/**
* @return the ending date of the user visit.
*/
public Date getEndDate()
{
return getDateValue(Property.endDate.toString());
}
/**
* @param endDate the ending date of the user visit.
*/
public void setEndDate(Date endDate)
{
setDateValue(Property.endDate.toString(), endDate);
}
/**
* @return the unique id of the user visit.
*/
public String getUniqueID()
{
return getStringValue(Property.uniqueID.toString());
}
/**
* @param uniqueID the unique id of the user visit.
*/
public void setUniqueID(String uniqueID)
{
// Changing the unique ID is changing the number
if (getStartDate() != null) {
String nb = uniqueID + getStartDate().getTime();
setNumber(nb.hashCode());
}
setStringValue(Property.uniqueID.toString(), uniqueID);
}
/**
* @return the cookie id of the user.
*/
public String getCookie()
{
return getStringValue(Property.cookie.toString());
}
/**
* @param cookie the cookie id of the user.
*/
public void setCookie(String cookie)
{
setStringValue(Property.cookie.toString(), StringUtils.defaultString(cookie));
}
/**
* @return the IP address of the user.
*/
public String getIP()
{
return getStringValue(Property.ip.toString());
}
/**
* @param ip the IP address of the user.
*/
public void setIP(String ip)
{
setStringValue(Property.ip.toString(), ip);
}
/**
* @return the user agent of the user.
*/
public String getUserAgent()
{
return getStringValue(Property.userAgent.toString());
}
/**
* @param userAgent the user agent of the user.
*/
public void setUserAgent(String userAgent)
{
setStringValue(Property.userAgent.toString(), StringUtils.defaultString(userAgent));
}
/**
* @return the user name.
*/
public String getUser()
{
return getName();
}
/**
* @param user the user name.
*/
public void setUser(String user)
{
setName(user);
}
}