/** * Create a new RequirementDependencyItem. * * @param module the module * @param requirement the requirement * @throws IllegalArgumentException for a null parameter */ public RequirementDependencyItem(Module module, Requirement requirement) { super(module != null ? module.getName() : null, null, CLASSLOADER, CLASSLOADER); if (module == null) throw new IllegalArgumentException("Null module"); if (requirement == null) throw new IllegalArgumentException("Null requirement"); this.module = module; this.requirement = requirement; }
/** * Get a module for a name * * @param name the name * @return the module */ protected Module getModule(String name) { for (Module module : units.values()) { if (name.equals(module.getName())) return module; } return null; }
/** * Resolve the requirement * * @param controller the controller * @param module the module * @param requirement the requirement * @return the resolved name or null if not resolved */ protected Object resolve(Controller controller, Module module, Requirement requirement) { // TODO JBMICROCONT-182 - do this properly for (Module other : units.values()) { ClassLoaderMetaData metadata = other.getMetadata(); List<Capability> capabilities = metadata.getCapabilities(); if (capabilities != null) { for (Capability capability : capabilities) { if (capability.resolves(module.getDeploymentUnit(), requirement)) return other.getName(); } } } return null; }
@Override protected VFSClassLoaderPolicy createTopLevelClassLoaderPolicy(DeploymentContext context, Module module) throws Exception { ClassPathVisitor visitor = new ClassPathVisitor(); context.visit(visitor); Set<VirtualFile> classPath = visitor.getClassPath(); VirtualFile[] roots = new VirtualFile[classPath.size() + 1]; int i = 0; for (VirtualFile path : classPath) roots[i++] = path; MemoryContextFactory factory = MemoryContextFactory.getInstance(); factory.createRoot(module.getDynamicClassRoot()); URL url = new URL(module.getDynamicClassRoot() + "/classes"); roots[i++] = factory.createDirectory(url).getVirtualFile(); VFSClassLoaderPolicy policy = new VFSClassLoaderPolicy(module.getName(), roots); policy.setExportAll(module.getExportAll()); policy.setImportAll(module.isImportAll()); // TODO JBMICROCONT-182 more policy from "module" return policy; }