package com.atlassian.labs.speakeasy.commonjs.transformer; import com.atlassian.labs.speakeasy.commonjs.CommonJsModules; import com.atlassian.labs.speakeasy.commonjs.Module; import com.atlassian.labs.speakeasy.commonjs.descriptor.CommonJsModulesDescriptor; import com.atlassian.labs.speakeasy.commonjs.util.ModuleWrapper; import com.atlassian.plugin.servlet.DownloadException; import com.atlassian.plugin.servlet.DownloadableResource; import com.atlassian.plugin.webresource.transformer.AbstractTransformedDownloadableResource; import com.google.common.collect.ImmutableMap; import java.io.*; /** * */ public class CommonJsModuleWrappingDownloadableResource extends AbstractTransformedDownloadableResource { private final String moduleName; private final String modulesKey; private final CommonJsModules commonJsModules; public CommonJsModuleWrappingDownloadableResource(DownloadableResource delegate, String moduleName, String modulesKey, CommonJsModulesDescriptor commonJsModulesDescriptor) { super(delegate); this.moduleName = moduleName; this.modulesKey = modulesKey; this.commonJsModules = commonJsModulesDescriptor.getModule(); } public void streamResource(OutputStream outputStream) throws DownloadException { PrintWriter out = new PrintWriter(outputStream); Module module = commonJsModules.getModule(moduleName); out.println(ModuleWrapper.wrapModule( moduleName, commonJsModules.getModuleContents(moduleName), module.getDependencies(), ImmutableMap.of( "pluginKey", commonJsModules.getPluginKey(), "modulesKey", modulesKey ))); out.flush(); } // private Iterable<Dependency> findRecursiveDependencies(String id) // { // Map<String,Dependency> dependencies = new HashMap<String,Dependency>(); // List<CommonJsModulesDescriptor> allDescriptors = pluginAccessor.getEnabledModuleDescriptorsByClass(CommonJsModulesDescriptor.class); // allDescriptors.remove(commonJsModulesDescriptor); // // recurseDependencies(allDescriptors, commonJsModulesDescriptor, id, dependencies); // dependencies.remove(id); // return dependencies.values(); // } // // private void recurseDependencies(Iterable<CommonJsModulesDescriptor> allDescriptors, CommonJsModulesDescriptor preferredDescriptor, String id, Map<String,Dependency> found) // { // // CommonJsModulesDescriptor foundDescriptor = preferredDescriptor; // // // find the dependencies // Set<String> immediateDeps = preferredDescriptor.getModuleDependencies(id); // if (immediateDeps == null) // { // for (CommonJsModulesDescriptor desc : allDescriptors) // { // if (desc != preferredDescriptor) // { // immediateDeps = desc.getModuleDependencies(id); // if (immediateDeps != null) // { // foundDescriptor = desc; // break; // } // } // } // } // // if (immediateDeps == null) // { // throw new RuntimeException("Unable to find module: " + id); // } // // // add this dependency // found.put(id, new Dependency(id, foundDescriptor)); // // // add its unique dependencies // final Set<String> foundKeys = found.keySet(); // if (!foundKeys.containsAll(immediateDeps)) // { // // only recurse if there is anything new // Set<String> uniqueDeps = new HashSet<String>(immediateDeps); // uniqueDeps.removeAll(foundKeys); // for (String dep : uniqueDeps) // { // recurseDependencies(allDescriptors, foundDescriptor, dep, found); // } // } // } // // // // private static class Dependency // { // private final String id; // private final CommonJsModulesDescriptor commonJsModulesDescriptor; // // public Dependency(String id, CommonJsModulesDescriptor commonJsModulesDescriptor) // { // this.id = id; // this.commonJsModulesDescriptor = commonJsModulesDescriptor; // } // // public String getId() // { // return id; // } // // public CommonJsModulesDescriptor getCommonJsModulesDescriptor() // { // return commonJsModulesDescriptor; // } // } }