KickJava   Java API By Example, From Geeks To Geeks.

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


1 /*
2 * File : $Source: /usr/local/cvs/opencms/src-modules/com/opencms/workplace/CmsPictureBrowser.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 Alexander Lucas
54  * @author Mario Stanke
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 CmsPictureBrowser 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 pics folder exists at all
86
try {
87             cms.readResource(getConfigFile(cms).getPicGalleryPath());
88         }
89         catch(CmsException e) {
90             xmlTemplateDocument.setData("ERRORDETAILS", CmsException.getStackTraceAsString(e));
91             templateSelector = "error";
92         }
93         if(!"error".equals(templateSelector)) {
94             if(parameters.get(CmsWorkplaceDefault.C_PARA_INITIAL) != null) {
95                 session.removeValue(CmsWorkplaceDefault.C_PARA_FOLDER);
96                 session.removeValue("picBrowser_for_ext_nav");
97             }
98             String JavaDoc setOnClick = (String JavaDoc)parameters.get("setonclick");
99             if(setOnClick != null){
100                 session.putValue("picBrowser_for_ext_nav", setOnClick);
101             }
102             setOnClick = (String JavaDoc)session.getValue("picBrowser_for_ext_nav");
103             String JavaDoc folder = (String JavaDoc)parameters.get(CmsWorkplaceDefault.C_PARA_FOLDER);
104             if(folder != null) {
105                 session.putValue(CmsWorkplaceDefault.C_PARA_FOLDER, folder);
106             }
107             folder = (String JavaDoc)session.getValue(CmsWorkplaceDefault.C_PARA_FOLDER);
108             if(folder == null || "".equals(folder)) {
109                 folder = getConfigFile(cms).getPicGalleryPath();
110                 List JavaDoc galleries = cms.getSubFolders(folder);
111                 if(galleries.size() > 0) {
112
113                     // take the first gallery
114
folder = cms.getSitePath((CmsResource)galleries.get(0));
115                     session.putValue(CmsWorkplaceDefault.C_PARA_FOLDER, folder);
116                 }
117                 else {
118
119                     // there was a C_VFS_GALLERY_PICS - folder but no galery in it
120
templateSelector = "error_no_gallery";
121                 }
122             }
123             if(!"error_no_gallery".equals(templateSelector)) {
124                 String JavaDoc pageText = (String JavaDoc)parameters.get(CmsWorkplaceDefault.C_PARA_PAGE);
125                 String JavaDoc filter = (String JavaDoc)parameters.get(CmsWorkplaceDefault.C_PARA_FILTER);
126                 
127                 // check if the user requested a file deletion
128
String JavaDoc deleteAction = (String JavaDoc)parameters.get("action");
129                 if ("delete".equals(deleteAction)) {
130                     String JavaDoc deleteResource = (String JavaDoc)parameters.get("resource");
131                     if (deleteResource != null && !"".equals(deleteResource)) {
132                         try {
133                             // lock and delete the resource
134
CmsResource res = cms.readResource(deleteResource);
135                             if (cms.getLock(res).isNullLock()) {
136                                 cms.lockResource(deleteResource);
137                             }
138                             cms.deleteResource(deleteResource, CmsResource.DELETE_PRESERVE_SIBLINGS);
139                         } catch (CmsException e) {
140                             xmlTemplateDocument.setData("ERRORDETAILS", CmsException.getStackTraceAsString(e));
141                             templateSelector = "error";
142                             return startProcessing(cms, xmlTemplateDocument, elementName, parameters, templateSelector);
143                         }
144                     }
145                 }
146
147                 // Check if the user requested a special page
148
if(pageText == null || "".equals(pageText)) {
149                     pageText = "1";
150                     parameters.put(CmsWorkplaceDefault.C_PARA_PAGE, pageText);
151                 }
152
153                 // Check if the user requested a filter
154
if(filter == null) {
155                     filter = "";
156                     parameters.put(CmsWorkplaceDefault.C_PARA_FILTER, filter);
157                 }
158
159                 // Compute the maximum page number
160
Vector JavaDoc filteredPics = getFilteredPicList(cms, folder, filter);
161                 int maxpage = ((filteredPics.size() - 1) / CmsWorkplaceDefault.C_PICBROWSER_MAXIMAGES) + 1;
162
163                 // Now set the appropriate datablocks
164
xmlTemplateDocument.setData(CmsWorkplaceDefault.C_PARA_FOLDER, CmsEncoder.escape(folder,
165                     cms.getRequestContext().getEncoding()));
166                 xmlTemplateDocument.setData(CmsWorkplaceDefault.C_PARA_PAGE, pageText);
167                 xmlTemplateDocument.setData(CmsWorkplaceDefault.C_PARA_FILTER, filter);
168                 xmlTemplateDocument.setData(CmsWorkplaceDefault.C_PARA_MAXPAGE, "" + maxpage);
169                 if(setOnClick == null || !"true".equals(setOnClick)){
170                     xmlTemplateDocument.setData("setonclick", "");
171                 }else{
172                     xmlTemplateDocument.setData("setonclick", "true");
173                 }
174                 parameters.put("_PICLIST_", filteredPics);
175             }
176         }
177
178         // Start the processing
179
return startProcessing(cms, xmlTemplateDocument, elementName, parameters, templateSelector);
180     }
181
182     /**
183      * Internal method for getting a vector of all pictures using
184      * a given filter.
185      * @param cms Cms object for accessing system resources.
186      * @param folder Folder to look for pictures.
187      * @param filter Search pattern that should be used.
188      * @return Vector of CmsFile objects.
189      */

