Clover Coverage Report - Pebble 2.5-SNAPSHOT
Coverage timestamp: Sat Jun 12 2010 09:39:29 EST
../../../../img/srcFileCovDistChart3.png 44% of files have more coverage
31   143   12   4,43
6   66   0,39   7
7     1,71  
1    
This report was generated with an evaluation server license. Purchase Clover or configure your license.
 
  EmailSubscriptionList       Line # 48 31 0% 12 33 25% 0.25
 
  (30)
 
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.index;
33   
34    import org.apache.commons.logging.Log;
35    import org.apache.commons.logging.LogFactory;
36    import net.sourceforge.pebble.domain.Blog;
37    import net.sourceforge.pebble.domain.Tag;
38    import net.sourceforge.pebble.domain.BlogEntry;
39   
40    import java.util.*;
41    import java.io.*;
42   
43    /**
44    * Represents the tag index for a blog.
45    *
46    * @author Simon Brown
47    */
 
48    public class EmailSubscriptionList {
49   
50    private static final Log log = LogFactory.getLog(EmailSubscriptionList.class);
51   
52    private Blog blog;
53   
54    /** the list of e-mail addresses */
55    private List<String> emailAddresses = new LinkedList<String>();
56   
 
57  1334 toggle public EmailSubscriptionList(Blog blog) {
58  1334 this.blog = blog;
59   
60  1334 readIndex();
61    }
62   
63    /**
64    * Clears the index.
65    */
 
66  0 toggle public void clear() {
67  0 emailAddresses = new LinkedList<String>();
68  0 writeIndex();
69    }
70   
71    /**
72    * Adds an e-mail address.
73    *
74    * @param emailAddress an e-mail address
75    */
 
76  0 toggle public synchronized void addEmailAddress(String emailAddress) {
77  0 if (!emailAddresses.contains(emailAddress)) {
78  0 emailAddresses.add(emailAddress);
79  0 writeIndex();
80    }
81    }
82   
83    /**
84    * Removes an e-mail address.
85    *
86    * @param emailAddress an e-mail address
87    */
 
88  0 toggle public synchronized void removeEmailAddress(String emailAddress) {
89  0 emailAddresses.remove(emailAddress);
90  0 writeIndex();
91    }
92   
93    /**
94    * Helper method to load the index.
95    */
 
96  1334 toggle private void readIndex() {
97  1334 File indexFile = new File(blog.getIndexesDirectory(), "email-subscriptions.index");
98  1334 if (indexFile.exists()) {
99  0 try {
100  0 BufferedReader reader = new BufferedReader(new FileReader(indexFile));
101  0 String emailAddress = reader.readLine();
102  0 while (emailAddress != null) {
103  0 emailAddresses.add(emailAddress);
104  0 emailAddress = reader.readLine();
105    }
106   
107  0 reader.close();
108    } catch (Exception e) {
109  0 log.error("Error while reading index", e);
110    }
111    }
112    }
113   
114    /**
115    * Helper method to write out the index to disk.
116    */
 
117  0 toggle private void writeIndex() {
118  0 try {
119  0 File indexFile = new File(blog.getIndexesDirectory(), "email-subscriptions.index");
120  0 BufferedWriter writer = new BufferedWriter(new FileWriter(indexFile));
121   
122  0 for (String emailAddress : emailAddresses) {
123  0 writer.write(emailAddress);
124  0 writer.newLine();
125    }
126   
127  0 writer.flush();
128  0 writer.close();
129    } catch (Exception e) {
130  0 log.error("Error while writing index", e);
131    }
132    }
133   
134    /**
135    * Gets the list of e-mail addresses.
136    */
 
137  14 toggle public List<String> getEmailAddresses() {
138  14 List list = new ArrayList<String>(emailAddresses);
139  14 Collections.sort(list);
140  14 return list;
141    }
142   
143    }