public Package loadPackage(File drl) throws IOException { FileInputStream fin = new FileInputStream(drl); PackageBuilder b = new PackageBuilder(); try { b.addPackageFromDrl(new InputStreamReader(fin)); fin.close(); if (b.hasErrors()) { throw new RuntimeDroolsException( "Error building rules from source: " + b.getErrors()); } else { return b.getPackage(); } } catch (DroolsParserException e) { throw new RuntimeException(e); } }
private PackageBuilder readRules() throws DroolsParserException, IOException { PackageBuilder packageBuilder = new PackageBuilder(); PackageBuilder intermPackageBuilder = null; listOfReader = dynamicRuleReader(); // Here goes your application code for(Reader reader : listOfReader){ try{ intermPackageBuilder = new PackageBuilder(); intermPackageBuilder.addPackage(reader); assertNoRuleErrors(intermPackageBuilder); // This is the core step. // Above line throws an exception, every time a rules fails. You can persist this exception for production debugging packageBuilder.addPackage(reader); }catch(DroolsParserException | IOException e){ logger.error("Rules contain error, so skip adding them to the Package Builder"); } } return packageBuilder; }
public void addPackageFromXml( final Resource resource ) throws DroolsParserException, IOException { this.resource = resource; addPackage( xmlToPackageDescr(resource) ); this.resource = null; }
public void addPackageFromDecisionTable( Resource resource, ResourceConfiguration configuration ) throws DroolsParserException, IOException { this.resource = resource; addPackage( decisionTableToPackageDescr(resource, configuration) ); this.resource = null; }
public void addPackageFromDrl( Resource resource ) throws DroolsParserException, IOException { this.resource = resource; addPackage( drlToPackageDescr(resource) ); this.resource = null; }
@Test public void testSimplePackageAttributesSingleDrlDirect() throws Exception { String drl1 = "package test\n no-loop true\ndeclare Album\n genre: String \n end\nrule \"rule1\"\nwhen Album() \n then \nAlbum a = new Album(); \n end"; PackageBuilder builder = new PackageBuilder(); builder.addPackageFromDrl( new StringReader(drl1) ); org.drools.rule.Package p1 = builder.getPackage(); assertEquals( "test", p1.getName() ); assertEquals( 1, p1.getRules().length ); org.drools.rule.Rule r1 = p1.getRules()[0]; assertEquals( true, r1.isNoLoop() ); }
builder = new PackageBuilder(config); } else { builder = new PackageBuilder(); builder.addPackageFromXml( ruleExecutionSetReader ); } else { builder.addPackageFromDrl( ruleExecutionSetReader ); builder.addPackageFromXml( ruleExecutionSetReader ); } else { if ( dsrl instanceof Reader ) { builder.addPackageFromDrl( ruleExecutionSetReader, (Reader) dsrl ); } else { builder.addPackageFromDrl( ruleExecutionSetReader, new StringReader( (String) dsrl ) ); final Package pkg = builder.getPackage(); return createRuleExecutionSet( pkg, properties );
( (InternalResource) resource ).setResourceType( type ); if (ResourceType.DRL.equals( type )) { addPackageFromDrl( resource ); } else if (ResourceType.DESCR.equals( type )) { addPackageFromDrl( resource ); } else if (ResourceType.DSLR.equals( type )) { addPackageFromDslr( resource ); } else if (ResourceType.DSL.equals( type )) { addDsl( resource ); } else if (ResourceType.XDRL.equals( type )) { addPackageFromXml( resource ); } else if (ResourceType.BRL.equals( type )) { addPackageFromBrl( resource ); } else if (ResourceType.DRF.equals( type )) { addProcessFromXml( resource ); } else if (ResourceType.BPMN2.equals( type )) { BPMN2ProcessFactory.configurePackageBuilder( this ); addProcessFromXml( resource ); } else if (ResourceType.DTABLE.equals( type )) { addPackageFromDecisionTable( resource, configuration ); } else if (ResourceType.PKG.equals( type )) { addPackageFromInputStream(resource); } else if (ResourceType.CHANGE_SET.equals( type )) { addPackageFromChangeSet(resource); } else if (ResourceType.XSD.equals( type )) { addPackageFromXSD(resource, (JaxbConfigurationImpl) configuration); } else if (ResourceType.PMML.equals( type )) { addPackageFromPMML(resource, type, configuration); } else {
/** * Create a new RuleBase from the drl and dsl source. * Uses the current default engine type. */ public RuleBase loadFromReader(final Reader drl, final Reader dsl) throws CheckedDroolsException, IOException { final PackageBuilder builder = new PackageBuilder(); builder.addPackageFromDrl( drl, dsl ); return makeRuleBase( builder ); }
public void addRule(String myRuleStatement, String myPackage, RuleBase myRuleBase ) { PackageBuilder packageBuilder = new PackageBuilder(new Package(myPackage)); packageBuilder.addPackgeFromDrl( new StringReader( myRuleStatement ) ); myRuleBase.addPackage ( packageBuilder.getPackage() ); }
Class typeClass = getClassForType(qName); if (typeClass == null) { typeClass = getClassForType(typeDescr.getTypeName()); if (tail.equals( typeDescr.getTypeName() )) { typeDescr.setNamespace( imp.substring( 0, separator ) ); typeClass = getClassForType(typeDescr.getType().getFullName()); break; if ( isEmpty( typeDescr.getNamespace() ) && typeDescr.getFields().isEmpty() ) { if ( isEmpty( typeDescr.getNamespace() ) ) { fillSuperType( (TypeDeclarationDescr) typeDescr, packageDescr ); fillFieldTypes( typeDescr, packageDescr ); if (!getPackageRegistry().containsKey( altDescr.getNamespace() )) { newPackage(altDescr); mergePackage( this.pkgRegistryMap.get( altDescr.getNamespace() ), altDescr ); Collection<AbstractClassTypeDeclarationDescr> sortedTypeDescriptors = sortByHierarchy( packageDescr.getClassAndEnumDeclarationDescrs() ); registerGeneratedType( typeDescr ); if ( hasErrors() ) {
final PackageBuilder builder = new PackageBuilder(); builder.addPackage( packageDescr ); final Package pkg = builder.getPackage();
private RuleBase makeRuleBase(final PackageBuilder builder) throws CheckedDroolsException { if ( builder.hasErrors() ) { throw new CheckedDroolsException( "There were errors in the rule source: " + builder.getErrors().toString() ); } final Package binaryPackage = builder.getPackage(); final RuleBase rb = RuleBaseFactory.newRuleBase( RuleBaseLoader.engineType ); try { rb.addPackage( binaryPackage ); } catch ( final Exception e ) { throw new CheckedDroolsException( "Unable to add compiled package to rulebase. Nested error is: " + e.getMessage() ); } return rb; }
public KnowledgeBuilder newKnowledgeBuilder(KnowledgeBase kbase, KnowledgeBuilderConfiguration conf) { if ( kbase != null ) { return new KnowledgeBuilderImpl( new PackageBuilder( ((KnowledgeBaseImpl) kbase).ruleBase, (PackageBuilderConfiguration) conf ) ); } else { return new KnowledgeBuilderImpl(new PackageBuilder( (PackageBuilderConfiguration) conf ) ); } }
ClassLoader classLoader = this.getClass().getClassLoader(); PackageBuilderConfiguration configuration = new PackageBuilderConfiguration(); configuration.setClassLoader(classLoader); PackageBuilder builder = new PackageBuilder(configuration); builder.addPackageFromDrl(source); RuleBaseConfiguration ruleBaseConfiguration = new RuleBaseConfiguration(); ruleBaseConfiguration.setClassLoader(classLoader); ruleBase = RuleBaseFactory.newRuleBase(ruleBaseConfiguration); ruleBase.addPackage(builder.getPackage());
protected void addPackage(Reader packageReader) { try { this.packageBuilder.addPackageFromDrl(packageReader); } catch (Exception e) { throw new RuntimeException(e); } PackageBuilderErrors errors = packageBuilder.getErrors(); if (errors.getErrors().length > 0) { StringBuilder errorMessages = new StringBuilder(); errorMessages.append("Found errors in package builder\n"); for (int i = 0; i < errors.getErrors().length; i++) { DroolsError errorMessage = errors.getErrors()[i]; errorMessages.append(errorMessage); errorMessages.append("\n"); } errorMessages.append("Could not parse knowledge"); throw new IllegalArgumentException(errorMessages.toString()); } } }
void processOtherDeclarations(PackageRegistry pkgRegistry, PackageDescr packageDescr) { processWindowDeclarations(pkgRegistry, packageDescr); processFunctions(pkgRegistry, packageDescr); processGlobals(pkgRegistry, packageDescr); // need to reinsert this to ensure that the package is the first/last one in the ordered map // this feature is exploited by the knowledgeAgent Package current = getPackage(); this.pkgRegistryMap.remove( packageDescr.getName() ); this.pkgRegistryMap.put( packageDescr.getName(), pkgRegistry ); if ( ! current.getName().equals( packageDescr.getName() ) ) { currentRulePackage = pkgRegistryMap.size() - 1; } }
void compileAllRules(PackageDescr packageDescr, PackageRegistry pkgRegistry) { pkgRegistry.setDialect( getPackageDialect(packageDescr) ); // only try to compile if there are no parse errors if (!hasErrors()) { compileRules(packageDescr, pkgRegistry); } compileAll(); try { reloadAll(); } catch (Exception e) { this.results.add( new DialectError( null, "Unable to wire compiled classes, probably related to compilation failures:" + e.getMessage() ) ); } updateResults(); // iterate and compile if (! hasErrors() && this.ruleBase != null) { for (RuleDescr ruleDescr : packageDescr.getRules()) { pkgRegistry = this.pkgRegistryMap.get(ruleDescr.getNamespace()); this.ruleBase.addRule(pkgRegistry.getPackage(), pkgRegistry.getPackage().getRule(ruleDescr.getName())); } } }
PackageRegistry pkgReg = pkgBuilder.getPackageRegistry(packageName); if (pkgReg == null) { pkgBuilder.addPackage(new PackageDescr(packageName)); pkgReg = pkgBuilder.getPackageRegistry(packageName); pkgBuilder.compileAll(); pkgBuilder.updateResults(); network = (CompiledNetwork) Class.forName(generatedSourceName, true, pkgBuilder.getRootClassLoader()).newInstance(); } catch (ClassNotFoundException e) { throw new RuntimeException("This is a bug. Please contact the development team", e);
/** * @return The compiled package. The package may contain errors, which you * can report on by calling getErrors or printErrors. If you try to * add an invalid package (or rule) to a RuleBase, you will get a * runtime exception. * * Compiled packages are serializable. */ public Package getPackage() { PackageRegistry pkgRegistry = null; if (!this.pkgRegistryMap.isEmpty()) { pkgRegistry = (PackageRegistry) this.pkgRegistryMap.values().toArray()[ currentRulePackage ]; } Package pkg = null; if (pkgRegistry != null) { pkg = pkgRegistry.getPackage(); } if (hasErrors() && pkg != null) { pkg.setError( getErrors().toString() ); } return pkg; }