@Override public Class<?> loadClass(String className) throws ClassNotFoundException { assertNotUninstalled(); return classLoader.loadClass(className); }
@Override public String toString() { return "Module[" + getIdentity() + "]"; } }
@Override protected EmbeddedRuntime getRuntime() { return (EmbeddedRuntime) super.getRuntime(); }
@Override public final Module installModule(ClassLoader classLoader, Resource resource, Dictionary<String, String> headers, Attachable context) throws ModuleException { assertNoShutdown(); context = context != null ? context : new AttachableSupport(); AbstractModule module = createModule(classLoader, resource, headers, context); // Attach the {@link ModuleEntriesProvider} ModuleEntriesProvider entriesProvider = context.getAttachment(AbstractModule.MODULE_ENTRIES_PROVIDER_KEY); entriesProvider = entriesProvider != null ? entriesProvider : getDefaultEntriesProvider(module, context); if (entriesProvider != null) { module.putAttachment(AbstractModule.MODULE_ENTRIES_PROVIDER_KEY, entriesProvider); } if (getModule(module.getIdentity()) != null) throw new ModuleException("Module already installed: " + module); modules.put(module.getModuleId(), module); // #1 The module's state is set to {@code INSTALLED}. module.setState(State.INSTALLED); // #2 A module event of type {@link ModuleEvent#INSTALLED} is fired. runtimeEvents.fireModuleEvent(module, ModuleEvent.INSTALLED); LOGGER.info("Installed: {}", module); return module; }
@Override @SuppressWarnings("unchecked") public <A> A adapt(Class<A> type) { A result = super.adapt(type); if (result == null) { if (type.isAssignableFrom(EmbeddedRuntime.class)) { result = (A) getRuntime(); } } return result; }
@Override @SuppressWarnings("unchecked") public <A> A adapt(Class<A> type) { A result = null; if (type.isAssignableFrom(Bundle.class)) { result = (A) getBundleAdaptor(this); } else if (type.isAssignableFrom(Runtime.class)) { result = (A) runtime; } else if (type.isAssignableFrom(AbstractRuntime.class)) { result = (A) runtime; } else if (type.isAssignableFrom(ClassLoader.class)) { result = (A) classLoader; } else if (type.isAssignableFrom(Resource.class)) { result = (A) resource; } else if (type.isAssignableFrom(Module.class)) { result = (A) this; } else if (type.isAssignableFrom(ModuleContext.class)) { result = (A) getModuleContext(); } else if (type.isAssignableFrom(ModuleEntriesProvider.class)) { result = (A) getAttachment(MODULE_ENTRIES_PROVIDER_KEY); } return result; }
protected void assertNotUninstalled() { if (getState() == State.UNINSTALLED) throw new IllegalStateException("Module already uninstalled: " + this); }
String identityHeader = getIdentityHeader(resourceIdentity); clonedHeaders.put(Constants.GRAVIA_IDENTITY_CAPABILITY, identityHeader);
@Override public URL getEntry(String path) { ModuleEntriesProvider entriesProvider = adapt(ModuleEntriesProvider.class); return entriesProvider != null ? entriesProvider.getEntry(path) : null; }
@Override public List<String> getEntryPaths(String path) { ModuleEntriesProvider entriesProvider = adapt(ModuleEntriesProvider.class); return entriesProvider != null ? entriesProvider.getEntryPaths(path) : Collections.<String>emptyList(); }
@Override public List<URL> findEntries(String path, String filePattern, boolean recurse) { ModuleEntriesProvider entriesProvider = adapt(ModuleEntriesProvider.class); return entriesProvider != null ? entriesProvider.findEntries(path, filePattern, recurse) : Collections.<URL>emptyList(); }