KickJava   Java API By Example, From Geeks To Geeks.

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


1 /*
2 * File : $Source: /usr/local/cvs/opencms/src-modules/com/opencms/workplace/CmsDownloadBrowser.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.db.CmsUserSettings;
33 import org.opencms.file.CmsFile;
34 import org.opencms.file.CmsObject;
35 import org.opencms.file.CmsPropertyDefinition;
36 import org.opencms.file.CmsResource;
37 import org.opencms.i18n.CmsEncoder;
38 import org.opencms.main.CmsException;
39 import org.opencms.main.CmsLog;
40
41 import com.opencms.core.I_CmsSession;
42 import com.opencms.legacy.CmsXmlTemplateLoader;
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 download browser.
50  * <P>
51  *
52  * @author Mario Stanke
53  * @version $Revision: 1.4 $ $Date: 2005/06/27 23:22:07 $
54  * @see com.opencms.workplace.CmsXmlWpTemplateFile
55  *
56  * @deprecated Will not be supported past the OpenCms 6 release.
57  */

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

72
73     public byte[] getContent(CmsObject cms, String JavaDoc templateFile, String JavaDoc elementName, Hashtable JavaDoc parameters, String JavaDoc templateSelector) throws CmsException {
74         if(CmsLog.getLog(this).isDebugEnabled() && C_DEBUG) {
75             CmsLog.getLog(this).debug("Getting content of element " + ((elementName==null)?"<root>":elementName));
76             CmsLog.getLog(this).debug("Template file is: " + templateFile);
77             CmsLog.getLog(this).debug("Selected template section is: " + ((templateSelector==null)?"<default>":templateSelector));
78         }
79         I_CmsSession session = CmsXmlTemplateLoader.getSession(cms.getRequestContext(), true);
80         CmsXmlWpTemplateFile xmlTemplateDocument = (CmsXmlWpTemplateFile)getOwnTemplateFile(cms,
81                 templateFile, elementName, parameters, templateSelector);
82
83         // test whether the download folder exists at all
84
try {
85             cms.readResource(getConfigFile(cms).getDownGalleryPath());
86         }
87         catch(CmsException e) {
88             xmlTemplateDocument.setData("ERRORDETAILS", CmsException.getStackTraceAsString(e));
89             templateSelector = "error";
90         }
91         if(!"error".equals(templateSelector)) {
92
93             // clear session parameters of first load
94
if(parameters.get(CmsWorkplaceDefault.C_PARA_INITIAL) != null) {
95                 session.removeValue(CmsWorkplaceDefault.C_PARA_FOLDER);
96                 session.removeValue(CmsWorkplaceDefault.C_PARA_PAGE);
97                 session.removeValue("_DOWNLIST_");
98                 session.removeValue(CmsWorkplaceDefault.C_PARA_FILTER);
99                 session.removeValue("numfiles");
100                 session.removeValue("lasturl");
101             }
102
103             // most parameters have to be stored in the session because 'getFiles' needs them
104
String JavaDoc folder = (String JavaDoc)parameters.get(CmsWorkplaceDefault.C_PARA_FOLDER);
105             if(folder != null) {
106                 session.putValue(CmsWorkplaceDefault.C_PARA_FOLDER, folder);
107             }
108             folder = (String JavaDoc)session.getValue(CmsWorkplaceDefault.C_PARA_FOLDER);
109             if(folder == null || "".equals(folder)) {
110                 folder = getConfigFile(cms).getDownGalleryPath();
111                 List JavaDoc galleries = cms.getSubFolders(folder);
112                 if(galleries.size() > 0) {
113
114                     // take the first gallery
115
folder = cms.getSitePath((CmsResource)galleries.get(0));
116                     session.putValue(CmsWorkplaceDefault.C_PARA_FOLDER, folder);
117                 }
118                 else {
119
120                     // there was a C_VFS_GALLERY_DOWNLOAD - folder but no gallery in it
121
templateSelector = "error_no_gallery";
122                 }
123             }
124             if(!"error_no_gallery".equals(templateSelector)) {
125                 String JavaDoc pageText = (String JavaDoc)parameters.get(CmsWorkplaceDefault.C_PARA_PAGE);
126                 String JavaDoc filter = (String JavaDoc)parameters.get(CmsWorkplaceDefault.C_PARA_FILTER);
127                 
128                 // check if the user requested a file deletion
129
String JavaDoc deleteAction = (String JavaDoc)parameters.get("action");
130                 if ("delete".equals(deleteAction)) {
131                     String JavaDoc deleteResource = (String JavaDoc)parameters.get("resource");
132                     if (deleteResource != null && !"".equals(deleteResource)) {
133                         try {
134                             // lock and delete the resource
135
CmsResource res = cms.readResource(deleteResource);
136                             if (cms.getLock(res).isNullLock()) {
137                                 cms.lockResource(deleteResource);
138                             }
139                             cms.deleteResource(deleteResource, CmsResource.DELETE_PRESERVE_SIBLINGS);
140                         } catch (CmsException e) {
141                             xmlTemplateDocument.setData("ERRORDETAILS", CmsException.getStackTraceAsString(e));
142                             templateSelector = "error";
143                             return startProcessing(cms, xmlTemplateDocument, elementName, parameters, templateSelector);
144                         }
145                     }
146                 }
147
148
149
150                 // Check if the user requested a certain page number
151
if(pageText == null || "".equals(pageText)) {
152                     pageText = "1";
153                     parameters.put(CmsWorkplaceDefault.C_PARA_PAGE, pageText);
154                 }
155                 session.putValue(CmsWorkplaceDefault.C_PARA_PAGE, pageText);
156
157                 // Check if the user requested a filter
158
if(filter == null) {
159                     filter = "";
160                     session.putValue(CmsWorkplaceDefault.C_PARA_FILTER, filter);
161                     parameters.put(CmsWorkplaceDefault.C_PARA_FILTER, filter);
162                 }
163
164                 // Compute the maximum page number
165
Vector JavaDoc filteredFiles = getFilteredDownList(cms, folder, filter);
166                 int maxpage = ((filteredFiles.size() - 1) / CmsWorkplaceDefault.C_DOWNBROWSER_MAXENTRIES) + 1;
167
168                 // Now set the appropriate datablocks
169
xmlTemplateDocument.setData(CmsWorkplaceDefault.C_PARA_FOLDER, CmsEncoder.escape(folder,
170                     cms.getRequestContext().getEncoding()));
171                 xmlTemplateDocument.setData(CmsWorkplaceDefault.C_PARA_PAGE, pageText);
172                 xmlTemplateDocument.setData(CmsWorkplaceDefault.C_PARA_FILTER, filter);
173                 xmlTemplateDocument.setData(CmsWorkplaceDefault.C_PARA_MAXPAGE, "" + maxpage);
174                 session.putValue("_DOWNLIST_", filteredFiles);
175                 session.putValue("numfiles", new Integer JavaDoc(filteredFiles.size())); // for 'showNextButton'
176
}
177         }
178
179         // Start the processing
180
return startProcessing(cms, xmlTemplateDocument, elementName, parameters,
181                 templateSelector);
182     }
183
184     /**
185      * From interface <code>I_CmsFileListUsers</code>.
186      * <P>
187      * Fills all customized columns with the appropriate settings for the given file
188      * list entry. Any column filled by this method may be used in the customized template
189      * for the file list.
190      * @param cms Cms object for accessing system resources.
191      * @param filelist Template file containing the definitions for the file list together with
192      * the included customized defintions.
193      * @param res CmsResource Object of the current file list entry.
194      * @param lang Current language file.
195      * @throws CmsException if access to system resources failed.
196      * @see I_CmsFileListUsers
197      */