190
191     protected Vector JavaDoc getFilteredPicList(CmsObject cms, String JavaDoc folder, String JavaDoc filter) throws CmsException {
192
193         // Get all pictures in the given folder using the cms object
194
List JavaDoc allPics = cms.getFilesInFolder(folder);
195
196         // Filter the pics
197
Vector JavaDoc filteredPics = new Vector JavaDoc();
198         for(int i = 0;i < allPics.size();i++) {
199             CmsFile file = (CmsFile)allPics.get(i);
200             if (file.getState() != CmsResource.STATE_DELETED) {
201                 String JavaDoc filename = file.getName();
202                 String JavaDoc title = cms.readProperty(cms.getSitePath(file), CmsPropertyDefinition.PROPERTY_TITLE);
203                 boolean filenameFilter = inFilter(filename, filter);
204                 boolean titleFilter = ((title == null) || ("".equals(title))) ? false : inFilter(title, filter);
205                 if((filenameFilter || titleFilter) && isImage(filename)) {
206                     filteredPics.addElement(file);
207                 }
208             }
209         }
210         return filteredPics;
211     }
212     
213     /**
214      * Gets the filenames of all picture galleries
215      * <P>
216      * The given vectors <code>names</code> and <code>values</code> will
217      * be filled with the appropriate information to be used for building
218      * a select box. The values will be the paths to the galleries.
219      *
220      * @param cms CmsObject Object for accessing system resources.
221      * @param names Vector to be filled with the appropriate values in this method.
222      * @param values Vector to be filled with the appropriate values in this method.
223      * @param parameters Hashtable containing all user parameters <em>(not used here)</em>.
224      * @return Index of the selected Gallery
225      * @throws CmsException
226      */

227     public Integer JavaDoc getPicGalleryNames(CmsObject cms, CmsXmlLanguageFile lang,
228             Vector JavaDoc names, Vector JavaDoc values, Hashtable JavaDoc parameters) throws CmsException {
229         return getGalleryNames(cms, getConfigFile(cms).getPicGalleryPath(), lang, names, values, parameters);
230     }
231
232     /**
233      * Indicates if the results of this class are cacheable.
234      *
235      * @param cms CmsObject Object for accessing system resources
236      * @param templateFile Filename of the template file
237      * @param elementName Element name of this template in our parent template.
238      * @param parameters Hashtable with all template class parameters.
239      * @param templateSelector template section that should be processed.
240      * @return <EM>true</EM> if cacheable, <EM>false</EM> otherwise.
241      */

