package is.idega.idegaweb.tracker.presentation;
import is.idega.idegaweb.tracker.business.TrackerBusiness;
import is.idega.idegaweb.tracker.data.PageStatistics;
import is.idega.idegaweb.tracker.data.ReferrerStatistics;
import is.idega.idegaweb.tracker.data.UserAgentStatistics;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import com.idega.core.builder.data.ICPage;
import com.idega.core.builder.data.ICPageHome;
import com.idega.data.IDOLookup;
import com.idega.presentation.Block;
import com.idega.presentation.IWContext;
import com.idega.presentation.Table;
import com.idega.presentation.text.Text;
/**
* Title: is.idega.idegaweb.tracker.presentation.PageCounter
* Description: A simple page counter that can display the number of visits/hits with text/images
* Copyright: Copyright (c) 2002
* Company: Idega software
* @author Eirikur S. Hrafnsson
* @version 1.0
*/
public class PageCounter extends Block {
private boolean showCurrentPH = true;//show current page hits
private boolean showCurrentPS = false;//show current page sessions
private boolean showTotalPH = false;//show total page hits
private boolean showTotalPS = false;//show total page session
private boolean showReferers = false;//show referers
private boolean showUserAgents = false;//show user agents
private boolean showPageList= false;//show page list
private boolean update = true;//update the stats(true) or just showing stats(false)
private Map ipFilter = new HashMap();/**clone**/
public PageCounter() {
}
public void main(IWContext iwc) throws Exception{
if( (update) && (updateStats(iwc.getRemoteIpAddress())) ){
TrackerBusiness.runThroughTheStatsMachine(iwc);
}
if(showCurrentPH){
Text hits = new Text("Current page hits: "+TrackerBusiness.getCurrentPageHits(iwc));
hits.setBold(true);
add(hits);
addBreak();
}
if(showCurrentPS){
Text hits2 = new Text("Current page sessions: "+TrackerBusiness.getCurrentPageSessions(iwc));
hits2.setBold(true);
add(hits2);
addBreak();
}
if(showTotalPS){
Text hits4 = new Text("Total website sessions: "+TrackerBusiness.getTotalSessions());
hits4.setBold(true);
add(hits4);
addBreak();
}
if(showTotalPH){
Text hits3 = new Text("Total website hits: "+TrackerBusiness.getTotalHits());
hits3.setBold(true);
add(hits3);
}
if(showPageList){
//referers
Table page = new Table();
int y = 1;
page.add("Page name",1,y);
page.add("Count",2,y);
ArrayList pageHits = TrackerBusiness.getPageHitsArrayListSortedByHits();
Iterator pageList = pageHits.iterator();
PageStatistics item;
ICPageHome pHome = (ICPageHome)IDOLookup.getHome(ICPage.class);
ICPage thePage;
while (pageList.hasNext()) {
item = (PageStatistics) pageList.next();
thePage = pHome.findByPrimaryKey(new Integer(item.getPageId()));
page.add(thePage.getName(),1,++y);
page.add(String.valueOf(item.getHits()),2,y);
}
add(page);
addBreak();
}
if(showReferers){
//referers
Table refs = new Table();
int y = 1;
refs.add("Referer url",1,y);
refs.add("Count",2,y);
ArrayList referers = TrackerBusiness.getRefererArrayListSortedBySessions();
Iterator referer = referers.iterator();
ReferrerStatistics item;
while (referer.hasNext()) {
item = (ReferrerStatistics) referer.next();
refs.add(item.getReferrerUrl(),1,++y);
refs.add(String.valueOf(item.getSessions()),2,y);
}
add(refs);
addBreak();
}
if(showUserAgents){
//agents
Table agents = new Table();
int y2 = 1;
agents.add("User agents",1,y2);
agents.add("Count",2,y2);
ArrayList agentsList = TrackerBusiness.getAgentArrayListSortedBySessions();
Iterator ua = agentsList.iterator();
UserAgentStatistics item;
while (ua.hasNext()) {
item = (UserAgentStatistics) ua.next();
agents.add(item.getUserAgent(),1,++y2);
agents.add(String.valueOf(item.getSessions()),2,y2);
}
add(agents);
}
}
public void setShowCurrentPageHits(boolean show){
showCurrentPH = show;
}
public void setShowCurrentPageSessions(boolean show){
showCurrentPS = show;
}
public void setShowTotalHits(boolean show){
showTotalPH = show;
}
public void setShowTotalSessions(boolean show){
showTotalPS = show;
}
public void setUpdateStats(boolean update){
this.update = update;
}
public void setShowReferers(boolean show){
showReferers = show;
}
public void setShowAgents(boolean show){
showUserAgents = show;
}
public void setShowPageList(boolean show){
showPageList = show;
}
public void setIpFilterNumber(String ipNumber){
ipFilter.put(ipNumber,ipNumber);
}
public void setIpFilterNumber(String name, String ipNumber){
ipFilter.put(name,ipNumber);
}
public void removeIpFilterNumber(String nameOrIpNumber){
ipFilter.remove(nameOrIpNumber);
}
private boolean updateStats(String ipNumber){
return !(ipFilter.containsValue(ipNumber));
}
public synchronized Object clone() {
PageCounter obj = null;
try {
obj = (PageCounter)super.clone();
obj.ipFilter = this.ipFilter;
}
catch(Exception ex) {
ex.printStackTrace(System.err);
}
return obj;
}
}