59
60 void setModule(Module m) {
61 if (module != null) {
62 throw new RuntimeException("Module for " + this + " already set");
63 }
64 this.module = m;
65 }
66
67 String getName() {
68 return name;
69 }
70
71 String getPathname() {
72 return pathname;
73 }
74
75 long getFileSize() {
76 return filesize;
77 }
78
79 @Override
80 public String toString() {
81 return name;
82 }
83
84 @Override
85 public int compareTo(ResourceFile o) {
86 return name.compareTo(o.name);
87 }
88
89 private static Set<ResourceFile> resources = new TreeSet<ResourceFile>();
90
91 static boolean isResource(String pathname) {
92 // skip these files
93 String name = pathname.replace(File.separatorChar, '/');
94 if (name.endsWith("META-INF/MANIFEST.MF")) {
95 return false;
96 }
97 if (name.contains("META-INF/JCE_RSA.")) {
98 return false;
99 }
100 if (name.contains("META-INF/") &&
101 (name.endsWith(".RSA") || name.endsWith(".SF"))) {
102 return false;
103 }
104
105 return true;
106 }
107
108 static ResourceFile addResource(String fname, InputStream in, long size) {
109 ResourceFile res;
110 fname = fname.replace(File.separatorChar, '/');
111 if (fname.startsWith("META-INF/services")) {
112 res = new ServiceProviderConfigFile(fname, in, size);
113 } else {
114 res = new ResourceFile(fname, size);
115 }
116 resources.add(res);
117 return res;
118 }
119
120 static Set<ResourceFile> getAllResources() {
121 return Collections.unmodifiableSet(resources);
122 }
123
124 static class ServiceProviderConfigFile extends ResourceFile {
125 final List<String> providers = new ArrayList<String>();
126 final String service;
127
128 ServiceProviderConfigFile(String fname, InputStream in) {
129 this(fname, in, 0);
130 }
131
132 ServiceProviderConfigFile(String fname, InputStream in, long size) {
133 super(fname, size);
134 readServiceConfiguration(in, providers);
135 this.service = name.substring("META-INF/services".length() + 1, name.length());
136 }
137
138 @Override
139 String getName() {
140 if (providers.isEmpty()) {
141 return service;
142 } else {
143 // just use the first one for matching
144 return providers.get(0);
145 }
146 }
147
148 @Override
149 public boolean equals(Object o) {
150 if (o instanceof ServiceProviderConfigFile) {
151 ServiceProviderConfigFile sp = (ServiceProviderConfigFile) o;
152 if (service.equals(sp.service) && providers.size() == sp.providers.size()) {
153 List<String> tmp = new ArrayList<String>(providers);
154 if (tmp.removeAll(sp.providers)) {
155 return tmp.size() == 0;
156 }
157 }
|
59
60 void setModule(Module m) {
61 if (module != null) {
62 throw new RuntimeException("Module for " + this + " already set");
63 }
64 this.module = m;
65 }
66
67 String getName() {
68 return name;
69 }
70
71 String getPathname() {
72 return pathname;
73 }
74
75 long getFileSize() {
76 return filesize;
77 }
78
79 boolean isService() {
80 return pathname.startsWith("META-INF/services") ? true : false;
81 }
82
83 @Override
84 public String toString() {
85 return name;
86 }
87
88 @Override
89 public int compareTo(ResourceFile o) {
90 return name.compareTo(o.name);
91 }
92
93 private static Set<ResourceFile> resources = new TreeSet<ResourceFile>();
94
95 static boolean isResource(String pathname) {
96 // skip these files
97 String name = pathname.replace(File.separatorChar, '/');
98 if (name.endsWith("META-INF/MANIFEST.MF")) {
99 return false;
100 }
101 if (name.contains("META-INF/JCE_RSA.")) {
102 return false;
103 }
104 if (name.contains("META-INF/") &&
105 (name.endsWith(".RSA") || name.endsWith(".SF"))) {
106 return false;
107 }
108
109 return true;
110 }
111
112 static ResourceFile getResource(String fname, InputStream in, long size) {
113 ResourceFile res;
114 fname = fname.replace(File.separatorChar, '/');
115 if (fname.startsWith("META-INF/services")) {
116 res = new ServiceProviderConfigFile(fname, in, size);
117 } else {
118 res = new ResourceFile(fname, size);
119 }
120 return res;
121 }
122
123 static ResourceFile addResource(String fname, InputStream in, long size) {
124 ResourceFile res = getResource(fname, in, size);
125 resources.add(res);
126 return res;
127 }
128
129
130 static Set<ResourceFile> getAllResources() {
131 return Collections.unmodifiableSet(resources);
132 }
133
134 static class ServiceProviderConfigFile extends ResourceFile {
135 final List<String> providers = new ArrayList<String>();
136 final String service;
137
138 ServiceProviderConfigFile(String fname, InputStream in) {
139 this(fname, in, 0);
140 }
141
142 ServiceProviderConfigFile(String fname, InputStream in, long size) {
143 super(fname, size);
144 readServiceConfiguration(in, providers);
145 this.service = name.substring("META-INF/services".length() + 1, name.length());
146 }
147
148 @Override
149 boolean isService() {
150 return true;
151 }
152
153 @Override
154 String getName() {
155 if (providers.isEmpty()) {
156 return service;
157 } else {
158 // just use the first one for matching
159 return providers.get(0);
160 }
161 }
162
163 @Override
164 public boolean equals(Object o) {
165 if (o instanceof ServiceProviderConfigFile) {
166 ServiceProviderConfigFile sp = (ServiceProviderConfigFile) o;
167 if (service.equals(sp.service) && providers.size() == sp.providers.size()) {
168 List<String> tmp = new ArrayList<String>(providers);
169 if (tmp.removeAll(sp.providers)) {
170 return tmp.size() == 0;
171 }
172 }
|