1   /**
2    * Copyright (c) 2000-2010 Liferay, Inc. All rights reserved.
3    *
4    * This library is free software; you can redistribute it and/or modify it under
5    * the terms of the GNU Lesser General Public License as published by the Free
6    * Software Foundation; either version 2.1 of the License, or (at your option)
7    * any later version.
8    *
9    * This library is distributed in the hope that it will be useful, but WITHOUT
10   * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11   * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
12   * details.
13   */
14  
15  package com.liferay.portlet.wiki.engines.jspwiki;
16  
17  import com.ecyrd.jspwiki.QueryItem;
18  import com.ecyrd.jspwiki.WikiEngine;
19  import com.ecyrd.jspwiki.WikiPage;
20  import com.ecyrd.jspwiki.providers.ProviderException;
21  import com.ecyrd.jspwiki.providers.WikiPageProvider;
22  
23  import com.liferay.portal.kernel.exception.SystemException;
24  import com.liferay.portal.kernel.log.Log;
25  import com.liferay.portal.kernel.log.LogFactoryUtil;
26  import com.liferay.portal.kernel.util.GetterUtil;
27  import com.liferay.portlet.wiki.NoSuchPageException;
28  import com.liferay.portlet.wiki.service.WikiPageLocalServiceUtil;
29  import com.liferay.portlet.wiki.util.WikiUtil;
30  
31  import java.util.ArrayList;
32  import java.util.Arrays;
33  import java.util.Collection;
34  import java.util.Collections;
35  import java.util.Date;
36  import java.util.List;
37  import java.util.Properties;
38  
39  /**
40   * <a href="LiferayPageProvider.java.html"><b><i>View Source</i></b></a>
41   *
42   * @author Jorge Ferrer
43   */
44  public class LiferayPageProvider implements WikiPageProvider {
45  
46      public static com.ecyrd.jspwiki.WikiPage toJSPWikiPage(
47          com.liferay.portlet.wiki.model.WikiPage page, WikiEngine engine) {
48  
49          com.ecyrd.jspwiki.WikiPage jspWikiPage = new com.ecyrd.jspwiki.WikiPage(
50              engine, page.getTitle());
51  
52          jspWikiPage.setAuthor(page.getUserName());
53          jspWikiPage.setVersion((int)(page.getVersion() * 10));
54          jspWikiPage.setLastModified(page.getCreateDate());
55  
56          return jspWikiPage;
57      }
58  
59      public void deletePage(String name) {
60          if (_log.isDebugEnabled()) {
61              _log.debug("Invoking deletePage(" + name + ")");
62          }
63      }
64  
65      public void deleteVersion(String title, int version) {
66          if (_log.isDebugEnabled()) {
67              _log.debug(
68                  "Invoking deleteVersion(" + title + ", " + version + ")");
69          }
70      }
71  
72      public Collection<WikiPage> findPages(QueryItem[] query) {
73          if (_log.isDebugEnabled()) {
74              _log.debug("Invoking findPages(" + Arrays.toString(query) + ")");
75          }
76  
77          return Collections.EMPTY_LIST;
78      }
79  
80      public Collection<WikiPage> getAllChangedSince(Date date) {
81          if (_log.isDebugEnabled()) {
82              _log.debug("Invoking getAllChangedSince(" + date + ")");
83          }
84  
85          try {
86              return getAllPages();
87          }
88          catch (ProviderException e) {
89              _log.error("Could not get changed pages", e);
90  
91              return Collections.EMPTY_LIST;
92          }
93      }
94  
95      public Collection<WikiPage> getAllPages() throws ProviderException {
96          if (_log.isDebugEnabled()) {
97              _log.debug("Invoking getAllPages()");
98          }
99  
100         List<WikiPage> jspWikiPages = new ArrayList<WikiPage>();
101 
102         try {
103             int count = WikiPageLocalServiceUtil.getPagesCount(_nodeId, true);
104 
105             List<com.liferay.portlet.wiki.model.WikiPage> pages =
106                 WikiPageLocalServiceUtil.getPages(_nodeId, true, 0, count);
107 
108             for (com.liferay.portlet.wiki.model.WikiPage page : pages) {
109                 jspWikiPages.add(toJSPWikiPage(page, _engine));
110             }
111         }
112         catch (SystemException se) {
113             throw new ProviderException(se.toString());
114         }
115 
116         return jspWikiPages;
117     }
118 
119     public int getPageCount() throws ProviderException {
120         if (_log.isDebugEnabled()) {
121             _log.debug("Invoking getPageCount()");
122         }
123 
124         try {
125             return WikiPageLocalServiceUtil.getPagesCount(_nodeId);
126         }
127         catch (SystemException se) {
128             throw new ProviderException(se.toString());
129         }
130     }
131 
132     public com.ecyrd.jspwiki.WikiPage getPageInfo(String title, int version)
133         throws ProviderException {
134 
135         if (_log.isDebugEnabled()) {
136             _log.debug("Invoking getPageInfo(" + title + ", " + version + ")");
137         }
138 
139         try {
140             com.liferay.portlet.wiki.model.WikiPage page =
141                 WikiPageLocalServiceUtil.getPage(_nodeId, title);
142 
143             return toJSPWikiPage(page, _engine);
144         }
145         catch (NoSuchPageException nspe) {
146             return null;
147         }
148         catch (Exception e) {
149             throw new ProviderException(e.toString());
150         }
151     }
152 
153     public String getPageText(String title, int version)
154         throws ProviderException {
155 
156         if (_log.isDebugEnabled()) {
157             _log.debug("Invoking getPageText(" + title + ", " + version + ")");
158         }
159 
160         try {
161             com.liferay.portlet.wiki.model.WikiPage page =
162                 WikiPageLocalServiceUtil.getPage(_nodeId, title);
163 
164             return page.getContent();
165         }
166         catch (Exception e) {
167             throw new ProviderException(e.toString());
168         }
169     }
170 
171     public String getProviderInfo() {
172         if (_log.isDebugEnabled()) {
173             _log.debug("Invoking getProviderInfo()");
174         }
175 
176         return LiferayPageProvider.class.getName();
177     }
178 
179     public List<WikiPage> getVersionHistory(String title) {
180         if (_log.isDebugEnabled()) {
181             _log.debug("Invoking getVersionHistory(" + title + ")");
182         }
183 
184         return Collections.EMPTY_LIST;
185     }
186 
187     public void initialize(WikiEngine engine, Properties props) {
188         if (_log.isDebugEnabled()) {
189             _log.debug("Invoking initialize(" + engine + ", " + props + ")");
190         }
191 
192         _engine = engine;
193         _nodeId = GetterUtil.getLong(props.getProperty("nodeId"));
194     }
195 
196     public void movePage(String from, String to) {
197         if (_log.isDebugEnabled()) {
198             _log.debug("Invoking movePage(" + from + ", " + to + ")");
199         }
200     }
201 
202     public boolean pageExists(String title) {
203         if (_log.isDebugEnabled()) {
204             _log.debug("Invoking pageExists(" + title + ")");
205         }
206 
207         try {
208             if (WikiPageLocalServiceUtil.getPagesCount(
209                     _nodeId, WikiUtil.decodeJSPWikiName(title), true) > 0) {
210 
211                 return true;
212             }
213             else {
214                 return false;
215             }
216         }
217         catch (Exception e) {
218             _log.error(e, e);
219         }
220 
221         return false;
222     }
223 
224     public void putPageText(com.ecyrd.jspwiki.WikiPage page, String text) {
225         if (_log.isDebugEnabled()) {
226             _log.debug("Invoking putPageText(" + page + ", " + text + ")");
227         }
228     }
229 
230     private static Log _log = LogFactoryUtil.getLog(LiferayPageProvider.class);
231 
232     private WikiEngine _engine;
233     private long _nodeId;
234 
235 }