Clover Coverage Report - Pebble 2.5-SNAPSHOT
Coverage timestamp: Sat Jun 12 2010 09:39:29 EST
../../../../../img/srcFileCovDistChart0.png 48% of files have more coverage
46   135   11   11,5
12   77   0,24   4
4     2,75  
1    
This report was generated with an evaluation server license. Purchase Clover or configure your license.
 
  ViewCountriesAction       Line # 54 46 0% 11 62 0% 0.0
 
No Tests
 
1    /*
2    * Copyright (c) 2003-2006, Simon Brown
3    * All rights reserved.
4    *
5    * Redistribution and use in source and binary forms, with or without
6    * modification, are permitted provided that the following conditions are met:
7    *
8    * - Redistributions of source code must retain the above copyright
9    * notice, this list of conditions and the following disclaimer.
10    *
11    * - Redistributions in binary form must reproduce the above copyright
12    * notice, this list of conditions and the following disclaimer in
13    * the documentation and/or other materials provided with the
14    * distribution.
15    *
16    * - Neither the name of Pebble nor the names of its contributors may
17    * be used to endorse or promote products derived from this software
18    * without specific prior written permission.
19    *
20    * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21    * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22    * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23    * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
24    * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25    * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26    * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27    * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28    * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29    * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30    * POSSIBILITY OF SUCH DAMAGE.
31    */
32    package net.sourceforge.pebble.web.action;
33   
34    import com.maxmind.geoip.LookupService;
35    import net.sourceforge.pebble.logging.Log;
36    import net.sourceforge.pebble.logging.LogEntry;
37    import net.sourceforge.pebble.logging.Request;
38    import net.sourceforge.pebble.web.view.View;
39    import net.sourceforge.pebble.web.view.impl.CountriesView;
40    import net.sourceforge.pebble.domain.Blog;
41    import net.sourceforge.pebble.Constants;
42   
43    import javax.servlet.ServletException;
44    import javax.servlet.http.HttpServletRequest;
45    import javax.servlet.http.HttpServletResponse;
46    import java.io.IOException;
47    import java.util.*;
48   
49    /**
50    * Gets the visitor country information for the specified time period.
51    *
52    * @author Simon Brown
53    */
 
54    public class ViewCountriesAction extends AbstractLogAction {
55   
56    /**
57    * Peforms the processing associated with this action.
58    *
59    * @param request the HttpServletRequest instance
60    * @param response the HttpServletResponse instance
61    * @return the name of the next view
62    */
 
63  0 toggle public View process(HttpServletRequest request, HttpServletResponse response) throws ServletException {
64  0 Blog blog = (Blog)getModel().get(Constants.BLOG_KEY);
65  0 Log log = getLog(request, response);
66   
67  0 Set<String> countries = new TreeSet<String>(new Comparator<String>() {
 
68  0 toggle public int compare(String s1, String s2) {
69  0 return s1 != null ? s1.compareToIgnoreCase(s2) : -1;
70    }
71    });
72  0 Map<String,Integer> consolidatedCountries = new HashMap<String,Integer>();
73  0 Map<String,Integer> countriesForNewsFeeds = new HashMap<String,Integer>();
74  0 Map<String,Integer> countriesForPageViews = new HashMap<String,Integer>();
75  0 Map<String,Integer> countriesForFileDownloads = new HashMap<String,Integer>();
76   
77  0 LookupService lookupService = null;
78   
79  0 try {
80  0 String filename = getClass().getResource("/geo-ip.dat").toExternalForm().substring(5);
81  0 lookupService = new LookupService(filename, LookupService.GEOIP_MEMORY_CACHE);
82   
83  0 for (LogEntry logEntry : log.getLogEntries()) {
84  0 String country = lookupService.getCountry(logEntry.getHost()).getName();
85  0 countries.add(country);
86  0 register(country, countriesForNewsFeeds);
87  0 register(country, countriesForPageViews);
88  0 register(country, countriesForFileDownloads);
89  0 register(country, consolidatedCountries);
90   
91  0 Request req = new Request(logEntry.getRequestUri(), blog);
92  0 if (req.isNewsFeed()) {
93  0 increment(country, countriesForNewsFeeds);
94  0 increment(country, consolidatedCountries);
95  0 } else if (req.isPageView()) {
96  0 increment(country, countriesForPageViews);
97  0 increment(country, consolidatedCountries);
98  0 } else if (req.isFileDownload()) {
99  0 increment(country, countriesForFileDownloads);
100  0 increment(country, consolidatedCountries);
101    }
102    }
103    } catch (IOException ioe) {
104  0 throw new ServletException(ioe);
105    } finally {
106  0 if (lookupService != null) {
107  0 lookupService.close();
108    }
109    }
110   
111  0 getModel().put("logAction", "viewCountries");
112  0 getModel().put("countries", countries);
113  0 getModel().put("consolidatedCountries", consolidatedCountries);
114  0 getModel().put("countriesForNewsFeeds", countriesForNewsFeeds);
115  0 getModel().put("countriesForPageViews", countriesForPageViews);
116  0 getModel().put("countriesForFileDownloads", countriesForFileDownloads);
117   
118  0 return new CountriesView();
119    }
120   
 
121  0 toggle private void register(String country, Map<String,Integer> map) {
122  0 Integer count = map.get(country);
123  0 if (count == null) {
124  0 count = 0;
125    }
126  0 map.put(country, count);
127    }
128   
 
129  0 toggle private void increment(String country, Map<String,Integer> map) {
130  0 Integer count = map.get(country);
131  0 count = count + 1;
132  0 map.put(country, count);
133    }
134   
135    }