private Verifier getWorkingSetVerifier(Collection<String> additionalVerifierRules) { VerifierConfiguration configuration = new DefaultVerifierConfiguration(); configuration = new VerifierConfigurationImpl(); if (additionalVerifierRules != null) { for (String rule : additionalVerifierRules) { configuration .getVerifyingResources() .put(ResourceFactory.newByteArrayResource(rule.getBytes()), ResourceType.DRL); } } return VerifierBuilderFactory.newVerifierBuilder().newVerifier(configuration); }
public void analyse(Project project, SensorContext context) { DroolsPlugin.configureSourceDir(project); Language drools = new Drools(project); ProjectFileSystem fileSystem = project.getFileSystem(); Map<String, DroolsPackage> packageMap = new HashMap<String, DroolsPackage>(); VerifierBuilder verifierBuilder = VerifierBuilderFactory.newVerifierBuilder(); for (File file : fileSystem.getSourceFiles(drools)) { Verifier verifier = verifierBuilder.newVerifier(); try { DroolsFile resource = DroolsFile.fromIOFile(file, false); Source source = analyseSourceCode(file); if (source != null) { context.saveMeasure( resource, CoreMetrics.LINES, (double) source.getMeasure(Metric.LINES)); context.saveMeasure( resource, CoreMetrics.NCLOC, (double) source.getMeasure(Metric.LINES_OF_CODE)); context.saveMeasure( resource, CoreMetrics.COMMENT_LINES, (double) source.getMeasure(Metric.COMMENT_LINES)); } context.saveMeasure(resource, CoreMetrics.FILES, 1.0); context.saveMeasure( resource, CoreMetrics.CLASSES, (double) (resource.getPackageDescr().getRules().size() + resource.getPackageDescr().getFunctions().size())); packageMap.put(resource.getParent().getKey(), resource.getParent()); verifier.addResourcesToVerify(new FileSystemResource(file), ResourceType.DRL); verifier.fireAnalysis(); saveViolations(resource, context, verifier.getResult()); } catch (Throwable e) { DroolsPlugin.LOG.error( "error while verifier analyzing '" + file.getAbsolutePath() + "'", e); } finally { verifier.dispose(); } } for (DroolsPackage droolsPackage : packageMap.values()) { context.saveMeasure(droolsPackage, CoreMetrics.PACKAGES, 1.0); } }
@Test public void testSubruleSubsumption1() throws Exception { VerifierBuilder vBuilder = VerifierBuilderFactory.newVerifierBuilder(); Verifier verifier = vBuilder.newVerifier(); verifier.addResourcesToVerify( ResourceFactory.newClassPathResource("SubsumptantSubRules1.drl", getClass()), ResourceType.DRL); // for ( VerifierError error : verifier.getMissingClasses() ) { // System.out.println( error.getMessage() ); // } assertFalse(verifier.hasErrors()); boolean noProblems = verifier.fireAnalysis(); assertTrue(noProblems); Collection<Object> subsumptionList = ((VerifierImpl) verifier) .getKnowledgeSession() .getObjects(new ClassObjectFilter(Subsumption.class)); int count = 0; for (Object object : subsumptionList) { // System.out.println( " * " + ((Subsumption) object) ); if (((VerifierComponent) ((Subsumption) object).getLeft()) .getVerifierComponentType() .equals(VerifierComponentType.SUB_RULE)) { // System.out.println( " ** " + ((SubRule) ((Subsumption) // object).getLeft()).getItems() + " - " + ((SubRule) ((Subsumption) // object).getRight()).getItems() ); count++; } } assertEquals(2, count); verifier.dispose(); }
public class VerificationServiceImplementation extends RemoteServiceServlet implements VerificationService { private static final long serialVersionUID = 510l; private static final LoggingHelper log = LoggingHelper.getLogger(ServiceImplementation.class); private Verifier defaultVerifier = VerifierBuilderFactory.newVerifierBuilder().newVerifier(); private RepositoryAssetService getAssetService() { return RepositoryServiceServlet.getAssetService(); } @WebRemote @Restrict("#{identity.loggedIn}") public AnalysisReport analysePackage(String packageUUID) throws SerializationException { if (Contexts.isSessionContextActive()) { Identity.instance() .checkPermission(new PackageUUIDType(packageUUID), RoleType.PACKAGE_DEVELOPER.getName()); } PackageItem packageItem = getAssetService().getRulesRepository().loadPackageByUUID(packageUUID); VerifierRunner runner = new VerifierRunner(defaultVerifier); AnalysisReport report = runner.verify( packageItem, new ScopesAgendaFilter(true, ScopesAgendaFilter.VERIFYING_SCOPE_KNOWLEDGE_PACKAGE)); defaultVerifier.flushKnowledgeSession(); return report; } @WebRemote @Restrict("#{identity.loggedIn}") public AnalysisReport verifyAsset(RuleAsset asset, Set<String> activeWorkingSets) throws SerializationException { return this.performAssetVerification(asset, true, activeWorkingSets); } @WebRemote @Restrict("#{identity.loggedIn}") public AnalysisReport verifyAssetWithoutVerifiersRules( RuleAsset asset, Set<String> activeWorkingSets) throws SerializationException { return this.performAssetVerification(asset, false, activeWorkingSets); } private AnalysisReport performAssetVerification( RuleAsset asset, boolean useVerifierDefaultConfig, Set<String> activeWorkingSets) throws SerializationException { long startTime = System.currentTimeMillis(); if (Contexts.isSessionContextActive()) { Identity.instance() .checkPermission( new PackageNameType(asset.getMetaData().getPackageName()), RoleType.PACKAGE_DEVELOPER.getName()); } PackageItem packageItem = getAssetService().getRulesRepository().loadPackage(asset.getMetaData().getPackageName()); List<String> constraintRules = applyWorkingSets(activeWorkingSets); Verifier verifierToBeUsed = null; if (useVerifierDefaultConfig) { verifierToBeUsed = defaultVerifier; } else { verifierToBeUsed = getWorkingSetVerifier(constraintRules); } log.debug("constraints rules: " + constraintRules); try { VerifierRunner runner = new VerifierRunner(verifierToBeUsed); AnalysisReport report = runner.verify(packageItem, chooseScopesAgendaFilterFor(asset)); verifierToBeUsed.flushKnowledgeSession(); log.debug("Asset verification took: " + (System.currentTimeMillis() - startTime)); return report; } catch (Throwable t) { throw new SerializationException(t.getMessage()); } } private ScopesAgendaFilter chooseScopesAgendaFilterFor(RuleAsset asset) { if (isAssetDecisionTable(asset)) { return new ScopesAgendaFilter(true, ScopesAgendaFilter.VERIFYING_SCOPE_DECISION_TABLE); } return new ScopesAgendaFilter(true, ScopesAgendaFilter.VERIFYING_SCOPE_SINGLE_RULE); } private boolean isAssetDecisionTable(RuleAsset asset) { return AssetFormats.DECISION_TABLE_GUIDED.equals(asset.getMetaData().getFormat()) || AssetFormats.DECISION_SPREADSHEET_XLS.equals(asset.getMetaData().getFormat()); } private List<String> applyWorkingSets(Set<String> activeWorkingSets) throws SerializationException { if (activeWorkingSets == null) { return new LinkedList<String>(); } RuleAsset[] workingSets = getAssetService() .loadRuleAssets(activeWorkingSets.toArray(new String[activeWorkingSets.size()])); List<String> constraintRules = new LinkedList<String>(); if (workingSets != null) { for (RuleAsset workingSet : workingSets) { WorkingSetConfigData wsConfig = (WorkingSetConfigData) workingSet.getContent(); if (wsConfig.constraints != null) { for (ConstraintConfiguration config : wsConfig.constraints) { constraintRules.add(ConstraintsFactory.getInstance().getVerifierRule(config)); } } } } return constraintRules; } private Verifier getWorkingSetVerifier(Collection<String> additionalVerifierRules) { VerifierConfiguration configuration = new DefaultVerifierConfiguration(); configuration = new VerifierConfigurationImpl(); if (additionalVerifierRules != null) { for (String rule : additionalVerifierRules) { configuration .getVerifyingResources() .put(ResourceFactory.newByteArrayResource(rule.getBytes()), ResourceType.DRL); } } return VerifierBuilderFactory.newVerifierBuilder().newVerifier(configuration); } }
@Test @Ignore("08-APR-2011 temporally ignoring -Rikkola-") public void testCauseTrace() throws Exception { VerifierBuilder vBuilder = VerifierBuilderFactory.newVerifierBuilder(); // Check that the builder works. assertFalse(vBuilder.hasErrors()); assertEquals(0, vBuilder.getErrors().size()); Verifier verifier = vBuilder.newVerifier(); verifier.addResourcesToVerify( new ClassPathResource("Causes.drl", getClass()), ResourceType.DRL); assertFalse(verifier.hasErrors()); assertEquals(0, verifier.getErrors().size()); boolean works = verifier.fireAnalysis(); assertTrue(works); VerifierReport result = verifier.getResult(); assertNotNull(result); assertEquals(0, result.getBySeverity(Severity.ERROR).size()); Collection<VerifierMessageBase> warnings = result.getBySeverity(Severity.WARNING); Collection<VerifierMessageBase> redundancyWarnings = new ArrayList<VerifierMessageBase>(); for (VerifierMessageBase verifierMessageBase : warnings) { if (verifierMessageBase.getMessageType().equals(MessageType.REDUNDANCY)) { redundancyWarnings.add(verifierMessageBase); } } assertEquals(1, redundancyWarnings.size()); VerifierMessage message = (VerifierMessage) redundancyWarnings.toArray()[0]; // System.out.println( message ); assertEquals(2, message.getImpactedRules().size()); assertTrue(message.getImpactedRules().values().contains("Your First Rule")); assertTrue(message.getImpactedRules().values().contains("Your Second Rule")); Cause[] causes = message.getCauses().toArray(new Cause[message.getCauses().size()]); assertEquals(1, causes.length); causes = causes[0].getCauses().toArray(new Cause[causes[0].getCauses().size()]); assertEquals(2, causes.length); causes = causes[0].getCauses().toArray(new Cause[causes[0].getCauses().size()]); assertEquals(1, causes.length); causes = causes[0].getCauses().toArray(new Cause[causes[0].getCauses().size()]); assertEquals(1, causes.length); causes = causes[0].getCauses().toArray(new Cause[causes[0].getCauses().size()]); assertEquals(2, causes.length); assertEquals(0, result.getBySeverity(Severity.NOTE).size()); }