242
243     public boolean isCacheable(CmsObject cms, String JavaDoc templateFile, String JavaDoc elementName,
244             Hashtable JavaDoc parameters, String JavaDoc templateSelector) {
245         return false;
246     }
247
248     /**
249      * Checks, if the given filename ends with a typical picture suffix.
250      * @param filename filename to be checked.
251      * @return <code>true</code> if the is an image file, <code>false</code> otherwise.
252      */

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

280
281     public Object JavaDoc pictureList(CmsObject cms, String JavaDoc tagcontent, A_CmsXmlContent doc,
282             Object JavaDoc userObj) throws CmsException {
283         I_CmsSession session = CmsXmlTemplateLoader.getSession(cms.getRequestContext(), true);
284         Hashtable JavaDoc parameters = (Hashtable JavaDoc)userObj;
285         CmsXmlWpTemplateFile xmlTemplateDocument = (CmsXmlWpTemplateFile)doc;
286         CmsXmlLanguageFile lang = new CmsXmlLanguageFile(cms);
287         StringBuffer JavaDoc result = new StringBuffer JavaDoc();
288         String JavaDoc pageText = (String JavaDoc)parameters.get(CmsWorkplaceDefault.C_PARA_PAGE);
289
290         // Filter the pics
291
Vector JavaDoc filteredPics = (Vector JavaDoc)parameters.get("_PICLIST_");
292         int numPics = filteredPics.size();
293
294         // Get limits for the requested page
295
int page = new Integer JavaDoc(pageText).intValue();
296         int from = (page - 1) * CmsWorkplaceDefault.C_PICBROWSER_MAXIMAGES;
297         int to = ((from + CmsWorkplaceDefault.C_PICBROWSER_MAXIMAGES) > numPics) ? numPics : (from + CmsWorkplaceDefault.C_PICBROWSER_MAXIMAGES);
298         String JavaDoc folder = (String JavaDoc)parameters.get(CmsWorkplaceDefault.C_PARA_FOLDER);
299         if(folder == null) {
300             folder = (String JavaDoc)session.getValue(CmsWorkplaceDefault.C_PARA_FOLDER);
301         }
302         if(folder == null || "".equals(folder)) {
303             folder = getConfigFile(cms).getPicGalleryPath();
304             parameters.put(CmsWorkplaceDefault.C_PARA_FOLDER, folder);
305         }
306
307         String JavaDoc picsUrl = CmsXmlTemplateLoader.getRequest(cms.getRequestContext()).getServletUrl() + folder;
308
309         // Generate the picture list for all pictures on the selected page
310
for(int i = from;i < to;i++) {
311             CmsFile file = (CmsFile)filteredPics.elementAt(i);
312             String JavaDoc filename = file.getName();
313             String JavaDoc title = cms.readProperty(cms.getSitePath(file), CmsPropertyDefinition.PROPERTY_TITLE);
314
315             // If no "Title" property is given, the title will be set to the filename
316
// without its postfix
317
int dotIndex = filename.lastIndexOf(".");
318             if(title == null) {
319                 if(dotIndex > 0) {
320                     title = filename.substring(0, dotIndex);
321                 }
322                 else {
323                     title = filename;
324                 }
325             }
326
327             // The displayed type will be generated from the filename postfix
328
String JavaDoc type;
329             if(dotIndex > 0) {
330                 type = filename.substring(filename.lastIndexOf(".") + 1).toUpperCase() + "-Bild";
331             }
332             else {
333                 type = lang.getLanguageValue("input.unknown");
334             }
335
336
337             // Set all datablocks for the current picture list entry
338
xmlTemplateDocument.setData("picsource", picsUrl + file.getName());
339             xmlTemplateDocument.setData("filepath", cms.getSitePath(file));
340             xmlTemplateDocument.setData("title", CmsEncoder.escapeXml(title));
341             xmlTemplateDocument.setData("filename", filename);
342             xmlTemplateDocument.setData("size", file.getLength() + " Byte");
343             xmlTemplateDocument.setData("type", type);
344             if ((cms.getPermissions(cms.getSitePath(file)).getPermissions() & com.opencms.core.I_CmsConstants.C_ACCESS_WRITE) > 0 ) {
345                 xmlTemplateDocument.setData("delete", xmlTemplateDocument.getProcessedDataValue("deleteentry", this));
346             } else {
347                 xmlTemplateDocument.setData("delete", "&nbsp;");
348             }
349             // look if the onclick event must be set
350
//String paraSetOnClick = (String)parameters.get("setonclick");
351
String JavaDoc paraSetOnClick = (String JavaDoc)session.getValue("picBrowser_for_ext_nav");
352             String JavaDoc setOnClick = "";
353             if ("true".equals(paraSetOnClick)){
354                 setOnClick = xmlTemplateDocument.getProcessedDataValue("clickentry");
355             }
356             xmlTemplateDocument.setData("toclickornot", setOnClick);
357             result.append(xmlTemplateDocument.getProcessedDataValue("piclistentry", this, userObj));
358
359             // if this is not the last entry on the current page,
360
// append a separator
361
if(i < (to - 1)) {
362                 result.append(xmlTemplateDocument.getProcessedDataValue("part", this, userObj));
363             }
364         }
365         return result.toString();
366     }
367
368     /**
369      * Used by the workplace "back" button to decide whether the icon should
370      * be activated or not. A button will use this method if the attribute <code>method="showBackButton"</code>
371      * is defined in the <code>&lt;BUTTON&gt;</code> tag.
372      * <P>
373      * This method returns <code>false</code> if the currently displayed page is
374      * the first page.
375      *
376      * @param cms CmsObject Object for accessing system resources <em>(not used here)</em>.
377      * @param lang reference to the currently valid language file <em>(not used here)</em>.
378      * @param parameters Hashtable containing all user parameters <em>(not used here)</em>.
379      * @return <code>true</code> if the button should be enabled, <code>false</code> otherwise.
380      */

