TransformerFactory.newInstance().newTransformer().transform(new DOMSource(doc), new StreamResult(bytesOut));
appRepo = helper.readRepository(new InputStreamReader(new ByteArrayInputStream(bytesOut.toByteArray())));
} catch (Exception e) {
throw new ResolverException(e);
}
List<Repository> resolveRepos = new ArrayList<Repository>();
// add system repository
resolveRepos.add(repositoryAdmin.getSystemRepository());
// add local repository
resolveRepos.add(getLocalRepository(repositoryAdmin));
// add application repository
resolveRepos.add(appRepo);
// add user-defined repositories
Repository[] repos = repositoryAdmin.listRepositories();
for (Repository r : repos) {
resolveRepos.add(r);
}
Resolver obrResolver = repositoryAdmin.resolver(resolveRepos.toArray(new Repository[resolveRepos.size()]));
// add a resource describing the requirements of the application
// metadata.
obrResolver.add(createApplicationResource(helper, appName, appVersion, appContent));
boolean resolved = obrResolver.resolve();
Set<BundleInfo> fragments = new HashSet<BundleInfo>();
if (resolved && resolveFragments) {
for (Resource resource : obrResolver.getRequiredResources()) {
Resource fragmentResource = findFragmentResource(resource);
if (fragmentResource != null) {
obrResolver.add(fragmentResource);
fragments.add(toBundleInfo(fragmentResource, false));
}
}
if (returnOptionalResources) {
for (Resource resource : obrResolver.getOptionalResources()) {
Resource fragmentResource = findFragmentResource(resource);
if (fragmentResource != null) {
obrResolver.add(fragmentResource);
fragments.add(toBundleInfo(fragmentResource, true));
}
}
}
if (!fragments.isEmpty()) {
resolved = obrResolver.resolve();
}
}
if (resolved) {
Set<BundleInfo> result = new HashSet<BundleInfo>();
for (Resource resource : obrResolver.getRequiredResources()) {
BundleInfo bundleInfo = toBundleInfo(resource, false);
result.add(bundleInfo);
}
if (returnOptionalResources) {
for (Resource resource : obrResolver.getOptionalResources()) {
BundleInfo bundleInfo = toBundleInfo(resource, true);
result.add(bundleInfo);
}
}
result.addAll(fragments);
return result;
} else {
Reason[] reasons = obrResolver.getUnsatisfiedRequirements();
// let's refine the list by removing the indirect unsatisfied
// bundles that are caused by unsatisfied packages or other bundles
Map<String, Set<String>> refinedReqs = refineUnsatisfiedRequirements(obrResolver, reasons);
StringBuffer reqList = new StringBuffer();
Map<String, String> unsatisfiedRequirements = extractConsumableMessageInfo(refinedReqs);
for (String reason : unsatisfiedRequirements.keySet()) {
reqList.append('\n');
reqList.append(reason);
}
ResolverException re = new ResolverException(MessageUtil.getMessage("RESOLVER_UNABLE_TO_RESOLVE",
new Object[] { appName, reqList }));
List<String> list = new ArrayList<String>();
list.addAll(unsatisfiedRequirements.keySet());
re.setUnsatisfiedRequirements(list);
throw re;
}
}