KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > roller > presentation > website > tags > FileManagerTag


1 package org.roller.presentation.website.tags;
2
3 import org.apache.commons.logging.Log;
4 import org.apache.commons.logging.LogFactory;
5 import org.apache.struts.util.RequestUtils;
6 import org.roller.pojos.UserData;
7 import org.roller.presentation.RollerContext;
8 import org.roller.presentation.RollerRequest;
9
10 import java.io.File JavaDoc;
11 import java.text.Collator JavaDoc;
12 import java.text.DecimalFormat JavaDoc;
13 import java.util.ResourceBundle JavaDoc;
14
15 import javax.servlet.ServletContext JavaDoc;
16 import javax.servlet.http.HttpServletRequest JavaDoc;
17 import javax.servlet.jsp.JspException JavaDoc;
18 import javax.servlet.jsp.JspWriter JavaDoc;
19 import javax.servlet.jsp.tagext.Tag JavaDoc;
20 import javax.servlet.jsp.tagext.TagSupport JavaDoc;
21
22 /**
23  * @jsp.tag name="FileManager"
24  */

25 public class FileManagerTag extends TagSupport JavaDoc
26 {
27     static final long serialVersionUID = 5118479809543177187L;
28     
29     private transient ResourceBundle JavaDoc bundle =
30         ResourceBundle.getBundle("ApplicationResources");
31     
32     private static Log mLogger =
33         LogFactory.getFactory().getInstance(RollerRequest.class);
34
35     //-------------------------------------------------------------
36
/**
37      * Process start tag.
38      * @return EVAL_SKIP_BODY
39      */

40     public int doStartTag() throws JspException JavaDoc
41     {
42         JspWriter JavaDoc pw = pageContext.getOut();
43         try
44         {
45             ServletContext JavaDoc app = pageContext.getServletContext();
46
47             // get the root of the /resource directory
48
String JavaDoc dir = RollerContext.getUploadDir( app );
49
50             HttpServletRequest JavaDoc request =
51                 (HttpServletRequest JavaDoc)pageContext.getRequest();
52             RollerRequest rreq = RollerRequest.getRollerRequest(request);
53             UserData user = rreq.getUser();
54
55             // for formatting the file size
56
DecimalFormat JavaDoc format = (DecimalFormat JavaDoc) DecimalFormat.getInstance();
57             format.setMaximumFractionDigits(1);
58             format.setMinimumFractionDigits(0);
59
60             pw.println("<table class=\"rollertable\">");
61             pw.println("<tr class=\"rHeaderTr\">");
62             pw.println(" <th class=\"rollertable\" width=\"95%\">Filename</th>");
63             pw.println(" <th class=\"rollertable\">Size</td>");
64             pw.println(" <th class=\"rollertable\">Delete</td>");
65             pw.println("</tr>");
66
67             // get the files
68
String JavaDoc[] files = new String JavaDoc[0];
69             int numFiles = 0;
70             File JavaDoc d = new File JavaDoc(dir + user.getUserName());
71             if (d.mkdirs() || d.exists())
72             {
73                 files = this.fileList(d);
74
75                 // print the file list
76
if (files != null && 0 < files.length)
77                 {
78                     numFiles = files.length;
79
80                     /*
81                     * Force images array to sort alphabetically, ignoring case.
82                     * We have to do this as some servers (Bluestone)
83                     * returns them sorted according to upload time.
84                     */

85                     //Get the Collator for US English and set its strength
86
// to PRIMARY
87
java.text.Collator JavaDoc locCollator =
88                         java.text.Collator.getInstance(
89                             rreq.getWebsite().getLocaleInstance());
90                     locCollator.setStrength(Collator.PRIMARY);
91                     java.util.Arrays.sort(files, locCollator);
92
93                     File JavaDoc checkSize = null;
94                     float totalSize = 0;
95                     String JavaDoc fileSize = null;
96                     String JavaDoc fileLink = null;
97                     for (int i = 0; i < files.length; i++)
98                     {
99                         checkSize = new File JavaDoc(d, files[i]);
100                         totalSize += new Float JavaDoc(checkSize.length()).floatValue();
101                         fileSize = format.format(
102                           new Float JavaDoc(checkSize.length()).floatValue() / 1024);
103
104                         if (i+1 % 2 == 0) pw.print("<tr class=\"rollertable_even\">");
105                         else pw.print("<tr class=\"rollertable_odd\">");
106
107                         fileLink = RequestUtils.printableURL(
108                             RequestUtils.absoluteURL( request,
109                                 RollerContext.getUploadPath( app ) +
110                                 "/" + user.getUserName() + "/" + files[i] ) );
111                         pw.print("<td class=\"rollertable\"><a HREF=\"" +
112                             fileLink + "\">" + files[i] + "</a></td>");
113                         pw.print("<td class=\"rollertable\" align=\"right\">" +
114                             fileSize + " kb</td>");
115                         pw.print("<td class=\"rollertable\" align=\"center\">" +
116                             "<input type=\"checkbox\" name=\"deleteFiles\" " +
117                             "value=\"" + files[i] + "\"></td>");
118
119                         pw.println("</tr>");
120                     }
121                     
122                     // print the total of file sizes
123
fileSize = format.format(totalSize/1024);
124                     pw.print("<tr><td align=\"right\">Total:</td>");
125                     pw.print("<td align=\"right\">" +
126                             fileSize + "&nbsp;kb</td>");
127                 }
128             }
129
130             if (numFiles == 0)
131             {
132                 pw.print("<tr class=\"rollertable\">");
133                 pw.print("<td class=\"rollertable\" colspan=\"3\">");
134                 pw.print(bundle.getString("uploadFiles.noFiles")+"</td>");
135                 pw.println("</tr>");
136             }
137             pw.println("</table>");
138         }
139         catch (Exception JavaDoc e)
140         {
141             mLogger.error("Displaying files",e);
142             throw new JspException JavaDoc(e);
143         }
144         return Tag.SKIP_BODY;
145     }
146
147     /**
148      * Returns a String[] list of files only (excludes directories).
149     **/

150     public String JavaDoc[] fileList(File JavaDoc d)
151     {
152         File JavaDoc[] files = null; //list of files & directories in the image directory
153
java.util.ArrayList JavaDoc images = new java.util.ArrayList JavaDoc();
154
155         files = d.listFiles();
156         for (int i=0; i<files.length; i++)
157         {
158             if (!files[i].isDirectory()) images.add(files[i].getName());
159         }
160
161         String JavaDoc[] myFiles = new String JavaDoc[0];
162         return (String JavaDoc[]) images.toArray(myFiles);
163
164     }
165 }
166
167
Popular Tags