1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.myfaces.shared.resource;
20
21 import java.io.IOException;
22 import java.net.JarURLConnection;
23 import java.net.URL;
24 import java.net.URLConnection;
25 import java.text.ParseException;
26 import java.text.SimpleDateFormat;
27 import java.util.Date;
28 import java.util.Locale;
29 import java.util.TimeZone;
30 import org.apache.myfaces.shared.util.StringUtils;
31
32 public class ResourceLoaderUtils
33 {
34
35
36 private static final String HTTP_RESPONSE_DATE_HEADER =
37 "EEE, dd MMM yyyy HH:mm:ss zzz";
38
39 private static final String[] HTTP_REQUEST_DATE_HEADER = {
40 "EEE, dd MMM yyyy HH:mm:ss zzz", "EEEEEE, dd-MMM-yy HH:mm:ss zzz",
41 "EEE MMMM d HH:mm:ss yyyy" };
42
43 private static final TimeZone GMT = TimeZone.getTimeZone("GMT");
44
45 public static String formatDateHeader(long value)
46 {
47 SimpleDateFormat format = new SimpleDateFormat(
48 HTTP_RESPONSE_DATE_HEADER,
49 Locale.US);
50 format.setTimeZone(GMT);
51 return format.format(new Date(value));
52 }
53
54 public static Long parseDateHeader(String value)
55 {
56 Date date = null;
57 for (int i = 0; (date == null) && (i < HTTP_REQUEST_DATE_HEADER.length); i++)
58 {
59 try
60 {
61 SimpleDateFormat format = new SimpleDateFormat(
62 HTTP_REQUEST_DATE_HEADER[i], Locale.US);
63 format.setTimeZone(GMT);
64 date = format.parse(value);
65 }
66 catch (ParseException e)
67 {
68
69 }
70 }
71 if (date == null)
72 {
73 return null;
74 }
75 return Long.valueOf(date.getTime());
76 }
77
78
79 public static long getResourceLastModified(URL url) throws IOException
80 {
81 return getResourceLastModified(url.openConnection());
82 }
83
84
85 public static long getResourceLastModified(URLConnection connection) throws IOException
86 {
87 long modified;
88 if (connection instanceof JarURLConnection)
89 {
90
91
92
93
94
95
96
97
98
99
100 URL jarFileUrl = ((JarURLConnection) connection).getJarFileURL();
101 URLConnection jarFileConnection = jarFileUrl.openConnection();
102
103 try
104 {
105 modified = jarFileConnection.getLastModified();
106 }
107 finally
108 {
109 try
110 {
111 jarFileConnection.getInputStream().close();
112 }
113 catch (Exception exception)
114 {
115
116 }
117 }
118 }
119 else
120 {
121 modified = connection.getLastModified();
122 }
123
124 return modified;
125 }
126
127 public static int getDepth(String path)
128 {
129 int depth = 0;
130 String [] paths = StringUtils.splitShortString(path, '/');
131 if (paths == null)
132 {
133 return 0;
134 }
135 for (String p : paths)
136 {
137 if (p != null && p.length() > 0)
138 {
139 depth++;
140 }
141 }
142 return depth;
143 }
144
145 public static boolean isDirectory(String path)
146 {
147 return path.startsWith("/") && path.endsWith("/");
148 }
149
150 }