1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package fr.paris.lutece.plugins.searchstats.web;
35
36 import fr.paris.lutece.plugins.searchstats.business.QueryRecord;
37 import fr.paris.lutece.plugins.searchstats.business.QueryRecordHome;
38 import fr.paris.lutece.plugins.searchstats.business.RecordCount;
39 import fr.paris.lutece.plugins.searchstats.business.RecordFilter;
40 import fr.paris.lutece.plugins.searchstats.service.TermRecord;
41 import fr.paris.lutece.plugins.searchstats.service.TermRecordService;
42 import fr.paris.lutece.portal.service.i18n.I18nService;
43 import fr.paris.lutece.portal.service.template.AppTemplateService;
44 import fr.paris.lutece.portal.web.admin.PluginAdminPageJspBean;
45 import fr.paris.lutece.portal.web.util.LocalizedPaginator;
46 import fr.paris.lutece.util.html.HtmlTemplate;
47 import fr.paris.lutece.util.html.Paginator;
48
49 import java.text.SimpleDateFormat;
50
51 import java.util.ArrayList;
52 import java.util.Calendar;
53 import java.util.GregorianCalendar;
54 import java.util.HashMap;
55 import java.util.List;
56
57 import javax.servlet.http.HttpServletRequest;
58
59
60
61
62
63 public class SearchStatsJspBean extends PluginAdminPageJspBean
64 {
65
66
67
68
69 public static final String RIGHT_MANAGE_SEARCH_STATS = "SEARCH_STATS_MANAGEMENT";
70
71
72 private static final String TEMPLATE_MANAGE_SEARCH_STATS = "admin/plugins/searchstats/manage_searchstats.html";
73
74
75 private static final String MARK_DATES = "records_list";
76 private static final String MARK_QUERIES = "queries_list";
77 private static final String MARK_TERMS = "terms_list";
78 private static final String MARK_NO_RESULT_STATE = "no_result_state";
79 private static final String MARK_DISPLAY_DETAILS = "display_details";
80 private static final String MARK_DETAIL_DATE = "detail_date";
81 private static final String MARK_PAGINATOR = "paginator";
82 private static final String MARK_NB_ITEMS_PER_PAGE = "nb_items_per_page";
83
84
85 private static final String PARAMETER_YEAR = "year";
86 private static final String PARAMETER_MONTH = "month";
87 private static final String PARAMETER_DAY = "day";
88 private static final String PARAMETER_NO_RESULT = "no_result";
89 private static final String PARAMETER_ACTION = "action";
90 private static final String ACTION_VIEW = "view";
91 private static final String ACTION_REFRESH = "refresh";
92 private static final String PARAMETER_PAGE_INDEX_DATES = "page_index_dates";
93 private static final int DEFAULT_ITEMS_PER_PAGE = 20;
94 private static final String PROPERTY_FORMAT_YEAR = "searchstats.format.year";
95 private static final String PROPERTY_FORMAT_MONTH = "searchstats.format.month";
96 private static final String PROPERTY_FORMAT_DAY = "searchstats.format.day";
97 private int _nItemPerPageDates = 0;
98 private String _strPageIndexDates;
99 private boolean _bShowOnlyNoResultQueries;
100
101 public String manageSearchStats( HttpServletRequest request )
102 {
103 String strYear = request.getParameter( PARAMETER_YEAR );
104 String strMonth = request.getParameter( PARAMETER_MONTH );
105 String strDay = request.getParameter( PARAMETER_DAY );
106 String strAction = request.getParameter( PARAMETER_ACTION );
107 String strNoResultQueries = request.getParameter( PARAMETER_NO_RESULT );
108
109 RecordFilterchstats/business/RecordFilter.html#RecordFilter">RecordFilter filter = new RecordFilter( );
110
111 boolean bDisplayDetails = ( strAction != null ) && ( strAction.equals( ACTION_VIEW ) );
112
113 if ( strYear != null )
114 {
115 filter.setYear( Integer.parseInt( strYear ) );
116 }
117
118 if ( strMonth != null )
119 {
120 filter.setMonth( Integer.parseInt( strMonth ) );
121 }
122
123 if ( strDay != null )
124 {
125 filter.setDay( Integer.parseInt( strDay ) );
126 }
127
128 if ( ( strAction != null ) && strAction.equals( ACTION_REFRESH ) )
129 {
130 _bShowOnlyNoResultQueries = ( strNoResultQueries != null ) ? true : false;
131 }
132
133 filter.setNoResults( _bShowOnlyNoResultQueries );
134
135 List<RecordCount> listDates = QueryRecordHome.findRecordsDatesList( getPlugin( ), _bShowOnlyNoResultQueries );
136 List<QueryRecord> listQueries;
137
138 if ( ( strAction != null ) && strAction.equals( ACTION_VIEW ) )
139 {
140 listQueries = QueryRecordHome.findQueryRecordsListByCriteria( getPlugin( ), filter );
141 }
142 else
143 {
144 listQueries = new ArrayList<QueryRecord>( );
145 }
146
147 List<TermRecord> listTopTerms = TermRecordService.getTopTerms( listQueries );
148 String strDetailLabel = getDetailDateLabel( strYear, strMonth, strDay );
149
150 _nItemPerPageDates = Paginator.getItemsPerPage( request, Paginator.PARAMETER_ITEMS_PER_PAGE,
151 _nItemPerPageDates, DEFAULT_ITEMS_PER_PAGE );
152 _strPageIndexDates = Paginator.getPageIndex( request, PARAMETER_PAGE_INDEX_DATES, _strPageIndexDates );
153
154 LocalizedPaginator paginatorDates = new LocalizedPaginator( listDates, _nItemPerPageDates, getHomeUrl( request ),
155 PARAMETER_PAGE_INDEX_DATES, _strPageIndexDates , getLocale() );
156
157 HashMap model = new HashMap( );
158 model.put( MARK_DATES, paginatorDates.getPageItems( ) );
159 model.put( MARK_PAGINATOR, paginatorDates );
160 model.put( MARK_NB_ITEMS_PER_PAGE, "" + _nItemPerPageDates );
161 model.put( MARK_DISPLAY_DETAILS, bDisplayDetails );
162 model.put( MARK_DETAIL_DATE, strDetailLabel );
163 model.put( MARK_QUERIES, listQueries );
164 model.put( MARK_TERMS, listTopTerms );
165 model.put( MARK_NO_RESULT_STATE, _bShowOnlyNoResultQueries ? "checked=\"on\"" : "" );
166
167 HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_MANAGE_SEARCH_STATS, getLocale( ), model );
168
169 return getAdminPage( template.getHtml( ) );
170 }
171
172 private String getDetailDateLabel( String strYear, String strMonth, String strDay )
173 {
174 String strDateLabel = "";
175
176 Calendar c = new GregorianCalendar( );
177
178 if ( strYear != null )
179 {
180 String strPattern;
181 c.set( Calendar.YEAR, Integer.parseInt( strYear ) );
182
183 if ( strMonth != null )
184 {
185 c.set( Calendar.MONTH, Integer.parseInt( strMonth ) - 1 );
186
187 if ( strDay != null )
188 {
189 c.set( Calendar.DAY_OF_MONTH, Integer.parseInt( strDay ) );
190 strPattern = I18nService.getLocalizedString( PROPERTY_FORMAT_DAY, getLocale( ) );
191 }
192 else
193 {
194 strPattern = I18nService.getLocalizedString( PROPERTY_FORMAT_MONTH, getLocale( ) );
195 }
196 }
197 else
198 {
199 strPattern = I18nService.getLocalizedString( PROPERTY_FORMAT_YEAR, getLocale( ) );
200 }
201
202 strDateLabel = getFormattedDate( c, strPattern );
203 }
204
205 return strDateLabel;
206 }
207
208 private String getFormattedDate( Calendar c, String strFormatPattern )
209 {
210 SimpleDateFormat formatter = new SimpleDateFormat( strFormatPattern, getLocale( ) );
211
212 return formatter.format( c.getTime( ) );
213 }
214 }