public Properties toProperties() { Properties rc = new Properties(); rc.setProperty(FAB_MODULE_ID, id.toString()); rc.setProperty(FAB_MODULE_NAME, emptyIfNull(name)); rc.setProperty(FAB_MODULE_EXTENSION, ""+extensionModule); rc.setProperty(FAB_MODULE_DESCRIPTION, emptyIfNull(description)); rc.setProperty(FAB_MODULE_LONG_DESCRIPTION, emptyIfNull(longDescription)); rc.setProperty(FAB_MODULE_DEFAULT_EXTENSIONS, join(defaultExtensions, " ")); rc.setProperty(FAB_MODULE_EXTENDS, join(extendsModules, " ")); rc.setProperty(FAB_MODULE_ENDORSED_EXTENSIONS, join(endorsedExtensions, " ")); return rc; }
protected static List<String> getClassPathElements(String value) { List<String> list = Strings.splitAndTrimAsList(emptyIfNull(value), ","); list.remove("."); return list; } }
private List<String> getListManifestProperty(String name, String defaultValue) { return Strings.splitAndTrimAsList(defaultIfEmpty(getManifestProperty(name), defaultValue), "\\s+"); }
DependencyTree tree = result.getTree(); sharedFilterPatterns.addAll(Strings.splitAndTrimAsList(emptyIfNull(tree.getManifestEntry(ServiceConstants.INSTR_FAB_PROVIDED_DEPENDENCY)), "\\s+")); requireBundleFilterPatterns.addAll(Strings.splitAndTrimAsList(emptyIfNull(tree.getManifestEntry(ServiceConstants.INSTR_FAB_DEPENDENCY_REQUIRE_BUNDLE)), "\\s+")); excludeDependencyFilterPatterns.addAll(Strings.splitAndTrimAsList(emptyIfNull(tree.getManifestEntry(ServiceConstants.INSTR_FAB_EXCLUDE_DEPENDENCY)), "\\s+")); optionalDependencyPatterns.addAll(Strings.splitAndTrimAsList(emptyIfNull(tree.getManifestEntry(ServiceConstants.INSTR_FAB_OPTIONAL_DEPENDENCY)), "\\s+")); sharedFilter = DependencyTreeFilters.parseShareFilter(join(sharedFilterPatterns, " ")); requireBundleFilter = DependencyTreeFilters.parseRequireBundleFilter(join(requireBundleFilterPatterns, " ")); optionalDependencyFilter = DependencyTreeFilters.parseExcludeOptionalFilter(join(optionalDependencyPatterns, " ")); this.excludeDependencyFilter = DependencyTreeFilters.parseExcludeFilter(join(excludeDependencyFilterPatterns, " "), optionalDependencyFilter);
private void registerModule() throws IOException, XmlPullParserException { try { Properties moduleProperties = new Properties(); for( String key: FAB_MODULE_PROPERTIES) { String value = getManifestProperty("FAB-" + key); if( Strings.notEmpty(value) ) { moduleProperties.setProperty(key, value); } } // Enhance with maven pom information if( !moduleProperties.containsKey(FAB_MODULE_ID) ) { moduleProperties.setProperty(FAB_MODULE_ID, moduleId.toString()); } if( !moduleProperties.containsKey(FAB_MODULE_NAME) ) { moduleProperties.setProperty(FAB_MODULE_NAME, moduleId.getArtifactId()); } if( !moduleProperties.containsKey(FAB_MODULE_DESCRIPTION) ) { moduleProperties.setProperty(FAB_MODULE_DESCRIPTION, emptyIfNull(connection.getProjectDescription())); } ModuleDescriptor descriptor = ModuleDescriptor.fromProperties(moduleProperties); moduleRegistry.add(descriptor); } catch (Exception e) { System.err.println("Failed to register the fabric module for: "+moduleId); e.printStackTrace(); } }
sharedFilter = DependencyTreeFilters.parseShareFilter(join(sharedFilterPatterns, " ")); requireBundleFilter = DependencyTreeFilters.parseRequireBundleFilter(join(requireBundleFilterPatterns, " ")); optionalDependencyFilter = DependencyTreeFilters.parseExcludeOptionalFilter(join(optionalDependencyPatterns, " ")); excludeDependencyFilter = DependencyTreeFilters.parseExcludeFilter(join(excludeDependencyFilterPatterns, " "), optionalDependencyFilter); importExportFilter = DependencyTreeFilters.parse(join(importExportFilterPatterns, " ")); bundleClassPath.addAll(Strings.splitAsList(getManifestProperty(ServiceConstants.INSTR_BUNDLE_CLASSPATH), ",")); requireBundles.addAll(Strings.splitAsList(getManifestProperty(ServiceConstants.INSTR_REQUIRE_BUNDLE), ",")); importPackages.putAll(new Analyzer().parseHeader(emptyIfNull(getManifestProperty(ServiceConstants.INSTR_IMPORT_PACKAGE)))); Filter<Dependency> optionalFilter = DependencyFilters.parseExcludeOptionalFilter(join(optionalDependencyPatterns, " ")); Filter<Dependency> excludeFilter = DependencyFilters.parseExcludeFilter(join(excludeDependencyFilterPatterns, " "), optionalFilter); LOG.debug("resolved: bundleClassPath: " + Strings.join(bundleClassPath, "\t\n")); LOG.debug("resolved: requireBundles: " + Strings.join(requireBundles, "\t\n")); LOG.debug("resolved: importPackages: " + Strings.join(importPackages.keySet(), "\t\n")); instructions.setProperty(ServiceConstants.INSTR_BUNDLE_CLASSPATH, Strings.join(bundleClassPath, ",")); instructions.setProperty(ServiceConstants.INSTR_REQUIRE_BUNDLE, Strings.join(requireBundles, ",")); instructions.setProperty(ServiceConstants.INSTR_FAB_MODULE_ID, moduleId.toString()); instructions.setProperty(ServiceConstants.INSTR_FAB_PROVIDED_DEPENDENCY, join(sharedFilterPatterns, " ")); instructions.setProperty(ServiceConstants.INSTR_FAB_DEPENDENCY_REQUIRE_BUNDLE, join(requireBundleFilterPatterns, " ")); instructions.setProperty(ServiceConstants.INSTR_FAB_EXCLUDE_DEPENDENCY, join(excludeDependencyFilterPatterns, " ")); instructions.setProperty(ServiceConstants.INSTR_FAB_OPTIONAL_DEPENDENCY, join(optionalDependencyPatterns, " "));
/** * Store extension configuration in the config admin. * * @param id * @return */ @Override protected void setEnabledExtensions(VersionedDependencyId id, List<String> values) { setConfigProperty("extensions."+id.toString(), join(values, " ")); }
String version = id.getVersion(); String extensionIds = (String) bundle.getHeaders().get(ServiceConstants.INSTR_FAB_MODULE_ENABLED_EXTENSIONS); if( notEmpty(extensionIds) ) { List<VersionedDependencyId> ids = ModuleDescriptor.decodeVersionList(extensionIds); ArrayList<String> ext = new ArrayList<String>(); version += ", Extensions: "+join(ext, " ")+""; println("%15s: %s", "Available", join(versions, ", ")); String desc = notEmpty(selected.getLongDescription()) ? selected.getLongDescription() : selected.getDescription(); String lines[] = wordWrap(desc, 60); println("%15s: %s", "Description", lines[0]); if( extensions.size() > 0 ) { HashSet enabled = new HashSet<String>(selected.getEnabledExtensions()); println("%15s: %s", "Extensions", selected.getDefaultExtensions().isEmpty() ? "" : "(Default: "+join(selected.getDefaultExtensions(), ", ")+")");
public static Service parse(String header) { String[] parts = header.split(";"); Map<String, String> properties = new HashMap<String, String>(); if (parts.length > 1) { for (int i = 1 ; i < parts.length ; i++) { String[] keyvalue = parts[i].split("="); if (keyvalue.length == 2 && Strings.notEmpty(Strings.unquote(keyvalue[1]))) { properties.put(keyvalue[0], Strings.unquote(keyvalue[1])); } } } return new Service(parts[0], properties); }
public static List<VersionedDependencyId> decodeVersionList(String property) { return decodeDependencyIds(splitAndTrimAsList(property, "\\s+")); }
protected String getExpression() { return defaultIfEmpty(bundle, "*") + ":" + defaultIfEmpty(name, "*"); }
public static VersionedDependencyId fromString(String value) { String[] parts = value.split(":"); if( parts.length < 3 ) { throw new IllegalArgumentException("Invalid dependency id: "+value); } String groupId = parts[0]; String artifactId = parts[1]; String version = parts[2]; String extension = parts.length > 3 ? nullIfEmpty(parts[3]) : null; String classifier = parts.length > 4 ? nullIfEmpty(parts[4]) : null; return new VersionedDependencyId(groupId, artifactId, version, extension, classifier); }
while (it.hasNext()) { Map.Entry<String, Object> e = it.next(); output.append(String.format("%s = %s\n", e.getKey(), Strings.toString(e.getValue()))); while (it.hasNext()) { Map.Entry<String, Object> e = it.next(); output.append(String.format("%s = %s\n", e.getKey(), Strings.toString(e.getValue()))); output.append(e.getKey()); output.append(" = \n"); formatHeader(Strings.toString(e.getValue()), null, output, indent); output.append("\n"); output.append(e.getKey()); output.append(" = \n"); formatHeader(Strings.toString(e.getValue()), formatters.get(e.getKey()), output, indent); output.append("\n");
DependencyTree tree = result.getTree(); sharedFilterPatterns.addAll(Strings.splitAndTrimAsList(emptyIfNull(tree.getManifestEntry(ServiceConstants.INSTR_FAB_PROVIDED_DEPENDENCY)), "\\s+")); requireBundleFilterPatterns.addAll(Strings.splitAndTrimAsList(emptyIfNull(tree.getManifestEntry(ServiceConstants.INSTR_FAB_DEPENDENCY_REQUIRE_BUNDLE)), "\\s+")); excludeDependencyFilterPatterns.addAll(Strings.splitAndTrimAsList(emptyIfNull(tree.getManifestEntry(ServiceConstants.INSTR_FAB_EXCLUDE_DEPENDENCY)), "\\s+")); optionalDependencyPatterns.addAll(Strings.splitAndTrimAsList(emptyIfNull(tree.getManifestEntry(ServiceConstants.INSTR_FAB_OPTIONAL_DEPENDENCY)), "\\s+")); sharedFilter = DependencyTreeFilters.parseShareFilter(join(sharedFilterPatterns, " ")); requireBundleFilter = DependencyTreeFilters.parseRequireBundleFilter(join(requireBundleFilterPatterns, " ")); optionalDependencyFilter = DependencyTreeFilters.parseExcludeOptionalFilter(join(optionalDependencyPatterns, " ")); this.excludeDependencyFilter = DependencyTreeFilters.parseExcludeFilter(join(excludeDependencyFilterPatterns, " "), optionalDependencyFilter);
private void registerModule() throws IOException { try { Properties moduleProperties = new Properties(); for( String key: FAB_MODULE_PROPERTIES) { String value = getManifestProperty("FAB-" + key); if( Strings.notEmpty(value) ) { moduleProperties.setProperty(key, value); } } // Enhance with maven pom information if( !moduleProperties.containsKey(FAB_MODULE_ID) ) { moduleProperties.setProperty(FAB_MODULE_ID, moduleId.toString()); } if( !moduleProperties.containsKey(FAB_MODULE_NAME) ) { moduleProperties.setProperty(FAB_MODULE_NAME, moduleId.getArtifactId()); } if( !moduleProperties.containsKey(FAB_MODULE_DESCRIPTION) ) { moduleProperties.setProperty(FAB_MODULE_DESCRIPTION, emptyIfNull(connection.getProjectDescription())); } ModuleDescriptor descriptor = ModuleDescriptor.fromProperties(moduleProperties); moduleRegistry.add(descriptor); } catch (Exception e) { System.err.println("Failed to register the fabric module for: "+moduleId); e.printStackTrace(); } }
sharedFilter = DependencyTreeFilters.parseShareFilter(join(sharedFilterPatterns, " ")); requireBundleFilter = DependencyTreeFilters.parseRequireBundleFilter(join(requireBundleFilterPatterns, " ")); optionalDependencyFilter = DependencyTreeFilters.parseExcludeOptionalFilter(join(optionalDependencyPatterns, " ")); excludeDependencyFilter = DependencyTreeFilters.parseExcludeFilter(join(excludeDependencyFilterPatterns, " "), optionalDependencyFilter); importExportFilter = DependencyTreeFilters.parse(join(importExportFilterPatterns, " ")); bundleClassPath.addAll(Strings.splitAsList(getManifestProperty(ServiceConstants.INSTR_BUNDLE_CLASSPATH), ",")); requireBundles.addAll(Strings.splitAsList(getManifestProperty(ServiceConstants.INSTR_REQUIRE_BUNDLE), ",")); importPackages.putAll(new Analyzer().parseHeader(emptyIfNull(getManifestProperty(ServiceConstants.INSTR_IMPORT_PACKAGE)))); Filter<Dependency> optionalFilter = DependencyFilters.parseExcludeOptionalFilter(join(optionalDependencyPatterns, " ")); Filter<Dependency> excludeFilter = DependencyFilters.parseExcludeFilter(join(excludeDependencyFilterPatterns, " "), optionalFilter); LOG.debug("resolved: bundleClassPath: " + Strings.join(bundleClassPath, "\t\n")); LOG.debug("resolved: requireBundles: " + Strings.join(requireBundles, "\t\n")); LOG.debug("resolved: importPackages: " + Strings.join(importPackages.keySet(), "\t\n")); instructions.setProperty(ServiceConstants.INSTR_BUNDLE_CLASSPATH, Strings.join(bundleClassPath, ",")); instructions.setProperty(ServiceConstants.INSTR_REQUIRE_BUNDLE, Strings.join(requireBundles, ",")); instructions.setProperty(ServiceConstants.INSTR_FAB_MODULE_ID, moduleId.toString()); instructions.setProperty(ServiceConstants.INSTR_FAB_PROVIDED_DEPENDENCY, join(sharedFilterPatterns, " ")); instructions.setProperty(ServiceConstants.INSTR_FAB_DEPENDENCY_REQUIRE_BUNDLE, join(requireBundleFilterPatterns, " ")); instructions.setProperty(ServiceConstants.INSTR_FAB_EXCLUDE_DEPENDENCY, join(excludeDependencyFilterPatterns, " ")); instructions.setProperty(ServiceConstants.INSTR_FAB_OPTIONAL_DEPENDENCY, join(optionalDependencyPatterns, " "));
/** * Store extension configuration in the config admin. * * @param id * @return */ @Override protected void setEnabledExtensions(VersionedDependencyId id, List<String> values) { setConfigProperty("extensions."+id.toString(), join(values, " ")); }
String version = id.getVersion(); String extensionIds = (String) bundle.getHeaders().get(ServiceConstants.INSTR_FAB_MODULE_ENABLED_EXTENSIONS); if( notEmpty(extensionIds) ) { List<VersionedDependencyId> ids = ModuleDescriptor.decodeVersionList(extensionIds); ArrayList<String> ext = new ArrayList<String>(); version += ", Extensions: "+join(ext, " ")+""; println("%15s: %s", "Available", join(versions, ", ")); String desc = notEmpty(selected.getLongDescription()) ? selected.getLongDescription() : selected.getDescription(); String lines[] = wordWrap(desc, 60); println("%15s: %s", "Description", lines[0]); if( extensions.size() > 0 ) { HashSet enabled = new HashSet<String>(selected.getEnabledExtensions()); println("%15s: %s", "Extensions", selected.getDefaultExtensions().isEmpty() ? "" : "(Default: "+join(selected.getDefaultExtensions(), ", ")+")");
public static Service parse(String header) { String[] parts = header.split(";"); Map<String, String> properties = new HashMap<String, String>(); if (parts.length > 1) { for (int i = 1 ; i < parts.length ; i++) { String[] keyvalue = parts[i].split("="); if (keyvalue.length == 2 && Strings.notEmpty(Strings.unquote(keyvalue[1]))) { properties.put(keyvalue[0], Strings.unquote(keyvalue[1])); } } } return new Service(parts[0], properties); }