package org.atomnuke.container.packaging.bindings.lang.java; import org.atomnuke.container.packaging.bindings.PackageLoadingException; import org.atomnuke.container.packaging.bindings.environment.BindingEnvironment; import org.atomnuke.container.packaging.bindings.lang.LanguageDescriptor; import org.atomnuke.container.packaging.bindings.lang.LanguageDescriptorImpl; import org.atomnuke.container.packaging.archive.ResourceType; import org.atomnuke.container.packaging.bindings.lang.BindingLanguage; import org.atomnuke.container.packaging.resource.Resource; import org.atomnuke.container.packaging.resource.ResourceManager; import org.atomnuke.container.packaging.resource.ResourceUtil; import org.atomnuke.plugin.Environment; /** * * @author zinic */ public class JavaBindingEnvironment implements BindingEnvironment { private static final LanguageDescriptor LANGUAGE_DESCRIPTOR = new LanguageDescriptorImpl(BindingLanguage.JAVA, ".class"); private final JavaEnvironment environment; private final ResourceManager resourceManager; public JavaBindingEnvironment(ClassLoader parent, ResourceManager resourceManager) { this.resourceManager = resourceManager; environment = new JavaEnvironment(parent, resourceManager); } @Override public LanguageDescriptor language() { return LANGUAGE_DESCRIPTOR; } @Override public void load(Resource resource) throws PackageLoadingException { if (resource.type() == ResourceType.CLASS) { final String classPath = ResourceUtil.instance().relativePathToClassPath(resource.relativePath()); // Alias the classpath only if we need to if (resourceManager.lookup(classPath) == null) { resourceManager.alias(classPath, resource.uri()); } } } @Override public Environment environment() { return environment; } }