1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.myfaces.commons.resourcehandler.resource;
20
21 import java.io.InputStream;
22 import java.net.URL;
23 import java.util.Comparator;
24
25
26
27
28
29
30
31
32 public abstract class ResourceLoader
33 {
34
35 public static final String VERSION_INVALID = "INVALID";
36
37 private String _prefix;
38
39 public ResourceLoader(String prefix)
40 {
41 _prefix = prefix;
42 }
43
44 public abstract String getResourceVersion(String path);
45
46
47
48
49
50 public abstract String getLibraryVersion(String path);
51
52
53
54
55
56 public abstract URL getResourceURL(ResourceMeta resourceMeta);
57
58 public abstract InputStream getResourceInputStream(ResourceMeta resourceMeta);
59
60 public abstract ResourceMeta createResourceMeta(String prefix, String libraryName, String libraryVersion,
61 String resourceName, String resourceVersion);
62
63 public abstract boolean libraryExists(String libraryName);
64
65 public boolean resourceExists(ResourceMeta resourceMeta)
66 {
67 return (getResourceURL(resourceMeta) != null);
68 }
69
70 private Comparator<String> _versionComparator = null;
71
72 protected Comparator<String> getVersionComparator()
73 {
74 if (_versionComparator == null)
75 {
76 _versionComparator = new VersionComparator();
77 }
78 return _versionComparator;
79 }
80
81 protected void setVersionComparator(Comparator<String> versionComparator)
82 {
83 _versionComparator = versionComparator;
84 }
85
86 public class VersionComparator implements Comparator<String>
87 {
88
89 public int compare(String s1, String s2)
90 {
91 int n1 = 0;
92 int n2 = 0;
93 String o1 = s1;
94 String o2 = s2;
95
96 boolean p1 = true;
97 boolean p2 = true;
98
99 while (n1 == n2 && (p1 || p2))
100 {
101 int i1 = o1.indexOf('_');
102 int i2 = o2.indexOf('_');
103 if (i1 < 0)
104 {
105 if (o1.length() > 0)
106 {
107 p1 = false;
108 n1 = Integer.valueOf(o1);
109 o1 = "";
110 }
111 else
112 {
113 p1 = false;
114 n1 = 0;
115 }
116 }
117 else
118 {
119 n1 = Integer.valueOf(o1.substring(0, i1));
120 o1 = o1.substring(i1 + 1);
121 }
122 if (i2 < 0)
123 {
124 if (o2.length() > 0)
125 {
126 p2 = false;
127 n2 = Integer.valueOf(o2);
128 o2 = "";
129 }
130 else
131 {
132 p2 = false;
133 n2 = 0;
134 }
135 }
136 else
137 {
138 n2 = Integer.valueOf(o2.substring(0, i2));
139 o2 = o2.substring(i2 + 1);
140 }
141 }
142
143 if (n1 == n2)
144 {
145 return s1.length() - s2.length();
146 }
147 return n1 - n2;
148 }
149 }
150
151 public String getPrefix()
152 {
153 return _prefix;
154 }
155
156 public void setPrefix(String prefix)
157 {
158 _prefix = prefix;
159 }
160 }