381
382     public Boolean JavaDoc showBackButton(CmsObject cms, CmsXmlLanguageFile lang, Hashtable JavaDoc parameters) {
383
384         // Get the current page number
385
String JavaDoc pageText = (String JavaDoc)parameters.get(CmsWorkplaceDefault.C_PARA_PAGE);
386         int page = new Integer JavaDoc(pageText).intValue();
387         return new Boolean JavaDoc(page > 1);
388     }
389
390     /**
391      * Used by the workplace "next" button to decide whether the icon should
392      * be activated or not. A button will use this method if the attribute <code>method="showNextButton"</code>
393      * is defined in the <code>&lt;BUTTON&gt;</code> tag.
394      * <P>
395      * This method returns <code>false</code> if the currently displayed page is
396      * the last page.
397      *
398      * @param cms CmsObject Object for accessing system resources <em>(not used here)</em>.
399      * @param lang reference to the currently valid language file <em>(not used here)</em>.
400      * @param parameters Hashtable containing all user parameters <em>(not used here)</em>.
401      * @return <code>true</code> if the button should be enabled, <code>false</code> otherwise.
402      */

403
404     public Boolean JavaDoc showNextButton(CmsObject cms, CmsXmlLanguageFile lang, Hashtable JavaDoc parameters) {
405
406         // Get the current page number
407
String JavaDoc pageText = (String JavaDoc)parameters.get(CmsWorkplaceDefault.C_PARA_PAGE);
408         int page = new Integer JavaDoc(pageText).intValue();
409
410         // get the number of pics
411
Vector JavaDoc filteredPics = (Vector JavaDoc)parameters.get("_PICLIST_");
412         int numPics = filteredPics.size();
413
414         // Get the maximum page number
415
int maxpage = ((numPics - 1) / CmsWorkplaceDefault.C_PICBROWSER_MAXIMAGES) + 1;
416         return new Boolean JavaDoc(page < maxpage);
417     }
418 }
419
Popular Tags