in src/main/java/org/apache/sling/feature/analyser/Analyser.java [185:375]
public AnalyserResult analyse(final Feature feature, final ArtifactId fwk, final FeatureProvider featureProvider)
throws Exception {
logger.info("Starting analyzing feature '{}'...", feature.getId());
long start = System.currentTimeMillis();
final FeatureDescriptor featureDesc = scanner.scan(feature);
BundleDescriptor bd = null;
ArtifactId framework = fwk;
if (framework == null) {
final ExecutionEnvironmentExtension ext = ExecutionEnvironmentExtension
.getExecutionEnvironmentExtension(feature);
if (ext != null && ext.getFramework() != null) {
framework = ext.getFramework().getId();
}
}
if (framework != null) {
bd = scanner.scan(framework, feature.getFrameworkProperties());
}
logger.info("- Scanned feature in {}ms", System.currentTimeMillis() - start);
final BundleDescriptor fwkDesc = bd;
final List<AnalyserResult.GlobalReport> globalWarnings = new ArrayList<>();
final List<AnalyserResult.ArtifactReport> artifactWarnings = new ArrayList<>();
final List<AnalyserResult.ExtensionReport> extensionWarnings = new ArrayList<>();
final List<AnalyserResult.ConfigurationReport> configurationWarnings = new ArrayList<>();
final List<AnalyserResult.GlobalReport> globalErrors = new ArrayList<>();
final List<AnalyserResult.ArtifactReport> artifactErrors = new ArrayList<>();
final List<AnalyserResult.ExtensionReport> extensionErrors = new ArrayList<>();
final List<AnalyserResult.ConfigurationReport> configurationErrors = new ArrayList<>();
AnalyserMetaDataExtension analyserMetaDataExtension = AnalyserMetaDataExtension.getAnalyserMetaDataExtension(feature);
// execute analyser tasks
for (final AnalyserTask task : tasks) {
logger.info("- Executing {} [{}]...", task.getName(), task.getId());
start = System.currentTimeMillis();
final Map<String, String> taskConfiguration = getConfiguration(task.getId());
task.execute(new AnalyserTaskContext() {
private final FeatureProvider cachingFeatureProvider = featureProvider != null ? new FeatureProvider() {
private final ConcurrentHashMap<ArtifactId, Feature> cache = new ConcurrentHashMap<>();
@Override
public Feature provide(ArtifactId artifactId) {
return cache.computeIfAbsent(artifactId, key -> featureProvider.provide(artifactId));
}
}: null;
@Override
public Feature getFeature() {
return feature;
}
@Override
public FeatureDescriptor getFeatureDescriptor() {
return featureDesc;
}
@Override
public FeatureProvider getFeatureProvider() {
return cachingFeatureProvider;
}
@Override
public BundleDescriptor getFrameworkDescriptor() {
return fwkDesc;
}
@Override
public Map<String, String> getConfiguration() {
return taskConfiguration;
}
@Override
public void reportWarning(final String message) {
if (analyserMetaDataExtension == null || analyserMetaDataExtension.reportWarning(feature.getId())) {
globalWarnings.add(new AnalyserResult.GlobalReport(message, task.getId()));
}
}
@Override
public void reportArtifactWarning(ArtifactId artifactId, String message) {
if (analyserMetaDataExtension == null || (analyserMetaDataExtension.reportWarning(artifactId) && analyserMetaDataExtension.reportWarning(feature.getId()))) {
artifactWarnings.add(new AnalyserResult.ArtifactReport(artifactId, message, task.getId()));
}
}
@Override
public void reportArtifactError(ArtifactId artifactId, String message) {
if (analyserMetaDataExtension == null || (analyserMetaDataExtension.reportError(artifactId) && analyserMetaDataExtension.reportError(feature.getId()))) {
artifactErrors.add(new AnalyserResult.ArtifactReport(artifactId, message, task.getId()));
}
}
@Override
public void reportExtensionWarning(String extension, String message) {
if (analyserMetaDataExtension == null || analyserMetaDataExtension.reportWarning(feature.getId())) {
extensionWarnings.add(new AnalyserResult.ExtensionReport(extension, message, task.getId()));
}
}
@Override
public void reportExtensionError(String extension, String message) {
if (analyserMetaDataExtension == null || analyserMetaDataExtension.reportError(feature.getId())) {
extensionErrors.add(new AnalyserResult.ExtensionReport(extension, message, task.getId()));
}
}
@Override
public void reportError(final String message) {
if (analyserMetaDataExtension == null || analyserMetaDataExtension.reportError(feature.getId())) {
globalErrors.add(new AnalyserResult.GlobalReport(message, task.getId()));
}
}
@Override
public void reportConfigurationError(Configuration cfg, String message) {
if (analyserMetaDataExtension == null || analyserMetaDataExtension.reportWarning(feature.getId())) {
configurationErrors.add(new AnalyserResult.ConfigurationReport(cfg, message, task.getId()));
}
}
@Override
public void reportConfigurationWarning(Configuration cfg, String message) {
if (analyserMetaDataExtension == null || analyserMetaDataExtension.reportWarning(feature.getId())) {
configurationWarnings.add(new AnalyserResult.ConfigurationReport(cfg, message, task.getId()));
}
}
});
logger.info("- Executed {} [{}] in {}ms", task.getName(), task.getId(), System.currentTimeMillis() - start);
}
int allWarnings = globalWarnings.size() + artifactWarnings.size() + extensionWarnings.size() + configurationWarnings.size();
int allErrors = globalErrors.size() + artifactErrors.size() + extensionErrors.size() + configurationErrors.size();
logger.info("Analyzing feature '" + feature.getId() + "' finished : "
+ allWarnings + " warnings, "
+ allErrors + " errors.");
return new AnalyserResult() {
@Override
public List<GlobalReport> getGlobalWarnings() {
return globalWarnings;
}
@Override
public List<ArtifactReport> getArtifactWarnings() {
return artifactWarnings;
}
@Override
public List<ExtensionReport> getExtensionWarnings() {
return extensionWarnings;
}
@Override
public List<GlobalReport> getGlobalErrors() {
return globalErrors;
}
@Override
public List<ArtifactReport> getArtifactErrors() {
return artifactErrors;
}
@Override
public List<ExtensionReport> getExtensionErrors() {
return extensionErrors;
}
@Override
public FeatureDescriptor getFeatureDescriptor() {
return featureDesc;
}
@Override
public BundleDescriptor getFrameworkDescriptor() {
return fwkDesc;
}
@Override
public List<ConfigurationReport> getConfigurationErrors() {
return configurationErrors;
}
@Override
public List<ConfigurationReport> getConfigurationWarnings() {
return configurationWarnings;
}
};
}