KickJava   Java API By Example, From Geeks To Geeks.

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


1 /*
2 * File : $Source: /usr/local/cvs/opencms/src-modules/com/opencms/workplace/CmsFileList.java,v $
3 * Date : $Date: 2005/06/27 23:22:07 $
4 * Version: $Revision: 1.3 $
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.CmsObject;
34 import org.opencms.file.CmsPropertyDefinition;
35 import org.opencms.file.CmsResource;
36 import org.opencms.file.types.I_CmsResourceType;
37 import org.opencms.i18n.CmsEncoder;
38 import org.opencms.lock.CmsLock;
39 import org.opencms.main.CmsException;
40 import org.opencms.main.OpenCms;
41 import org.opencms.security.CmsPermissionSet;
42 import org.opencms.util.CmsUUID;
43 import org.opencms.workplace.CmsWorkplace;
44
45 import com.opencms.legacy.CmsLegacyException;
46 import com.opencms.legacy.CmsXmlTemplateLoader;
47 import com.opencms.template.A_CmsXmlContent;
48
49 import java.util.Calendar JavaDoc;
50 import java.util.Date JavaDoc;
51 import java.util.GregorianCalendar JavaDoc;
52 import java.util.Hashtable JavaDoc;
53 import java.util.Iterator JavaDoc;
54 import java.util.List JavaDoc;
55
56 import org.w3c.dom.Element JavaDoc;
57
58 /**
59  * Class for building a file list. <BR>
60  * Called by CmsXmlTemplateFile for handling the special XML tag <code>&lt;FILELIST&gt;</code>.
61  * <P>
62  * Any template class using the workplace filelist has to implement <code>I_CmsFileListUsers</code>.
63  * The given argument <code>callingObject</code> will be checked for this implementation
64  * before starting to generate the file list. See <code>I_CmsFileListUsers</code> for
65  * more details.
66  *
67  * @author Michael Emmerich
68  * @author Alexander Lucas
69  * @author Mario Stanke
70  * @version $Revision: 1.3 $ $Date: 2005/06/27 23:22:07 $
71  * @see com.opencms.workplace.CmsXmlWpTemplateFile
72  *
73  * @deprecated Will not be supported past the OpenCms 6 release.
74  */

