KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > dotmarketing > portlets > htmlpageviews > action > ViewHTMLPageViewsAction


1 package com.dotmarketing.portlets.htmlpageviews.action;
2
3 import java.util.Calendar JavaDoc;
4 import java.util.GregorianCalendar JavaDoc;
5 import java.util.List JavaDoc;
6
7 import javax.portlet.ActionRequest;
8 import javax.portlet.ActionResponse;
9 import javax.portlet.PortletConfig;
10 import javax.portlet.RenderRequest;
11 import javax.portlet.RenderResponse;
12 import javax.portlet.WindowState;
13 import javax.servlet.http.HttpServletRequest JavaDoc;
14 import javax.servlet.http.HttpServletResponse JavaDoc;
15 import javax.servlet.http.HttpSession JavaDoc;
16 import javax.servlet.jsp.PageContext JavaDoc;
17
18 import org.apache.struts.action.ActionForm;
19 import org.apache.struts.action.ActionForward;
20 import org.apache.struts.action.ActionMapping;
21
22 import com.dotmarketing.beans.Host;
23 import com.dotmarketing.beans.Identifier;
24 import com.dotmarketing.beans.UserProxy;
25 import com.dotmarketing.factories.HostFactory;
26 import com.dotmarketing.factories.IdentifierFactory;
27 import com.dotmarketing.factories.InodeFactory;
28 import com.dotmarketing.factories.UserProxyFactory;
29 import com.dotmarketing.portal.struts.DotPortletAction;
30 import com.dotmarketing.portlets.htmlpages.model.HTMLPage;
31 import com.dotmarketing.portlets.htmlpageviews.factories.HTMLPageViewFactory;
32 import com.dotmarketing.portlets.mailinglists.factories.MailingListFactory;
33 import com.dotmarketing.portlets.mailinglists.model.MailingList;
34 import com.dotmarketing.portlets.virtuallinks.factories.VirtualLinkFactory;
35 import com.dotmarketing.portlets.virtuallinks.model.VirtualLink;
36 import com.dotmarketing.util.Logger;
37 import com.dotmarketing.util.UtilMethods;
38 import com.dotmarketing.util.WebKeys;
39 import com.liferay.portal.ejb.UserLocalManagerUtil;
40 import com.liferay.portal.model.User;
41 import com.liferay.portal.struts.ActionException;
42 import com.liferay.portal.util.Constants;
43 import com.liferay.portlet.ActionResponseImpl;
44 import com.liferay.util.servlet.SessionMessages;
45
46 /**
47  * <a HREF="ViewQuestionsAction.java.htm"> <b><i>View Source </i> </b> </a>
48  *
49  * @author Maria Ahues
50  * @version $Revision: 1.5 $
51  *
52  */

