KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > openedit > blog > Notify


1 /*
2  * Created on Jan 14, 2006
3  */

4 package com.openedit.blog;
5
6 import java.io.File JavaDoc;
7 import java.io.FileWriter JavaDoc;
8 import java.io.Serializable JavaDoc;
9 import java.io.Writer JavaDoc;
10 import java.util.Date JavaDoc;
11 import java.util.HashSet JavaDoc;
12 import java.util.Iterator JavaDoc;
13 import java.util.Set JavaDoc;
14
15 import org.apache.commons.logging.Log;
16 import org.apache.commons.logging.LogFactory;
17 import org.openedit.repository.filesystem.StringItem;
18
19 import com.openedit.OpenEditException;
20 import com.openedit.hittracker.HitTracker;
21 import com.openedit.modules.email.Recipient;
22 import com.openedit.modules.email.TemplateWebEmail;
23 import com.openedit.page.Page;
24 import com.openedit.page.manage.PageManager;
25 import com.openedit.users.Group;
26 import com.openedit.users.User;
27 import com.openedit.users.UserManager;
28 import com.openedit.util.FileUtils;
29
30 public class Notify implements Serializable JavaDoc
31 {
32     private static final Log log = LogFactory.getLog(Notify.class);
33     transient protected UserManager fieldUserManager;
34     transient protected PageManager fieldPageManager;
35     
36     protected File JavaDoc fieldRootDirectory;
37     protected String JavaDoc[] fieldGroupNames;
38     protected boolean fieldKeepRunning;
39     
40     public UserManager getUserManager()
41     {
42         return fieldUserManager;
43     }
44
45     public void setUserManager(UserManager inUserManager)
46     {
47         fieldUserManager = inUserManager;
48     }
49     
50     public void sendEmail( TemplateWebEmail inEmail, Writer JavaDoc inLog ) throws OpenEditException
51     {
52         fieldKeepRunning = true;
53         FileWriter JavaDoc out = null;
54         int grandTotal = 0;
55         try
56         {
57             Set JavaDoc duplicate = new HashSet JavaDoc();
58             inLog.write("<pre>");
59             File JavaDoc logFile = getLogFile(inEmail.getMailTemplatePath());
60             if ( logFile.exists() )
61             {
62                 out = new FileWriter JavaDoc(logFile,true);
63             }
64             else
65             {
66                 out = new FileWriter JavaDoc( logFile);
67             }
68             out.write("Starting Sending " + new Date JavaDoc() + "\n");
69                         
70             for (int i = 0; i < getGroupNames().length && isKeepRunning(); i++)
71             {
72                 Group group = getUserManager().getGroup(getGroupNames()[i]);
73                 inLog.write("Status, "+ group.getName() + " group starting to send\n" );
74                 out.write("Status, "+ group.getName() + " group starting to send\n" );
75                 int countSent = 0;
76                 int countSkipped = 0;
77                 int logCount = 0;
78                 HitTracker users = getUserManager().getUsersInGroup(group);
79                 for (Iterator JavaDoc iter = users.iterator(); iter.hasNext();)
80                 {
81                     User user = (User) iter.next();
82                     String JavaDoc email = user.getEmail();
83                     if (email.length() > 4 && !duplicate.contains(email.toLowerCase()))
84                     {
85                         Recipient rec = new Recipient();
86                         rec.setEmailAddress(user.getEmail());
87                         rec.setLastName(user.getLastName());
88                         rec.setFirstName(user.getFirstName());
89                         try
90                         {
91                             inEmail.send(rec);
92                             out.write("Sent, email: " + rec.getEmailAddress() + ", username:" + user.getUserName() + "\n");
93                             duplicate.add( email.toLowerCase());
94                             countSent++;
95                         }
96                         catch (Exception JavaDoc ex)
97                         {
98                             inLog.write("Error, email: " + rec.getEmailAddress() + ", username:" + user.getUserName() + ", error: " + ex.toString() + "\n" );
99                             out.write("Error, email: " + rec.getEmailAddress() + ", username:" + user.getUserName() + ", error: " + ex.toString() + "\n" );
100                             log.error( ex);
101                         }
102                     }
103                     else
104                     {
105                         inLog.write("Skipping, " + email + " looks invalid or a duplicate\n");
106                         out.write("Skipping, " + email + " looks invalid or a duplicate\n");
107     
108                         countSkipped++;
109                     }
110                     logCount++;
111                     grandTotal++;
112                     if ( logCount == 100 )
113                     {
114                         inLog.write("Status, Processed 100 more emails and " + grandTotal + " total\n");
115                         logCount = 0;
116                     }
117                     inLog.flush();
118                     out.flush();
119                 }
120                 inLog.write("Status, completed. sent:" + countSent + " skipped: " + countSkipped + "\n" );
121                 out.write("Status, completed. sent:" + countSent + " skipped: " + countSkipped + "\n" );
122                 inLog.write("</pre>");
123                 inLog.flush();
124                 setKeepRunning(false);
125             }
126         }
127         catch ( Exception JavaDoc ex)
128         {
129             setKeepRunning(false);
130             if ( ex instanceof OpenEditException)
131             {
132                 throw (OpenEditException)ex;
133             }
134             throw new OpenEditException(ex);
135         }
136         finally
137         {
138             FileUtils.safeClose(out);
139         }
140     }
141
142     public void fixLinks(Page inMailTemplatePage, String JavaDoc base) throws OpenEditException
143     {
144         String JavaDoc content = inMailTemplatePage.getContent();
145         //String base = inUrl.buildRoot() + inUrl.relativeHomePrefix();
146

147         content = content.replaceAll("src=\\\"/","src=\"" + base + "/");
148         content = content.replaceAll("src=/","src=" + base + "/");
149         content = content.replaceAll("href=\\\"/","href=\"" + base + "/");
150         content = content.replaceAll("href=/","href=" + base + "/");
151         content = content.replaceAll("url\\('/","url('" + base + "/");
152         content = content.replaceAll("\\$home",base );
153         
154         StringItem item = new StringItem(inMailTemplatePage.getPath(), content, inMailTemplatePage.getCharacterEncoding());
155         inMailTemplatePage.setContentItem(item);
156         
157         getPageManager().putPage(inMailTemplatePage);
158         
159     }
160
161     protected File JavaDoc getLogFile(String JavaDoc inPath)
162     {
163         File JavaDoc f = new File JavaDoc( getRootDirectory(), inPath + ".log");
164         return f;
165     }
166
167     public boolean hasLog(String JavaDoc inPath)
168     {
169         File JavaDoc f = getLogFile(inPath);
170         return f.exists();
171     }
172     public String JavaDoc[] getGroupNames()
173     {
174         return fieldGroupNames;
175     }
176
177     public void setGroupNames(String JavaDoc[] inGroupNames)
178     {
179         fieldGroupNames = inGroupNames;
180     }
181
182     public void cancel()
183     {
184         fieldKeepRunning = false;
185     }
186
187     public boolean isKeepRunning()
188     {
189         return fieldKeepRunning;
190     }
191
192     public void setKeepRunning(boolean inKeepRunning)
193     {
194         fieldKeepRunning = inKeepRunning;
195     }
196
197     public File JavaDoc getRootDirectory()
198     {
199         return fieldRootDirectory;
200     }
201
202     public void setRootDirectory(File JavaDoc inRootDirectory)
203     {
204         fieldRootDirectory = inRootDirectory;
205     }
206
207     public PageManager getPageManager()
208     {
209         return fieldPageManager;
210     }
211
212     public void setPageManager(PageManager inPageManager)
213     {
214         fieldPageManager = inPageManager;
215     }
216     
217 }
Popular Tags