From b64c9878af27365390c1e52bbb192a9f6467646f Mon Sep 17 00:00:00 2001 From: Bruno Alves de Faria Date: Tue, 24 Jul 2018 13:52:36 -0300 Subject: [PATCH] fix(hanging-protocols): Fail rule matching if a required rule fails --- .../client/matcher/HPMatcher.js | 3 ++- .../client/protocolEngine.js | 24 ++++++++++--------- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/Packages/ohif-hanging-protocols/client/matcher/HPMatcher.js b/Packages/ohif-hanging-protocols/client/matcher/HPMatcher.js index a052d0d14..4ce67bde7 100644 --- a/Packages/ohif-hanging-protocols/client/matcher/HPMatcher.js +++ b/Packages/ohif-hanging-protocols/client/matcher/HPMatcher.js @@ -103,7 +103,8 @@ const match = (metadataInstance, rules) => { return { score, - details + details, + requiredFailed }; }; diff --git a/Packages/ohif-hanging-protocols/client/protocolEngine.js b/Packages/ohif-hanging-protocols/client/protocolEngine.js index a652c8824..a6f962ede 100644 --- a/Packages/ohif-hanging-protocols/client/protocolEngine.js +++ b/Packages/ohif-hanging-protocols/client/protocolEngine.js @@ -274,8 +274,6 @@ HP.ProtocolEngine = class ProtocolEngine { let highestStudyMatchingScore = 0; let highestSeriesMatchingScore = 0; - let highestImageMatchingScore = 0; - let bestMatch; // Set custom attribute for study metadata and it's first instance currentStudy.setCustomAttribute(ABSTRACT_PRIOR_VALUE, 0); @@ -349,8 +347,9 @@ HP.ProtocolEngine = class ProtocolEngine { this.studies.forEach(study => { const studyMatchDetails = HPMatcher.match(study.getFirstInstance(), studyMatchingRules); - if ((studyMatchingRules.length && !studyMatchDetails.score) || - studyMatchDetails.score < highestStudyMatchingScore) { + + // Prevent bestMatch from being updated if the matchDetails' required attribute check has failed + if (studyMatchDetails.requiredFailed === true || studyMatchDetails.score < highestStudyMatchingScore) { return; } @@ -358,8 +357,9 @@ HP.ProtocolEngine = class ProtocolEngine { study.forEachSeries(series => { const seriesMatchDetails = HPMatcher.match(series.getFirstInstance(), seriesMatchingRules); - if ((seriesMatchingRules.length && !seriesMatchDetails.score) || - seriesMatchDetails.score < highestSeriesMatchingScore) { + + // Prevent bestMatch from being updated if the matchDetails' required attribute check has failed + if (seriesMatchDetails.requiredFailed === true || seriesMatchDetails.score < highestSeriesMatchingScore) { return; } @@ -377,6 +377,11 @@ HP.ProtocolEngine = class ProtocolEngine { const instanceMatchDetails = HPMatcher.match(instance, instanceMatchingRules); + // Prevent bestMatch from being updated if the matchDetails' required attribute check has failed + if (instanceMatchDetails.requiredFailed === true) { + return; + } + const matchDetails = { passed: [], failed: [] @@ -417,11 +422,6 @@ HP.ProtocolEngine = class ProtocolEngine { imageDetails.imageId = instance.getImageId(); } - if ((totalMatchScore > highestImageMatchingScore) || !bestMatch) { - highestImageMatchingScore = totalMatchScore; - bestMatch = imageDetails; - } - matchingScores.push(imageDetails); }); }); @@ -441,6 +441,8 @@ HP.ProtocolEngine = class ProtocolEngine { }); matchingScores.sort((a, b) => sortingFunction(a.sortingInfo, b.sortingInfo)); + const bestMatch = matchingScores[0]; + OHIF.log.info('ProtocolEngine::matchImages bestMatch', bestMatch); return {