53 public class ViewHTMLPageViewsAction extends DotPortletAction {
54
55     /*
56      * @see com.liferay.portal.struts.PortletAction#render(org.apache.struts.action.ActionMapping,
57      * org.apache.struts.action.ActionForm, javax.portlet.PortletConfig,
58      * javax.portlet.RenderRequest, javax.portlet.RenderResponse)
59      */

60     public ActionForward render(ActionMapping mapping, ActionForm form, PortletConfig config, RenderRequest req,
61             RenderResponse res) throws Exception JavaDoc {
62
63         Logger.debug(this, "Running ViewHTMLPagesAction!!!!");
64
65         try {
66             //gets the user
67
User user = _getUser(req);
68
69             if (req.getWindowState().equals(WindowState.NORMAL)) {
70                 return mapping.findForward("portlet.ext.htmlpageviews.view");
71             } else {
72                 //Mailing lists
73
List JavaDoc list = MailingListFactory.getMailingListsByUser(user);
74                 list.add(MailingListFactory.getUnsubscribersMailingList());
75                 req.setAttribute(WebKeys.MAILING_LIST_VIEW, list);
76
77                 /** @see com.dotmarketing.portal.struts.DotPortletAction._viewWebAssets * */
78                 _viewWebAssets(req, user);
79                 return mapping.findForward("portlet.ext.htmlpageviews.view_htmlpage_views");
80             }
81         } catch (Exception JavaDoc e) {
82             req.setAttribute(PageContext.EXCEPTION, e);
83             return mapping.findForward(Constants.COMMON_ERROR);
84         }
85     }
86
87     public void processAction(ActionMapping mapping, ActionForm form, PortletConfig config, ActionRequest req, ActionResponse res)
88             throws Exception JavaDoc {
89
90         //wraps request to get session object
91
ActionResponseImpl resImpl = (ActionResponseImpl) res;
92         HttpServletResponse JavaDoc httpRes = resImpl.getHttpServletResponse();
93
94         _retrieveUsers(req);
95
96         if (Constants.SAVE.equals(req.getParameter(Constants.CMD))) {
97             _saveMailingList(form, req, res);
98         }
99         if (Constants.UPDATE.equals(req.getParameter(Constants.CMD))) {
100             _saveMailingList(form, req, res);
101         }
102         if (Constants.DELETE.equals(req.getParameter(Constants.CMD))) {
103             _removeFromMailingList(form, req, res);
104         }
105         return;
106
107     }
108
109     //Needs to be implemented instead of using parent method because we use
110
// template to search for HTMLPages
111
private void _viewWebAssets(RenderRequest req, User user) throws Exception JavaDoc {
112
113         com.liferay.portlet.RenderRequestImpl reqImpl = (com.liferay.portlet.RenderRequestImpl) req;
114         HttpServletRequest JavaDoc httpReq = reqImpl.getHttpServletRequest();
115         //gets the session object for the messages
116
HttpSession JavaDoc session = httpReq.getSession();
117
118         java.util.Date JavaDoc startDate = null;
119         if (req.getParameter("searchStartDate") != null) {
120             Logger.debug(this, "searchStartDate" + req.getParameter("searchStartDate"));
121             startDate = UtilMethods.htmlToDate(req.getParameter("searchStartDate"));
122         } else {
123             GregorianCalendar JavaDoc gcal = new GregorianCalendar JavaDoc();
124             gcal.set(Calendar.DAY_OF_MONTH, 1);
125             gcal.set(Calendar.HOUR, 0);
126             gcal.set(Calendar.MINUTE, 0);
127             gcal.set(Calendar.SECOND, 0);
128             startDate = gcal.getTime();
129
130         }
131         Logger.debug(this, "startDate" + startDate);
132         req.setAttribute("startDate", startDate);
133
134         java.util.Date JavaDoc endDate = null;
135         if (req.getParameter("searchEndDate") != null) {
136             Logger.debug(this, "searchEndDate" + req.getParameter("searchEndDate"));
137             endDate = UtilMethods.htmlToDate(req.getParameter("searchEndDate"));
138             GregorianCalendar JavaDoc gcal = new GregorianCalendar JavaDoc();
139             gcal.setTime(endDate);
140             gcal.set(Calendar.HOUR,23);
141             gcal.set(Calendar.MINUTE,59);
142             gcal.set(Calendar.SECOND,59);
143             endDate = gcal.getTime();
144         } else {
145             GregorianCalendar JavaDoc gcal = new GregorianCalendar JavaDoc();
146             gcal.add(Calendar.MONTH, 1);
147             gcal.set(Calendar.DAY_OF_MONTH, 1);
148             gcal.set(Calendar.HOUR, 0);
149             gcal.set(Calendar.MINUTE, 0);
150             gcal.set(Calendar.SECOND, 0);
151             endDate = gcal.getTime();
152
153         }
154         Logger.debug(this, "endDate" + endDate);
155         req.setAttribute("endDate", endDate);
156
157         String JavaDoc uri = null;
158         if (req.getParameter("htmlpage") != null) {
159             HTMLPage myHTMLPage = (HTMLPage) InodeFactory.getInode(req.getParameter("htmlpage"), HTMLPage.class);
160             uri = IdentifierFactory.getIdentifierByInode(myHTMLPage).getURI();
161             req.setAttribute("htmlPage", myHTMLPage);
162         } else if (req.getParameter("pageIdentifier") != null) {
163             Identifier id = (Identifier) InodeFactory.getInode(req.getParameter("pageIdentifier"), Identifier.class);
164             uri = id.getURI();
165             HTMLPage myHTMLPage = (HTMLPage) IdentifierFactory.getLiveChildOfClass(id, HTMLPage.class);
166             req.setAttribute("htmlPage", myHTMLPage);
167         }
168         
169         if (req.getParameter("pageURL") != null) {
170             uri = req.getParameter("pageURL");
171             String JavaDoc[] parts = uri.split(":");
172             Host host = null;
173             if (parts.length > 1) {
174                 host = HostFactory.getHostByHostName(parts[0]);
175                 uri = parts[1];
176             } else {
177                 host = HostFactory.getDefaultHost();
178             }
179                         
180             Identifier id = IdentifierFactory.getIdentifierByURI(uri, host);
181             HTMLPage myHTMLPage = (HTMLPage) IdentifierFactory.getLiveChildOfClass(id, HTMLPage.class);
182             req.setAttribute("htmlPage", myHTMLPage);
183             if (id.getInode() == 0) {
184
185                 VirtualLink vl = VirtualLinkFactory.getVirtualLinkByURL(uri);
186                 if (vl.getInode() == 0) {
187
188                     myHTMLPage.setTitle("Page Not Found");
189                     SessionMessages.add(req, "message", "message.htmlpageviews.pagenotfound");
190                 } else {
191                     req.setAttribute(WebKeys.VIRTUAL_LINK_EDIT, vl);
192                 }
193             }
194         }
195
196         try {
197             if (UtilMethods.isSet(uri)) {
198                 int totalPageViews = HTMLPageViewFactory.getTotalHTMLPageViewsBetweenDates(uri, startDate, endDate);
199                 int uniqueVisitors = HTMLPageViewFactory.getUniqueVisitorsBetweenDates(uri, startDate, endDate);
200                 java.util.List JavaDoc totalPageViewsByLanguage = HTMLPageViewFactory.getTotalHTMLPageViewsByLanguageBetweenDates(uri,
201                         startDate, endDate);
202                 java.util.List JavaDoc internalReferers = HTMLPageViewFactory.getTopInternalReferringPages(uri, startDate, endDate);
203                 java.util.List JavaDoc internalOutgoing = HTMLPageViewFactory.getTopInternalOutgoingPages(uri, startDate, endDate);
204
205                 java.util.List JavaDoc externalReferers = HTMLPageViewFactory.getTopExternalReferringPages(uri, startDate, endDate);
206
207                 java.util.List JavaDoc topUsers = HTMLPageViewFactory.getTopUsers(uri, startDate, endDate);
208                 
209                 java.util.List JavaDoc<Long JavaDoc> contentsInodesViews = HTMLPageViewFactory.getContentsInodesViewsBetweenDates(uri, startDate, endDate);
210                 java.util.List JavaDoc<Long JavaDoc> contentsInodesUniqueVisitors = HTMLPageViewFactory.getContentsInodesUniqueVisitorsBetweenDates(uri, startDate, endDate);
211                 
212                 java.util.HashMap JavaDoc<Long JavaDoc, Integer JavaDoc> countContentsInodesViews = _countNumEachLongFromList(contentsInodesViews);
213                 java.util.HashMap JavaDoc<Long JavaDoc, Integer JavaDoc> countContentsInodesUniqueVisitors = _countNumEachLongFromList(contentsInodesUniqueVisitors);
214                 
215                 java.util.HashSet JavaDoc<Long JavaDoc> contentsInodes = new java.util.HashSet JavaDoc<Long JavaDoc>(contentsInodesViews);
216                 contentsInodes.addAll(contentsInodesUniqueVisitors);
217
218                 req.setAttribute("totalPageViews", (new Integer JavaDoc(totalPageViews)));
219                 req.setAttribute("uniqueVisitors", (new Integer JavaDoc(uniqueVisitors)));
220                 req.setAttribute("totalPageViewsByLanguage", totalPageViewsByLanguage);
221                 req.setAttribute("internalReferers", internalReferers);
222                 req.setAttribute("externalReferers", externalReferers);
223                 req.setAttribute("internalOutgoing", internalOutgoing);
224                 req.setAttribute("topUsers", topUsers);
225                 req.setAttribute("uri", uri);
226                 
227                 req.setAttribute("contentsInodes", contentsInodes);
228                 req.setAttribute("countContentsInodesViews", countContentsInodesViews);
229                 req.setAttribute("countContentsInodesUniqueVisitors", countContentsInodesUniqueVisitors);
230             }
231         } catch (Exception JavaDoc e) {
232             Logger.error(this, e.getMessage(), e);
233             throw new ActionException(e.getMessage());
234         }
235         Logger.debug(this, "Done with ViewHTMLPageViewsAction");
236
237     }
238
239     private void _retrieveUsers(ActionRequest req) {
240         User user = _getUser(req);
241         java.util.Date JavaDoc startDate = null;
242         if (req.getParameter("searchStartDate") != null) {
243             Logger.debug(this, "searchStartDate" + req.getParameter("searchStartDate"));
244             startDate = UtilMethods.htmlToDate(req.getParameter("searchStartDate"));
245         } else {
246             GregorianCalendar JavaDoc gcal = new GregorianCalendar JavaDoc();
247             gcal.set(Calendar.DAY_OF_MONTH, 1);
248             gcal.set(Calendar.HOUR, 0);
249             gcal.set(Calendar.MINUTE, 0);
250             gcal.set(Calendar.SECOND, 0);
251             startDate = gcal.getTime();
252
253         }
254         Logger.debug(this, "startDate" + startDate);
255         req.setAttribute("startDate", startDate);
256
257         java.util.Date JavaDoc endDate = null;
258         if (req.getParameter("searchEndDate") != null) {
259             Logger.debug(this, "searchEndDate" + req.getParameter("searchEndDate"));
260             endDate = UtilMethods.htmlToDate(req.getParameter("searchEndDate"));
261         } else {
262             GregorianCalendar JavaDoc gcal = new GregorianCalendar JavaDoc();
263             gcal.add(Calendar.MONTH, 1);
264             gcal.set(Calendar.DAY_OF_MONTH, 1);
265             gcal.set(Calendar.HOUR, 0);
266             gcal.set(Calendar.MINUTE, 0);
267             gcal.set(Calendar.SECOND, 0);
268             endDate = gcal.getTime();
269
270         }
271         Logger.debug(this, "endDate" + endDate);
272         req.setAttribute("endDate", endDate);
273
274         String JavaDoc uri = null;
275         java.util.List JavaDoc users = null;
276
277         if (req.getParameter("virtualLinkInode") != null) {
278             VirtualLink vl = VirtualLinkFactory.getVirtualLink(req.getParameter("virtualLinkInode"));
279             users = HTMLPageViewFactory.getAllUsers(vl.getUrl(), startDate, endDate);
280         }
281
282         else if (req.getParameter("htmlpage") != null) {
283             HTMLPage myHTMLPage = (HTMLPage) InodeFactory.getInode(req.getParameter("htmlpage"), HTMLPage.class);
284             uri = IdentifierFactory.getIdentifierByInode(myHTMLPage).getURI();
285             req.setAttribute("htmlPage", myHTMLPage);
286             users = HTMLPageViewFactory.getAllUsers(uri, startDate, endDate);
287         } else if (req.getParameter("pageIdentifier") != null) {
288             Identifier id = (Identifier) InodeFactory.getInode(req.getParameter("pageIdentifier"), Identifier.class);
289             uri = id.getURI();
290             HTMLPage myHTMLPage = (HTMLPage) IdentifierFactory.getLiveChildOfClass(id, HTMLPage.class);
291             req.setAttribute("htmlPage", myHTMLPage);
292             users = HTMLPageViewFactory.getAllUsers(uri, startDate, endDate);
293
294         }
295
296         req.setAttribute(WebKeys.MAILING_LIST_SUBSCRIBERS, users);
297     }
298
299     //Save add to mailinglist
300
private void _saveMailingList(ActionForm form, ActionRequest req, ActionResponse res) throws Exception JavaDoc {
301
302         Logger.debug(this, "ViewHTMLPageViews: Saving List");
303         User user = _getUser(req);
304         java.util.List JavaDoc users = (List JavaDoc) req.getAttribute(WebKeys.MAILING_LIST_SUBSCRIBERS);
305         String JavaDoc mailingListInode = (req.getParameter("mailingListInode") == null || req.getParameter("mailingListInode")
306                 .equals("")) ? "0" : req.getParameter("mailingListInode");
307         String JavaDoc mailingListTitle = req.getParameter("mailingListTitle");
308         String JavaDoc allowPublicToSubscribe = req.getParameter("allowPublicToSubscribe");
309
310         //Saving mailing list
311
MailingList ml = (MailingList) InodeFactory.getInode(mailingListInode, MailingList.class);
312         String JavaDoc cmd = req.getParameter(com.liferay.portal.util.Constants.CMD);
313         if (com.liferay.portal.util.Constants.SAVE.equals(cmd)) {
314             ml.setTitle(mailingListTitle);
315             if (allowPublicToSubscribe.equals("yes"))
316                 ml.setPublicList(true);
317             else
318                 ml.setPublicList(false);
319             ml.setUserId(user.getUserId());
320         }
321         InodeFactory.saveInode(ml);
322
323         Logger.debug(this, "Saving: " + users.size() + " subscribers.");
324         //Adding subscribers
325
java.util.Iterator JavaDoc userIter = users.iterator();
326         while (userIter.hasNext()) {
327             java.util.HashMap JavaDoc userCounts = (java.util.HashMap JavaDoc) userIter.next();
328             if (userCounts.get("user_id") != null) {
329                 String JavaDoc userId = (String JavaDoc) userCounts.get("user_id");
330                 User webUser = UserLocalManagerUtil.getUserById(userId);
331                 UserProxy s = UserProxyFactory.getUserProxy(webUser);
332                 ml.addChild(s);
333             }
334         }
335
336         ml.setSubscriberCount(InodeFactory.getChildrenClass(ml, UserProxy.class).size());
337         InodeFactory.saveInode(ml);
338
339         if (com.liferay.portal.util.Constants.SAVE.equals(cmd)) {
340             SessionMessages.add(req, "message", "message.mailinglist.save");
341         } else {
342             SessionMessages.add(req, "message", "message.mailinglist.subscribers.added");
343         }
344     }
345
346     private void _removeFromMailingList(ActionForm form, ActionRequest req, ActionResponse res) throws Exception JavaDoc {
347
348         Logger.debug(this, "ViewHTMLPageViews: Removing subscribers From List");
349         java.util.List JavaDoc users = (List JavaDoc) req.getAttribute(WebKeys.MAILING_LIST_SUBSCRIBERS);
350         String JavaDoc mailingListInode = (req.getParameter("mailingListInode") == null || req.getParameter("mailingListInode")
351                 .equals("")) ? "0" : req.getParameter("mailingListInode");
352
353         //Retrieving mailing list
354
MailingList ml = (MailingList) InodeFactory.getInode(mailingListInode, MailingList.class);
355
356         Logger.debug(this, "Removing: " + users.size() + " subscribers. If they are in the list.");
357         //Removing subscribers
358
java.util.Iterator JavaDoc userIter = users.iterator();
359         while (userIter.hasNext()) {
360             java.util.HashMap JavaDoc userCounts = (java.util.HashMap JavaDoc) userIter.next();
361             if (userCounts.get("user_id") != null) {
362                 String JavaDoc userId = (String JavaDoc) userCounts.get("user_id");
363                 User webUser = UserLocalManagerUtil.getUserById(userId);
364                 UserProxy s = UserProxyFactory.getUserProxy(webUser);
365                 if (s.getInode() > 0)
366                     ml.deleteChild(s);
367             }
368         }
369
370         ml.setSubscriberCount(InodeFactory.getChildrenClass(ml, UserProxy.class).size());
371         InodeFactory.saveInode(ml);
372
373         SessionMessages.add(req, "message", "message.mailinglist.subscribers.deleted");
374     }
375
376     private java.util.HashMap JavaDoc<Long JavaDoc, Integer JavaDoc> _countNumEachLongFromList(java.util.List JavaDoc<Long JavaDoc> inodesList) {
377         java.util.HashMap JavaDoc<Long JavaDoc, Integer JavaDoc> result = new java.util.HashMap JavaDoc<Long JavaDoc, Integer JavaDoc>();
378         
379         if (0 < inodesList.size()) {
380             Long JavaDoc lastInode = inodesList.get(0);
381             int count = 1;
382             Long JavaDoc inode;
383             
384             for (int pos = 1; pos < inodesList.size(); ++pos) {
385                 inode = inodesList.get(pos);
386                 if (lastInode.longValue() != inode.longValue()) {
387                     result.put(lastInode, count);
388                     lastInode = inode;
389                     count = 1;
390                 } else {
391                     ++count;
392                 }
393             }
394             
395             result.put(lastInode, count);
396         }
397         
398         return result;
399     }
400 }
Popular Tags