KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > opencms > workplace > CmsHtmlBrowser


1 /*
2 * File : $Source: /usr/local/cvs/opencms/src-modules/com/opencms/workplace/CmsHtmlBrowser.java,v $
3 * Date : $Date: 2005/06/27 23:22:07 $
4 * Version: $Revision: 1.4 $
5 *
6 * This library is part of OpenCms -
7 * the Open Source Content Mananagement System
8 *
9 * Copyright (C) 2001 The OpenCms Group
10 *
11 * This library is free software; you can redistribute it and/or
12 * modify it under the terms of the GNU Lesser General Public
13 * License as published by the Free Software Foundation; either
14 * version 2.1 of the License, or (at your option) any later version.
15 *
16 * This library is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19 * Lesser General Public License for more details.
20 *
21 * For further information about OpenCms, please see the
22 * OpenCms Website: http://www.opencms.org
23 *
24 * You should have received a copy of the GNU Lesser General Public
25 * License along with this library; if not, write to the Free Software
26 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
27 */

28
29
30 package com.opencms.workplace;
31
32 import org.opencms.file.CmsFile;
33 import org.opencms.file.CmsObject;
34 import org.opencms.file.CmsPropertyDefinition;
35 import org.opencms.file.CmsResource;
36 import org.opencms.i18n.CmsEncoder;
37 import org.opencms.main.CmsException;
38 import org.opencms.main.CmsLog;
39
40 import com.opencms.core.I_CmsSession;
41 import com.opencms.legacy.CmsXmlTemplateLoader;
42 import com.opencms.template.A_CmsXmlContent;
43
44 import java.io.UnsupportedEncodingException JavaDoc;
45 import java.util.Hashtable JavaDoc;
46 import java.util.List JavaDoc;
47 import java.util.Vector JavaDoc;
48
49 /**
50  * Template class for displaying OpenCms html snippet browser.
51  * <P>
52  * Reads template files of the content type <code>CmsXmlWpTemplateFile</code>.
53  *
54  * @author magnus meurer
55  * @version $Revision: 1.4 $ $Date: 2005/06/27 23:22:07 $
56  * @see com.opencms.workplace.CmsXmlWpTemplateFile
57  *
58  * @deprecated Will not be supported past the OpenCms 6 release.
59  */