198
199     public void getCustomizedColumnValues(CmsObject cms, CmsXmlWpTemplateFile filelistTemplate,
200             CmsResource res, CmsXmlLanguageFile lang) throws CmsException {
201         String JavaDoc servletPath = CmsXmlTemplateLoader.getRequest(cms.getRequestContext()).getServletUrl();
202         String JavaDoc downloadPath = servletPath + cms.getSitePath(res);
203         filelistTemplate.setData("fullpath", downloadPath);
204         filelistTemplate.setData("name_value", res.getName());
205         filelistTemplate.setData("filepath", cms.getSitePath(res));
206         if ((cms.getPermissions(cms.getSitePath(res)).getPermissions() & com.opencms.core.I_CmsConstants.C_ACCESS_WRITE) > 0 ) {
207             filelistTemplate.setData("delete", filelistTemplate.getProcessedDataValue("deleteentry", this));
208         } else {
209             filelistTemplate.setData("delete", "&nbsp;");
210         }
211
212         String JavaDoc title = "";
213         try {
214             title = cms.readProperty(cms.getSitePath(res), CmsPropertyDefinition.PROPERTY_TITLE);
215         }
216         catch(CmsException e) {
217
218         }
219         if(title == null) {
220             title = "";
221         }
222         filelistTemplate.setData("title_value", title);
223     }
224
225     public Integer JavaDoc getDownGalleryNames(CmsObject cms, CmsXmlLanguageFile lang,
226             Vector JavaDoc names, Vector JavaDoc values, Hashtable JavaDoc parameters) throws CmsException {
227         return getGalleryNames(cms, getConfigFile(cms).getDownGalleryPath(), lang, names, values, parameters);
228     }
229
230     /**
231      * From interface <code>I_CmsFileListUsers</code>.
232      * <P>
233      * Collects all files in the chosen download gallery list.
234      * @param cms The CmsObject.
235      * @return A vector of folder and file objects.
236      * @throws Throws CmsException if something goes wrong.
237      */

