1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 package com.salesforce.apt.graph.model.storage.classpath;
28
29 import java.io.File;
30 import java.io.IOException;
31 import java.net.MalformedURLException;
32 import java.net.URL;
33 import java.net.URLClassLoader;
34 import java.security.AccessController;
35 import java.security.PrivilegedAction;
36 import java.util.ArrayList;
37 import java.util.Enumeration;
38 import java.util.List;
39
40 import com.salesforce.apt.graph.model.storage.Resource;
41 import com.salesforce.apt.graph.model.storage.ResourceLoader;
42
43 public class ClasspathUrlResourceLoader implements ResourceLoader {
44
45 private ClassLoader classloader;
46
47 public ClasspathUrlResourceLoader() {
48 classloader = Thread.currentThread().getContextClassLoader();
49 }
50
51 public ClasspathUrlResourceLoader(ClassLoader classLoader) {
52 classloader = classLoader;
53 }
54
55
56
57
58
59 public ClasspathUrlResourceLoader(File root) {
60 AccessController.doPrivileged(new PrivilegedAction<Void>() {
61 public Void run() {
62 try {
63 classloader = new URLClassLoader(new URL[] {
64 root.toURI().toURL()},
65 Thread.currentThread().getContextClassLoader());
66 return null;
67 } catch (MalformedURLException | NullPointerException ex) {
68 throw new IllegalArgumentException("Invalide File, it's not a url.", ex);
69 }
70 }
71 });
72 }
73
74
75
76
77
78
79
80 public List<Resource> getEntries(String name) {
81 List<Resource> output = new ArrayList<>();
82 try {
83 Enumeration<URL> resources = classloader.getResources(FileStore.STANDARD.getPath() + "/"
84 + name + ".json");
85 while (resources.hasMoreElements()) {
86 output.add(new UrlResource(resources.nextElement()));
87 }
88 } catch (IOException ioe) {
89 throw new IllegalStateException("Could not read classpath while looking for ForceInject models of name: " + name, ioe);
90 }
91 return output;
92 }
93
94 }