75
76 public class CmsFileList extends A_CmsWpElement {
77
78
79     /** The head of the file list */
80     private final static String JavaDoc C_LIST_HEAD = "list_head";
81
82
83     /** The entry of the file list */
84     private final static String JavaDoc C_LIST_ENTRY = "list_entry";
85
86
87     /** The lockedby value column */
88     private final static String JavaDoc C_LOCKED_VALUE_NOLOCK = "column_lock_value_nolock";
89
90
91     /** The lockedby value column */
92     private final static String JavaDoc C_LOCKED_VALUE_OWN = "column_lock_value_own";
93
94
95     /** The lockedby value column */
96     private final static String JavaDoc C_LOCKED_VALUE_USER = "column_lock_value_user";
97
98
99     /** The name value column */
100     private final static String JavaDoc C_NAME_VALUE_FILE = "column_name_value_file";
101
102
103     /** The name value column */
104     private final static String JavaDoc C_NAME_VALUE_FOLDER = "column_name_value_folder";
105
106
107     /** The lockedby key */
108     private final static String JavaDoc C_LOCKEDBY = "lockedby";
109
110
111     /** The filefolder key */
112     private final static String JavaDoc C_NAME_FILEFOLDER = "name_filefolder";
113
114
115     /** The style for unchanged files or folders */
116     private final static String JavaDoc C_STYLE_UNCHANGED = "dateingeandert";
117
118
119     /** The style for files or folders not in project*/
120     private final static String JavaDoc C_STYLE_NOTINPROJECT = "dateintprojekt";
121
122
123     /** The style for new files or folders */
124     private final static String JavaDoc C_STYLE_NEW = "dateineu";
125
126
127     /** The style for deleted files or folders */
128     private final static String JavaDoc C_STYLE_DELETED = "dateigeloescht";
129
130
131     /** The style for changed files or folders */
132     private final static String JavaDoc C_STYLE_CHANGED = "dateigeaendert";
133
134
135     /** The default context menu */
136     private final static String JavaDoc C_DEFAULT_CONTEXTMENU = "online";
137
138
139     /** The default context menu */
140     private final static String JavaDoc C_DEFAULT_CONTEXTMENUFOLDER = "onlinefolder";
141
142
143     /** The context link */
144     private final static String JavaDoc C_CONTEXT_LINK = "context_link";
145
146
147     /** The context menu */
148     private final static String JavaDoc C_CONTEXT_MENU = "context_menu";
149
150
151     /** The context menu number */
152     private final static String JavaDoc C_CONTEXT_NUMBER = "context_number";
153
154
155     /** The context menu postfix for lock*/
156     private final static String JavaDoc C_CONTEXT_LOCK = "lock";
157
158
159     /** The context menu postfix for lock user*/
160     private final static String JavaDoc C_CONTEXT_LOCKUSER = "user";
161
162
163     /** Storage for caching icons */
164     private Hashtable JavaDoc m_iconCache = new Hashtable JavaDoc();
165
166     /**
167      * Check if this resource should be displayed in the filelist.
168      * @param cms The CmsObject
169      * @param res The resource to be checked.
170      * @return True or false.
171      * @throws CmsException if something goes wrong.
172      */

173
174     private boolean checkAccess(CmsObject cms, CmsResource res) throws CmsException {
175
176         return cms.hasPermissions(res, CmsPermissionSet.ACCESS_VIEW);
177         
178     }
179
180     /**
181      * Checks which columns in the file list must be displayed.
182      * Tests which flags in the user preferences are NOT set and delete those columns in
183      * the table generating the file list.
184      * @param filelist The filelist flags of the user.
185      * @param template The file list template
186      * @return Updated file list template.
187      */

188
189     private CmsXmlWpTemplateFile checkDisplayedColumns(int filelist,
190             CmsXmlWpTemplateFile template, String JavaDoc suffix) {
191         if((filelist & CmsUserSettings.FILELIST_NAME) == 0) {
192             template.setData(CmsWorkplaceDefault.C_FILELIST_COLUMN_NAME + suffix, "");
193         }
194         if((filelist & CmsUserSettings.FILELIST_TITLE) == 0) {
195             template.setData(CmsWorkplaceDefault.C_FILELIST_COLUMN_TITLE + suffix, "");
196         }
197         if((filelist & CmsUserSettings.FILELIST_TYPE) == 0) {
198             template.setData(CmsWorkplaceDefault.C_FILELIST_COLUMN_TYPE + suffix, "");
199         }
200         if((filelist & CmsUserSettings.FILELIST_STATE) == 0) {
201             template.setData(CmsWorkplaceDefault.C_FILELIST_COLUMN_STATE + suffix, "");
202         }
203         if((filelist & CmsUserSettings.FILELIST_DATE_LASTMODIFIED) == 0) {
204             template.setData(CmsWorkplaceDefault.C_FILELIST_COLUMN_CHANGED + suffix, "");
205         }
206         if((filelist & CmsUserSettings.FILELIST_SIZE) == 0) {
207             template.setData(CmsWorkplaceDefault.C_FILELIST_COLUMN_SIZE + suffix, "");
208         }
209         if((filelist & CmsUserSettings.FILELIST_USER_CREATED) == 0) {
210             template.setData(CmsWorkplaceDefault.C_FILELIST_COLUMN_OWNER + suffix, "");
211         }
212         if((filelist & CmsWorkplaceDefault.C_FILELIST_GROUP) == 0) {
213             template.setData(CmsWorkplaceDefault.C_FILELIST_COLUMN_GROUP + suffix, "");
214         }
215         if((filelist & CmsUserSettings.FILELIST_PERMISSIONS) == 0) {
216             template.setData(CmsWorkplaceDefault.C_FILELIST_COLUMN_ACCESS + suffix, "");
217         }
218         if((filelist & CmsUserSettings.FILELIST_LOCKEDBY) == 0) {
219             template.setData(CmsWorkplaceDefault.C_FILELIST_COLUMN_LOCKED + suffix, "");
220         }
221         return template;
222     }
223
224     /**
225      * Gets a formated access right string form a int access value.
226      * @param time The access value as an int.
227      * @return Formated access right string.
228      */

229     // TODO: cw remove after switch to acl
230
/*
231     private String getAccessFlags(int access) {
232         StringBuffer accessFlags = new StringBuffer();
233         if((access & C_PERMISSION_READ) > 0) {
234             accessFlags.append("r");
235         }
236         else {
237             accessFlags.append("-");
238         }
239         if((access & C_PERMISSION_WRITE) > 0) {
240             accessFlags.append("w");
241         }
242         else {
243             accessFlags.append("-");
244         }
245         if((access & C_PERMISSION_VIEW) > 0) {
246             accessFlags.append("v");
247         }
248         else {
249             accessFlags.append("-");
250         }
251         if((access & C_ACCESS_GROUP_READ) > 0) {
252             accessFlags.append("r");
253         }
254         else {
255             accessFlags.append("-");
256         }
257         if((access & C_ACCESS_GROUP_WRITE) > 0) {
258             accessFlags.append("w");
259         }
260         else {
261             accessFlags.append("-");
262         }
263         if((access & C_ACCESS_GROUP_VISIBLE) > 0) {
264             accessFlags.append("v");
265         }
266         else {
267             accessFlags.append("-");
268         }
269         if((access & C_ACCESS_PUBLIC_READ) > 0) {
270             accessFlags.append("r");
271         }
272         else {
273             accessFlags.append("-");
274         }
275         if((access & C_ACCESS_PUBLIC_WRITE) > 0) {
276             accessFlags.append("w");
277         }
278         else {
279             accessFlags.append("-");
280         }
281         if((access & C_ACCESS_PUBLIC_VISIBLE) > 0) {
282             accessFlags.append("v");
283         }
284         else {
285             accessFlags.append("-");
286         }
287         if((access & C_ACCESS_INTERNAL_READ) > 0) {
288             accessFlags.append("i");
289         }
290         else {
291             accessFlags.append("-");
292         }
293         return accessFlags.toString();
294     }
295     */

296     /**
297      * Selects the context menue displayed for this entry iin the file list.
298      * @param cms The CmsObject.
299      * @param res The resource displayed in this entry.
300      * @param template The file list template.
301      * @return String containing the name of the context menu.
302      * @throws Throws CmsException if something goes wrong.
303      *
304      */

305
306     private String JavaDoc getContextMenue(CmsObject cms, CmsResource res,
307             CmsXmlWpTemplateFile template) throws CmsException {
308         String JavaDoc contextMenu = null;
309         if(res.getState() != CmsResource.STATE_DELETED) {
310
311             // test if the resource is in the project or if the online project is displayed
312
if((cms.getRequestContext().currentProject().isOnlineProject())
313                     //|| (!res.inProject(cms.getRequestContext().currentProject()))) {
314
|| (!cms.isInsideCurrentProject(cms.getSitePath(res)))) {
315                 if(res.isFile()) {
316                     contextMenu = C_DEFAULT_CONTEXTMENU;
317                 }
318                 else {
319                     contextMenu = C_DEFAULT_CONTEXTMENUFOLDER;
320                 }
321             }
322             else {
323
324                 // get the type of the resource
325
I_CmsResourceType type = OpenCms.getResourceManager().getResourceType(res.getTypeId());
326
327                 // get the context menu
328
contextMenu = type.getTypeName();
329                 
330                 CmsLock lock = cms.getLock(res);
331
332                 // test if this resource is locked
333
if(!lock.isNullLock()) {
334                     contextMenu += C_CONTEXT_LOCK;
335
336                     // is this resource locked by the current user
337
if(cms.getRequestContext().currentUser().getId().equals(lock.getUserId())) {
338                         contextMenu += C_CONTEXT_LOCKUSER;
339                     }
340                 }
341             }
342         }
343         else {
344             contextMenu = "";
345         }
346         return contextMenu;
347     }
348
349     /**
350      * Sets the default preferences for the current user if those values are not available.
351      * @return Hashtable with default preferences.
352      */

353
354     private int getDefaultPreferences(CmsObject cms) {
355         int filelist;
356         String JavaDoc explorerSettings = (String JavaDoc)cms.getRequestContext().currentUser().getAdditionalInfo(CmsUserSettings.ADDITIONAL_INFO_EXPLORERSETTINGS);
357         if(explorerSettings != null) {
358             filelist = new Integer JavaDoc(explorerSettings).intValue();
359         }
360         else {
361             filelist = CmsUserSettings.FILELIST_NAME + CmsUserSettings.FILELIST_TITLE + CmsUserSettings.FILELIST_TYPE + CmsUserSettings.FILELIST_DATE_LASTMODIFIED;
362         }
363         return filelist;
364     }
365
366     /**
367      * Gets a list of file and folders of a given vector of folders and files.
368      * @param cms The CmsObject.
369      * @param list Vector of folders and files.
370      * @param doc The Template containing the list definitions.
371      * @param lang The language defintion template.
372      * @param parameters Hashtable containing all user parameters.
373      * @param callingObject The object calling this class.
374      * @param config The config file.
375      * @param columnsMethod.
376      * @return HTML-Code of the file list.
377      */

378
379     private Object JavaDoc getFilelist(CmsObject cms, List JavaDoc list, A_CmsXmlContent doc,
380             CmsXmlLanguageFile lang, Hashtable JavaDoc parameters, I_CmsFileListUsers callingObject,
381             CmsXmlWpConfigFile config) throws CmsException {
382         StringBuffer JavaDoc output = new StringBuffer JavaDoc();
383         String JavaDoc title = null;
384         int contextNumber = 0;
385         String JavaDoc[] tagList = {
386             C_CONTEXT_LINK, C_CONTEXT_MENU, C_CONTEXT_NUMBER, CmsWorkplaceDefault.C_FILELIST_ICON_VALUE,
387             CmsWorkplaceDefault.C_FILELIST_LINK_VALUE, CmsWorkplaceDefault.C_FILELIST_LOCK_VALUE, CmsWorkplaceDefault.C_FILELIST_NAME_VALUE,
388             CmsWorkplaceDefault.C_FILELIST_TITLE_VALUE, CmsWorkplaceDefault.C_FILELIST_TYPE_VALUE, CmsWorkplaceDefault.C_FILELIST_CHANGED_VALUE,
389             CmsWorkplaceDefault.C_FILELIST_SIZE_VALUE, CmsWorkplaceDefault.C_FILELIST_STATE_VALUE, CmsWorkplaceDefault.C_FILELIST_OWNER_VALUE,
390             CmsWorkplaceDefault.C_FILELIST_GROUP_VALUE, CmsWorkplaceDefault.C_FILELIST_ACCESS_VALUE, CmsWorkplaceDefault.C_FILELIST_LOCKED_VALUE,
391             C_NAME_FILEFOLDER, C_LOCKEDBY, CmsWorkplaceDefault.C_FILELIST_CLASS_VALUE
392         };
393         String JavaDoc servlets = CmsXmlTemplateLoader.getRequest(cms.getRequestContext()).getServletUrl();
394         // I_CmsSession session = CmsXmlTemplateLoader.getSession(cms.getRequestContext(), true);
395
// String currentFilelist = (String)session.getValue(C_PARA_FILELIST);
396
String JavaDoc currentFilelist = CmsWorkplaceAction.getCurrentFolder(CmsXmlTemplateLoader.getRequest(cms.getRequestContext()).getOriginalRequest());
397         
398         if((currentFilelist == null) || (currentFilelist.length() == 0)) {
399             currentFilelist = "/";
400         }
401
402         //get the template
403
CmsXmlWpTemplateFile template = (CmsXmlWpTemplateFile)doc;
404         Iterator JavaDoc en = null;
405
406         // file and folder object required to create the file list.
407
// CmsFile file;
408
CmsResource file;
409         CmsResource res;
410
411         // show the table head with all required columns.
412
// Check which flags in the user preferences are NOT set and delete those columns in
413
// the table generating the file list.
414
int filelist = getDefaultPreferences(cms);
415
416         // filelist contains a bit pattern indicating which columns have to be shown or hidden.
417
// The calling object may now modify this pattern
418
filelist = callingObject.modifyDisplayedColumns(cms, filelist);
419         template = checkDisplayedColumns(filelist, template, "");
420         template = checkDisplayedColumns(filelist, template, CmsWorkplaceDefault.C_FILELIST_SUFFIX_VALUE);
421
422         // add the list header to the output.
423
output.append(template.getProcessedDataValue(C_LIST_HEAD, callingObject));
424
425         // set all Xml tags somehow so that we can use fastSetXmlData below
426
for(int i = 0;i < tagList.length;i++) {
427             template.setData(tagList[i], "");
428         }
429
430         // go through all folders and files
431
en = list.iterator();
432         while(en.hasNext()) {
433             res = (CmsResource)en.next();
434             if(checkAccess(cms, res)) {
435                 template.setData("PREVIOUS", currentFilelist);
436                 if(res.isFolder()) {
437
438                     // Set output style class according to the project and state of the file.
439
template.setData(CmsWorkplaceDefault.C_FILELIST_CLASS_VALUE, getStyle(cms, res));
440
441                     // set the icon
442
template.fastSetXmlData(C_CONTEXT_LINK, cms.getSitePath(res));
443                     template.fastSetXmlData(C_CONTEXT_MENU, getContextMenue(cms, res, template));
444                     template.fastSetXmlData(C_CONTEXT_NUMBER, new Integer JavaDoc(contextNumber++).toString());
445                     I_CmsResourceType type = OpenCms.getResourceManager().getResourceType(res.getTypeId());
446                     String JavaDoc icon = getIcon(cms, type, config);
447                     template.fastSetXmlData(CmsWorkplaceDefault.C_FILELIST_ICON_VALUE, CmsXmlTemplateLoader.getRequest(cms.getRequestContext()).getServletUrl() + config.getWpPicturePath() + icon);
448
449                     // set the link, but only if the folder is not deleted
450
if(res.getState() != CmsResource.STATE_DELETED) {
451                         template.fastSetXmlData(CmsWorkplaceDefault.C_FILELIST_LINK_VALUE, cms.getSitePath(res));
452                     }
453                     else {
454                         template.fastSetXmlData(CmsWorkplaceDefault.C_FILELIST_LINK_VALUE, "#");
455                     }
456
457                     // set the lock icon if nescessary
458
template.fastSetXmlData(CmsWorkplaceDefault.C_FILELIST_LOCK_VALUE, template.getProcessedDataValue(getLock(cms,
459                             res, template, lang), callingObject));
460                     if((filelist & CmsUserSettings.FILELIST_NAME) != 0) {
461
462                         // set the folder name
463
template.fastSetXmlData(CmsWorkplaceDefault.C_FILELIST_NAME_VALUE, res.getName());
464                     }
465                     if((filelist & CmsUserSettings.FILELIST_TITLE) != 0) {
466
467                         // set the folder title
468
title = "";
469                         try {
470                             title = CmsEncoder.escapeXml(cms.readProperty(cms.getSitePath(res), CmsPropertyDefinition.PROPERTY_TITLE));
471                         }
472                         catch(CmsException e) {
473
474                         }
475                         if(title == null) {
476                             title = "";
477                         }
478                         template.fastSetXmlData(CmsWorkplaceDefault.C_FILELIST_TITLE_VALUE, title);
479                     }
480                     if((filelist & CmsUserSettings.FILELIST_TYPE) != 0) {
481                         String JavaDoc typename = type.getTypeName();
482                         typename = lang.getLanguageValue("fileicon." + typename);
483                         template.fastSetXmlData(CmsWorkplaceDefault.C_FILELIST_TYPE_VALUE, typename);
484                     }
485                     if((filelist & CmsUserSettings.FILELIST_DATE_LASTMODIFIED) != 0) {
486
487                         // get the folder date
488
long time = res.getDateLastModified();
489                         template.fastSetXmlData(CmsWorkplaceDefault.C_FILELIST_CHANGED_VALUE, getNiceDate(time));
490                     }
491                     if((filelist & CmsUserSettings.FILELIST_SIZE) != 0) {
492
493                         // get the folder size
494
template.fastSetXmlData(CmsWorkplaceDefault.C_FILELIST_SIZE_VALUE, "");
495                     }
496                     if((filelist & CmsUserSettings.FILELIST_STATE) != 0) {
497
498                         // get the folder state
499
template.fastSetXmlData(CmsWorkplaceDefault.C_FILELIST_STATE_VALUE, getState(cms, res, lang));
500                     }
501                     // TODO: Check if this is still needed
502
/*
503                     if((filelist & C_FILELIST_USER_CREATED) != 0) {
504
505                         // get the owner of the folder
506                         CmsUser owner = cms.readOwner(res);
507                         template.fastSetXmlData(C_FILELIST_OWNER_VALUE, owner.getName());
508                     }
509                     */

510                     // TODO: Check if this is still needed
511
/*
512                     if((filelist & C_FILELIST_GROUP) != 0) {
513
514                         // get the group of the folder
515                         CmsGroup group = cms.readGroup(res);
516                         template.fastSetXmlData(C_FILELIST_GROUP_VALUE, group.getName());
517                     }
518                     */

519                     // TODO: remove later
520
/*
521                     if((filelist & C_FILELIST_ACCESS) != 0) {
522
523                         // get the access flags
524 // int access = res.getAccessFlags();
525                         template.fastSetXmlData(C_FILELIST_ACCESS_VALUE, cms.getPermissionString(res.getName()));
526                     }
527                     */

528                     if((filelist & CmsUserSettings.FILELIST_LOCKEDBY) != 0) {
529
530                         // get the locked by
531
CmsLock lock = cms.getLock(res);
532                         if(lock.isNullLock()) {
533                         template.fastSetXmlData(CmsWorkplaceDefault.C_FILELIST_LOCKED_VALUE, "");
534                     }
535                         else {
536                             template.fastSetXmlData(CmsWorkplaceDefault.C_FILELIST_LOCKED_VALUE, cms.readUser(lock.getUserId()).getName());
537                         }
538                     }
539
540                     // Get all customized column values
541
callingObject.getCustomizedColumnValues(cms, template, res, lang);
542                     template.fastSetXmlData(C_NAME_FILEFOLDER, template.getProcessedDataValue(getName(cms, res), this));
543                 }
544                 else {
545
546                     // file=(CmsFile)res;
547
file = res;
548
549                     // Set output style class according to the project and state of the file.
550
template.fastSetXmlData(CmsWorkplaceDefault.C_FILELIST_CLASS_VALUE, getStyle(cms, file));
551
552                     // set the icon
553
template.fastSetXmlData(C_CONTEXT_LINK, cms.getSitePath(res));
554                     template.fastSetXmlData(C_CONTEXT_MENU, getContextMenue(cms, res, template));
555                     template.fastSetXmlData(C_CONTEXT_NUMBER, new Integer JavaDoc(contextNumber++).toString());
556                     I_CmsResourceType type = OpenCms.getResourceManager().getResourceType(file.getTypeId());
557                     String JavaDoc icon = getIcon(cms, type, config);
558                     template.fastSetXmlData(CmsWorkplaceDefault.C_FILELIST_ICON_VALUE, config.getWpPicturePath() + icon);
559
560                     // set the link, but only if the resource is not deleted
561
if(res.getState() != CmsResource.STATE_DELETED) {
562                         template.fastSetXmlData(CmsWorkplaceDefault.C_FILELIST_LINK_VALUE, servlets + cms.getSitePath(file));
563                     }
564                     else {
565                         template.fastSetXmlData(CmsWorkplaceDefault.C_FILELIST_LINK_VALUE, "#");
566                     }
567
568                     // set the lock icon if nescessary
569
template.fastSetXmlData(CmsWorkplaceDefault.C_FILELIST_LOCK_VALUE, template.getProcessedDataValue(getLock(cms, file, template, lang), callingObject));
570                     if((filelist & CmsUserSettings.FILELIST_NAME) != 0) {
571
572                         // set the filename
573
template.fastSetXmlData(CmsWorkplaceDefault.C_FILELIST_NAME_VALUE, file.getName());
574                     }
575                     if((filelist & CmsUserSettings.FILELIST_TITLE) != 0) {
576
577                         // set the file title
578
title = "";
579                         try {
580                             title = CmsEncoder.escapeXml(cms.readProperty(cms.getSitePath(file), CmsPropertyDefinition.PROPERTY_TITLE));
581                         }
582                         catch(CmsException e) {
583
584                         }
585                         if(title == null) {
586                             title = "";
587                         }
588                         template.fastSetXmlData(CmsWorkplaceDefault.C_FILELIST_TITLE_VALUE, title);
589                     }
590                     if((filelist & CmsUserSettings.FILELIST_TYPE) != 0) {
591
592                         // set the file type
593
String JavaDoc typename = type.getTypeName();
594                         typename = lang.getLanguageValue("fileicon." + typename);
595                         template.fastSetXmlData(CmsWorkplaceDefault.C_FILELIST_TYPE_VALUE, typename);
596                     }
597                     if((filelist & CmsUserSettings.FILELIST_DATE_LASTMODIFIED) != 0) {
598
599                         // get the file date
600
long time = file.getDateLastModified();
601                         template.fastSetXmlData(CmsWorkplaceDefault.C_FILELIST_CHANGED_VALUE, getNiceDate(time));
602                     }
603                     if((filelist & CmsUserSettings.FILELIST_SIZE) != 0) {
604
605                         // get the file size
606
template.fastSetXmlData(CmsWorkplaceDefault.C_FILELIST_SIZE_VALUE, new Integer JavaDoc(file.getLength()).toString());
607                     }
608                     if((filelist & CmsUserSettings.FILELIST_STATE) != 0) {
609
610                         // get the file state
611
template.fastSetXmlData(CmsWorkplaceDefault.C_FILELIST_STATE_VALUE, getState(cms, file, lang));
612                     }
613                     // TODO: check if this is still needed
614
/*
615                     if((filelist & C_FILELIST_USER_CREATED) != 0) {
616
617                         // get the owner of the file
618                         CmsUser owner = cms.readOwner(file);
619                         template.fastSetXmlData(C_FILELIST_OWNER_VALUE, owner.getName());
620                     }
621                     */

622                     // TODO: check if this is still needed
623
/*
624                     if((filelist & C_FILELIST_GROUP) != 0) {
625
626                         // get the group of the file
627                         CmsGroup group = cms.readGroup(file);
628                         template.fastSetXmlData(C_FILELIST_GROUP_VALUE, group.getName());
629                     }
630                     */

631                     // TODO: remove later
632
/*
633                     if((filelist & C_FILELIST_ACCESS) != 0) {
634
635                         // get the access flags
636 // int access = file.getAccessFlags();
637                         template.fastSetXmlData(C_FILELIST_ACCESS_VALUE, cms.getPermissionString(res.getName()));
638                     }
639                     */

640                     if((filelist & CmsUserSettings.FILELIST_PERMISSIONS) != 0) {
641
642                         // get the locked by
643
CmsLock lock = cms.getLock(file);
644                         if(lock.isNullLock()) {
645                         template.fastSetXmlData(CmsWorkplaceDefault.C_FILELIST_LOCKED_VALUE, "");
646                     }
647                         else {
648                             template.fastSetXmlData(CmsWorkplaceDefault.C_FILELIST_LOCKED_VALUE, cms.readUser(lock.getUserId()).getName());
649                         }
650                     }
651
652                     // Get all customized column values
653
callingObject.getCustomizedColumnValues(cms, template, res, lang);
654                     template.fastSetXmlData(C_NAME_FILEFOLDER, template.getProcessedDataValue(getName(cms, file), this));
655                 }
656                 output.append(template.getProcessedDataValue(C_LIST_ENTRY, callingObject));
657             }
658         }
659         return output.toString();
660     }
661
662     /**
663      * Selects the icon that is displayed in the file list.<br>
664      * This method includes cache to prevent to look up in the filesystem for each
665      * icon to be displayed
666      * @param cms The CmsObject.
667      * @param type The resource type of the file entry.
668      * @param config The configuration file.
669      * @return String containing the complete name of the iconfile.
670      * @throws Throws CmsException if something goes wrong.
671      */

672     private String JavaDoc getIcon(CmsObject cms, I_CmsResourceType type, CmsXmlWpConfigFile config) throws CmsException {
673         // check if this icon is in the cache already
674
String JavaDoc icon = (String JavaDoc)m_iconCache.get(type.getTypeName());
675         // no icon was found, so check if there is a icon file in the filesystem
676
if(icon == null) {
677             String JavaDoc filename = CmsWorkplaceDefault.C_ICON_PREFIX + type.getTypeName().toLowerCase() + CmsWorkplaceDefault.C_ICON_EXTENSION;
678             try {
679                 // read the icon file
680
cms.readResource(CmsWorkplace.VFS_PATH_RESOURCES + filename);
681                 // add the icon to the cache
682
icon = filename;
683                 m_iconCache.put(type.getTypeName(), icon);
684             }
685             catch(CmsException e) {
686                 // no icon was found, so use the default
687
icon = CmsWorkplaceDefault.C_ICON_DEFAULT;
688                 m_iconCache.put(type.getTypeName(), icon);
689             }
690         }
691         return icon;
692     }
693
694     /**
695      * Select which lock icon (if nescessary) is selected for a entry in the file list.
696      * @param cms The CmsObject.
697      * @param file The CmsResource displayed in the the file list.
698      * @param template The file list template
699      * @param lang The content definition language file.
700      * @return HTML code for selecting a lock icon.
701      */

702
703     private String JavaDoc getLock(CmsObject cms, CmsResource file, CmsXmlWpTemplateFile template, CmsXmlLanguageFile lang) throws CmsException {
704         StringBuffer JavaDoc output = new StringBuffer JavaDoc();
705         CmsLock lock = cms.getLock(file);
706
707         // the file is locked
708
if(!lock.isNullLock()) {
709             CmsUUID locked = lock.getUserId();
710
711             // it is locked by the actuel user
712
if(cms.getRequestContext().currentUser().getId().equals(locked)) {
713                 template.fastSetXmlData(C_LOCKEDBY, lang.getLanguageValue("explorer.lockedby") + cms.getRequestContext().currentUser().getName());
714                 output.append(C_LOCKED_VALUE_OWN);
715             }
716             else {
717                 template.fastSetXmlData(C_LOCKEDBY, lang.getLanguageValue("explorer.lockedby") + cms.readUser(lock.getUserId()).getName());
718                 output.append(C_LOCKED_VALUE_USER);
719             }
720         }
721         else {
722             output.append(C_LOCKED_VALUE_NOLOCK);
723         }
724
725         // output.append(C_LOCKED_VALUE_NOLOCK);
726
return output.toString();
727     }
728
729     /**
730      * Gets the name (including link) for a entry in the file list.
731      * @param cms The CmsObject.
732      * @param file The CmsResource displayed in the the file list.
733      * @return The name used for the actual entry.
734      */

735
736     private String JavaDoc getName(CmsObject cms, CmsResource file) {
737         StringBuffer JavaDoc output = new StringBuffer JavaDoc();
738         if(file.isFile()) {
739             output.append(C_NAME_VALUE_FILE);
740         }
741         else {
742             output.append(C_NAME_VALUE_FOLDER);
743         }
744         return output.toString();
745     }
746
747     /**
748      * Gets a formated time string form a long time value.
749      * @param time The time value as a long.
750      * @return Formated time string.
751      */

752
753     private String JavaDoc getNiceDate(long time) {
754         StringBuffer JavaDoc niceTime = new StringBuffer JavaDoc();
755         GregorianCalendar JavaDoc cal = new GregorianCalendar JavaDoc();
756         cal.setTime(new Date JavaDoc(time));
757         String JavaDoc day = "0" + new Integer JavaDoc(cal.get(Calendar.DAY_OF_MONTH)).intValue();
758         String JavaDoc month = "0" + new Integer JavaDoc(cal.get(Calendar.MONTH) + 1).intValue();
759         String JavaDoc year = new Integer JavaDoc(cal.get(Calendar.YEAR)).toString();
760         String JavaDoc hour = "0" + new Integer JavaDoc(cal.get(Calendar.HOUR) + 12 * cal.get(Calendar.AM_PM)).intValue();
761         String JavaDoc minute = "0" + new Integer JavaDoc(cal.get(Calendar.MINUTE));
762         if(day.length() == 3) {
763             day = day.substring(1, 3);
764         }
765         if(month.length() == 3) {
766             month = month.substring(1, 3);
767         }
768         if(hour.length() == 3) {
769             hour = hour.substring(1, 3);
770         }
771         if(minute.length() == 3) {
772             minute = minute.substring(1, 3);
773         }
774         niceTime.append(day + ".");
775         niceTime.append(month + ".");
776         niceTime.append(year + " ");
777         niceTime.append(hour + ":");
778         niceTime.append(minute);
779         return niceTime.toString();
780     }
781
782     /**
783      * Gets a formated file state string for a entry in the file list.
784      * @param cms The CmsObject.
785      * @param file The CmsResource displayed in the the file list.
786      * @param lang The content definition language file.
787      * @return Formated state string.
788      */

789
790     private String JavaDoc getState(CmsObject cms, CmsResource file, CmsXmlLanguageFile lang) throws CmsException {
791         StringBuffer JavaDoc output = new StringBuffer JavaDoc();
792         //if(file.inProject(cms.getRequestContext().currentProject())) {
793
if (cms.isInsideCurrentProject(cms.getSitePath(file))) {
794             int state = file.getState();
795             output.append(lang.getLanguageValue("explorer.state" + state));
796         }
797         else {
798             output.append(lang.getLanguageValue("explorer.statenip"));
799         }
800         return output.toString();
801     }
802
803     /**
804      * Gets the style for a entry in the file list.
805      * @param cms The CmsObject.
806      * @param file The CmsResource displayed in the the file list.
807      * @return The style used for the actual entry.
808      */

809
810     private String JavaDoc getStyle(CmsObject cms, CmsResource file) throws CmsException {
811         StringBuffer JavaDoc output = new StringBuffer JavaDoc();
812
813         // check if the resource is in the actual project
814
//if(!file.inProject(cms.getRequestContext().currentProject())) {
815
if (!cms.isInsideCurrentProject(cms.getSitePath(file))) {
816             output.append(C_STYLE_NOTINPROJECT);
817         }
818         else {
819             if(cms.getRequestContext().currentProject().isOnlineProject()) {
820
821                 // check if the actual project is the online project
822
output.append(C_STYLE_UNCHANGED);
823             }
824             else {
825                 int style = file.getState();
826                 switch(style) {
827                 case 0:
828                     output.append(C_STYLE_UNCHANGED);
829                     break;
830
831                 case 1:
832                     output.append(C_STYLE_CHANGED);
833                     break;
834
835                 case 2:
836                     output.append(C_STYLE_NEW);
837                     break;
838
839                 case 3:
840                     output.append(C_STYLE_DELETED);
841                     break;
842
843                 default:
844                     output.append(C_STYLE_UNCHANGED);
845                 }
846             }
847         }
848         return output.toString();
849     }
850
851     /**
852      * Handling of the special workplace <CODE>&lt;FILELIST&gt;</CODE> tags.
853      * <P>
854      * Reads the code of a file list from the file list definition file
855      * and returns the processed code with the actual elements.
856      *
857      * @param cms CmsObject Object for accessing resources.
858      * @param n XML element containing the <code>&lt;FILELIST&gt;</code> tag.
859      * @param callingObject reference to the calling object.
860      * @param parameters Hashtable containing all user parameters <em>(not used here)</em>.
861      * @param lang CmsXmlLanguageFile conataining the currently valid language file.
862      * @return Processed button.
863      * @throws CmsException
864      */

865
866     public Object JavaDoc handleSpecialWorkplaceTag(CmsObject cms, Element JavaDoc n, A_CmsXmlContent doc,
867             Object JavaDoc callingObject, Hashtable JavaDoc parameters, CmsXmlLanguageFile lang) throws CmsException {
868         String JavaDoc template = n.getAttribute(CmsWorkplaceDefault.C_FILELIST_TEMPLATE);
869         String JavaDoc customizedTemplate = n.getAttribute(CmsWorkplaceDefault.C_FILELIST_CUSTOMTEMPLATE);
870         CmsXmlWpTemplateFile filelistTemplate = new CmsXmlWpTemplateFile(cms, template);
871         filelistTemplate.setData(CmsWorkplaceDefault.C_FILELIST_COLUMN_CUSTOMIZED, "");
872         filelistTemplate.setData(CmsWorkplaceDefault.C_FILELIST_COLUMN_CUSTOMIZED_VALUE, "");
873
874         // Include the template file for the customized columns
875
if(customizedTemplate != null && !"".equals(customizedTemplate)) {
876             filelistTemplate.readIncludeFile(customizedTemplate);
877         }
878
879         // Check if the callingObject implements our interface
880
if(!(callingObject instanceof I_CmsFileListUsers)) {
881             throwException("Class " + callingObject.getClass().getName() + " is using a \"FILELIST\" tag in its "
882                     + "template file " + doc.getAbsoluteFilename() + ", but does not implement I_CmsFileListUsers. ", CmsLegacyException.C_XML_WRONG_TEMPLATE_CLASS);
883         }
884         CmsXmlWpConfigFile configFile = this.getConfigFile(cms);
885         I_CmsFileListUsers filelistUser = (I_CmsFileListUsers)callingObject;
886         List JavaDoc filelist = filelistUser.getFiles(cms);
887         return getFilelist(cms, filelist, filelistTemplate, lang, parameters, filelistUser, configFile);
888     }
889 }
890
Popular Tags