/** * $URL: https://source.sakaiproject.org/svn/sitestats/trunk/sitestats-api/src/java/org/sakaiproject/sitestats/api/report/ReportParams.java $ * $Id: ReportParams.java 105078 2012-02-24 23:00:38Z ottenhoff@longsight.com $ * * Copyright (c) 2006-2009 The Sakai Foundation * * Licensed under the Educational Community 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.opensource.org/licenses/ECL-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.sakaiproject.sitestats.api.report; import java.io.Serializable; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; import org.sakaiproject.sitestats.api.StatsManager; public class ReportParams implements Serializable { private static final long serialVersionUID = 1L; private String siteId; private String what = ReportManager.WHAT_VISITS; private String whatEventSelType = ReportManager.WHAT_EVENTS_BYTOOL; private List<String> whatToolIds = new ArrayList<String>(); private List<String> whatEventIds = new ArrayList<String>(); private boolean whatLimitedAction = false; private boolean whatLimitedResourceIds = false; private List<String> whatResourceIds = new ArrayList<String>(); private String whatResourceAction = ReportManager.WHAT_RESOURCES_ACTION_NEW; private String when = ReportManager.WHEN_LAST7DAYS; private Date whenFrom; private Date whenTo; private String who = ReportManager.WHO_ALL; private String whoRoleId; private String whoGroupId; private List<String> whoUserIds = new ArrayList<String>(); private List<String> howTotalsBy = new ArrayList<String>(); private boolean howSort = false; private String howSortBy = ReportManager.HOW_SORT_DEFAULT; private boolean howSortAscending = true; public boolean howLimitedMaxResults = false; private int howMaxResults = 0; private String howPresentationMode = ReportManager.HOW_PRESENTATION_TABLE; private String howChartType = StatsManager.CHARTTYPE_BAR; private String howChartSource = StatsManager.T_EVENT; private String howChartCategorySource = StatsManager.T_NONE; private String howChartSeriesSource = StatsManager.T_TOTAL; private String howChartSeriesPeriod = StatsManager.CHARTTIMESERIES_DAY; public ReportParams(){ } public ReportParams(String siteId){ this.siteId = siteId; whatToolIds.add(ReportManager.WHAT_EVENTS_ALLTOOLS); whenFrom = new Date(); Calendar c = Calendar.getInstance(); c.add(Calendar.DAY_OF_MONTH, -1); c.set(Calendar.HOUR_OF_DAY, 0); c.set(Calendar.MINUTE, 0); c.set(Calendar.SECOND, 0); whenFrom = c.getTime(); whenTo = new Date(); } public ReportParams(String siteId, String what, List<String> whatToolIds, List<String> whatEventIds, String whatResourceAction, List<String> whatResourceIds, String when, Date whenFrom, Date whenTo, String who, String whoRoleId, String whoGroupId, List<String> whoUserIds) { this.siteId = siteId; this.what = what; this.whatToolIds = whatToolIds; this.whatEventIds = whatEventIds; this.whatResourceAction = whatResourceAction; this.whatLimitedAction = whatResourceAction != null; this.whatResourceIds = whatResourceIds; this.whatLimitedResourceIds = whatResourceIds != null; this.when = when; this.whenFrom = whenFrom; this.whenTo = whenTo; this.who = who; this.whoRoleId = whoRoleId; this.whoGroupId = whoGroupId; this.whoUserIds = whoUserIds; } /** Get the site id to report for. */ public String getSiteId() { return siteId; } /** Set the site id to report for. */ public void setSiteId(String siteId) { this.siteId = siteId; } /** Get the what type selection (see {@link ReportManager#WHAT_EVENTS},{@link ReportManager#WHAT_RESOURCES}, {@link ReportManager#WHAT_VISITS}, {@link ReportManager#WHAT_PRESENCES}). */ public String getWhat() { return what; } /** Set the what type selection (see {@link ReportManager#WHAT_EVENTS},{@link ReportManager#WHAT_RESOURCES}, {@link ReportManager#WHAT_VISITS}, {@link ReportManager#WHAT_PRESENCES}). */ public void setWhat(String what){ this.what = what; } /** Get the what type selection (see {@link ReportManager#WHAT_EVENTS_BYEVENTS},{@link ReportManager#WHAT_EVENTS_BYTOOL}). */ public String getWhatEventSelType() { return whatEventSelType; } /** Set the what type selection (see {@link ReportManager#WHAT_EVENTS_BYEVENTS},{@link ReportManager#WHAT_EVENTS_BYTOOL}). */ public void setWhatEventSelType(String whatEventSelType) { this.whatEventSelType = whatEventSelType; } /** Get the event ids to report against. */ public List<String> getWhatEventIds() { return whatEventIds; } /** Set the event ids to report against. */ public void setWhatEventIds(List<String> whatEventIds) { this.whatEventIds = whatEventIds; } /** Add event id to the list to report against. */ public void addWhatEventId(String whatEventId) { this.whatEventIds.add(whatEventId); } /** Set if is configured for reporting only on a specific resource action. */ public void setWhatLimitedAction(boolean whatLimitedAction) { this.whatLimitedAction = whatLimitedAction; } /** Check if is configured for reporting only on a specific resource action. */ public boolean isWhatLimitedAction() { return whatLimitedAction; } /** Set if reporting will be restricted to specified resource ids in {@link #setWhatResourceIds(List)}. */ public void setWhatLimitedResourceIds(boolean whatLimitedResourceIds) { this.whatLimitedResourceIds = whatLimitedResourceIds; } /** Check if reporting will be restricted to specified resource ids in {@link #setWhatResourceIds(List)}. */ public boolean isWhatLimitedResourceIds() { return whatLimitedResourceIds; } /** Get the resource ids to report against. */ public List<String> getWhatResourceIds() { //if(isWhatLimitedResourceIds()) { return whatResourceIds; //}else{ // return new ArrayList<String>(); //} } /** Set the event ids to report against. */ public void setWhatResourceIds(List<String> whatResourceIds) { this.whatResourceIds = whatResourceIds; } /** Add the event id to the list to report against. */ public void addWhatResourceId(String whatResourceId) { this.whatResourceIds.add(whatResourceId); } /** Get the resource action to limit report to (see {@link ReportManager#WHAT_RESOURCES_ACTION_NEW}, {@link ReportManager#WHAT_RESOURCES_ACTION_READ}, {@link ReportManager#WHAT_RESOURCES_ACTION_REVS}, {@link ReportManager#WHAT_RESOURCES_ACTION_DEL}). */ public String getWhatResourceAction(){ //if(isWhatLimitedAction()) { return whatResourceAction; //}else{ // return null; //} } /** Set the resource action to limit report to (see {@link ReportManager#WHAT_RESOURCES_ACTION_NEW}, {@link ReportManager#WHAT_RESOURCES_ACTION_READ}, {@link ReportManager#WHAT_RESOURCES_ACTION_REVS}, {@link ReportManager#WHAT_RESOURCES_ACTION_DEL}). */ public void setWhatResourceAction(String whatResourceAction) { this.whatResourceAction = whatResourceAction; } /** Get the well-know tool ids to report against. */ public List<String> getWhatToolIds() { return whatToolIds; } /** Set the well-know tool ids to report against. */ public void setWhatToolIds(List<String> whatToolIds) { this.whatToolIds = whatToolIds; } /** Add the well-know tool id to the list to report against. */ public void addWhatToolIds(String whatToolId) { this.whatToolIds.add(whatToolId); } /** Get the what type selection (see {@link ReportManager#WHEN_ALL}, {@link ReportManager#WHEN_LAST30DAYS}, {@link ReportManager#WHEN_LAST7DAYS}, {@link ReportManager#WHEN_LAST365DAYS}, {@link ReportManager#WHEN_CUSTOM}). */ public String getWhen() { return when; } /** Set the what type selection (see {@link ReportManager#WHEN_ALL}, {@link ReportManager#WHEN_LAST30DAYS}, {@link ReportManager#WHEN_LAST7DAYS}, {@link ReportManager#WHEN_LAST365DAYS}, {@link ReportManager#WHEN_CUSTOM}). */ public void setWhen(String when) { this.when = when; } /** Get the start date of report data. */ public Date getWhenTo() { return whenTo; } /** Set the start date of report data. */ public void setWhenTo(Date whenTo) { this.whenTo = whenTo; } /** Get the end date of report data. */ public Date getWhenFrom() { return whenFrom; } /** Set the end date of report data. */ public void setWhenFrom(Date whenFrom) { this.whenFrom = whenFrom; } /** Get the who type selection (see {@link ReportManager#WHO_ALL}, {@link ReportManager#WHO_ROLE}, {@link ReportManager#WHO_GROUPS}, {@link ReportManager#WHO_CUSTOM}, {@link ReportManager#WHO_NONE}). */ public String getWho() { return who; } /** Set the who type selection (see {@link ReportManager#WHO_ALL}, {@link ReportManager#WHO_ROLE}, {@link ReportManager#WHO_GROUPS}, {@link ReportManager#WHO_CUSTOM}, {@link ReportManager#WHO_NONE}). */ public void setWho(String who) { this.who = who; } /** Get the group ids to report against. */ public String getWhoGroupId() { return whoGroupId; } /** SGet the group ids to report against. */ public void setWhoGroupId(String whoGroupId) { this.whoGroupId = whoGroupId; } /** Get the role ids to report against. */ public String getWhoRoleId() { return whoRoleId; } /** Set the role ids to report against. */ public void setWhoRoleId(String whoRoleId) { this.whoRoleId = whoRoleId; } /** Get the user ids to report against. */ public List<String> getWhoUserIds() { //if(ReportManager.WHO_CUSTOM.equals(getWho())) { return whoUserIds; //}else{ // return new ArrayList<String>(); //} } /** Set the user ids to report against. */ public void setWhoUserIds(List<String> whoUserIds) { this.whoUserIds = whoUserIds; } /** Add the user id to the list to report against. */ public void addWhoUserIds(String whoUserId) { this.whoUserIds.add(whoUserId); } /** Get how type, show totals by (see {@link StatsManager#TOTALSBY_EVENT_DEFAULT}, {@link StatsManager#T_USER}, {@link StatsManager#T_EVENT}, {@link StatsManager#T_RESOURCE}, {@link StatsManager#T_RESOURCE_ACTION}, {@link StatsManager#T_DATE}, {@link StatsManager#T_LASTDATE}). */ public List<String> getHowTotalsBy() { howTotalsBy = fixedHowTotalsBy(howTotalsBy); return howTotalsBy; } /** Set how type, show totals by (see {@link StatsManager#TOTALSBY_EVENT_DEFAULT}, {@link StatsManager#T_USER}, {@link StatsManager#T_EVENT}, {@link StatsManager#T_RESOURCE}, {@link StatsManager#T_RESOURCE_ACTION}, {@link StatsManager#T_DATE}, {@link StatsManager#T_LASTDATE}). */ public void setHowTotalsBy(List<String> totalsBy) { this.howTotalsBy = totalsBy; } /** Add a totals by item (see {@link StatsManager#TOTALSBY_EVENT_DEFAULT}, {@link StatsManager#T_USER}, {@link StatsManager#T_EVENT}, {@link StatsManager#T_RESOURCE}, {@link StatsManager#T_RESOURCE_ACTION}, {@link StatsManager#T_DATE}, {@link StatsManager#T_LASTDATE}). */ public void addHowTotalsBy(String totalsBy) { this.howTotalsBy.add(totalsBy); } /** Check if results sorting is specified. */ public boolean isHowSort() { return howSort; } /** Set that results sorting will be specified. */ public void setHowSort(boolean sort) { this.howSort = sort; } /** Get how type, sort order (see {@link StatsManager#T_USER}, {@link StatsManager#T_EVENT}, {@link StatsManager#T_RESOURCE}, {@link StatsManager#T_RESOURCE_ACTION}, {@link StatsManager#T_DATE}, {@link StatsManager#T_LASTDATE}, {@link StatsManager#T_TOTAL}). */ public String getHowSortBy() { howSortBy = fixedHowSortBy(howSortBy); return howSortBy; } /** Set how type, sort order (see {@link StatsManager#TOTALSBY_EVENT_DEFAULT}, {@link StatsManager#T_USER}, {@link StatsManager#T_EVENT}, {@link StatsManager#T_RESOURCE}, {@link StatsManager#T_RESOURCE_ACTION}, {@link StatsManager#T_DATE}, {@link StatsManager#T_LASTDATE}, {@link StatsManager#T_TOTAL). */ public void setHowSortBy(String sortBy) { this.howSortBy = sortBy; } /** Get how type, sort ascending? */ public boolean getHowSortAscending() { return howSortAscending; } /** Set how type, sort ascending? */ public void setHowSortAscending(boolean sortAscending) { this.howSortAscending = sortAscending; } /** Check if results limit is set. */ public boolean isHowLimitedMaxResults() { return howLimitedMaxResults; } /** Set that results will be limited. */ public void setHowLimitedMaxResults(boolean limitedMaxResults) { this.howLimitedMaxResults = limitedMaxResults; } /** Get how type, max results (0 for no limit). */ public int getHowMaxResults() { return howMaxResults; } /** Set how type, max results (0 for no limit). */ public void setHowMaxResults(int maxResults) { this.howMaxResults = maxResults; } /** Get report presentation mode (see {@link ReportManager#HOW_PRESENTATION_TABLE}, {@link ReportManager#HOW_PRESENTATION_CHART}, {@link ReportManager#HOW_PRESENTATION_BOTH}). */ public String getHowPresentationMode() { return howPresentationMode; } /** Set report presentation mode (see {@link ReportManager#HOW_PRESENTATION_TABLE}, {@link ReportManager#HOW_PRESENTATION_CHART}, {@link ReportManager#HOW_PRESENTATION_BOTH}). */ public void setHowPresentationMode(String howPresentationMode) { this.howPresentationMode = howPresentationMode; } /** Get chart type (see {@link StatsManager#CHARTTYPE_BAR}, {@link StatsManager#CHARTTYPE_LINE}, {@link StatsManager#CHARTTYPE_PIE}, {@link StatsManager#CHARTTYPE_TIMESERIES}, {@link StatsManager#CHARTTYPE_TIMESERIESBAR}). */ public String getHowChartType() { return howChartType; } /** Set chart type (see {@link StatsManager#CHARTTYPE_BAR}, {@link StatsManager#CHARTTYPE_LINE}, {@link StatsManager#CHARTTYPE_PIE}, {@link StatsManager#CHARTTYPE_TIMESERIES}, {@link StatsManager#CHARTTYPE_TIMESERIESBAR}). */ public void setHowChartType(String howChartType) { this.howChartType = howChartType; } /** Get the chart data source (see {@link StatsManager#T_USER}, {@link StatsManager#T_EVENT}, {@link StatsManager#T_RESOURCE}, {@link StatsManager#T_RESOURCE_ACTION}, {@link StatsManager#T_DATE}, {@link StatsManager#T_LASTDATE}, {@link StatsManager#T_TOTAL}). */ public String getHowChartSource() { return howChartSource; } /** Set the chart data source (see {@link StatsManager#T_USER}, {@link StatsManager#T_EVENT}, {@link StatsManager#T_RESOURCE}, {@link StatsManager#T_RESOURCE_ACTION}, {@link StatsManager#T_DATE}, {@link StatsManager#T_LASTDATE}, {@link StatsManager#T_TOTAL}). */ public void setHowChartSource(String howChartSource) { this.howChartSource = howChartSource; } /** Get the chart category that will group the date source (can be null or {@link StatsManager#T_NONE}) (see {@link StatsManager#T_USER}, {@link StatsManager#T_EVENT}, {@link StatsManager#T_RESOURCE}, {@link StatsManager#T_RESOURCE_ACTION}, {@link StatsManager#T_DATE}, {@link StatsManager#T_LASTDATE}, {@link StatsManager#T_TOTAL}). */ public String getHowChartCategorySource() { return howChartCategorySource; } /** Set the chart category that will group the data source (can be null or {@link StatsManager#T_NONE}) (see {@link StatsManager#T_USER}, {@link StatsManager#T_EVENT}, {@link StatsManager#T_RESOURCE}, {@link StatsManager#T_RESOURCE_ACTION}, {@link StatsManager#T_DATE}, {@link StatsManager#T_LASTDATE}, {@link StatsManager#T_TOTAL}). */ public void setHowChartCategorySource(String howChartCategorySource) { this.howChartCategorySource = howChartCategorySource; } /** Get the field chart series will be generated from (only applies to TimeSeries charts) (see {@link StatsManager#T_USER}, {@link StatsManager#T_EVENT}, {@link StatsManager#T_RESOURCE}, {@link StatsManager#T_RESOURCE_ACTION}, {@link StatsManager#T_DATE}, {@link StatsManager#T_LASTDATE}, {@link StatsManager#T_TOTAL}). */ public String getHowChartSeriesSource() { return howChartSeriesSource; } /** Get the field chart series will be generated from (only applies to TimeSeries charts) (see {@link StatsManager#T_USER}, {@link StatsManager#T_EVENT}, {@link StatsManager#T_RESOURCE}, {@link StatsManager#T_RESOURCE_ACTION}, {@link StatsManager#T_DATE}, {@link StatsManager#T_LASTDATE}, {@link StatsManager#T_TOTAL}). */ public void setHowChartSeriesSource(String howChartSeriesSource) { this.howChartSeriesSource = howChartSeriesSource; } /** Set the date grouping type for time series chart (only applies to TimeSeries charts) (see {@link StatsManager#CHARTTIMESERIES_DAY}, {@link StatsManager#CHARTTIMESERIES_WEEKDAY}, {@link StatsManager#CHARTTIMESERIES_MONTH}, {@link StatsManager#CHARTTIMESERIES_YEAR}). */ public void setHowChartSeriesPeriod(String howChartSeriesPeriod) { this.howChartSeriesPeriod = howChartSeriesPeriod; } /** Get the date grouping type for time series chart (only applies to TimeSeries charts) (see {@link StatsManager#CHARTTIMESERIES_DAY}, {@link StatsManager#CHARTTIMESERIES_WEEKDAY}, {@link StatsManager#CHARTTIMESERIES_MONTH}, {@link StatsManager#CHARTTIMESERIES_YEAR}). */ public String getHowChartSeriesPeriod() { return howChartSeriesPeriod; } private List<String> fixedHowTotalsBy(List<String> list) { List<String> fixedList = new ArrayList<String>(); if(list == null || list.isEmpty()) { // set defaults if none specified if(getWhat().equals(ReportManager.WHAT_RESOURCES)){ fixedList = StatsManager.TOTALSBY_RESOURCE_DEFAULT; }else{ fixedList = StatsManager.TOTALSBY_EVENT_DEFAULT; } }else{ // remove columns that shouldn't be selected for(String t : list) { if(t.equals(StatsManager.T_EVENT) || t.equals(StatsManager.T_TOOL)) { if(!getWhat().equals(ReportManager.WHAT_RESOURCES)){ fixedList.add(t); } }else if(t.equals(StatsManager.T_RESOURCE) || t.equals(StatsManager.T_RESOURCE_ACTION)) { if(getWhat().equals(ReportManager.WHAT_RESOURCES)){ fixedList.add(t); } }else if(t.equals(StatsManager.T_USER)) { if(!getWhat().equals(ReportManager.WHAT_VISITS_TOTALS) && !getWhat().equals(ReportManager.WHAT_ACTIVITY_TOTALS)){ fixedList.add(t); } }else if(t.equals(StatsManager.T_VISITS) || t.equals(StatsManager.T_UNIQUEVISITS)) { if(getWhat().equals(ReportManager.WHAT_EVENTS) || getWhat().equals(ReportManager.WHAT_VISITS_TOTALS)){ fixedList.add(t); } }else{ fixedList.add(t); } } } return fixedList; } private String fixedHowSortBy(String sort) { if(sort != null) { if(sort.equals(StatsManager.T_EVENT) || sort.equals(StatsManager.T_TOOL)) { if(!getWhat().equals(ReportManager.WHAT_RESOURCES)){ return sort; } }else if(sort.equals(StatsManager.T_RESOURCE) || sort.equals(StatsManager.T_RESOURCE_ACTION)) { if(getWhat().equals(ReportManager.WHAT_RESOURCES)){ return sort; } }else if(sort.equals(StatsManager.T_USER)) { if(!getWhat().equals(ReportManager.WHAT_VISITS_TOTALS) && !getWhat().equals(ReportManager.WHAT_ACTIVITY_TOTALS)){ return sort; } }else if(sort.equals(StatsManager.T_VISITS) || sort.equals(StatsManager.T_UNIQUEVISITS)) { if(getWhat().equals(ReportManager.WHAT_EVENTS) || getWhat().equals(ReportManager.WHAT_VISITS_TOTALS)){ return sort; } }else if(!StatsManager.T_TOTAL.equals(sort) && !getHowTotalsBy().contains(sort)) { return ReportManager.HOW_SORT_DEFAULT; }else{ return sort; } }else{ return ReportManager.HOW_SORT_DEFAULT; } return sort; } // ------------------------------------------------------------ // Output functions (String, XML) // ------------------------------------------------------------ @Override public String toString() { StringBuilder str = new StringBuilder(); str.append('{'); str.append(memberToString("siteId", siteId, true)); str.append(memberToString("what", what, true)); if(ReportManager.WHAT_EVENTS.equals(what)) { str.append(memberToString("whatEventSelType", whatEventSelType, true)); if(ReportManager.WHAT_EVENTS_BYTOOL.equals(whatEventSelType)) { str.append(memberToString("whatToolIds", whatToolIds, true)); }else{ str.append(memberToString("whatEventIds", whatEventIds, true)); } }else if(ReportManager.WHAT_RESOURCES.equals(what)) { if(whatResourceAction != null) { str.append(memberToString("whatResourceAction", whatResourceAction, true)); } if(whatResourceIds != null) { str.append(memberToString("whatResourceIds", whatResourceIds, true)); } } str.append(memberToString("when", when, true)); if(ReportManager.WHEN_CUSTOM.equals(when)) { str.append(memberToString("whenFrom", whenFrom.toString(), true)); str.append(memberToString("whenTo", whenTo.toString(), true)); } str.append(memberToString("who", who, true)); if(ReportManager.WHO_GROUPS.equals(who)) { str.append(memberToString("whoGroupId", whoGroupId, true)); } if(ReportManager.WHO_ROLE.equals(who)) { str.append(memberToString("whoRoleId", whoRoleId, true)); } if(ReportManager.WHO_CUSTOM.equals(who)) { str.append(memberToString("whoUserIds", whoUserIds, true)); } str.append(memberToString("howTotalsBy", getHowTotalsBy(), true)); str.append(memberToString("howSortBy", getHowSortBy() +", asc? "+getHowSortAscending(), true)); str.append(memberToString("howMaxResults", String.valueOf(getHowMaxResults()), true)); String presentation = getHowPresentationMode(); boolean hasChart = ReportManager.HOW_PRESENTATION_CHART.equals(presentation) || ReportManager.HOW_PRESENTATION_BOTH.equals(presentation); str.append(memberToString("howPresentationMode", getHowPresentationMode(), hasChart)); if(hasChart) { str.append(memberToString("howChartType", getHowChartType(), true)); str.append(memberToString("howChartSource", getHowChartSource(), true)); if(StatsManager.CHARTTYPE_BAR.equals(getHowChartType()) || StatsManager.CHARTTYPE_LINE.equals(getHowChartType()) || StatsManager.CHARTTYPE_PIE.equals(getHowChartType())) { str.append(memberToString("howChartCategorySource", getHowChartCategorySource(), false)); } if(StatsManager.CHARTTYPE_TIMESERIES.equals(getHowChartType()) || StatsManager.CHARTTYPE_TIMESERIESBAR.equals(getHowChartType())) { str.append(memberToString("howChartSeriesSource", getHowChartSeriesSource(), true)); str.append(memberToString("howChartSeriesPeriod", getHowChartSeriesPeriod(), false)); } } str.append('}'); return str.toString(); } private String memberToString(String member, String value, boolean hasMore) { StringBuilder str = new StringBuilder(); str.append(member); str.append(": "); str.append(value); if(hasMore) { str.append(", "); } return str.toString(); } private String memberToString(String member, List<String> values, boolean hasMore) { StringBuilder str = new StringBuilder(); str.append(member); str.append(": "); str.append('['); boolean first = true; if(values != null) { for(String value : values) { if(!first) { str.append(", "); } str.append(value); first = false; } } str.append(']'); if(hasMore) { str.append(", "); } return str.toString(); } }