/*
*
* Copyright 2013 Entando S.r.l. (http://www.entando.com) All rights reserved.
*
* This file is part of Entando software.
* Entando is a free software;
* You can redistribute it and/or modify it
* under the terms of the GNU General Public License (GPL) as published by the Free Software Foundation; version 2.
*
* See the file License for the specific language governing permissions
* and limitations under the License
*
*
*
* Copyright 2013 Entando S.r.l. (http://www.entando.com) All rights reserved.
*
*/
package com.agiletec.plugins.jpstats.apsadmin;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.Map;
import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JREmptyDataSource;
import com.agiletec.aps.system.ApsSystemUtils;
import com.agiletec.aps.util.DateConverter;
import com.agiletec.apsadmin.system.BaseAction;
import com.agiletec.plugins.jpstats.aps.system.services.stats.IStatsManager;
import com.agiletec.plugins.jpstats.aps.system.services.stats.StatsRecord;
import com.agiletec.plugins.jpstats.aps.system.services.stats.model.VisitsStat;
import com.agiletec.plugins.jpstats.aps.util.HitsTDP;
import com.agiletec.plugins.jpstats.aps.util.StatsDataBean;
import com.agiletec.plugins.jpstats.aps.util.TopContentsCDP;
import com.agiletec.plugins.jpstats.aps.util.TopPagesCDP;
import de.laures.cewolf.DatasetProducer;
public class StatisticsAction extends BaseAction implements IStatisticsAction {
@Override
public String viewStatistics() {
if (this.getSelectedTypes() == null || this.getSelectedTypes().size() == 0) {
this.addActionError(this.getText("jpstats.graphicType.required"));
return INPUT;
}
this.getStartDate();
this.getEndDate();
if (this.getStartDate().compareTo(this.getEndDate())>0) {
this.addFieldError("start", this.getText("jpstats.Message.invalidDateRange"));
return INPUT;
}
return SUCCESS;
}
@Override
public String trash() {
return SUCCESS;
}
@Override
public String delete() {
try {
this.getStatsManager().deleteStatsRecord(this.getStartDate(), this.getEndDate());
} catch (Throwable t) {
ApsSystemUtils.logThrowable(t, this, "delete");
return FAILURE;
}
return SUCCESS;
}
@Override
public String report() {
return SUCCESS;
}
public List<StatsRecord> getStatsRecords() {
List<StatsRecord> records = new ArrayList<StatsRecord>();
try {
records = this.getStatsManager().loadStatsRecord(this.getStartDate(), this.getEndDate());
} catch (Throwable t) {
ApsSystemUtils.logThrowable(t, this, "getStatsRecords");
throw new RuntimeException("Errore in estrazione Records", t);
}
return records;
}
public DatasetProducer getHitsTimeData() {
return new HitsTDP(this.getStatsManager(), this.getStatsDataBean());
}
public DatasetProducer getMostVisitedPagestimeData() {
return new TopPagesCDP(this.getStatsManager(), this.getStatsDataBean());
}
public DatasetProducer getTopContentsDataset() {
return new TopContentsCDP(this.getStatsManager(), this.getStatsDataBean());
}
public int getIpByDateInterval() {
try {
return this.getStatsManager().getIPByDateInterval(this.getStartDay(), this.getEndDay());
} catch (Throwable t) {
ApsSystemUtils.logThrowable(t, this, "getIpByDateInterval");
throw new RuntimeException("Error loading number of ip addresses in interval", t);
}
}
public String getAverageTimePage() {
try {
return this.getStatsManager().getAverageTimePage(this.getStartDay(), this.getEndDay());
} catch (Throwable t) {
ApsSystemUtils.logThrowable(t, this, "getAverageTimePage");
throw new RuntimeException("Error loading average time in pages", t);
}
}
public String getAverageTimeSite() {
try {
return this.getStatsManager().getAverageTimeSite(this.getStartDay(), this.getEndDay());
} catch (Throwable t) {
ApsSystemUtils.logThrowable(t, this, "getAverageTimeSite");
throw new RuntimeException("Error loading average time in site", t);
}
}
public int getNumPageSession() {
try {
return this.getStatsManager().getNumPageSession(this.getStartDay(), this.getEndDay());
} catch (Throwable t) {
ApsSystemUtils.logThrowable(t, this, "getNumPageSession");
throw new RuntimeException("Error loading number of pages for session", t);
}
}
public List<VisitsStat> getVisitsForDate() {
try {
List<VisitsStat> statistics = this.getStatsManager().searchVisitsForDate(this.getStartDate(), this.getEndDate());
Collections.sort(statistics);
return statistics;
} catch (Throwable t) {
ApsSystemUtils.logThrowable(t, this, "getVisitsForDate");
throw new RuntimeException("Error loading visits for date", t);
}
}
public List<VisitsStat> getVisitsForPages() {
try {
List<VisitsStat> statistics = this.getStatsManager().searchVisitsForPages(this.getStartDate(), this.getEndDate());
Collections.sort(statistics);
return statistics;
} catch (Throwable t) {
ApsSystemUtils.logThrowable(t, this, "getVisitsForPages");
throw new RuntimeException("Error loading visits for pages", t);
}
}
public List<VisitsStat> getVisitsForContents() {
try {
List<VisitsStat> statistics = this.getStatsManager().searchVisitsForContents(this.getStartDate(), this.getEndDate());
Collections.sort(statistics);
return statistics;
} catch (Throwable t) {
ApsSystemUtils.logThrowable(t, this, "getVisitsForContents");
throw new RuntimeException("Error loading visits for contents", t);
}
}
public String getBaseDirectory() {
String baseDirectory = this.getRequest().getSession().getServletContext().getRealPath("/WEB-INF/plugins/jpstats/report/").concat("/");
return baseDirectory;
}
public Calendar getEndDay() {
Calendar calendar = Calendar.getInstance();
calendar.setTime(this.getEndDate());
return calendar;
}
public Calendar getStartDay() {
Calendar calendar = Calendar.getInstance();
calendar.setTime(this.getStartDate());
return calendar;
}
public JRDataSource getDataSource() {
return new JREmptyDataSource();
// List l = new ArrayList();
// l.add("");
// return l;
}
private StatsDataBean getStatsDataBean() {
if (null==this._statsDataBean) {
this._statsDataBean = new StatsDataBean();
this._statsDataBean.setStart(this.getStartDay());
this._statsDataBean.setEnd(this.getEndDay());
}
return this._statsDataBean;
}
private void prepareEndDate() {
if (this._endDate==null) {
Date date = null;
if (this._end!=null && this._end.trim().length()>0) {
date = DateConverter.parseDate(this._end.trim(), "dd/MM/yyyy");
}
if (date==null) {
date = new Date();
this._end = DateConverter.getFormattedDate(date, "dd/MM/yyyy");
} else {
date = new Date(date.getTime()+86400000-1);
}
this._endDate = date;
}
}
private void prepareStartDate() {
if (this._startDate==null) {
Date date = null;
if (this._start!=null && this._start.trim().length()>0) {
date = DateConverter.parseDate(this._start.trim(), "dd/MM/yyyy");
}
if (date==null) {
date = new Date(new Date().getTime() - 604800000l);
this._start = DateConverter.getFormattedDate(date, "dd/MM/yyyy");
date = DateConverter.parseDate(this._start.trim(), "dd/MM/yyyy");
}
this._startDate = date;
}
}
public String getStart() {
this.prepareStartDate();
return _start;
}
public void setStart(String start) {
this._start= start;
}
public Date getStartDate() {
this.prepareStartDate();
return _startDate;
}
public String getEnd() {
this.prepareEndDate();
return _end;
}
public void setEnd(String end) {
this._end = end;
}
public Date getEndDate() {
this.prepareEndDate();
return _endDate;
}
public IStatsManager getStatsManager() {
return _statsManager;
}
public void setStatsManager(IStatsManager statsManager) {
this._statsManager = statsManager;
}
public void setGraphicType(Map<String, String> graphicType) {
this._graphicType = graphicType;
}
public Map<String, String> getGraphicType() {
return _graphicType;
}
public void setSelectedTypes(List<String> selectedTypes) {
this._selectedTypes = selectedTypes;
}
public List<String> getSelectedTypes() {
return _selectedTypes;
}
private Map<String, String> _graphicType;
private List<String> _selectedTypes;
private String _end;
private String _start;
private Date _startDate;
private Date _endDate;
private IStatsManager _statsManager;
private StatsDataBean _statsDataBean;
}