use of aQute.service.reporter.Reporter in project bndtools by bndtools.
the class ReposTemplateLoader method findTemplates.
@Override
public Promise<List<Template>> findTemplates(String templateType, final Reporter reporter) {
String filterStr = String.format("(%s=%s)", NS_TEMPLATE, templateType);
final Requirement requirement = new CapReqBuilder(NS_TEMPLATE).addDirective(Namespace.REQUIREMENT_FILTER_DIRECTIVE, filterStr).buildSyntheticRequirement();
// Try to get the repositories and BundleLocator from the workspace
List<Repository> workspaceRepos;
BundleLocator tmpLocator;
try {
if (workspace == null)
workspace = Central.getWorkspace();
workspaceRepos = workspace.getPlugins(Repository.class);
tmpLocator = new RepoPluginsBundleLocator(workspace.getRepositories());
} catch (Exception e) {
workspaceRepos = Collections.emptyList();
tmpLocator = new DirectDownloadBundleLocator();
}
final BundleLocator locator = tmpLocator;
// Setup the repos
List<Repository> repos = new ArrayList<>(workspaceRepos.size() + 1);
repos.addAll(workspaceRepos);
addPreferenceConfiguredRepos(repos, reporter);
// Map List<Repository> to Promise<List<Template>>
Promise<List<Template>> promise = repos.stream().map(repo -> promiseFactory.submit(() -> {
Map<Requirement, Collection<Capability>> providerMap = repo.findProviders(Collections.singleton(requirement));
return providerMap.get(requirement).stream().map(cap -> {
IdentityCapability idcap = ResourceUtils.getIdentityCapability(cap.getResource());
Object id = idcap.getAttributes().get(IdentityNamespace.IDENTITY_NAMESPACE);
Object ver = idcap.getAttributes().get(IdentityNamespace.CAPABILITY_VERSION_ATTRIBUTE);
try {
String engineName = (String) cap.getAttributes().get("engine");
if (engineName == null)
engineName = "stringtemplate";
TemplateEngine engine = engines.get(engineName);
if (engine != null)
return new CapabilityBasedTemplate(cap, locator, engine);
reporter.error("Error loading template from resource '%s' version %s: no Template Engine available matching '%s'", id, ver, engineName);
} catch (Exception e) {
reporter.error("Error loading template from resource '%s' version %s: %s", id, ver, e.getMessage());
}
return null;
}).filter(Objects::nonNull).collect(toList());
})).collect(toPromise(promiseFactory)).map(ll -> ll.stream().flatMap(List::stream).collect(toList()));
return promise;
}
use of aQute.service.reporter.Reporter in project bndtools by bndtools.
the class GitHubWorkspaceTemplateLoader method findTemplates.
@Override
public Promise<List<Template>> findTemplates(String type, Reporter reporter) {
if (!TEMPLATE_TYPE.equals(type)) {
return promiseFactory.resolved(Collections.emptyList());
}
GitHub gitHub = new GitHub(cache, promiseFactory);
Parameters githubRepos = new GitRepoPreferences().getGithubRepos();
return githubRepos.entrySet().stream().map(entry -> {
String repo = GitRepoPreferences.removeDuplicateMarker(entry.getKey());
Attrs attribs = entry.getValue();
return gitHub.loadRepoDetails(repo).map(detailsDTO -> {
if (detailsDTO.clone_url == null)
throw new IllegalArgumentException("Missing clone URL");
// Generate icon URI from the owner avatar. The s=16 parameter
// is added to select a 16x16 icon.
URI avatarUri = null;
if (detailsDTO.owner.avatar_url != null)
avatarUri = URI.create(detailsDTO.owner.avatar_url + "&s=16");
String name = attribs.get("name");
if (name == null)
name = repo;
String branch = attribs.get("branch");
final GitCloneTemplateParams params = new GitCloneTemplateParams();
params.cloneUrl = detailsDTO.clone_url;
if (branch != null)
params.branch = branch;
else
params.branch = "origin/" + detailsDTO.default_branch;
params.name = name;
params.category = "GitHub";
params.iconUri = avatarUri;
if (detailsDTO.html_url != null) {
params.helpUri = createHelpUri(repo, detailsDTO.html_url);
}
return (Template) new GitCloneTemplate(params);
});
}).collect(toPromise(promiseFactory));
}
use of aQute.service.reporter.Reporter in project felix by apache.
the class AbstractBaselinePlugin method execute.
protected void execute(Object context) throws MojoExecutionException, MojoFailureException {
if (skip) {
getLog().info("Skipping Baseline execution");
return;
}
if (!supportedProjectTypes.contains(project.getArtifact().getType())) {
getLog().info("Skipping Baseline (project type " + project.getArtifact().getType() + " not supported)");
return;
}
// get the bundles that have to be compared
final Jar currentBundle = getCurrentBundle();
if (currentBundle == null) {
getLog().info("Not generating Baseline report as there is no bundle generated by the project");
return;
}
final Artifact previousArtifact = getPreviousArtifact();
final Jar previousBundle;
if (previousArtifact != null) {
previousBundle = openJar(previousArtifact.getFile());
} else {
previousBundle = null;
}
if (previousBundle == null) {
getLog().info("Not generating Baseline report as there is no previous version of the library to compare against");
return;
}
// preparing the filters
final Instructions packageFilters;
if (filters == null || filters.length == 0) {
packageFilters = new Instructions();
} else {
packageFilters = new Instructions(Arrays.asList(filters));
}
String generationDate = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm'Z'").format(new Date());
final Reporter reporter = new Processor();
final Info[] infos;
try {
final Set<Info> infoSet = new Baseline(reporter, new DiffPluginImpl()).baseline(currentBundle, previousBundle, packageFilters);
infos = infoSet.toArray(new Info[infoSet.size()]);
Arrays.sort(infos, new InfoComparator());
} catch (final Exception e) {
throw new MojoExecutionException("Impossible to calculate the baseline", e);
} finally {
closeJars(currentBundle, previousBundle);
}
try {
// go!
context = this.init(context);
startBaseline(context, generationDate, project.getArtifactId(), project.getVersion(), previousArtifact.getVersion());
for (final Info info : infos) {
DiffMessage diffMessage = null;
if (info.suggestedVersion != null) {
if (info.newerVersion.compareTo(info.suggestedVersion) > 0) {
diffMessage = new DiffMessage("Excessive version increase", DiffMessage.Type.warning);
reporter.warning("%s: %s; detected %s, suggested %s", info.packageName, diffMessage, info.newerVersion, info.suggestedVersion);
} else if (info.newerVersion.compareTo(info.suggestedVersion) < 0) {
diffMessage = new DiffMessage("Version increase required", DiffMessage.Type.error);
reporter.error("%s: %s; detected %s, suggested %s", info.packageName, diffMessage, info.newerVersion, info.suggestedVersion);
}
}
switch(info.packageDiff.getDelta()) {
case UNCHANGED:
if (info.newerVersion.compareTo(info.suggestedVersion) != 0) {
diffMessage = new DiffMessage("Version has been increased but analysis detected no changes", DiffMessage.Type.warning);
reporter.warning("%s: %s; detected %s, suggested %s", info.packageName, diffMessage, info.newerVersion, info.suggestedVersion);
}
break;
case REMOVED:
diffMessage = new DiffMessage("Package removed", DiffMessage.Type.info);
reporter.trace("%s: %s ", info.packageName, diffMessage);
break;
case CHANGED:
case MICRO:
case MINOR:
case MAJOR:
case ADDED:
default:
// ok
break;
}
startPackage(context, info.mismatch, info.packageName, getShortDelta(info.packageDiff.getDelta()), StringUtils.lowerCase(String.valueOf(info.packageDiff.getDelta())), info.newerVersion, info.olderVersion, info.suggestedVersion, diffMessage, info.attributes);
if (Delta.REMOVED != info.packageDiff.getDelta()) {
doPackageDiff(context, info.packageDiff);
}
endPackage(context);
}
endBaseline(context);
} finally {
this.close(context);
}
// check if it has to fail if some error has been detected
boolean fail = false;
if (!reporter.isOk()) {
for (String errorMessage : reporter.getErrors()) {
getLog().error(errorMessage);
}
if (failOnError) {
fail = true;
}
}
if (!reporter.getWarnings().isEmpty()) {
for (String warningMessage : reporter.getWarnings()) {
getLog().warn(warningMessage);
}
if (failOnWarning) {
fail = true;
}
}
getLog().info(String.format("Baseline analysis complete, %s error(s), %s warning(s)", reporter.getErrors().size(), reporter.getWarnings().size()));
if (fail) {
throw new MojoFailureException("Baseline failed, see generated report");
}
}
Aggregations