public Bundle(JarFile jarFile, File bundleFile) { this.jarFile = jarFile; this.bundleFile = bundleFile; defEntries = findDefEntries(); }
public List<Bundle.DefEntry> getDefEntries() { return bundle.getDefEntries(); }
private static List<ComponentInfo> getComponentsInfo(File appDir) { List<ComponentInfo> components = new ArrayList<>(); for (Bundle bundle : Bundle.getBundles(new File(appDir, ApplicationPackage.COMPONENT_DIR))) { components.add(new ComponentInfo(new File(ApplicationPackage.COMPONENT_DIR, bundle.getFile().getName()).getPath())); } return components; }
public static List<Bundle> getBundles(File bundleDir) { try { List<Bundle> bundles = new ArrayList<>(); for (File bundleFile : getBundleFiles(bundleDir)) { JarFile jarFile; try { jarFile = new JarFile(bundleFile); } catch (ZipException e) { throw new IllegalArgumentException("Error opening jar file '" + bundleFile.getName() + "'. Please check that this is a valid jar file"); } bundles.add(new Bundle(jarFile, bundleFile)); } return bundles; } catch (IOException e) { throw new IllegalArgumentException(e); } }
private void checkUserDefConflict(Bundle bundle, Bundle.DefEntry userDef, List<Bundle> bundlesAdded) { final String defName = userDef.defName; final String defNamespace = userDef.defNamespace; File[] builtinDefsWithSameName = defDir.listFiles(new FilenameFilter() { @Override public boolean accept(File dir, String name) { return name.matches(defName + ".def") || name.matches(defNamespace + "." + defName + ".def"); } }); if (builtinDefsWithSameName != null && builtinDefsWithSameName.length > 0) { String message = "a built-in config definition (" + getFilePathsCommaSeparated(builtinDefsWithSameName) + ")"; for (Bundle b : bundlesAdded) { for (Bundle.DefEntry defEntry : b.getDefEntries()) { if (defEntry.defName.equals(defName) && defEntry.defNamespace.equals(defNamespace)) { message = "the same config definition in the bundle '" + b.getFile().getName() + "'"; } } } throw new IllegalArgumentException("The config definition with name '" + defNamespace + "." + defName + "' contained in the bundle '" + bundle.getFile().getName() + "' conflicts with " + message + ". Please choose a different name."); } }
public void addConfigDefinitionsFromBundle(Bundle bundle, List<Bundle> bundlesAdded) { try { checkAndCopyUserDefs(bundle, bundlesAdded); } catch (IOException e) { throw new IllegalArgumentException("Unable to add config definitions from bundle " + bundle.getFile().getAbsolutePath(), e); } }
public static List<Component> getComponents(File appDir) { List<Component> components = new ArrayList<>(); for (Bundle bundle : Bundle.getBundles(new File(appDir, ApplicationPackage.COMPONENT_DIR))) { components.add(new Component(bundle, new ComponentInfo(new File(ApplicationPackage.COMPONENT_DIR, bundle.getFile().getName()).getPath()))); } return components; }
private void checkAndCopyUserDefs(Bundle bundle, List<Bundle> bundlesAdded) throws IOException { for (Bundle.DefEntry def : bundle.getDefEntries()) { checkUserDefConflict(bundle, def, bundlesAdded); String defFilename = def.defNamespace + "." + def.defName + ".def"; OutputStream out = new FileOutputStream(new File(defDir, defFilename)); out.write(def.contents.getBytes()); out.close(); } }
private void addAllDefsFromBundles(Map<ConfigDefinitionKey, UnparsedConfigDefinition> defs, List<Component> components) { for (Component component : components) { Bundle bundle = component.getBundle(); for (final Bundle.DefEntry def : bundle.getDefEntries()) { final ConfigDefinitionKey defKey = new ConfigDefinitionKey(def.defName, def.defNamespace); if (!defs.containsKey(defKey)) { defs.put(defKey, new UnparsedConfigDefinition() { @Override public ConfigDefinition parse() { DefParser parser = new DefParser(defKey.getName(), new StringReader(def.contents)); return ConfigDefinitionBuilder.createConfigDefinition(parser.getTree()); } @Override public String getUnparsedContent() { return def.contents; } }); } } } }