238
239     public List JavaDoc getFiles(CmsObject cms) throws CmsException {
240         I_CmsSession session = CmsXmlTemplateLoader.getSession(cms.getRequestContext(), true);
241         Vector JavaDoc files = new Vector JavaDoc();
242
243         // get the list of filtered files from session
244
Vector JavaDoc filteredFiles = (Vector JavaDoc)session.getValue("_DOWNLIST_");
245         int numFiles = filteredFiles.size();
246
247         // Get limits for the requested page
248
String JavaDoc pageText = (String JavaDoc)session.getValue(CmsWorkplaceDefault.C_PARA_PAGE);
249         if(pageText == null || "".equals(pageText)) {
250             pageText = "1";
251         }
252         int page = new Integer JavaDoc(pageText).intValue();
253         int from = (page - 1) * CmsWorkplaceDefault.C_DOWNBROWSER_MAXENTRIES;
254         int to = ((from + CmsWorkplaceDefault.C_DOWNBROWSER_MAXENTRIES) > numFiles) ? numFiles : (from + CmsWorkplaceDefault.C_DOWNBROWSER_MAXENTRIES);
255         String JavaDoc folder = (String JavaDoc)session.getValue(CmsWorkplaceDefault.C_PARA_FOLDER);
256         if(folder == null || "".equals(folder)) {
257             folder = getConfigFile(cms).getDownGalleryPath();
258             List JavaDoc galleries = cms.getSubFolders(folder);
259             if(galleries.size() > 0) {
260
261                 // take the first gallery if none was chosen
262
folder = cms.getSitePath((CmsResource)galleries.get(0));
263             }
264             session.putValue(CmsWorkplaceDefault.C_PARA_FOLDER, folder);
265         }
266
267         // Generate the download list for all files on the selected page
268
for(int i = from;i < to;i++) {
269             CmsResource currFile = (CmsResource)filteredFiles.elementAt(i);
270             files.addElement(currFile);
271         }
272         return files;
273     }
274
275     /**
276      * Internal method for getting a vector of all files that match a given filter
277      * i.e., <code>filter</code> is a substring of the name or the title
278      *
279      * @param cms Cms object for accessing system resources.
280      * @param folder Folder to look for files.
281      * @param filter Search pattern that should be used.
282      * @return Vector of CmsFile objects.
283      */

284
285     protected Vector JavaDoc getFilteredDownList(CmsObject cms, String JavaDoc folder, String JavaDoc filter)
286             throws CmsException {
287
288         // Get all pictures in the given folder using the cms object
289
List JavaDoc allFiles = cms.getFilesInFolder(folder);
290
291         // Filter the files
292
Vector JavaDoc filteredFiles = new Vector JavaDoc();
293         for(int i=0; i<allFiles.size(); i++) {
294             CmsFile file = (CmsFile)allFiles.get(i);
295             if (file.getState() != CmsResource.STATE_DELETED) {
296                 String JavaDoc filename = file.getName();
297                 String JavaDoc title = cms.readProperty(cms.getSitePath(file), CmsPropertyDefinition.PROPERTY_TITLE);
298                 boolean filenameFilter = inFilter(filename, filter);
299                 boolean titleFilter = ((title == null) || ("".equals(title))) ? false : inFilter(title, filter);
300                 if (filenameFilter || titleFilter) {
301                     filteredFiles.addElement(file);
302                 }
303             }
304         }
305         return filteredFiles;
306     }
307
308     /**
309      * Indicates if the results of this class are cacheable.
310      *
311      * @param cms CmsObject Object for accessing system resources
312      * @param templateFile Filename of the template file
313      * @param elementName Element name of this template in our parent template.
314      * @param parameters Hashtable with all template class parameters.
315      * @param templateSelector template section that should be processed.
316      * @return <EM>true</EM> if cacheable, <EM>false</EM> otherwise.
317      */

