package org.dspace.statistics.content.filter;
import org.dspace.statistics.SolrLogger;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Calendar;
/**
* Created by IntelliJ IDEA.
* User: kevinvandevelde
* Date: 13-mrt-2009
* Time: 13:14:14
* To change this template use File | Settings | File Templates.
*/
public class StatisticsSolrDateFilter implements StatisticsFilter {
private Date startDate;
private Date endDate;
private String startStr;
private String endStr;
private String typeStr;
public StatisticsSolrDateFilter() {
}
public void setStartStr(String startStr) {
this.startStr = startStr;
}
public void setEndStr(String endStr) {
this.endStr = endStr;
}
public void setTypeStr(String typeStr) {
this.typeStr = typeStr;
}
public void setStartDate(Date startDate) {
this.startDate = startDate;
}
public void setEndDate(Date endDate) {
this.endDate = endDate;
}
public String toQuery() {
if(startDate == null && endDate == null){
//We have got a strings instead of dates so calculate our dates out of these strings
Calendar startCal = Calendar.getInstance();
startCal.clear(Calendar.MILLISECOND);
startCal.clear(Calendar.SECOND);
startCal.clear(Calendar.MINUTE);
startCal.set(Calendar.HOUR_OF_DAY, 0);
int dateType = -1;
if(typeStr.equalsIgnoreCase("day")) {
dateType = Calendar.DATE;
} else if(typeStr.equalsIgnoreCase("month")) {
dateType = Calendar.MONTH;
startCal.set(Calendar.DATE, 1);
} else if(typeStr.equalsIgnoreCase("year")) {
startCal.clear(Calendar.MONTH);
startCal.set(Calendar.DATE, 1);
dateType = Calendar.YEAR;
} else
return "";
Calendar endCal = (Calendar) startCal.clone();
if(startStr.startsWith("+"))
startStr = startStr.substring(startStr.indexOf("+") + 1);
if(endStr.startsWith("+"))
endStr = endStr.substring(endStr.indexOf("+") + 1);
startCal.add(dateType, Integer.parseInt(startStr));
endCal.add(dateType, Integer.parseInt(endStr));
startDate = startCal.getTime();
endDate = endCal.getTime();
}
//Parse them dates
SimpleDateFormat formatter = new SimpleDateFormat(SolrLogger.DATE_FORMAT_8601);
String startDateParsed = formatter.format(startDate);
String endDateParsed = formatter.format(endDate);
//Create our string
return "time:[" + startDateParsed + " TO " + endDateParsed + "]";
}
}