1 /*
2 * Licensed to the Apache Software Foundation (ASF) under one
3 * or more contributor license agreements. See the NOTICE file
4 * distributed with this work for additional information
5 * regarding copyright ownership. The ASF licenses this file
6 * to you under the Apache License, Version 2.0 (the
7 * "License"); you may not use this file except in compliance
8 * with the License. You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing,
13 * software distributed under the License is distributed on an
14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 * KIND, either express or implied. See the License for the
16 * specific language governing permissions and limitations
17 * under the License.
18 */
19 package org.apache.myfaces.shared.resource;
20
21 import java.io.InputStream;
22 import java.net.URL;
23 import java.util.Comparator;
24
25 /**
26 * Base class for resource loaders. Resource loaders can lookup resources
27 * as URLs from arbitrary locations, including JAR files.
28 *
29 * @author Leonardo Uribe (latest modification by $Author: lu4242 $)
30 * @version $Revision: 1212585 $ $Date: 2011-12-09 14:16:35 -0500 (Fri, 09 Dec 2011) $
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 * Return the max available version found (if exists) or
48 * return null if no version available.
49 */
50 public abstract String getLibraryVersion(String path);
51
52 /**
53 * Return the max available version found (if exists) or
54 * return null if no version available.
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 }