KickJava   Java API By Example, From Geeks To Geeks.

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


1 /*
2 * File : $Source: /usr/local/cvs/opencms/src-modules/com/opencms/workplace/CmsLinkBrowser.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.util.Hashtable JavaDoc;
45 import java.util.List JavaDoc;
46 import java.util.Vector JavaDoc;
47
48 /**
49  * Template class for displaying OpenCms picture browser.
50  * <P>
51  * Reads template files of the content type <code>CmsXmlWpTemplateFile</code>.
52  *
53  * @author Edna Falkenhan
54  * @version $Revision: 1.4 $ $Date: 2005/06/27 23:22:07 $
55  * @see com.opencms.workplace.CmsXmlWpTemplateFile
56  *
57  * @deprecated Will not be supported past the OpenCms 6 release.
58  */

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

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

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

201
202     public Integer JavaDoc getLinkGalleryNames(CmsObject cms, CmsXmlLanguageFile lang,
203             Vector JavaDoc names, Vector JavaDoc values, Hashtable JavaDoc parameters) throws CmsException {
204         int ret = -1;
205         I_CmsSession session = CmsXmlTemplateLoader.getSession(cms.getRequestContext(), true);
206
207         // which folder is the gallery?
208
String JavaDoc chosenFolder = (String JavaDoc)parameters.get(CmsWorkplaceDefault.C_PARA_FOLDER);
209         if(chosenFolder == null) {
210             chosenFolder = (String JavaDoc)session.getValue(CmsWorkplaceDefault.C_PARA_FOLDER);
211         }
212         if(chosenFolder == null) {
213             chosenFolder = "";
214         }
215         List JavaDoc folders = cms.getSubFolders(CmsWorkplaceDefault.C_VFS_GALLERY_EXTERNALLINKS);
216         int numFolders = folders.size();
217         for(int i = 0;i < numFolders;i++) {
218             CmsResource currFolder = (CmsResource)folders.get(i);
219             String JavaDoc name = currFolder.getName();
220             if(chosenFolder.equals(cms.getSitePath(currFolder))) {
221                 ret = i;
222             }
223             values.addElement(cms.getSitePath(currFolder));
224             names.addElement(name);
225         }
226         return new Integer JavaDoc(ret);
227     }
228
229     /**
230      * Checks, if the given filename matches the filter.
231      * @param filename filename to be checked.
232      * @param filter filter to be checked.
233      * @return <code>true</code> if the filename matches the filter, <code>false</code> otherwise.
234      */

235
236     private boolean inFilter(String JavaDoc name, String JavaDoc filter) {
237         String JavaDoc compareName = name.toLowerCase();
238         String JavaDoc compareFilter = filter.toLowerCase();
239         if("".equals(compareFilter) || (compareName.indexOf(compareFilter) != -1)) {
240             return true;
241         }
242         else {
243             return false;
244         }
245     }
246
247     /**
248      * Indicates if the results of this class are cacheable.
249      *
250      * @param cms CmsObject Object for accessing system resources
251      * @param templateFile Filename of the template file
252      * @param elementName Element name of this template in our parent template.
253      * @param parameters Hashtable with all template class parameters.
254      * @param templateSelector template section that should be processed.
255      * @return <EM>true</EM> if cacheable, <EM>false</EM> otherwise.
256      */

257
258     public boolean isCacheable(CmsObject cms, String JavaDoc templateFile, String JavaDoc elementName,
259             Hashtable JavaDoc parameters, String JavaDoc templateSelector) {
260         return false;
261     }
262
263     /**
264      * User method to generate an URL for the pics folder.
265      * <P>
266      * All pictures should reside in the docroot of the webserver for
267      * performance reasons. This folder can be mounted into the OpenCms system to
268      * make it accessible for the OpenCms explorer.
269      * <P>
270      * The path to the docroot can be set in the workplace ini.
271      *
272      * @param cms CmsObject Object for accessing system resources.
273      * @param tagcontent Unused in this special case of a user method. Can be ignored.
274      * @param doc Reference to the A_CmsXmlContent object of the initiating XLM document <em>(not used here)</em>.
275      * @param userObj Hashtable with parameters <em>(not used here)</em>.
276      * @return String with the pics URL.
277      * @throws CmsException
278      */

