001    /**
002     * Copyright (c) 2000-2012 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.portlet.wiki.engines.jspwiki;
016    
017    import com.ecyrd.jspwiki.QueryItem;
018    import com.ecyrd.jspwiki.WikiEngine;
019    import com.ecyrd.jspwiki.WikiPage;
020    import com.ecyrd.jspwiki.providers.ProviderException;
021    import com.ecyrd.jspwiki.providers.WikiPageProvider;
022    
023    import com.liferay.portal.kernel.exception.SystemException;
024    import com.liferay.portal.kernel.log.Log;
025    import com.liferay.portal.kernel.log.LogFactoryUtil;
026    import com.liferay.portal.kernel.util.GetterUtil;
027    import com.liferay.portlet.wiki.NoSuchPageException;
028    import com.liferay.portlet.wiki.service.WikiPageLocalServiceUtil;
029    
030    import java.util.ArrayList;
031    import java.util.Arrays;
032    import java.util.Collection;
033    import java.util.Collections;
034    import java.util.Date;
035    import java.util.List;
036    import java.util.Properties;
037    
038    /**
039     * @author Jorge Ferrer
040     */
041    public class LiferayPageProvider implements WikiPageProvider {
042    
043            public static com.ecyrd.jspwiki.WikiPage toJSPWikiPage(
044                    com.liferay.portlet.wiki.model.WikiPage page, WikiEngine engine) {
045    
046                    com.ecyrd.jspwiki.WikiPage jspWikiPage = new com.ecyrd.jspwiki.WikiPage(
047                            engine, page.getTitle());
048    
049                    jspWikiPage.setAuthor(page.getUserName());
050                    jspWikiPage.setVersion((int)(page.getVersion() * 10));
051                    jspWikiPage.setLastModified(page.getCreateDate());
052    
053                    return jspWikiPage;
054            }
055    
056            public void deletePage(String name) {
057                    if (_log.isDebugEnabled()) {
058                            _log.debug("Invoking deletePage(" + name + ")");
059                    }
060            }
061    
062            public void deleteVersion(String title, int version) {
063                    if (_log.isDebugEnabled()) {
064                            _log.debug(
065                                    "Invoking deleteVersion(" + title + ", " + version + ")");
066                    }
067            }
068    
069            public Collection<WikiPage> findPages(QueryItem[] query) {
070                    if (_log.isDebugEnabled()) {
071                            _log.debug("Invoking findPages(" + Arrays.toString(query) + ")");
072                    }
073    
074                    return Collections.emptyList();
075            }
076    
077            public Collection<WikiPage> getAllChangedSince(Date date) {
078                    if (_log.isDebugEnabled()) {
079                            _log.debug("Invoking getAllChangedSince(" + date + ")");
080                    }
081    
082                    try {
083                            return getAllPages();
084                    }
085                    catch (ProviderException e) {
086                            _log.error("Could not get changed pages", e);
087    
088                            return Collections.emptyList();
089                    }
090            }
091    
092            public Collection<WikiPage> getAllPages() throws ProviderException {
093                    if (_log.isDebugEnabled()) {
094                            _log.debug("Invoking getAllPages()");
095                    }
096    
097                    List<WikiPage> jspWikiPages = new ArrayList<WikiPage>();
098    
099                    try {
100                            int count = WikiPageLocalServiceUtil.getPagesCount(_nodeId, true);
101    
102                            List<com.liferay.portlet.wiki.model.WikiPage> pages =
103                                    WikiPageLocalServiceUtil.getPages(_nodeId, true, 0, count);
104    
105                            for (com.liferay.portlet.wiki.model.WikiPage page : pages) {
106                                    jspWikiPages.add(toJSPWikiPage(page, _engine));
107                            }
108                    }
109                    catch (SystemException se) {
110                            throw new ProviderException(se.toString());
111                    }
112    
113                    return jspWikiPages;
114            }
115    
116            public int getPageCount() throws ProviderException {
117                    if (_log.isDebugEnabled()) {
118                            _log.debug("Invoking getPageCount()");
119                    }
120    
121                    try {
122                            return WikiPageLocalServiceUtil.getPagesCount(_nodeId);
123                    }
124                    catch (SystemException se) {
125                            throw new ProviderException(se.toString());
126                    }
127            }
128    
129            public com.ecyrd.jspwiki.WikiPage getPageInfo(String title, int version)
130                    throws ProviderException {
131    
132                    if (_log.isDebugEnabled()) {
133                            _log.debug("Invoking getPageInfo(" + title + ", " + version + ")");
134                    }
135    
136                    try {
137                            com.liferay.portlet.wiki.model.WikiPage page =
138                                    WikiPageLocalServiceUtil.getPage(_nodeId, title);
139    
140                            return toJSPWikiPage(page, _engine);
141                    }
142                    catch (NoSuchPageException nspe) {
143                            return null;
144                    }
145                    catch (Exception e) {
146                            throw new ProviderException(e.toString());
147                    }
148            }
149    
150            public String getPageText(String title, int version)
151                    throws ProviderException {
152    
153                    if (_log.isDebugEnabled()) {
154                            _log.debug("Invoking getPageText(" + title + ", " + version + ")");
155                    }
156    
157                    try {
158                            com.liferay.portlet.wiki.model.WikiPage page =
159                                    WikiPageLocalServiceUtil.getPage(_nodeId, title);
160    
161                            return page.getContent();
162                    }
163                    catch (Exception e) {
164                            throw new ProviderException(e.toString());
165                    }
166            }
167    
168            public String getProviderInfo() {
169                    if (_log.isDebugEnabled()) {
170                            _log.debug("Invoking getProviderInfo()");
171                    }
172    
173                    return LiferayPageProvider.class.getName();
174            }
175    
176            public List<WikiPage> getVersionHistory(String title) {
177                    if (_log.isDebugEnabled()) {
178                            _log.debug("Invoking getVersionHistory(" + title + ")");
179                    }
180    
181                    return Collections.emptyList();
182            }
183    
184            public void initialize(WikiEngine engine, Properties props) {
185                    if (_log.isDebugEnabled()) {
186                            _log.debug("Invoking initialize(" + engine + ", " + props + ")");
187                    }
188    
189                    _engine = engine;
190                    _nodeId = GetterUtil.getLong(props.getProperty("nodeId"));
191            }
192    
193            public void movePage(String from, String to) {
194                    if (_log.isDebugEnabled()) {
195                            _log.debug("Invoking movePage(" + from + ", " + to + ")");
196                    }
197            }
198    
199            public boolean pageExists(String title) {
200                    if (_log.isDebugEnabled()) {
201                            _log.debug("Invoking pageExists(" + title + ")");
202                    }
203    
204                    try {
205                            if (WikiPageLocalServiceUtil.getPagesCount(
206                                    _nodeId, JSPWikiEngine.decodeJSPWikiName(title), true) > 0) {
207    
208                                    return true;
209                            }
210                            else {
211                                    return false;
212                            }
213                    }
214                    catch (Exception e) {
215                            _log.error(e, e);
216                    }
217    
218                    return false;
219            }
220    
221            public void putPageText(com.ecyrd.jspwiki.WikiPage page, String text) {
222                    if (_log.isDebugEnabled()) {
223                            _log.debug("Invoking putPageText(" + page + ", " + text + ")");
224                    }
225            }
226    
227            private static Log _log = LogFactoryUtil.getLog(LiferayPageProvider.class);
228    
229            private WikiEngine _engine;
230            private long _nodeId;
231    
232    }