001    /**
002     * Copyright (c) 2000-2013 Liferay, Inc. All rights reserved.
003     *
004     * This library is free software; you can redistribute it and/or modify it under
005     * the terms of the GNU Lesser General Public License as published by the Free
006     * Software Foundation; either version 2.1 of the License, or (at your option)
007     * any later version.
008     *
009     * This library is distributed in the hope that it will be useful, but WITHOUT
010     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
011     * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
012     * details.
013     */
014    
015    package com.liferay.taglib.util;
016    
017    import com.liferay.portal.kernel.servlet.DirectRequestDispatcherFactoryUtil;
018    import com.liferay.portal.kernel.servlet.PipingPageContext;
019    import com.liferay.portal.kernel.servlet.taglib.TagSupport;
020    import com.liferay.portal.kernel.util.HttpUtil;
021    import com.liferay.portal.kernel.util.WebKeys;
022    import com.liferay.portal.model.Layout;
023    import com.liferay.portal.model.LayoutConstants;
024    import com.liferay.portal.model.Portlet;
025    import com.liferay.portal.theme.ThemeDisplay;
026    import com.liferay.taglib.portlet.ActionURLTag;
027    import com.liferay.taglib.portletext.IconBackTag;
028    import com.liferay.taglib.portletext.IconCloseTag;
029    import com.liferay.taglib.portletext.IconConfigurationTag;
030    import com.liferay.taglib.portletext.IconEditDefaultsTag;
031    import com.liferay.taglib.portletext.IconEditGuestTag;
032    import com.liferay.taglib.portletext.IconEditTag;
033    import com.liferay.taglib.portletext.IconHelpTag;
034    import com.liferay.taglib.portletext.IconMaximizeTag;
035    import com.liferay.taglib.portletext.IconMinimizeTag;
036    import com.liferay.taglib.portletext.IconOptionsTag;
037    import com.liferay.taglib.portletext.IconPortletCssTag;
038    import com.liferay.taglib.portletext.IconPortletTag;
039    import com.liferay.taglib.portletext.IconPrintTag;
040    import com.liferay.taglib.portletext.IconRefreshTag;
041    import com.liferay.taglib.portletext.RuntimeTag;
042    import com.liferay.taglib.security.DoAsURLTag;
043    import com.liferay.taglib.security.PermissionsURLTag;
044    import com.liferay.taglib.theme.LayoutIconTag;
045    import com.liferay.taglib.theme.MetaTagsTag;
046    import com.liferay.taglib.theme.WrapPortletTag;
047    import com.liferay.taglib.ui.BreadcrumbTag;
048    import com.liferay.taglib.ui.JournalContentSearchTag;
049    import com.liferay.taglib.ui.LanguageTag;
050    import com.liferay.taglib.ui.MySitesTag;
051    import com.liferay.taglib.ui.PngImageTag;
052    import com.liferay.taglib.ui.SearchTag;
053    import com.liferay.taglib.ui.StagingTag;
054    import com.liferay.taglib.ui.ToggleTag;
055    
056    import java.util.Map;
057    import java.util.Set;
058    
059    import javax.portlet.PortletMode;
060    import javax.portlet.PortletRequest;
061    import javax.portlet.WindowState;
062    
063    import javax.servlet.RequestDispatcher;
064    import javax.servlet.ServletContext;
065    import javax.servlet.http.HttpServletRequest;
066    import javax.servlet.http.HttpServletResponse;
067    import javax.servlet.jsp.PageContext;
068    
069    /**
070     * @author Brian Wing Shun Chan
071     * @author Shuyang Zhou
072     */
073    public class VelocityTaglibImpl implements VelocityTaglib {
074    
075            public VelocityTaglibImpl() {
076            }
077    
078            public VelocityTaglibImpl(
079                    ServletContext servletContext, HttpServletRequest request,
080                    HttpServletResponse response, PageContext pageContext) {
081    
082                    init(servletContext, request, response, pageContext);
083            }
084    
085            @Override
086            public void actionURL(long plid, String portletName, String queryString)
087                    throws Exception {
088    
089                    String windowState = WindowState.NORMAL.toString();
090                    String portletMode = PortletMode.VIEW.toString();
091    
092                    actionURL(windowState, portletMode, plid, portletName, queryString);
093            }
094    
095            @Override
096            public void actionURL(String portletName, String queryString)
097                    throws Exception {
098    
099                    actionURL(LayoutConstants.DEFAULT_PLID, portletName, queryString);
100            }
101    
102            /**
103             * @deprecated {@link #actionURL(String, String, Boolean, Boolean, Boolean,
104             *             String, long, long, String, Boolean, Boolean, long, long,
105             *             Boolean, String)}
106             */
107            @Override
108            public void actionURL(
109                            String windowState, String portletMode, Boolean secure,
110                            Boolean copyCurrentRenderParameters, Boolean escapeXml, String name,
111                            long plid, long refererPlid, String portletName, Boolean anchor,
112                            Boolean encrypt, long doAsUserId, Boolean portletConfiguration,
113                            String queryString)
114                    throws Exception {
115    
116                    actionURL(
117                            windowState, portletMode, secure, copyCurrentRenderParameters,
118                            escapeXml, name, plid, refererPlid, portletName, anchor, encrypt, 0,
119                            doAsUserId, portletConfiguration, queryString);
120            }
121    
122            @Override
123            public void actionURL(
124                            String windowState, String portletMode, Boolean secure,
125                            Boolean copyCurrentRenderParameters, Boolean escapeXml, String name,
126                            long plid, long refererPlid, String portletName, Boolean anchor,
127                            Boolean encrypt, long doAsGroupId, long doAsUserId,
128                            Boolean portletConfiguration, String queryString)
129                    throws Exception {
130    
131                    String var = null;
132                    String varImpl = null;
133                    String resourceID = null;
134                    String cacheability = null;
135                    Map<String, String[]> parameterMap = HttpUtil.parameterMapFromString(
136                            queryString);
137                    Set<String> removedParameterNames = null;
138    
139                    ActionURLTag.doTag(
140                            PortletRequest.ACTION_PHASE, windowState, portletMode, var, varImpl,
141                            secure, copyCurrentRenderParameters, escapeXml, name, resourceID,
142                            cacheability, plid, refererPlid, portletName, anchor, encrypt,
143                            doAsGroupId, doAsUserId, portletConfiguration, parameterMap,
144                            removedParameterNames, _pageContext);
145            }
146    
147            @Override
148            public void actionURL(
149                            String windowState, String portletMode, long plid,
150                            String portletName, String queryString)
151                    throws Exception {
152    
153                    Boolean secure = null;
154                    Boolean copyCurrentRenderParameters = null;
155                    Boolean escapeXml = null;
156                    long refererPlid = LayoutConstants.DEFAULT_PLID;
157                    String name = null;
158                    Boolean anchor = null;
159                    Boolean encrypt = null;
160                    long doAsGroupId = 0;
161                    long doAsUserId = 0;
162                    Boolean portletConfiguration = null;
163    
164                    actionURL(
165                            windowState, portletMode, secure, copyCurrentRenderParameters,
166                            escapeXml, name, plid, refererPlid, portletName, anchor, encrypt,
167                            doAsGroupId, doAsUserId, portletConfiguration, queryString);
168            }
169    
170            @Override
171            public void actionURL(
172                            String windowState, String portletMode, String portletName,
173                            String queryString)
174                    throws Exception {
175    
176                    actionURL(
177                            windowState, portletMode, LayoutConstants.DEFAULT_PLID, portletName,
178                            queryString);
179            }
180    
181            @Override
182            public void breadcrumb() throws Exception {
183                    BreadcrumbTag breadcrumbTag = new BreadcrumbTag();
184    
185                    setUp(breadcrumbTag);
186    
187                    breadcrumbTag.runTag();
188            }
189    
190            @Override
191            public void breadcrumb(
192                            String displayStyle, boolean showGuestGroup,
193                            boolean showParentGroups, boolean showLayout,
194                            boolean showPortletBreadcrumb)
195                    throws Exception {
196    
197                    BreadcrumbTag breadcrumbTag = new BreadcrumbTag();
198    
199                    setUp(breadcrumbTag);
200    
201                    breadcrumbTag.setDisplayStyle(displayStyle);
202                    breadcrumbTag.setShowGuestGroup(showGuestGroup);
203                    breadcrumbTag.setShowLayout(showLayout);
204                    breadcrumbTag.setShowParentGroups(showParentGroups);
205                    breadcrumbTag.setShowPortletBreadcrumb(showPortletBreadcrumb);
206    
207                    breadcrumbTag.runTag();
208            }
209    
210            @Override
211            public void doAsURL(long doAsUserId) throws Exception {
212                    DoAsURLTag.doTag(doAsUserId, null, _pageContext);
213            }
214    
215            @Override
216            public BreadcrumbTag getBreadcrumbTag() throws Exception {
217                    BreadcrumbTag breadcrumbTag = new BreadcrumbTag();
218    
219                    setUp(breadcrumbTag);
220    
221                    return breadcrumbTag;
222            }
223    
224            @Override
225            public MySitesTag getMySitesTag() throws Exception {
226                    MySitesTag mySitesTag = new MySitesTag();
227    
228                    setUp(mySitesTag);
229    
230                    return mySitesTag;
231            }
232    
233            @Override
234            public PngImageTag getPngImageTag() throws Exception {
235                    PngImageTag pngImageTag = new PngImageTag();
236    
237                    setUp(pngImageTag);
238    
239                    return pngImageTag;
240            }
241    
242            @Override
243            public String getSetting(String name) {
244                    ThemeDisplay themeDisplay = (ThemeDisplay)_request.getAttribute(
245                            WebKeys.THEME_DISPLAY);
246    
247                    return themeDisplay.getThemeSetting(name);
248            }
249    
250            @Override
251            public void iconBack() throws Exception {
252                    IconBackTag iconBackTag = new IconBackTag();
253    
254                    setUp(iconBackTag);
255    
256                    iconBackTag.runTag();
257            }
258    
259            @Override
260            public void iconClose() throws Exception {
261                    IconCloseTag iconCloseTag = new IconCloseTag();
262    
263                    setUp(iconCloseTag);
264    
265                    iconCloseTag.runTag();
266            }
267    
268            @Override
269            public void iconConfiguration() throws Exception {
270                    IconConfigurationTag iconConfigurationTag = new IconConfigurationTag();
271    
272                    setUp(iconConfigurationTag);
273    
274                    iconConfigurationTag.runTag();
275            }
276    
277            @Override
278            public void iconEdit() throws Exception {
279                    IconEditTag iconEditTag = new IconEditTag();
280    
281                    setUp(iconEditTag);
282    
283                    iconEditTag.runTag();
284            }
285    
286            @Override
287            public void iconEditDefaults() throws Exception {
288                    IconEditDefaultsTag iconEditDefaultsTag = new IconEditDefaultsTag();
289    
290                    setUp(iconEditDefaultsTag);
291    
292                    iconEditDefaultsTag.runTag();
293            }
294    
295            @Override
296            public void iconEditGuest() throws Exception {
297                    IconEditGuestTag iconEditGuestTag = new IconEditGuestTag();
298    
299                    setUp(iconEditGuestTag);
300    
301                    iconEditGuestTag.runTag();
302            }
303    
304            @Override
305            public void iconHelp() throws Exception {
306                    IconHelpTag iconHelpTag = new IconHelpTag();
307    
308                    setUp(iconHelpTag);
309    
310                    iconHelpTag.runTag();
311            }
312    
313            @Override
314            public void iconMaximize() throws Exception {
315                    IconMaximizeTag iconMaximizeTag = new IconMaximizeTag();
316    
317                    setUp(iconMaximizeTag);
318    
319                    iconMaximizeTag.runTag();
320            }
321    
322            @Override
323            public void iconMinimize() throws Exception {
324                    IconMinimizeTag iconMinimizeTag = new IconMinimizeTag();
325    
326                    setUp(iconMinimizeTag);
327    
328                    iconMinimizeTag.runTag();
329            }
330    
331            @Override
332            public void iconOptions() throws Exception {
333                    IconOptionsTag iconOptionsTag = new IconOptionsTag();
334    
335                    setUp(iconOptionsTag);
336    
337                    iconOptionsTag.runTag();
338            }
339    
340            @Override
341            public void iconPortlet() throws Exception {
342                    IconPortletTag iconPortletTag = new IconPortletTag();
343    
344                    setUp(iconPortletTag);
345    
346                    iconPortletTag.runTag();
347            }
348    
349            @Override
350            public void iconPortlet(Portlet portlet) throws Exception {
351                    IconPortletTag iconPortletTag = new IconPortletTag();
352    
353                    setUp(iconPortletTag);
354    
355                    iconPortletTag.setPortlet(portlet);
356    
357                    iconPortletTag.runTag();
358            }
359    
360            @Override
361            public void iconPortletCss() throws Exception {
362                    IconPortletCssTag iconPortletCssTag = new IconPortletCssTag();
363    
364                    setUp(iconPortletCssTag);
365    
366                    iconPortletCssTag.runTag();
367            }
368    
369            @Override
370            public void iconPrint() throws Exception {
371                    IconPrintTag iconPrintTag = new IconPrintTag();
372    
373                    setUp(iconPrintTag);
374    
375                    iconPrintTag.runTag();
376            }
377    
378            @Override
379            public void iconRefresh() throws Exception {
380                    IconRefreshTag iconRefreshTag = new IconRefreshTag();
381    
382                    setUp(iconRefreshTag);
383    
384                    iconRefreshTag.runTag();
385            }
386    
387            @Override
388            public void include(ServletContext servletContext, String page)
389                    throws Exception {
390    
391                    RequestDispatcher requestDispatcher =
392                            servletContext.getRequestDispatcher(page);
393    
394                    requestDispatcher.include(_request, _response);
395            }
396    
397            @Override
398            public void include(String page) throws Exception {
399                    RequestDispatcher requestDispatcher =
400                            DirectRequestDispatcherFactoryUtil.getRequestDispatcher(
401                                    _servletContext, page);
402    
403                    requestDispatcher.include(_request, _response);
404            }
405    
406            @Override
407            public void journalContentSearch() throws Exception {
408                    journalContentSearch(true, null, null);
409            }
410    
411            @Override
412            public void journalContentSearch(
413                            boolean showListed, String targetPortletId, String type)
414                    throws Exception {
415    
416                    JournalContentSearchTag journalContentSearchTag =
417                            new JournalContentSearchTag();
418    
419                    setUp(journalContentSearchTag);
420    
421                    journalContentSearchTag.setShowListed(showListed);
422                    journalContentSearchTag.setTargetPortletId(targetPortletId);
423                    journalContentSearchTag.setType(type);
424    
425                    journalContentSearchTag.runTag();
426            }
427    
428            @Override
429            public void language() throws Exception {
430                    LanguageTag languageTag = new LanguageTag();
431    
432                    setUp(languageTag);
433    
434                    languageTag.runTag();
435            }
436    
437            @Override
438            public void language(
439                            String formName, String formAction, String name, int displayStyle)
440                    throws Exception {
441    
442                    LanguageTag languageTag = new LanguageTag();
443    
444                    setUp(languageTag);
445    
446                    languageTag.setDisplayStyle(displayStyle);
447                    languageTag.setFormAction(formAction);
448                    languageTag.setFormName(formName);
449                    languageTag.setName(name);
450    
451                    languageTag.runTag();
452            }
453    
454            @Override
455            public void language(
456                            String formName, String formAction, String name,
457                            String[] languageIds, int displayStyle)
458                    throws Exception {
459    
460                    LanguageTag languageTag = new LanguageTag();
461    
462                    setUp(languageTag);
463    
464                    languageTag.setDisplayStyle(displayStyle);
465                    languageTag.setFormAction(formAction);
466                    languageTag.setFormName(formName);
467                    languageTag.setLanguageIds(languageIds);
468                    languageTag.setName(name);
469    
470                    languageTag.runTag();
471            }
472    
473            @Override
474            public void layoutIcon(Layout layout) throws Exception {
475                    LayoutIconTag.doTag(layout, _servletContext, _request, _response);
476            }
477    
478            @Override
479            public void metaTags() throws Exception {
480                    MetaTagsTag.doTag(_servletContext, _request, _response);
481            }
482    
483            /**
484             * @deprecated {@link #mySites}
485             */
486            @Override
487            public void myPlaces() throws Exception {
488                    mySites();
489            }
490    
491            /**
492             * @deprecated {@link #mySites(int)}
493             */
494            @Override
495            public void myPlaces(int max) throws Exception {
496                    mySites(max);
497            }
498    
499            @Override
500            public void mySites() throws Exception {
501                    MySitesTag mySitesTag = new MySitesTag();
502    
503                    setUp(mySitesTag);
504    
505                    mySitesTag.runTag();
506            }
507    
508            @Override
509            public void mySites(int max) throws Exception {
510                    MySitesTag mySitesTag = new MySitesTag();
511    
512                    setUp(mySitesTag);
513    
514                    mySitesTag.setMax(max);
515    
516                    mySitesTag.runTag();
517            }
518    
519            @Override
520            public void permissionsURL(
521                            String redirect, String modelResource,
522                            String modelResourceDescription, Object resourceGroupId,
523                            String resourcePrimKey, String windowState, int[] roleTypes)
524                    throws Exception {
525    
526                    PermissionsURLTag.doTag(
527                            redirect, modelResource, modelResourceDescription, resourceGroupId,
528                            resourcePrimKey, windowState, null, roleTypes, _pageContext);
529            }
530    
531            /**
532             * @deprecated {@link #permissionsURL(String, String, String, long, String,
533             *             String, int[])}
534             */
535            @Override
536            public void permissionsURL(
537                            String redirect, String modelResource,
538                            String modelResourceDescription, String resourcePrimKey,
539                            String windowState, int[] roleTypes)
540                    throws Exception {
541    
542                    permissionsURL(
543                            redirect, modelResourceDescription, modelResourceDescription, 0,
544                            resourcePrimKey, windowState, roleTypes);
545            }
546    
547            @Override
548            public void renderURL(long plid, String portletName, String queryString)
549                    throws Exception {
550    
551                    String windowState = WindowState.NORMAL.toString();
552                    String portletMode = PortletMode.VIEW.toString();
553    
554                    renderURL(windowState, portletMode, plid, portletName, queryString);
555            }
556    
557            @Override
558            public void renderURL(String portletName, String queryString)
559                    throws Exception {
560    
561                    renderURL(LayoutConstants.DEFAULT_PLID, portletName, queryString);
562            }
563    
564            @Override
565            public void renderURL(
566                            String windowState, String portletMode, Boolean secure,
567                            Boolean copyCurrentRenderParameters, Boolean escapeXml, long plid,
568                            long refererPlid, String portletName, Boolean anchor,
569                            Boolean encrypt, long doAsGroupId, long doAsUserId,
570                            Boolean portletConfiguration, String queryString)
571                    throws Exception {
572    
573                    String var = null;
574                    String varImpl = null;
575                    String name = null;
576                    String resourceID = null;
577                    String cacheability = null;
578                    Map<String, String[]> parameterMap = HttpUtil.parameterMapFromString(
579                            queryString);
580                    Set<String> removedParameterNames = null;
581    
582                    ActionURLTag.doTag(
583                            PortletRequest.RENDER_PHASE, windowState, portletMode, var, varImpl,
584                            secure, copyCurrentRenderParameters, escapeXml, name, resourceID,
585                            cacheability, plid, refererPlid, portletName, anchor, encrypt,
586                            doAsGroupId, doAsUserId, portletConfiguration, parameterMap,
587                            removedParameterNames, _pageContext);
588            }
589    
590            /**
591             * @deprecated {@link #renderURL(String, String, Boolean, Boolean, Boolean,
592             *             long, long, String, Boolean, Boolean, long, long, Boolean,
593             *             String)}
594             */
595            @Override
596            public void renderURL(
597                            String windowState, String portletMode, Boolean secure,
598                            Boolean copyCurrentRenderParameters, Boolean escapeXml, long plid,
599                            String portletName, Boolean anchor, Boolean encrypt,
600                            long doAsUserId, Boolean portletConfiguration, String queryString)
601                    throws Exception {
602    
603                    long refererPlid = LayoutConstants.DEFAULT_PLID;
604    
605                    renderURL(
606                            windowState, portletMode, secure, copyCurrentRenderParameters,
607                            escapeXml, plid, refererPlid, portletName, anchor, encrypt, 0,
608                            doAsUserId, portletConfiguration, queryString);
609            }
610    
611            @Override
612            public void renderURL(
613                            String windowState, String portletMode, long plid,
614                            String portletName, String queryString)
615                    throws Exception {
616    
617                    Boolean secure = null;
618                    Boolean copyCurrentRenderParameters = null;
619                    Boolean escapeXml = null;
620                    long referPlid = LayoutConstants.DEFAULT_PLID;
621                    Boolean anchor = null;
622                    Boolean encrypt = null;
623                    long doAsGroupId = 0;
624                    long doAsUserId = 0;
625                    Boolean portletConfiguration = null;
626    
627                    renderURL(
628                            windowState, portletMode, secure, copyCurrentRenderParameters,
629                            escapeXml, plid, referPlid, portletName, anchor, encrypt,
630                            doAsGroupId, doAsUserId, portletConfiguration, queryString);
631            }
632    
633            @Override
634            public void renderURL(
635                            String windowState, String portletMode, String portletName,
636                            String queryString)
637                    throws Exception {
638    
639                    renderURL(
640                            windowState, portletMode, LayoutConstants.DEFAULT_PLID, portletName,
641                            queryString);
642            }
643    
644            @Override
645            public void runtime(String portletName) throws Exception {
646                    runtime(portletName, null);
647            }
648    
649            @Override
650            public void runtime(String portletName, String queryString)
651                    throws Exception {
652    
653                    RuntimeTag.doTag(
654                            portletName, queryString, null, _servletContext, _request,
655                            _response);
656            }
657    
658            @Override
659            public void runtime(
660                            String portletName, String queryString, String defaultPreferences)
661                    throws Exception {
662    
663                    RuntimeTag.doTag(
664                            portletName, queryString, defaultPreferences, null, _servletContext,
665                            _request, _response);
666            }
667    
668            @Override
669            public void search() throws Exception {
670                    SearchTag searchTag = new SearchTag();
671    
672                    setUp(searchTag);
673    
674                    searchTag.runTag();
675            }
676    
677            @Override
678            public void staging() throws Exception {
679                    StagingTag stagingTag = new StagingTag();
680    
681                    setUp(stagingTag);
682    
683                    stagingTag.runTag();
684            }
685    
686            @Override
687            public void toggle(
688                            String id, String showImage, String hideImage, String showMessage,
689                            String hideMessage, boolean defaultShowContent)
690                    throws Exception {
691    
692                    ToggleTag.doTag(
693                            id, showImage, hideImage, showMessage, hideMessage,
694                            defaultShowContent, null, _servletContext, _request, _response);
695            }
696    
697            @Override
698            public String wrapPortlet(String wrapPage, String portletPage)
699                    throws Exception {
700    
701                    return WrapPortletTag.doTag(
702                            wrapPage, portletPage, _servletContext, _request, _response,
703                            _pageContext);
704            }
705    
706            protected VelocityTaglibImpl init(
707                    ServletContext servletContext, HttpServletRequest request,
708                    HttpServletResponse response, PageContext pageContext) {
709    
710                    _servletContext = servletContext;
711                    _request = request;
712                    _response = response;
713                    _pageContext = pageContext;
714    
715                    return this;
716            }
717    
718            protected void setUp(TagSupport tagSupport) throws Exception {
719                    tagSupport.setPageContext(
720                            new PipingPageContext(_pageContext, _response.getWriter()));
721            }
722    
723            private PageContext _pageContext;
724            private HttpServletRequest _request;
725            private HttpServletResponse _response;
726            private ServletContext _servletContext;
727    
728    }