196
197 class ResourcePoolModuleViewImpl implements ResourcePoolModuleView {
198 @Override
199 public Optional<ResourcePoolModule> findModule(String name) {
200 return ResourcePoolManager.this.findModule(name);
201 }
202
203 @Override
204 public Stream<ResourcePoolModule> modules() {
205 return ResourcePoolManager.this.modules();
206 }
207
208 @Override
209 public int moduleCount() {
210 return ResourcePoolManager.this.moduleCount();
211 }
212 }
213
214 private final Map<String, ResourcePoolEntry> resources = new LinkedHashMap<>();
215 private final Map<String, ResourcePoolModule> modules = new LinkedHashMap<>();
216 private final ResourcePoolModuleImpl fileCopierModule = new ResourcePoolModuleImpl(FileCopierPlugin.FAKE_MODULE);
217 private final ByteOrder order;
218 private final StringTable table;
219 private final ResourcePool poolImpl;
220 private final ResourcePoolBuilder poolBuilderImpl;
221 private final ResourcePoolModuleView moduleViewImpl;
222
223 public ResourcePoolManager() {
224 this(ByteOrder.nativeOrder());
225 }
226
227 public ResourcePoolManager(ByteOrder order) {
228 this(order, new StringTable() {
229
230 @Override
231 public int addString(String str) {
232 return -1;
233 }
234
235 @Override
236 public String getString(int id) {
255 return poolBuilderImpl;
256 }
257
258 public ResourcePoolModuleView moduleView() {
259 return moduleViewImpl;
260 }
261
262 /**
263 * Add a ResourcePoolEntry.
264 *
265 * @param data The ResourcePoolEntry to add.
266 */
267 public void add(ResourcePoolEntry data) {
268 Objects.requireNonNull(data);
269 if (resources.get(data.path()) != null) {
270 throw new PluginException("Resource " + data.path()
271 + " already present");
272 }
273 String modulename = data.moduleName();
274 ResourcePoolModuleImpl m = (ResourcePoolModuleImpl)modules.get(modulename);
275 // ## TODO: FileCopierPlugin should not add content to a module
276 // FAKE_MODULE is not really a module to be added in the image
277 if (FileCopierPlugin.FAKE_MODULE.equals(modulename)) {
278 m = fileCopierModule;
279 }
280 if (m == null) {
281 m = new ResourcePoolModuleImpl(modulename);
282 modules.put(modulename, m);
283 }
284 resources.put(data.path(), data);
285 m.moduleContent.put(data.path(), data);
286 }
287
288 /**
289 * Retrieves the module for the provided name.
290 *
291 * @param name The module name
292 * @return the module of matching name, if found
293 */
294 public Optional<ResourcePoolModule> findModule(String name) {
295 Objects.requireNonNull(name);
296 return Optional.ofNullable(modules.get(name));
297 }
298
299 /**
|
196
197 class ResourcePoolModuleViewImpl implements ResourcePoolModuleView {
198 @Override
199 public Optional<ResourcePoolModule> findModule(String name) {
200 return ResourcePoolManager.this.findModule(name);
201 }
202
203 @Override
204 public Stream<ResourcePoolModule> modules() {
205 return ResourcePoolManager.this.modules();
206 }
207
208 @Override
209 public int moduleCount() {
210 return ResourcePoolManager.this.moduleCount();
211 }
212 }
213
214 private final Map<String, ResourcePoolEntry> resources = new LinkedHashMap<>();
215 private final Map<String, ResourcePoolModule> modules = new LinkedHashMap<>();
216 private final ByteOrder order;
217 private final StringTable table;
218 private final ResourcePool poolImpl;
219 private final ResourcePoolBuilder poolBuilderImpl;
220 private final ResourcePoolModuleView moduleViewImpl;
221
222 public ResourcePoolManager() {
223 this(ByteOrder.nativeOrder());
224 }
225
226 public ResourcePoolManager(ByteOrder order) {
227 this(order, new StringTable() {
228
229 @Override
230 public int addString(String str) {
231 return -1;
232 }
233
234 @Override
235 public String getString(int id) {
254 return poolBuilderImpl;
255 }
256
257 public ResourcePoolModuleView moduleView() {
258 return moduleViewImpl;
259 }
260
261 /**
262 * Add a ResourcePoolEntry.
263 *
264 * @param data The ResourcePoolEntry to add.
265 */
266 public void add(ResourcePoolEntry data) {
267 Objects.requireNonNull(data);
268 if (resources.get(data.path()) != null) {
269 throw new PluginException("Resource " + data.path()
270 + " already present");
271 }
272 String modulename = data.moduleName();
273 ResourcePoolModuleImpl m = (ResourcePoolModuleImpl)modules.get(modulename);
274 if (m == null) {
275 m = new ResourcePoolModuleImpl(modulename);
276 modules.put(modulename, m);
277 }
278 resources.put(data.path(), data);
279 m.moduleContent.put(data.path(), data);
280 }
281
282 /**
283 * Retrieves the module for the provided name.
284 *
285 * @param name The module name
286 * @return the module of matching name, if found
287 */
288 public Optional<ResourcePoolModule> findModule(String name) {
289 Objects.requireNonNull(name);
290 return Optional.ofNullable(modules.get(name));
291 }
292
293 /**
|