279
280     public Object JavaDoc linkList(CmsObject cms, String JavaDoc tagcontent, A_CmsXmlContent doc,
281             Object JavaDoc userObj) throws CmsException {
282         I_CmsSession session = CmsXmlTemplateLoader.getSession(cms.getRequestContext(), true);
283         Hashtable JavaDoc parameters = (Hashtable JavaDoc)userObj;
284         CmsXmlWpTemplateFile xmlTemplateDocument = (CmsXmlWpTemplateFile)doc;
285         StringBuffer JavaDoc result = new StringBuffer JavaDoc();
286         String JavaDoc pageText = (String JavaDoc)parameters.get(CmsWorkplaceDefault.C_PARA_PAGE);
287
288         // Filter the links
289
Vector JavaDoc filteredLinks = (Vector JavaDoc)parameters.get("_LINKLIST_");
290         int numLinks = filteredLinks.size();
291
292         // Get limits for the requested page
293
int page = new Integer JavaDoc(pageText).intValue();
294         int from = (page - 1) * CmsWorkplaceDefault.C_PICBROWSER_MAXIMAGES;
295         int to = ((from + CmsWorkplaceDefault.C_PICBROWSER_MAXIMAGES) > numLinks) ? numLinks : (from + CmsWorkplaceDefault.C_PICBROWSER_MAXIMAGES);
296         String JavaDoc folder = (String JavaDoc)parameters.get(CmsWorkplaceDefault.C_PARA_FOLDER);
297         if(folder == null) {
298             folder = (String JavaDoc)session.getValue(CmsWorkplaceDefault.C_PARA_FOLDER);
299         }
300         if(folder == null || "".equals(folder)) {
301             folder = CmsWorkplaceDefault.C_VFS_GALLERY_EXTERNALLINKS;
302             parameters.put(CmsWorkplaceDefault.C_PARA_FOLDER, folder);
303         }
304
305         String JavaDoc linkUrl = CmsXmlTemplateLoader.getRequest(cms.getRequestContext()).getServletUrl() + folder;
306
307         // Generate the link list for all links on the selected page
308
for(int i = from;i < to;i++) {
309             CmsFile file = cms.readFile(cms.getSitePath((CmsFile)filteredLinks.elementAt(i)));
310             String JavaDoc filename = file.getName();
311             String JavaDoc title = cms.readProperty(cms.getSitePath(file), CmsPropertyDefinition.PROPERTY_TITLE);
312
313             // If no "Title" property is given, the title will be set to the filename
314
// without its postfix
315
int dotIndex = filename.lastIndexOf(".");
316             if(title == null) {
317                 if(dotIndex > 0) {
318                     title = filename.substring(0, dotIndex);
319                 }
320                 else {
321                     title = filename;
322                 }
323             }
324
325             // Set all datablocks for the current picture list entry
326
xmlTemplateDocument.setData("linksource", linkUrl + file.getName());
327             xmlTemplateDocument.setData("filename", cms.getSitePath(file));
328             xmlTemplateDocument.setData("title", title);
329             xmlTemplateDocument.setData("linktext", filename);
330             xmlTemplateDocument.setData("url", new String JavaDoc(file.getContents()));
331
332             // look if the onclick event must be set
333
String JavaDoc paraSetOnClick = (String JavaDoc)session.getValue("linkBrowser_for_ext_nav");
334             String JavaDoc setOnClick = "";
335             if ("true".equals(paraSetOnClick)){
336                 setOnClick = xmlTemplateDocument.getProcessedDataValue("clickentry");
337             }
338             xmlTemplateDocument.setData("toclickornot", setOnClick);
339             result.append(xmlTemplateDocument.getProcessedDataValue("linklistentry", this, userObj));
340         }
341         return result.toString();
342     }
343
344     /**
345      * Used by the workplace "back" button to decide whether the icon should
346      * be activated or not. A button will use this method if the attribute <code>method="showBackButton"</code>
347      * is defined in the <code>&lt;BUTTON&gt;</code> tag.
348      * <P>
349      * This method returns <code>false</code> if the currently displayed page is
350      * the first page.
351      *
352      * @param cms CmsObject Object for accessing system resources <em>(not used here)</em>.
353      * @param lang reference to the currently valid language file <em>(not used here)</em>.
354      * @param parameters Hashtable containing all user parameters <em>(not used here)</em>.
355      * @return <code>true</code> if the button should be enabled, <code>false</code> otherwise.
356      */

357
358     public Boolean JavaDoc showBackButton(CmsObject cms, CmsXmlLanguageFile lang, Hashtable JavaDoc parameters) {
359
360         // Get the current page number
361
String JavaDoc pageText = (String JavaDoc)parameters.get(CmsWorkplaceDefault.C_PARA_PAGE);
362         int page = new Integer JavaDoc(pageText).intValue();
363         return new Boolean JavaDoc(page > 1);
364     }
365
366     /**
367      * Used by the workplace "next" button to decide whether the icon should
368      * be activated or not. A button will use this method if the attribute <code>method="showNextButton"</code>
369      * is defined in the <code>&lt;BUTTON&gt;</code> tag.
370      * <P>
371      * This method returns <code>false</code> if the currently displayed page is
372      * the last page.
373      *
374      * @param cms CmsObject Object for accessing system resources <em>(not used here)</em>.
375      * @param lang reference to the currently valid language file <em>(not used here)</em>.
376      * @param parameters Hashtable containing all user parameters <em>(not used here)</em>.
377      * @return <code>true</code> if the button should be enabled, <code>false</code> otherwise.
378      */

379
380     public Boolean JavaDoc showNextButton(CmsObject cms, CmsXmlLanguageFile lang, Hashtable JavaDoc parameters) {
381
382         // Get the current page number
383
String JavaDoc pageText = (String JavaDoc)parameters.get(CmsWorkplaceDefault.C_PARA_PAGE);
384         int page = new Integer JavaDoc(pageText).intValue();
385
386         // get the number of links
387
Vector JavaDoc filteredLinks = (Vector JavaDoc)parameters.get("_LINKLIST_");
388         int numLinks = filteredLinks.size();
389
390         // Get the maximum page number
391
int maxpage = ((numLinks - 1) / CmsWorkplaceDefault.C_PICBROWSER_MAXIMAGES) + 1;
392         return new Boolean JavaDoc(page < maxpage);
393     }
394 }
395
Popular Tags