60
61 public class CmsHtmlBrowser extends A_CmsGalleryBrowser {
62
63     /**
64      * Gets the content of a defined section in a given template file and its subtemplates
65      * with the given parameters.
66      *
67      * @see #getContent(CmsObject, String, String, Hashtable, String)
68      * @param cms CmsObject Object for accessing system resources.
69      * @param templateFile Filename of the template file.
70      * @param elementName Element name of this template in our parent template.
71      * @param parameters Hashtable with all template class parameters.
72      * @param templateSelector template section that should be processed.
73      */

74
75     public byte[] getContent(CmsObject cms, String JavaDoc templateFile, String JavaDoc elementName, Hashtable JavaDoc parameters, String JavaDoc templateSelector) throws CmsException {
76         if(CmsLog.getLog(this).isDebugEnabled() && C_DEBUG) {
77             CmsLog.getLog(this).debug("Getting content of element " + ((elementName==null)?"<root>":elementName));
78             CmsLog.getLog(this).debug("Template file is: " + templateFile);
79             CmsLog.getLog(this).debug("Selected template section is: " + ((templateSelector==null)?"<default>":templateSelector));
80         }
81         I_CmsSession session = CmsXmlTemplateLoader.getSession(cms.getRequestContext(), true);
82         CmsXmlWpTemplateFile xmlTemplateDocument = (CmsXmlWpTemplateFile)getOwnTemplateFile(cms,
83                 templateFile, elementName, parameters, templateSelector);
84
85         // test whether the links folder exists at all
86
try {
87             cms.readResource(CmsWorkplaceDefault.C_VFS_GALLERY_EXTERNALLINKS);
88         } catch(CmsException e) {
89             xmlTemplateDocument.setData("ERRORDETAILS", CmsException.getStackTraceAsString(e));
90             templateSelector = "error";
91         }
92         if(!"error".equals(templateSelector)) {
93             if(parameters.get(CmsWorkplaceDefault.C_PARA_INITIAL) != null) {
94                 session.removeValue(CmsWorkplaceDefault.C_PARA_FOLDER);
95                 session.removeValue("htmlBrowser_for_ext_nav");
96             }
97             String JavaDoc setOnClick = (String JavaDoc)parameters.get("setonclick");
98             if(setOnClick != null){
99                 session.putValue("htmlBrowser_for_ext_nav", setOnClick);
100             }
101             setOnClick = (String JavaDoc)session.getValue("htmlBrowser_for_ext_nav");
102             String JavaDoc folder = (String JavaDoc)parameters.get(CmsWorkplaceDefault.C_PARA_FOLDER);
103             if(folder != null) {
104                 session.putValue(CmsWorkplaceDefault.C_PARA_FOLDER, folder);
105             }
106             folder = (String JavaDoc)session.getValue(CmsWorkplaceDefault.C_PARA_FOLDER);
107             if(folder == null || "".equals(folder)) {
108                 List JavaDoc galleries = cms.getSubFolders(getConfigFile(cms).getHtmlGalleryPath());
109                 if(galleries.size() > 0) {
110
111                     // take the first gallery
112
folder = cms.getSitePath((CmsResource)galleries.get(0));
113                     session.putValue(CmsWorkplaceDefault.C_PARA_FOLDER, folder);
114                 } else {
115
116                     // there was a C_VFS_GALLERY_EXTERNALLINKS - folder but no galery in it
117
templateSelector = "error_no_gallery";
118                 }
119             }
120             if(!"error_no_gallery".equals(templateSelector)) {
121                 String JavaDoc pageText = (String JavaDoc)parameters.get(CmsWorkplaceDefault.C_PARA_PAGE);
122                 String JavaDoc filter = (String JavaDoc)parameters.get(CmsWorkplaceDefault.C_PARA_FILTER);
123
124                 // Check if the user requested a special page
125
if(pageText == null || "".equals(pageText)) {
126                     pageText = "1";
127                     parameters.put(CmsWorkplaceDefault.C_PARA_PAGE, pageText);
128                 }
129
130                 // Check if the user requested a filter
131
if(filter == null) {
132                     filter = "";
133                     parameters.put(CmsWorkplaceDefault.C_PARA_FILTER, filter);
134                 }
135
136                 // Compute the maximum page number
137
Vector JavaDoc filteredLinks = getFilteredHtmlList(cms, folder, filter);
138                 int maxpage = ((filteredLinks.size() - 1) / CmsWorkplaceDefault.C_PICBROWSER_MAXIMAGES) + 1;
139
140                 // Now set the appropriate datablocks
141
xmlTemplateDocument.setData(CmsWorkplaceDefault.C_PARA_FOLDER, CmsEncoder.escape(folder,
142                     cms.getRequestContext().getEncoding()));
143                 xmlTemplateDocument.setData(CmsWorkplaceDefault.C_PARA_PAGE, pageText);
144                 xmlTemplateDocument.setData(CmsWorkplaceDefault.C_PARA_FILTER, filter);
145                 xmlTemplateDocument.setData(CmsWorkplaceDefault.C_PARA_MAXPAGE, "" + maxpage);
146                 if(setOnClick == null || !"true".equals(setOnClick)){
147                     xmlTemplateDocument.setData("setonclick", "");
148                 }else{
149                     xmlTemplateDocument.setData("setonclick", "true");
150                 }
151                 parameters.put("_HTMLLIST_", filteredLinks);
152             }
153         }
154
155         // Start the processing
156
return startProcessing(cms, xmlTemplateDocument, elementName, parameters, templateSelector);
157     }
158
159     /**
160      * Internal method for getting a vector of all links using
161      * a given filter.
162      * @param cms Cms object for accessing system resources.
163      * @param folder Folder to look for links.
164      * @param filter Search pattern that should be used.
165      * @return Vector of CmsFile objects.
166      */

167
168     private Vector JavaDoc getFilteredHtmlList(CmsObject cms, String JavaDoc folder, String JavaDoc filter) throws CmsException {
169
170         // Get all links in the given folder using the cms object
171
List JavaDoc allLinks = cms.getFilesInFolder(folder);
172
173         // Filter the links
174
Vector JavaDoc filteredLinks = new Vector JavaDoc();
175         for(int i = 0;i < allLinks.size();i++) {
176             CmsFile file = (CmsFile)allLinks.get(i);
177             String JavaDoc filename = file.getName();
178             String JavaDoc title = cms.readProperty(cms.getSitePath(file), CmsPropertyDefinition.PROPERTY_TITLE);
179             boolean filenameFilter = inFilter(filename, filter);
180             boolean titleFilter = ((title == null) || ("".equals(title))) ? false : inFilter(title, filter);
181             if((filenameFilter || titleFilter)) {
182                 filteredLinks.addElement(file);
183             }
184         }
185         return filteredLinks;
186     }
187
188     /**
189      * Gets the filenames of all html galleries
190      * <P>
191      * The given vectors <code>names</code> and <code>values</code> will
192      * be filled with the appropriate information to be used for building
193      * a select box. The values will be the paths to the galleries.
194      *
195      * @param cms CmsObject Object for accessing system resources.
196      * @param names Vector to be filled with the appropriate values in this method.
197      * @param values Vector to be filled with the appropriate values in this method.
198      * @param parameters Hashtable containing all user parameters <em>(not used here)</em>.
199      * @return Index of the selected Gallery
200      * @throws CmsException
201      */

202     public Integer JavaDoc getHtmlGalleryNames(CmsObject cms, CmsXmlLanguageFile lang,
203             Vector JavaDoc names, Vector JavaDoc values, Hashtable JavaDoc parameters) throws CmsException {
204         return getGalleryNames(cms, getConfigFile(cms).getHtmlGalleryPath(), lang, names, values, parameters);
205     }
206
207     /**
208      * Indicates if the results of this class are cacheable.
209      *
210      * @param cms CmsObject Object for accessing system resources
211      * @param templateFile Filename of the template file
212      * @param elementName Element name of this template in our parent template.
213      * @param parameters Hashtable with all template class parameters.
214      * @param templateSelector template section that should be processed.
215      * @return <EM>true</EM> if cacheable, <EM>false</EM> otherwise.
216      */

217
218     public boolean isCacheable(CmsObject cms, String JavaDoc templateFile, String JavaDoc elementName,
219             Hashtable JavaDoc parameters, String JavaDoc templateSelector) {
220         return false;
221     }
222
223     /**
224      * User method to generate an URL for the pics folder.
225      * <P>
226      * All pictures should reside in the docroot of the webserver for
227      * performance reasons. This folder can be mounted into the OpenCms system to
228      * make it accessible for the OpenCms explorer.
229      * <P>
230      * The path to the docroot can be set in the workplace ini.
231      *
232      * @param cms CmsObject Object for accessing system resources.
233      * @param tagcontent Unused in this special case of a user method. Can be ignored.
234      * @param doc Reference to the A_CmsXmlContent object of the initiating XLM document <em>(not used here)</em>.
235      * @param userObj Hashtable with parameters <em>(not used here)</em>.
236      * @return String with the pics URL.
237      * @throws CmsException
238      */

239
240     public Object JavaDoc htmlList(CmsObject cms, String JavaDoc tagcontent, A_CmsXmlContent doc,
241             Object JavaDoc userObj) throws CmsException {
242         I_CmsSession session = CmsXmlTemplateLoader.getSession(cms.getRequestContext(), true);
243         Hashtable JavaDoc parameters = (Hashtable JavaDoc)userObj;
244         CmsXmlWpTemplateFile xmlTemplateDocument = (CmsXmlWpTemplateFile)doc;
245         StringBuffer JavaDoc result = new StringBuffer JavaDoc();
246         String JavaDoc pageText = (String JavaDoc)parameters.get(CmsWorkplaceDefault.C_PARA_PAGE);
247
248         // Filter the links
249
Vector JavaDoc filteredLinks = (Vector JavaDoc)parameters.get("_HTMLLIST_");
250         int numLinks = filteredLinks.size();
251
252         // Get limits for the requested page
253
int page = new Integer JavaDoc(pageText).intValue();
254         int from = (page - 1) * CmsWorkplaceDefault.C_PICBROWSER_MAXIMAGES;
255         int to = ((from + CmsWorkplaceDefault.C_PICBROWSER_MAXIMAGES) > numLinks) ? numLinks : (from + CmsWorkplaceDefault.C_PICBROWSER_MAXIMAGES);
256         String JavaDoc folder = (String JavaDoc)parameters.get(CmsWorkplaceDefault.C_PARA_FOLDER);
257         if(folder == null) {
258             folder = (String JavaDoc)session.getValue(CmsWorkplaceDefault.C_PARA_FOLDER);
259         }
260         if(folder == null || "".equals(folder)) {
261             folder = getConfigFile(cms).getHtmlGalleryPath();
262             parameters.put(CmsWorkplaceDefault.C_PARA_FOLDER, folder);
263         }
264
265         String JavaDoc linkUrl = CmsXmlTemplateLoader.getRequest(cms.getRequestContext()).getServletUrl() + folder;
266
267         // Generate the link list for all links on the selected page
268
for(int i = from;i < to;i++) {
269             CmsFile file = cms.readFile(cms.getSitePath((CmsFile)filteredLinks.elementAt(i)));
270             String JavaDoc filename = file.getName();
271             String JavaDoc title = cms.readProperty(cms.getSitePath(file), CmsPropertyDefinition.PROPERTY_TITLE);
272
273             // If no "Title" property is given, the title will be set to the filename
274
// without its postfix
275
int dotIndex = filename.lastIndexOf(".");
276             if(title == null) {
277                 if(dotIndex > 0) {
278                     title = filename.substring(0, dotIndex);
279                 }
280                 else {
281                     title = filename;
282                 }
283             }
284
285             // Set all datablocks for the current picture list entry
286
xmlTemplateDocument.setData("linksource", linkUrl + file.getName());
287             xmlTemplateDocument.setData("filename", cms.getSitePath(file));
288             xmlTemplateDocument.setData("title", filename);
289             xmlTemplateDocument.setData("linktext", filename);
290             xmlTemplateDocument.setData("snippetid", "" + i);
291             xmlTemplateDocument.setData("filecontent", new String JavaDoc(file.getContents()));
292             try {
293                 xmlTemplateDocument.setData("filecontent_escaped", CmsEncoder.escape(
294                     new String JavaDoc(file.getContents(), cms.getRequestContext().getEncoding()),
295                     cms.getRequestContext().getEncoding()));
296             } catch (UnsupportedEncodingException JavaDoc e) {
297                 xmlTemplateDocument.setData("filecontent_escaped", CmsEncoder.escape(
298                     new String JavaDoc(file.getContents()),
299                     cms.getRequestContext().getEncoding()));
300             }
301
302             // look if the onclick event must be set
303
String JavaDoc paraSetOnClick = (String JavaDoc)session.getValue("htmlBrowser_for_ext_nav");
304             String JavaDoc setOnClick = "";
305             if ("true".equals(paraSetOnClick)){
306                 setOnClick = xmlTemplateDocument.getProcessedDataValue("clickentry");
307             }
308             xmlTemplateDocument.setData("toclickornot", setOnClick);
309             result.append(xmlTemplateDocument.getProcessedDataValue("htmllistentry", this, userObj));
310         }
311         return result.toString();
312     }
313
314     /**
315      * Used by the workplace "back" button to decide whether the icon should
316      * be activated or not. A button will use this method if the attribute <code>method="showBackButton"</code>
317      * is defined in the <code>&lt;BUTTON&gt;</code> tag.
318      * <P>
319      * This method returns <code>false</code> if the currently displayed page is
320      * the first page.
321      *
322      * @param cms CmsObject Object for accessing system resources <em>(not used here)</em>.
323      * @param lang reference to the currently valid language file <em>(not used here)</em>.
324      * @param parameters Hashtable containing all user parameters <em>(not used here)</em>.
325      * @return <code>true</code> if the button should be enabled, <code>false</code> otherwise.
326      */

327
328     public Boolean JavaDoc showBackButton(CmsObject cms, CmsXmlLanguageFile lang, Hashtable JavaDoc parameters) {
329
330         // Get the current page number
331
String JavaDoc pageText = (String JavaDoc)parameters.get(CmsWorkplaceDefault.C_PARA_PAGE);
332         int page = new Integer JavaDoc(pageText).intValue();
333         return new Boolean JavaDoc(page > 1);
334     }
335
336     /**
337      * Used by the workplace "next" button to decide whether the icon should
338      * be activated or not. A button will use this method if the attribute <code>method="showNextButton"</code>
339      * is defined in the <code>&lt;BUTTON&gt;</code> tag.
340      * <P>
341      * This method returns <code>false</code> if the currently displayed page is
342      * the last page.
343      *
344      * @param cms CmsObject Object for accessing system resources <em>(not used here)</em>.
345      * @param lang reference to the currently valid language file <em>(not used here)</em>.
346      * @param parameters Hashtable containing all user parameters <em>(not used here)</em>.
347      * @return <code>true</code> if the button should be enabled, <code>false</code> otherwise.
348      */

349
350     public Boolean JavaDoc showNextButton(CmsObject cms, CmsXmlLanguageFile lang, Hashtable JavaDoc parameters) {
351
352         // Get the current page number
353
String JavaDoc pageText = (String JavaDoc)parameters.get(CmsWorkplaceDefault.C_PARA_PAGE);
354         int page = new Integer JavaDoc(pageText).intValue();
355
356         // get the number of links
357
Vector JavaDoc filteredLinks = (Vector JavaDoc)parameters.get("_HTMLLIST_");
358         int numLinks = filteredLinks.size();
359
360         // Get the maximum page number
361
int maxpage = ((numLinks - 1) / CmsWorkplaceDefault.C_PICBROWSER_MAXIMAGES) + 1;
362         return new Boolean JavaDoc(page < maxpage);
363     }
364 }
365
Popular Tags