318
319     public boolean isCacheable(CmsObject cms, String JavaDoc templateFile, String JavaDoc elementName,
320             Hashtable JavaDoc parameters, String JavaDoc templateSelector) {
321         return false;
322     }
323
324     /**
325      * From interface <code>I_CmsFileListUsers</code>.
326      * <P>
327      * Used to modify the bit pattern for hiding and showing columns in
328      * the file list.
329      * @param cms Cms object for accessing system resources.
330      * @param prefs Old bit pattern.
331      * @return New modified bit pattern.
332      * @see I_CmsFileListUsers
333      */

334
335     public int modifyDisplayedColumns(CmsObject cms, int prefs) {
336
337         // not display the following columns
338
prefs = ((prefs & CmsUserSettings.FILELIST_NAME) == 0) ? prefs : (prefs - CmsUserSettings.FILELIST_NAME);
339         prefs = ((prefs & CmsUserSettings.FILELIST_TITLE) == 0) ? prefs : (prefs - CmsUserSettings.FILELIST_TITLE);
340         prefs = ((prefs & CmsUserSettings.FILELIST_USER_CREATED) == 0) ? prefs : (prefs - CmsUserSettings.FILELIST_USER_CREATED);
341         prefs = ((prefs & CmsWorkplaceDefault.C_FILELIST_GROUP) == 0) ? prefs : (prefs - CmsWorkplaceDefault.C_FILELIST_GROUP);
342         prefs = ((prefs & CmsUserSettings.FILELIST_PERMISSIONS) == 0) ? prefs : (prefs - CmsUserSettings.FILELIST_PERMISSIONS);
343         prefs = ((prefs & CmsUserSettings.FILELIST_STATE) == 0) ? prefs : (prefs - CmsUserSettings.FILELIST_STATE);
344         prefs = ((prefs & CmsUserSettings.FILELIST_LOCKEDBY) == 0) ? prefs : (prefs - CmsUserSettings.FILELIST_LOCKEDBY);
345         return prefs;
346     }
347
348     /**
349      * Used by the workplace "back" button to decide whether the icon should
350      * be activated or not. A button will use this method if the attribute <code>method="showBackButton"</code>
351      * is defined in the <code>&lt;BUTTON&gt;</code> tag.
352      * <P>
353      * This method returns <code>false</code> if the currently displayed page is
354      * the first page.
355      *
356      * @param cms CmsObject Object for accessing system resources <em>(not used here)</em>.
357      * @param lang reference to the currently valid language file <em>(not used here)</em>.
358      * @param parameters Hashtable containing all user parameters <em>(not used here)</em>.
359      * @return <code>true</code> if the button should be enabled, <code>false</code> otherwise.
360      */

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

384
385     public Boolean JavaDoc showNextButton(CmsObject cms, CmsXmlLanguageFile lang,
386             Hashtable JavaDoc parameters) {
387         I_CmsSession session = CmsXmlTemplateLoader.getSession(cms.getRequestContext(), true);
388
389         // Get the current page number
390
String JavaDoc pageText = (String JavaDoc)parameters.get(CmsWorkplaceDefault.C_PARA_PAGE);
391         int page = new Integer JavaDoc(pageText).intValue();
392
393         // get the number of pics
394
int numFiles = ((Integer JavaDoc)session.getValue("numfiles")).intValue();
395
396         // Get the maximum page number
397
int maxpage = ((numFiles - 1) / CmsWorkplaceDefault.C_DOWNBROWSER_MAXENTRIES) + 1;
398         return new Boolean JavaDoc(page < maxpage);
399     }
400 }
401
Popular Tags