KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > dotmarketing > velocity > VelocityServlet


1 package com.dotmarketing.velocity;
2
3 import java.io.File JavaDoc;
4 import java.io.IOException JavaDoc;
5 import java.io.PrintWriter JavaDoc;
6 import java.net.URL JavaDoc;
7 import java.util.ArrayList JavaDoc;
8 import java.util.Iterator JavaDoc;
9 import java.util.List JavaDoc;
10 import java.util.Locale JavaDoc;
11
12 import javax.servlet.ServletConfig JavaDoc;
13 import javax.servlet.ServletContext JavaDoc;
14 import javax.servlet.ServletException JavaDoc;
15 import javax.servlet.http.Cookie JavaDoc;
16 import javax.servlet.http.HttpServlet JavaDoc;
17 import javax.servlet.http.HttpServletRequest JavaDoc;
18 import javax.servlet.http.HttpServletResponse JavaDoc;
19 import javax.servlet.http.HttpSession JavaDoc;
20
21 import org.apache.commons.logging.LogFactory;
22 import org.apache.struts.Globals;
23 import org.apache.velocity.Template;
24 import org.apache.velocity.app.Velocity;
25 import org.apache.velocity.context.Context;
26 import org.apache.velocity.exception.MethodInvocationException;
27 import org.apache.velocity.exception.ParseErrorException;
28 import org.apache.velocity.exception.ResourceNotFoundException;
29 import org.apache.velocity.tools.view.ToolboxManager;
30 import org.apache.velocity.tools.view.context.ChainedContext;
31 import org.apache.velocity.tools.view.servlet.ServletToolboxManager;
32
33 import com.dotmarketing.beans.Host;
34 import com.dotmarketing.beans.Identifier;
35 import com.dotmarketing.cache.IdentifierCache;
36 import com.dotmarketing.cache.LanguageCache;
37 import com.dotmarketing.cache.PermissionCache;
38 import com.dotmarketing.cms.factories.PublicCompanyFactory;
39 import com.dotmarketing.db.DotHibernate;
40 import com.dotmarketing.factories.ClickstreamFactory;
41 import com.dotmarketing.factories.HostFactory;
42 import com.dotmarketing.factories.IdentifierFactory;
43 import com.dotmarketing.factories.InodeFactory;
44 import com.dotmarketing.factories.PermissionFactory;
45 import com.dotmarketing.factories.RoleFactory;
46 import com.dotmarketing.filters.ClickstreamFilter;
47 import com.dotmarketing.portlets.containers.model.Container;
48 import com.dotmarketing.portlets.contentlet.model.Contentlet;
49 import com.dotmarketing.portlets.htmlpages.model.HTMLPage;
50 import com.dotmarketing.portlets.languagesmanager.factories.LanguageFactory;
51 import com.dotmarketing.portlets.languagesmanager.model.Language;
52 import com.dotmarketing.portlets.structure.model.Structure;
53 import com.dotmarketing.portlets.workflows.factories.WorkflowsFactory;
54 import com.dotmarketing.util.Config;
55 import com.dotmarketing.util.GUIDGenerator;
56 import com.dotmarketing.util.Logger;
57 import com.dotmarketing.util.PortletURLUtil;
58 import com.dotmarketing.util.UtilMethods;
59 import com.liferay.portal.ejb.RoleLocalManagerUtil;
60 import com.liferay.portal.language.LanguageUtil;
61 import com.liferay.portal.model.Company;
62 import com.liferay.portal.model.Role;
63 import com.liferay.portal.model.Skin;
64 import com.liferay.portal.util.WebKeys;
65 import com.liferay.util.ObjectValuePair;
66 import com.liferay.util.servlet.SessionMessages;
67
68 public abstract class VelocityServlet extends HttpServlet JavaDoc {
69     private static final long serialVersionUID = 1L;
70
71     private static PortletURLUtil portletURLUtil = new PortletURLUtil();
72
73     private static UtilMethods utilMethods = new UtilMethods();
74
75     private String JavaDoc CHARSET = null;
76
77     private String JavaDoc VELOCITY_HTMLPAGE_EXTENSION = null;
78
79     private List JavaDoc languages = null;
80
81     private ToolboxManager toolboxManager = null;
82
83     private ServletContext JavaDoc myContext;
84
85     private static GUIDGenerator guidGenerator = null;
86
87     protected void service(HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) throws ServletException JavaDoc, IOException JavaDoc {
88         String JavaDoc language = String.valueOf(LanguageFactory.getDefaultLanguage().getId());
89         HttpSession JavaDoc session = request.getSession();
90         response.setContentType(CHARSET);
91
92         PrintWriter JavaDoc out = response.getWriter();
93
94         boolean ADMIN_MODE = (session.getAttribute(com.dotmarketing.util.WebKeys.ADMIN_MODE_SESSION) != null);
95         boolean PREVIEW_MODE = ((session.getAttribute(com.dotmarketing.util.WebKeys.PREVIEW_MODE_SESSION) != null) && ADMIN_MODE);
96         boolean EDIT_MODE = ((session.getAttribute(com.dotmarketing.util.WebKeys.EDIT_MODE_SESSION) != null) && ADMIN_MODE);
97
98         // set default page language
99
if (session.isNew() || !UtilMethods.isSet((String JavaDoc) session.getAttribute(com.dotmarketing.util.WebKeys.HTMLPAGE_LANGUAGE))) {
100             LogFactory.getLog(VelocityServlet.class).debug("session new: " + session.isNew());
101             Language l = LanguageCache.getLanguageById(language);
102             Locale JavaDoc locale = new Locale JavaDoc(l.getLanguageCode() + "_" + l.getCountryCode().toUpperCase());
103             session.setAttribute(Globals.LOCALE_KEY, locale);
104             session.setAttribute(com.dotmarketing.util.WebKeys.HTMLPAGE_LANGUAGE, language);
105         }
106
107         // update page language
108
if (UtilMethods.isSet(request.getParameter(com.dotmarketing.util.WebKeys.HTMLPAGE_LANGUAGE))) {
109             language = request.getParameter(com.dotmarketing.util.WebKeys.HTMLPAGE_LANGUAGE);
110             Language l = LanguageFactory.getLanguage(language);
111             Locale JavaDoc locale = new Locale JavaDoc(l.getLanguageCode() + "_" + l.getCountryCode());
112             session.setAttribute(Globals.LOCALE_KEY, locale);
113             session.setAttribute(com.dotmarketing.util.WebKeys.HTMLPAGE_LANGUAGE, language);
114         }
115
116         // get out of session
117
language = (String JavaDoc) session.getAttribute(com.dotmarketing.util.WebKeys.HTMLPAGE_LANGUAGE);
118
119         try {
120             if (PREVIEW_MODE && ADMIN_MODE) {
121                 // preview mode has the left hand menu and edit buttons on the
122
// working page
123

124                 LogFactory.getLog(VelocityServlet.class).debug("VELOCITY SERVLET I'M ON PREVIEW MODE!!!");
125
126                 doPreviewMode(request, response);
127             } else if (EDIT_MODE && ADMIN_MODE) {
128                 // edit mode has the left hand menu and edit buttons on the
129
// working page
130

131                 LogFactory.getLog(VelocityServlet.class).debug("VELOCITY SERVLET I'M ON EDIT MODE!!!");
132
133                 doEditMode(request, response);
134             } else if (ADMIN_MODE) {
135                 // admin mode has the left hand menu and shows the live page in
136
// the frame
137
LogFactory.getLog(VelocityServlet.class).debug("VELOCITY SERVLET I'M ON ADMIN MODE!!!");
138
139                 doAdminMode(request, response);
140             } else {
141                 // live mode has no frame and shows the live page
142
LogFactory.getLog(VelocityServlet.class).debug("VELOCITY SERVLET I'M ON LIVE MODE!!!");
143
144                 doLiveMode(request, response);
145             }
146         } catch (ResourceNotFoundException rnfe) {
147
148             response.sendError(404);
149
150         } catch (ParseErrorException pee) {
151
152             out.println("Template Parse Exception");
153             out.println("On template:" + request.getRequestURI() + request.getQueryString());
154             Logger.error(this, pee.toString(), pee);
155         } catch (MethodInvocationException mie) {
156             // something invoked in the template
157
// threw an exception
158
out.println("something invoked in the template threw an exception");
159             out.println("Error on template:" + request.getRequestURI() + request.getQueryString());
160             Logger.error(this, mie.toString(), mie);
161         } catch (Exception JavaDoc e) {
162             out.println("Error on template:" + request.getRequestURI() + request.getQueryString());
163             Logger.error(this, e.toString(), e);
164         }
165         // catchall
166
DotHibernate.commitTransaction();
167     }
168
169     public void init(ServletConfig JavaDoc config) throws ServletException JavaDoc {
170         /*
171          * Read velocity config frm system-ext.properties. We have to set a
172          * couple of properties to get velocity to use our resource loader.
173          */

174         try {
175             URL JavaDoc url = Thread.currentThread().getContextClassLoader().getResource("system-ext.properties");
176             Velocity.init(url.getPath());
177
178         } catch (Exception JavaDoc s) {
179             Logger.warn(this, s.toString(), s);
180         }
181
182         // build the dirs
183
new File JavaDoc(config.getServletContext().getRealPath("/WEB-INF/velocity/working")).mkdirs();
184         new File JavaDoc(config.getServletContext().getRealPath("/WEB-INF/velocity/live")).mkdir();
185
186         languages = LanguageFactory.getLanguages();
187
188         // build the velocity toolbox
189
myContext = config.getServletContext();
190         toolboxManager = ServletToolboxManager.getInstance(config.getServletContext(), "/WEB-INF/toolbox.xml");
191
192         Config.initializeConfig();
193         CHARSET = Config.getStringProperty("CHARSET");
194         VELOCITY_HTMLPAGE_EXTENSION = Config.getStringProperty("VELOCITY_HTMLPAGE_EXTENSION");
195
196     }
197
198     protected void doAdminMode(HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) throws Exception JavaDoc {
199         // LIVE MODE - LIVE PAGE
200
PrintWriter JavaDoc out = response.getWriter();
201         Context JavaDoc context = createContext(request, response);
202
203         String JavaDoc uri = request.getRequestURI();
204         uri = UtilMethods.cleanURI(uri);
205
206         Host host = null;
207         String JavaDoc pageHostId = request.getParameter("host_id");
208         if (pageHostId != null) {
209             host = HostFactory.getHost(pageHostId);
210             HostFactory.setHostInRequest(request, host);
211         } else {
212             host = HostFactory.getCurrentHost(request);
213         }
214
215         Identifier id = IdentifierFactory.getIdentifierByURI(uri, host);
216         request.setAttribute("idInode", String.valueOf(id.getInode()));
217
218         HTMLPage htmlPage = (HTMLPage) IdentifierFactory.getWorkingChildOfClass(id, HTMLPage.class);
219
220         getContext(context, htmlPage, 0, id.getURI(), request, true, false, host);
221
222         Template template = null;
223
224         if (request.getParameter("leftMenu") != null) {
225             template = Velocity.getTemplate("/preview_left_menu.vl");
226         } else if (request.getParameter("mainFrame") != null) {
227             template = Velocity.getTemplate("/live/" + id.getInode() + "." + VELOCITY_HTMLPAGE_EXTENSION);
228         } else {
229             template = Velocity.getTemplate("/preview_mode.vl");
230         }
231
232         LogFactory.getLog(VelocityServlet.class).debug("Got the template!!!!" + id.getInode());
233
234         template.merge(context, out);
235     }
236
237     protected void doLiveMode(HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) throws Exception JavaDoc {
238
239         String JavaDoc uri = request.getRequestURI();
240         uri = UtilMethods.cleanURI(uri);
241
242         Host host = HostFactory.getCurrentHost(request);
243
244         // Map with all identifier inodes for a given uri.
245
long idInode = IdentifierCache.getPathFromIdCache(uri, host).getInode();
246
247         // if we still have nothing.
248
if (idInode == 0) {
249             response.sendError(404);
250             return;
251         }
252
253         request.setAttribute("idInode", String.valueOf(idInode));
254         LogFactory.getLog(this.getClass()).debug("VELOCITY HTML INODE=" + idInode);
255
256         
257         /* Set long lived cookie regardless of who this is */
258         String JavaDoc _dotCMSID = UtilMethods.getCookieValue(request.getCookies(), com.dotmarketing.util.WebKeys.LONG_LIVED_DOTCMS_ID_COOKIE);
259
260         if (!UtilMethods.isSet(_dotCMSID)) {
261             /* create unique generator engine */
262             if (guidGenerator == null) {
263                 try {
264                     guidGenerator = new GUIDGenerator();
265                 } catch (Exception JavaDoc e) {
266
267                     e.printStackTrace();
268                 }
269             }
270             // set id cookie
271
_dotCMSID = guidGenerator.getUUID();
272             Cookie JavaDoc idCookie = new Cookie JavaDoc(com.dotmarketing.util.WebKeys.LONG_LIVED_DOTCMS_ID_COOKIE, _dotCMSID);
273             idCookie.setPath("/");
274             idCookie.setMaxAge(60 * 60 * 24 * 356 * 5);
275             response.addCookie(idCookie);
276
277         }
278
279         com.liferay.portal.model.User user = null;
280
281         try {
282             // user = com.liferay.portal.util.PortalUtil.getUser(request);
283
user = (com.liferay.portal.model.User) request.getSession().getAttribute(com.dotmarketing.util.WebKeys.CMS_USER);
284         } catch (Exception JavaDoc nsue) {
285             Logger.warn(this, "Exception trying to getUser: " + nsue.getMessage(), nsue);
286         }
287
288         boolean signedIn = false;
289
290         if (user != null) {
291             signedIn = true;
292         }
293
294         List JavaDoc permissions = PermissionCache.getRoleNamesWithReadPermissionFromCache(uri, host);
295
296         LogFactory.getLog(VelocityServlet.class).debug("Page Permissions for URI=" + uri);
297
298         // Check if the page is visible by a CMS Anonymous role
299
if (!permissions.contains(Config.getStringProperty("CMS_ANONYMOUS_ROLE"))) {
300             // this page is protected. not anonymous access
301

302             
303             
304             /************************************************
305              * If we need to redirect someone somewhere
306              * to login before seeing a page, we
307              * need to edit the /portal/401.jsp page to
308              * sendRedirect the user to the proper login
309              * page. We are not using the REDIRECT_TO_LOGIN variable
310              * in the config any longer.
311              ****************************************/

312             if (!signedIn) {
313
314                 request.getSession().setAttribute(WebKeys.LAST_PATH, new ObjectValuePair(uri, request.getParameterMap()));
315                 request.getSession().setAttribute(com.dotmarketing.util.WebKeys.REDIRECT_AFTER_LOGIN, uri);
316
317                 LogFactory.getLog(VelocityServlet.class).debug("VELOCITY CHECKING PERMISSION: Page doesn't have anonymous access" + uri);
318
319                 
320                 LogFactory.getLog(VelocityServlet.class).debug("401 URI = " + uri);
321
322                 LogFactory.getLog(VelocityServlet.class).debug("Unauthorized URI = " + uri);
323                 response.sendError(401, "The requested page/file is unauthorized");
324                 return;
325                 
326
327             } else {
328                 // user is logged in need to check user permissions
329
LogFactory.getLog(VelocityServlet.class).debug("VELOCITY CHECKING PERMISSION: User signed in");
330
331                 // check user permissions on this asset
332
if (!PermissionFactory.userHasReadPermission(user, permissions)) {
333                     // the user doesn't have permissions to see this page
334
// go to unauthorized page
335
LogFactory.getLog(VelocityServlet.class).warn("VELOCITY CHECKING PERMISSION: Page doesn't have any access for this user");
336                     response.sendError(403, "The requested page/file is forbidden");
337                     return;
338                 }
339             }
340         }
341
342         PrintWriter JavaDoc out = response.getWriter();
343
344         Context JavaDoc context = createContext(request, response);
345
346         LogFactory.getLog(VelocityServlet.class).debug("Got the template!!!!" + idInode);
347         Velocity.getTemplate("/live/" + idInode + "." + VELOCITY_HTMLPAGE_EXTENSION).merge(context, out);
348         out.close();
349
350         Logger.debug(VelocityServlet.class, "Into the ClickstreamFilter");
351         // Ensure that clickstream is recorded only once per request.
352
if (request.getAttribute(ClickstreamFilter.FILTER_APPLIED) == null) {
353             request.setAttribute(ClickstreamFilter.FILTER_APPLIED, Boolean.TRUE);
354             ClickstreamFactory.addRequest((HttpServletRequest JavaDoc) request, ((HttpServletResponse JavaDoc) response));
355         }
356
357     }
358
359     protected void doPreviewMode(HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) throws Exception JavaDoc {
360
361         PrintWriter JavaDoc out = response.getWriter();
362         String JavaDoc uri = request.getRequestURI();
363         uri = UtilMethods.cleanURI(uri);
364
365         Host host = null;
366         String JavaDoc pageHostId = request.getParameter("host_id");
367         if (pageHostId != null) {
368             host = HostFactory.getHost(pageHostId);
369             HostFactory.setHostInRequest(request, host);
370         } else {
371             host = HostFactory.getCurrentHost(request);
372         }
373
374         // Getting the user to check the permissions
375
com.liferay.portal.model.User user = null;
376         try {
377             user = com.liferay.portal.util.PortalUtil.getUser(request);
378         } catch (Exception JavaDoc nsue) {
379             Logger.warn(this, "Exception trying getUser: " + nsue.getMessage(), nsue);
380         }
381
382         // Getting the identifier from the uri
383
Identifier id = IdentifierFactory.getIdentifierByURI(uri, host);
384         request.setAttribute("idInode", String.valueOf(id.getInode()));
385         LogFactory.getLog(VelocityServlet.class).debug("VELOCITY HTML INODE=" + id.getInode());
386
387         Template template = null;
388
389         // creates the context where to place the variables
390
Context JavaDoc context = createContext(request, response);
391
392         HTMLPage htmlPage = (HTMLPage) IdentifierFactory.getWorkingChildOfClass(id, HTMLPage.class);
393
394         // to check user has permission to write on this page
395
boolean hasWritePermOverHTMLPage = PermissionFactory.doesUserHavePermission(htmlPage, com.dotmarketing.util.Config
396                 .getIntProperty("PERMISSION_WRITE"), user);
397         context.put("EDIT_HTMLPAGE_PERMISSON", new Boolean JavaDoc(hasWritePermOverHTMLPage));
398
399         com.dotmarketing.portlets.templates.model.Template cmsTemplate = com.dotmarketing.portlets.htmlpages.factories.HTMLPageFactory
400                 .getHTMLPageTemplate(htmlPage, true);
401         Identifier templateIdentifier = IdentifierFactory.getParentIdentifier(cmsTemplate);
402
403         LogFactory.getLog(VelocityServlet.class).debug("VELOCITY TEMPLATE INODE=" + cmsTemplate.getInode());
404
405         getContext(context, htmlPage, cmsTemplate.getInode(), id.getURI(), request, true, false, host);
406         context.put("previewPage", "2");
407         context.put("livePage", "0");
408         // get the containers for the page and stick them in context
409
List JavaDoc identifiers = InodeFactory.getChildrenClass(cmsTemplate, Identifier.class);
410         Iterator JavaDoc i = identifiers.iterator();
411
412         while (i.hasNext()) {
413             Identifier ident = (Identifier) i.next();
414             Container c = (Container) IdentifierFactory.getWorkingChildOfClass(ident, Container.class);
415             context.put(String.valueOf("container" + ident.getInode()), "/working/" + ident.getInode() + "."
416                     + Config.getStringProperty("VELOCITY_CONTAINER_EXTENSION"));
417
418             // to check user has permission to write this container
419
boolean hasWritePermOverContainer = PermissionFactory.doesUserHavePermission(c, com.dotmarketing.util.Config
420                     .getIntProperty("PERMISSION_WRITE"), user);
421             context.put("EDIT_CONTAINER_PERMISSION" + ident.getInode(), new Boolean JavaDoc(hasWritePermOverContainer));
422
423             // to check user has permission to write this container
424
Structure st = (Structure) InodeFactory.getParentOfClass(c, Structure.class);
425             boolean hasWritePermOverTheStructure = PermissionFactory.doesUserHavePermission(st, com.dotmarketing.util.Config
426                     .getIntProperty("PERMISSION_WRITE"), user);
427             context.put("ADD_CONTENT_PERMISSION" + ident.getInode(), new Boolean JavaDoc(hasWritePermOverTheStructure));
428
429             Logger.debug(VelocityServlet.class, String.valueOf("container" + ident.getInode()) + "=/working/" + ident.getInode() + "."
430                     + Config.getStringProperty("VELOCITY_CONTAINER_EXTENSION"));
431
432             String JavaDoc sort = (c.getSortContentletsBy() == null) ? "tree_order" : c.getSortContentletsBy();
433
434             boolean staticContainer = !UtilMethods.isSet(c.getLuceneQuery());
435
436             List JavaDoc contentlets = null;
437
438             // get contentlets only for main frame
439
if (request.getParameter("mainFrame") != null) {
440                 if (staticContainer) {
441                     LogFactory.getLog(VelocityServlet.class).debug("Static Container!!!!");
442
443                     LogFactory.getLog(VelocityServlet.class).debug("html=" + htmlPage.getInode() + " container=" + c.getInode());
444
445                     // The container doesn't have categories
446
Identifier idenHtmlPage = IdentifierCache.getIdentifierByInodeFromCache(htmlPage);
447                     Identifier idenContainer = IdentifierCache.getIdentifierByInodeFromCache(c);
448                     contentlets = com.dotmarketing.portlets.contentlet.factories.ContentletFactory.getContentletsByOrderAndParents(idenHtmlPage
449                             .getInode(), idenContainer.getInode(), sort, true, (String JavaDoc) request.getSession().getAttribute(
450                             com.dotmarketing.util.WebKeys.HTMLPAGE_LANGUAGE));
451                     LogFactory.getLog(VelocityServlet.class).debug(
452                             "Getting contentlets for language="
453                                     + (String JavaDoc) request.getSession().getAttribute(com.dotmarketing.util.WebKeys.HTMLPAGE_LANGUAGE) + " contentlets ="
454                                     + contentlets.size());
455
456                 }
457
458                 ArrayList JavaDoc<String JavaDoc> contentletList = new ArrayList JavaDoc<String JavaDoc>();
459
460                 if (contentlets != null) {
461                     Iterator JavaDoc iter = contentlets.iterator();
462                     int count = 0;
463
464                     while (iter.hasNext() && (count < c.getMaxContentlets())) {
465                         count++;
466
467                         Contentlet contentlet = (Contentlet) iter.next();
468                         Identifier contentletIdentifier = IdentifierCache.getIdentifierByInodeFromCache(contentlet);
469
470                         boolean hasWritePermOverContentlet = PermissionFactory.doesUserHavePermission(contentlet, com.dotmarketing.util.Config
471                                 .getIntProperty("PERMISSION_WRITE"), user);
472
473                         context.put("EDIT_CONTENT_PERMISSION" + contentletIdentifier.getInode(), new Boolean JavaDoc(hasWritePermOverContentlet));
474
475                         contentletList.add("/working/" + contentletIdentifier.getInode() + "_" + contentlet.getLanguageId() + "."
476                                 + Config.getStringProperty("VELOCITY_CONTENT_EXTENSION"));
477
478                         Logger.debug(this, "Adding contentlet=/working/" + contentletIdentifier.getInode() + "_" + contentlet.getLanguageId() + "."
479                                 + Config.getStringProperty("VELOCITY_CONTENT_EXTENSION"));
480                     }
481                 }
482
483                 // sets contentletlist with all the files to load per
484
// container
485
context.put("contentletList" + ident.getInode(), contentletList);
486                 context.put("totalSize" + ident.getInode(), new Integer JavaDoc(contentletList.size()));
487             }
488         }
489
490         LogFactory.getLog(VelocityServlet.class).debug(
491                 "Before finding template: /working/" + templateIdentifier.getInode() + "." + Config.getStringProperty("VELOCITY_TEMPLATE_EXTENSION"));
492
493         LogFactory.getLog(VelocityServlet.class).debug("Velocity directory:" + Velocity.getProperty(Velocity.FILE_RESOURCE_LOADER_PATH));
494
495         if (request.getParameter("leftMenu") != null) {
496             /*
497              * try to get the messages from the session
498              */

499
500             List JavaDoc<String JavaDoc> list = new ArrayList JavaDoc<String JavaDoc>();
501             if (SessionMessages.contains(request, "message")) {
502                 list.add((String JavaDoc) SessionMessages.get(request, "message"));
503                 SessionMessages.clear(request);
504             }
505             if (SessionMessages.contains(request, "custommessage")) {
506                 list.add((String JavaDoc) SessionMessages.get(request, "custommessage"));
507                 SessionMessages.clear(request);
508             }
509
510             if (list.size() > 0) {
511                 ArrayList JavaDoc<String JavaDoc> mymessages = new ArrayList JavaDoc<String JavaDoc>();
512                 Iterator JavaDoc it = list.iterator();
513
514                 while (it.hasNext()) {
515                     try {
516                         String JavaDoc message = (String JavaDoc) it.next();
517                         Company comp = PublicCompanyFactory.getDefaultCompany();
518                         mymessages.add(LanguageUtil.get(comp.getCompanyId(), user.getLocale(), message));
519                     } catch (Exception JavaDoc e) {
520                     }
521                 }
522                 context.put("vmessages", mymessages);
523             }
524
525             template = Velocity.getTemplate("/preview_left_menu.vl");
526         } else if (request.getParameter("mainFrame") != null) {
527             template = Velocity.getTemplate("/working/" + templateIdentifier.getInode() + "."
528                     + Config.getStringProperty("VELOCITY_TEMPLATE_EXTENSION"));
529         } else {
530             template = Velocity.getTemplate("/preview_mode.vl");
531         }
532
533         template.merge(context, out);
534     }
535
536     protected void doEditMode(HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) throws Exception JavaDoc {
537
538         PrintWriter JavaDoc out = response.getWriter();
539         String JavaDoc uri = request.getRequestURI();
540         uri = UtilMethods.cleanURI(uri);
541
542         Host host = null;
543         String JavaDoc pageHostId = request.getParameter("host_id");
544         if (pageHostId != null) {
545             host = HostFactory.getHost(pageHostId);
546             HostFactory.setHostInRequest(request, host);
547         } else {
548             host = HostFactory.getCurrentHost(request);
549         }
550
551         // Getting the user to check the permissions
552
com.liferay.portal.model.User user = null;
553         try {
554             user = com.liferay.portal.util.PortalUtil.getUser(request);
555         } catch (Exception JavaDoc nsue) {
556             Logger.warn(this, "Exception trying getUser: " + nsue.getMessage(), nsue);
557         }
558
559         // Getting the identifier from the uri
560
Identifier id = IdentifierFactory.getIdentifierByURI(uri, host);
561         request.setAttribute("idInode", String.valueOf(id.getInode()));
562         LogFactory.getLog(VelocityServlet.class).debug("VELOCITY HTML INODE=" + id.getInode());
563
564         Template template = null;
565
566         // creates the context where to place the variables
567
Context JavaDoc context = createContext(request, response);
568
569         HTMLPage htmlPage = (HTMLPage) IdentifierFactory.getWorkingChildOfClass(id, HTMLPage.class);
570
571         // to check user has permission to write on this page
572
boolean hasWritePermOverHTMLPage = PermissionFactory.doesUserHavePermission(htmlPage, com.dotmarketing.util.Config
573                 .getIntProperty("PERMISSION_WRITE"), user);
574         context.put("EDIT_HTMLPAGE_PERMISSON", new Boolean JavaDoc(hasWritePermOverHTMLPage));
575
576         com.dotmarketing.portlets.templates.model.Template cmsTemplate = com.dotmarketing.portlets.htmlpages.factories.HTMLPageFactory
577                 .getHTMLPageTemplate(htmlPage, true);
578         Identifier templateIdentifier = IdentifierFactory.getParentIdentifier(cmsTemplate);
579
580         LogFactory.getLog(VelocityServlet.class).debug("VELOCITY TEMPLATE INODE=" + cmsTemplate.getInode());
581
582         getContext(context, htmlPage, cmsTemplate.getInode(), id.getURI(), request, true, true, host);
583         // added to show tabs
584
context.put("previewPage", "1");
585         // get the containers for the page and stick them in context
586
List JavaDoc identifiers = InodeFactory.getChildrenClass(cmsTemplate, Identifier.class);
587         Iterator JavaDoc i = identifiers.iterator();
588
589         while (i.hasNext()) {
590             Identifier ident = (Identifier) i.next();
591             Container c = (Container) IdentifierFactory.getWorkingChildOfClass(ident, Container.class);
592             context.put(String.valueOf("container" + ident.getInode()), "/working/" + ident.getInode() + "."
593                     + Config.getStringProperty("VELOCITY_CONTAINER_EXTENSION"));
594
595             // to check user has permission to write this container
596
boolean hasWritePermOverContainer = PermissionFactory.doesUserHavePermission(c, com.dotmarketing.util.Config
597                     .getIntProperty("PERMISSION_WRITE"), user);
598             context.put("EDIT_CONTAINER_PERMISSION" + ident.getInode(), new Boolean JavaDoc(hasWritePermOverContainer));
599
600             // to check user has permission to write this container
601
Structure st = (Structure) InodeFactory.getParentOfClass(c, Structure.class);
602             boolean hasWritePermOverTheStructure = PermissionFactory.doesUserHavePermission(st, com.dotmarketing.util.Config
603                     .getIntProperty("PERMISSION_WRITE"), user);
604             context.put("ADD_CONTENT_PERMISSION" + ident.getInode(), new Boolean JavaDoc(hasWritePermOverTheStructure));
605
606             Logger.debug(VelocityServlet.class, String.valueOf("container" + ident.getInode()) + "=/working/" + ident.getInode() + "."
607                     + Config.getStringProperty("VELOCITY_CONTAINER_EXTENSION"));
608
609             String JavaDoc sort = (c.getSortContentletsBy() == null) ? "tree_order" : c.getSortContentletsBy();
610
611             List JavaDoc contentlets = null;
612
613             boolean staticContainer = !UtilMethods.isSet(c.getLuceneQuery());
614
615             // get contentlets only for main frame
616
if (request.getParameter("mainFrame") != null) {
617                 if (staticContainer) {
618                     LogFactory.getLog(VelocityServlet.class).debug("Static Container!!!!");
619
620                     LogFactory.getLog(VelocityServlet.class).debug("html=" + htmlPage.getInode() + " container=" + c.getInode());
621
622                     // The container doesn't have categories
623
Identifier idenHtmlPage = IdentifierCache.getIdentifierByInodeFromCache(htmlPage);
624                     Identifier idenContainer = IdentifierCache.getIdentifierByInodeFromCache(c);
625                     contentlets = com.dotmarketing.portlets.contentlet.factories.ContentletFactory.getContentletsByOrderAndParents(idenHtmlPage
626                             .getInode(), idenContainer.getInode(), sort, true, (String JavaDoc) request.getSession().getAttribute(
627                             com.dotmarketing.util.WebKeys.HTMLPAGE_LANGUAGE));
628                     LogFactory.getLog(VelocityServlet.class).debug(
629                             "Getting contentlets for language="
630                                     + (String JavaDoc) request.getSession().getAttribute(com.dotmarketing.util.WebKeys.HTMLPAGE_LANGUAGE) + " contentlets ="
631                                     + contentlets.size());
632
633                 }
634
635                 ArrayList JavaDoc<String JavaDoc> contentletList = new ArrayList JavaDoc<String JavaDoc>();
636
637                 if (contentlets != null) {
638                     Iterator JavaDoc iter = contentlets.iterator();
639                     int count = 0;
640
641                     while (iter.hasNext() && (count < c.getMaxContentlets())) {
642                         count++;
643
644                         Contentlet contentlet = (Contentlet) iter.next();
645                         Identifier contentletIdentifier = IdentifierCache.getIdentifierByInodeFromCache(contentlet);
646
647                         boolean hasWritePermOverContentlet = PermissionFactory.doesUserHavePermission(contentlet, com.dotmarketing.util.Config
648                                 .getIntProperty("PERMISSION_WRITE"), user);
649
650                         context.put("EDIT_CONTENT_PERMISSION" + contentletIdentifier.getInode(), new Boolean JavaDoc(hasWritePermOverContentlet));
651
652                         contentletList.add("/working/" + contentletIdentifier.getInode() + "_" + contentlet.getLanguageId() + "."
653                                 + Config.getStringProperty("VELOCITY_CONTENT_EXTENSION"));
654
655                         Logger.debug(this, "Adding contentlet=/working/" + contentletIdentifier.getInode() + "_" + contentlet.getLanguageId() + "."
656                                 + Config.getStringProperty("VELOCITY_CONTENT_EXTENSION"));
657                     }
658                 }
659
660                 // sets contentletlist with all the files to load per
661
// container
662
context.put("contentletList" + ident.getInode(), contentletList);
663                 context.put("totalSize" + ident.getInode(), new Integer JavaDoc(contentletList.size()));
664             }
665         }
666
667         LogFactory.getLog(VelocityServlet.class).debug(
668                 "Before finding template: /working/" + templateIdentifier.getInode() + "." + Config.getStringProperty("VELOCITY_TEMPLATE_EXTENSION"));
669
670         LogFactory.getLog(VelocityServlet.class).debug("Velocity directory:" + Velocity.getProperty(Velocity.FILE_RESOURCE_LOADER_PATH));
671
672         if (request.getParameter("leftMenu") != null) {
673             /*
674              * try to get the messages from the session
675              */

676
677             List JavaDoc<String JavaDoc> list = new ArrayList JavaDoc<String JavaDoc>();
678             if (SessionMessages.contains(request, "message")) {
679                 list.add((String JavaDoc) SessionMessages.get(request, "message"));
680                 SessionMessages.clear(request);
681             }
682             if (SessionMessages.contains(request, "custommessage")) {
683                 list.add((String JavaDoc) SessionMessages.get(request, "custommessage"));
684                 SessionMessages.clear(request);
685             }
686
687             if (list.size() > 0) {
688                 ArrayList JavaDoc<String JavaDoc> mymessages = new ArrayList JavaDoc<String JavaDoc>();
689                 Iterator JavaDoc it = list.iterator();
690
691                 while (it.hasNext()) {
692                     try {
693                         String JavaDoc message = (String JavaDoc) it.next();
694                         Company comp = PublicCompanyFactory.getDefaultCompany();
695                         mymessages.add(LanguageUtil.get(comp.getCompanyId(), user.getLocale(), message));
696                     } catch (Exception JavaDoc e) {
697                     }
698                 }
699                 context.put("vmessages", mymessages);
700             }
701
702             template = Velocity.getTemplate("/preview_left_menu.vl");
703         } else if (request.getParameter("mainFrame") != null) {
704             template = Velocity.getTemplate("/working/" + templateIdentifier.getInode() + "."
705                     + Config.getStringProperty("VELOCITY_TEMPLATE_EXTENSION"));
706         } else {
707             template = Velocity.getTemplate("/preview_mode.vl");
708         }
709
710         template.merge(context, out);
711     }
712
713     public void getContext(Context JavaDoc context, HTMLPage htmlPage, long cmsTemplateInode, String JavaDoc idURI, HttpServletRequest JavaDoc request, boolean ADMIN_MODE,
714             boolean EDIT_MODE, Host host) {
715
716         // stick some useful variables in the context
717
if (htmlPage != null) {
718             context.put("HTMLPAGE_INODE", String.valueOf(htmlPage.getInode()));
719             context.put("HTMLPAGE_TITLE", htmlPage.getTitle());
720             context.put("HTMLPAGE_META", htmlPage.getMetadata());
721             context.put("HTMLPAGE_SECURE", String.valueOf(htmlPage.isHttpsRequired()));
722             context.put("HTMLPAGE_REDIRECT", htmlPage.getRedirect());
723             context.put("pageTitle", htmlPage.getTitle());
724             try {
725                 context.put("htmlPageInode", new Long JavaDoc(htmlPage.getInode()));
726
727                 // for browsing the tree
728
String JavaDoc view = java.net.URLEncoder.encode("(working=" + com.dotmarketing.db.DbConnectionFactory.getDBTrue() + " and deleted="
729                         + com.dotmarketing.db.DbConnectionFactory.getDBFalse() + "and language_id = "
730                         + (String JavaDoc) request.getSession().getAttribute(com.dotmarketing.util.WebKeys.HTMLPAGE_LANGUAGE) + ")", "UTF-8");
731                 context.put("view", view);
732             } catch (Exception JavaDoc e) {
733                 Logger.warn(this, e.toString(), e);
734             }
735         }
736
737         context.put("HTMLPAGE_SERVER_NAME", request.getServerName());
738         context.put("VTLSERVLET_URI", idURI);
739         if (request.getQueryString() != null && request.getQueryString().length() > 0) {
740             context.put("queryString", request.getQueryString());
741         } else {
742             context.put("queryString", "");
743         }
744         context.put("TEMPLATE_INODE", String.valueOf(cmsTemplateInode));
745         context.put("UtilMethods", utilMethods);
746         context.put("PortletURLUtil", portletURLUtil);
747         context.put("mainFrame", request.getParameter("mainFrame"));
748         context.put("previewFrame", request.getParameter("previewFrame"));
749
750         if (EDIT_MODE) {
751             // gets user id from request for mod user
752
com.liferay.portal.model.User user = null;
753
754             try {
755                 user = com.liferay.portal.util.PortalUtil.getUser(request);
756                 Skin skin = user.getSkin();
757                 context.put("USER_SKIN", skin.getSkinId());
758             } catch (Exception JavaDoc nsue) {
759                 Logger.warn(this, "Exception trying yo getUser: " + nsue.getMessage(), nsue);
760             }
761
762             // to check user has permission to publish this page
763
boolean permission = PermissionFactory.doesUserHavePermission(htmlPage,
764                     com.dotmarketing.util.Config.getIntProperty("PERMISSION_PUBLISH"), user);
765             context.put("permission", new Boolean JavaDoc(permission));
766
767             // Check if the user is a CMS Administrator
768
boolean adminUser = false;
769             try {
770                 Company company = null;
771                 company = com.dotmarketing.cms.factories.PublicCompanyFactory.getDefaultCompany();
772
773                 String JavaDoc adminRoleId = "";
774                 try {
775                     Role adminRole = RoleLocalManagerUtil.getRoleByName(company.getCompanyId(), Config.getStringProperty("CMS_ADMINISTRATOR_ROLE"));
776                     adminRoleId = adminRole.getRoleId();
777                 } catch (Exception JavaDoc e) {
778                 }
779
780                 Role[] userRoles = (Role[]) RoleFactory.getAllRolesForUser(user.getUserId()).toArray(new Role[0]);
781                 for (int i = 0; i < userRoles.length; i++) {
782                     Role userRole = (Role) userRoles[i];
783                     if (userRole.getRoleId().equals(adminRoleId)) {
784                         adminUser = true;
785                     }
786                 }
787             } catch (Exception JavaDoc e) {
788             }
789             context.put("cmsAdminUser", new Boolean JavaDoc(adminUser));
790
791         }
792
793         // gets pageChannel for this path
794
String JavaDoc pageChannel = UtilMethods.getPageChannel(idURI);
795         context.put("pageChannel", pageChannel);
796         context.put("EDIT_MODE", new Boolean JavaDoc(EDIT_MODE));
797         context.put("ADMIN_MODE", new Boolean JavaDoc(ADMIN_MODE));
798
799         // for publish button on admin control
800
// I HAVE TO FIX THIS!!!!! FOR THE NEW ONE
801
context.put("TEMPLATE_LIVE_CONTENT", new Boolean JavaDoc(false));
802         context.put("CONTAINER_LIVE_CONTENT", new Boolean JavaDoc(false));
803         context.put("CONTENTLET_LIVE_CONTENT", new Boolean JavaDoc(false));
804
805         // If we are on preview mode and seeing the live page
806
String JavaDoc livePage = (EDIT_MODE && ADMIN_MODE) ? "0" : "1";
807
808         LogFactory.getLog(VelocityServlet.class).debug("livePage=" + livePage);
809
810         context.put("livePage", livePage);
811
812         context.put("language", (String JavaDoc) request.getSession().getAttribute(com.dotmarketing.util.WebKeys.HTMLPAGE_LANGUAGE));
813
814         if (ADMIN_MODE) {
815
816             // gets user id from request for mod user
817
com.liferay.portal.model.User user = null;
818
819             try {
820                 user = com.liferay.portal.util.PortalUtil.getUser(request);
821                 Skin skin = user.getSkin();
822                 context.put("USER_SKIN", skin.getSkinId());
823             } catch (Exception JavaDoc nsue) {
824                 Logger.warn(this, "Exception trying yo getUser: " + nsue.getMessage(), nsue);
825             }
826
827             HttpSession JavaDoc session = request.getSession();
828             context.put("directorURL", session.getAttribute(com.dotmarketing.util.WebKeys.DIRECTOR_URL));
829             context.put("viewFoldersURL", session.getAttribute(com.dotmarketing.util.WebKeys.VIEW_FOLDERS_URL));
830             context.put("previewPageURL", session.getAttribute(com.dotmarketing.util.WebKeys.PREVIEW_PAGE_URL));
831             context.put("viewContentsURL", session.getAttribute(com.dotmarketing.util.WebKeys.VIEW_CONTENTS_URL));
832             context.put("viewBrowserURL", session.getAttribute(com.dotmarketing.util.WebKeys.VIEW_BROWSER_URL));
833             
834             java.util.List JavaDoc workflowTasksList = WorkflowsFactory.getOpenedWorkflowTasksAssociatedWithAsset(htmlPage, user);
835             context.put("workflowTasksList", workflowTasksList);
836
837         }
838
839         context.put("host", host);
840
841     }
842
843     private Context JavaDoc createContext(HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) {
844         ChainedContext context = new ChainedContext((Context JavaDoc) null, request, response, myContext);
845
846         LogFactory.getLog(VelocityServlet.class).debug("ChainedContext=" + context);
847         /*
848          * if we have a toolbox manager, get a toolbox from it See
849          * /WEB-INF/toolbox.xml
850          */

851         context.setToolbox(toolboxManager.getToolboxContext(context));
852
853         // Stick some escaped variables
854
context.put("quote", "\"");
855         context.put("pounds", "##");
856         context.put("return", "\n");
857
858         context.put("UtilMethods", utilMethods);
859         context.put("PortletURLUtil", portletURLUtil);
860         // context.put("SERVER_NAME", HostFactory.getCurrentHost(request).getHostname());
861
// put the list of languages on the page
862
context.put("languages", languages);
863         context.put("language", (String JavaDoc) request.getSession().getAttribute(com.dotmarketing.util.WebKeys.HTMLPAGE_LANGUAGE));
864
865         Host host = HostFactory.getCurrentHost(request);
866         context.put("host", host);
867         com.liferay.portal.model.User user = null;
868
869         try {
870             // user = com.liferay.portal.util.PortalUtil.getUser(request);
871
user = (com.liferay.portal.model.User) request.getSession().getAttribute(com.dotmarketing.util.WebKeys.CMS_USER);
872             context.put("user", user);
873         } catch (Exception JavaDoc nsue) {
874             nsue.printStackTrace();
875         }
876
877         _setClientVariablesOnContext(request, context);
878
879         return context;
880
881     }
882
883     // EACH CLIENT MAY HAVE ITS OWN VARIABLES
884
// WE HAVE THE CLASS CLIENT THAT WILL IMPLEMENT THIS METHOD AND WILL BE ON
885
// THE WEB.XML FILE
886
protected abstract void _setClientVariablesOnContext(HttpServletRequest JavaDoc request, ChainedContext context);
887
888 }
Popular Tags