use of com.blackducksoftware.integration.hub.detect.detector.Detector in project hub-detect by blackducksoftware.
the class DetectorFactoryTest method testNewBomToolsCreatedEveryTime.
@Test
public void testNewBomToolsCreatedEveryTime() {
DetectorFactory detectorFactory = runContext.getBean(DetectorFactory.class);
DetectorSearchProvider provider = new DetectorSearchProvider(detectorFactory);
DetectorEnvironment mockEnv = Mockito.mock(DetectorEnvironment.class);
DetectorSearchRuleSet ruleSet1 = provider.createBomToolSearchRuleSet(mockEnv);
DetectorSearchRuleSet ruleSet2 = provider.createBomToolSearchRuleSet(mockEnv);
Detector detector1 = ruleSet1.getOrderedBomToolRules().get(0).getDetector();
Detector detector2 = ruleSet2.getOrderedBomToolRules().get(0).getDetector();
// Sanity check they are the same class
Assert.assertTrue(detector1.getClass().isInstance(detector2));
// And check they are not the same instance
Assert.assertFalse(detector1 == detector2);
}
use of com.blackducksoftware.integration.hub.detect.detector.Detector in project hub-detect by blackducksoftware.
the class DetectorSearchEvaluator method evaluate.
public List<DetectorEvaluation> evaluate(DetectorSearchRuleSet rules, EventSystem eventSystem) {
final List<DetectorEvaluation> evaluations = new ArrayList<>();
final List<Detector> appliedSoFar = new ArrayList<>();
for (final DetectorSearchRule searchRule : rules.getOrderedBomToolRules()) {
final Detector detector = searchRule.getDetector();
final DetectorEvaluation evaluation = new DetectorEvaluation(detector, rules.getEnvironment());
evaluations.add(evaluation);
evaluation.setSearchable(searchable(searchRule, appliedSoFar, rules.getEnvironment()));
if (evaluation.isSearchable()) {
eventSystem.publishEvent(Event.ApplicableStarted, detector);
evaluation.setApplicable(detector.applicable());
eventSystem.publishEvent(Event.ApplicableEnded, detector);
if (evaluation.isApplicable()) {
appliedSoFar.add(detector);
}
}
}
return evaluations;
}
use of com.blackducksoftware.integration.hub.detect.detector.Detector in project hub-detect by blackducksoftware.
the class BomToolTimekeeper method getTimings.
public List<DetectorTime> getTimings() {
final List<DetectorTime> bomToolTimings = new ArrayList<>();
for (final Detector detector : bomToolMap.keySet()) {
final StopWatch sw = bomToolMap.get(detector);
final long ms = sw.getTime();
final DetectorTime detectorTime = new DetectorTime(detector, ms);
bomToolTimings.add(detectorTime);
}
return bomToolTimings;
}
use of com.blackducksoftware.integration.hub.detect.detector.Detector in project hub-detect by blackducksoftware.
the class DetectorSearchEvaluator method searchable.
public DetectorResult searchable(final DetectorSearchRule searchRules, final List<Detector> appliedSoFar, DetectorEnvironment environment) {
Detector detector = searchRules.getDetector();
final DetectorType detectorType = detector.getDetectorType();
if (!environment.getDetectorFilter().shouldInclude(detectorType.toString())) {
return new ExcludedDetectorResult();
}
final int maxDepth = searchRules.getMaxDepth();
if (environment.getDepth() > maxDepth) {
return new MaxDepthExceededDetectorResult(environment.getDepth(), maxDepth);
}
final Set<Detector> yieldTo = appliedSoFar.stream().filter(it -> searchRules.getYieldsTo().contains(it)).collect(Collectors.toSet());
if (yieldTo.size() > 0) {
return new YieldedDetectorResult(yieldTo);
}
final boolean nestable = searchRules.isNestable();
if (environment.getForceNestedSearch()) {
return new ForcedNestedPassedDetectorResult();
} else if (nestable) {
if (environment.getAppliedToParent().stream().anyMatch(applied -> applied.isSame(detector))) {
return new NotSelfNestableDetectorResult();
}
} else if (!nestable && environment.getAppliedToParent().size() > 0) {
return new NotNestableDetectorResult();
}
return new PassedDetectorResult();
}
use of com.blackducksoftware.integration.hub.detect.detector.Detector in project hub-detect by blackducksoftware.
the class DetectorFinder method findApplicableBomTools.
private List<DetectorEvaluation> findApplicableBomTools(final List<File> directoriesToSearch, final Set<Detector> appliedBefore, final int depth, final DetectorFinderOptions options) throws DetectorException, DetectUserFriendlyException {
final List<DetectorEvaluation> results = new ArrayList<>();
if (depth > options.getMaximumDepth()) {
return results;
}
if (null == directoriesToSearch || directoriesToSearch.size() == 0) {
return results;
}
for (final File directory : directoriesToSearch) {
if (depth > 0 && options.getDetectorSearchFilter().shouldExclude(directory)) {
// NEVER skip at depth 0.
logger.info("Skipping excluded directory: " + directory.getPath());
continue;
}
logger.info("Searching directory: " + directory.getPath());
final Set<DetectorType> applicableTypes = new HashSet<>();
final Set<Detector> applied = new HashSet<>();
final List<DetectorEvaluation> evaluations = processDirectory(directory, appliedBefore, depth, options);
results.addAll(evaluations);
final List<Detector> appliedBomTools = evaluations.stream().filter(it -> it.isApplicable()).map(it -> it.getDetector()).collect(Collectors.toList());
applied.addAll(appliedBomTools);
// TODO: Used to have a remaining detectors and would bail early here, not sure how to go about that?
final Set<Detector> everApplied = new HashSet<>();
everApplied.addAll(applied);
everApplied.addAll(appliedBefore);
final List<File> subdirectories = getSubDirectories(directory, options.getDetectorSearchFilter());
final List<DetectorEvaluation> recursiveResults = findApplicableBomTools(subdirectories, everApplied, depth + 1, options);
results.addAll(recursiveResults);
logger.debug(directory + ": " + applicableTypes.stream().map(it -> it.toString()).collect(Collectors.joining(", ")));
}
return results;
}
Aggregations