Package org.drools.compiler.builder.impl
Class KnowledgeBuilderImpl
- java.lang.Object
-
- org.drools.compiler.builder.impl.KnowledgeBuilderImpl
-
- All Implemented Interfaces:
DroolsAssemblerContext,BuilderConfigurationProvider,BuildResultCollector,GlobalVariableContext,InternalKnowledgeBaseProvider,RootClassLoaderProvider,TypeDeclarationContext,TypeDeclarationManager,InternalKnowledgeBuilder,PackageRegistryManager,org.kie.internal.builder.AssemblerContext,org.kie.internal.builder.KnowledgeBuilder,org.kie.internal.builder.ProcessBuilder,org.kie.internal.builder.RuleBuilder
public class KnowledgeBuilderImpl extends Object implements InternalKnowledgeBuilder, TypeDeclarationContext, BuildResultCollector, GlobalVariableContext
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static classKnowledgeBuilderImpl.ForkJoinPoolHolder-
Nested classes/interfaces inherited from interface org.drools.compiler.builder.InternalKnowledgeBuilder
InternalKnowledgeBuilder.Empty, InternalKnowledgeBuilder.ResourceRemovalResult
-
-
Field Summary
Fields Modifier and Type Field Description protected static org.slf4j.Loggerlogger
-
Constructor Summary
Constructors Constructor Description KnowledgeBuilderImpl()Use this when package is starting from scratch.KnowledgeBuilderImpl(KnowledgeBuilderConfigurationImpl configuration)Pass a specific configuration for the PackageBuilderKnowledgeBuilderImpl(org.drools.core.definitions.InternalKnowledgePackage pkg)This will allow you to merge rules into this pre existing package.KnowledgeBuilderImpl(org.drools.core.definitions.InternalKnowledgePackage pkg, KnowledgeBuilderConfigurationImpl configuration)KnowledgeBuilderImpl(org.drools.kiesession.rulebase.InternalKnowledgeBase kBase)KnowledgeBuilderImpl(org.drools.kiesession.rulebase.InternalKnowledgeBase kBase, KnowledgeBuilderConfigurationImpl configuration)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Deprecated Methods Modifier and Type Method Description voidadd(org.kie.api.io.Resource resource, org.kie.api.io.ResourceType type)voidadd(org.kie.api.io.Resource resource, org.kie.api.io.ResourceType type, org.kie.api.io.ResourceConfiguration configuration)voidaddBuilderResult(org.kie.internal.builder.KnowledgeBuilderResult result)voidaddDsl(org.kie.api.io.Resource resource)voidaddGlobal(String name, Type type)voidaddKnowledgeResource(org.kie.api.io.Resource resource, org.kie.api.io.ResourceType type, org.kie.api.io.ResourceConfiguration configuration)voidaddPackage(org.drools.core.definitions.InternalKnowledgePackage newPkg)voidaddPackage(org.drools.drl.ast.descr.PackageDescr packageDescr)Adds a package from a Descr/AST also triggering its compilation and the generation of the corresponding rete/phreak networkvoidaddPackageFromDrl(Reader reader)Load a rule package from DRL source.voidaddPackageFromDrl(Reader reader, org.kie.api.io.Resource sourceResource)Load a rule package from DRL source and associate all loaded artifacts with the given resource.protected voidaddPackageWithResource(org.drools.drl.ast.descr.PackageDescr packageDescr, org.kie.api.io.Resource resource)voidaddProcessFromXml(Reader processSource)Deprecated.voidaddProcessFromXml(org.kie.api.io.Resource resource)Deprecated.voidaddRuleFlow(Reader processSource)Add a ruleflow (.rfm) asset to this package.org.kie.internal.builder.CompositeKnowledgeBuilderbatch()voidbuildPackages(Collection<CompositePackageDescr> packages)voidbuildPackagesWithoutRules(Collection<CompositePackageDescr> packages)voidcompileAll()<T extends org.kie.api.internal.io.ResourceTypePackage<?>>
TcomputeIfAbsent(org.kie.api.io.ResourceType resourceType, String namespace, Function<? super org.kie.api.io.ResourceType,T> mappingFunction)protected BuildContextcreateBuildContext()static FilecreateDumpDrlFile(File dumpDir, String fileName, String extension)protected voiddoFirstBuildStep(Collection<CompositePackageDescr> packages)Performs the actual building of rules, but may be empty in subclassesprotected voiddoSecondBuildStep(Collection<CompositePackageDescr> packages)Used by subclasses that need to perform the build after the assemblersbooleanfilterAccepts(org.kie.internal.builder.ResourceChange.Type type, String namespace, String name)org.drools.core.rule.TypeDeclarationgetAndRegisterTypeDeclaration(Class<?> cls, String packageName)protected AssetFiltergetAssetFilter()BuildContextgetBuildContext()KnowledgeBuilderConfigurationImplgetBuilderConfiguration()Return the PackageBuilderConfiguration for this PackageBuilder sessionprotected BuildResultCollectorgetBuildResultCollector()<T> TgetCachedOrCreate(String key, Supplier<T> creator)org.drools.drl.parser.lang.dsl.DefaultExpandergetDslExpander()Returns an expander for DSLs (only if there is a DSL configured for this package).PackageBuilderErrorsgetErrors()Map<String,Type>getGlobals()protected GlobalVariableContextgetGlobalVariableContext()org.drools.kiesession.rulebase.InternalKnowledgeBasegetKnowledgeBase()Collection<org.kie.api.definition.KiePackage>getKnowledgePackages()PackageRegistrygetOrCreatePackageRegistry(org.drools.drl.ast.descr.PackageDescr packageDescr)org.drools.core.definitions.InternalKnowledgePackagegetPackage(String name)List<org.drools.drl.ast.descr.PackageDescr>getPackageDescrs(String packageName)Collection<String>getPackageNames()Map<String,PackageRegistry>getPackageRegistry()PackageRegistrygetPackageRegistry(String name)protected PackageRegistryManagergetPackageRegistryManager()org.drools.core.definitions.InternalKnowledgePackage[]getPackages()ProcessBuildergetProcessBuilder()org.kie.api.builder.ReleaseIdgetReleaseId()org.kie.internal.builder.KnowledgeBuilderResultsgetResults(org.kie.internal.builder.ResultSeverity... problemTypes)Return the knowledge builder results for the listed severities.ClassLoadergetRootClassLoader()TypeDeclarationBuildergetTypeBuilder()org.drools.core.rule.TypeDeclarationgetTypeDeclaration(Class<?> cls)org.drools.core.rule.TypeDeclarationgetTypeDeclaration(org.drools.core.base.ObjectType objectType)List<DroolsWarning>getWarnings()booleanhasErrors()This will return true if there were errors in the package building and compiling phasebooleanhasInfo()booleanhasResults(org.kie.internal.builder.ResultSeverity... problemTypes)booleanhasWarnings()org.kie.api.KieBasenewKieBase()org.kie.api.KieBasenewKnowledgeBase(org.kie.api.KieBaseConfiguration conf)protected voidprocessKieBaseTypes()voidregisterBuildResource(org.kie.api.io.Resource resource, org.kie.api.io.ResourceType type)voidregisterBuildResources(List<org.kie.api.io.Resource> resources)voidregisterPackage(org.drools.drl.ast.descr.PackageDescr packageDescr)voidreloadAll()InternalKnowledgeBuilder.ResourceRemovalResultremoveObjectsGeneratedFromResource(org.kie.api.io.Resource resource)voidreportError(org.kie.internal.builder.KnowledgeBuilderError error)voidresetErrors()Reset the error list.voidresetProblems()voidresetWarnings()voidrewireAllClassObjectTypes()voidsetAssetFilter(AssetFilter assetFilter)voidsetBuildContext(BuildContext buildContext)voidsetReleaseId(org.kie.api.builder.ReleaseId releaseId)voidundo()voidupdateResults()voidupdateResults(List<org.kie.internal.builder.KnowledgeBuilderResult> results)protected voidwireAllRules()-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface org.drools.compiler.builder.impl.BuildResultCollector
add, addAll, getAllResults
-
-
-
-
Constructor Detail
-
KnowledgeBuilderImpl
public KnowledgeBuilderImpl()
Use this when package is starting from scratch.
-
KnowledgeBuilderImpl
public KnowledgeBuilderImpl(org.drools.core.definitions.InternalKnowledgePackage pkg)
This will allow you to merge rules into this pre existing package.
-
KnowledgeBuilderImpl
public KnowledgeBuilderImpl(org.drools.kiesession.rulebase.InternalKnowledgeBase kBase)
-
KnowledgeBuilderImpl
public KnowledgeBuilderImpl(KnowledgeBuilderConfigurationImpl configuration)
Pass a specific configuration for the PackageBuilderPackageBuilderConfiguration is not thread safe and it also contains state. Once it is created and used in one or more PackageBuilders it should be considered immutable. Do not modify its properties while it is being used by a PackageBuilder.
-
KnowledgeBuilderImpl
public KnowledgeBuilderImpl(org.drools.core.definitions.InternalKnowledgePackage pkg, KnowledgeBuilderConfigurationImpl configuration)
-
KnowledgeBuilderImpl
public KnowledgeBuilderImpl(org.drools.kiesession.rulebase.InternalKnowledgeBase kBase, KnowledgeBuilderConfigurationImpl configuration)
-
-
Method Detail
-
getReleaseId
public org.kie.api.builder.ReleaseId getReleaseId()
-
setReleaseId
public void setReleaseId(org.kie.api.builder.ReleaseId releaseId)
-
getBuildContext
public BuildContext getBuildContext()
-
createBuildContext
protected BuildContext createBuildContext()
-
setBuildContext
public void setBuildContext(BuildContext buildContext)
-
getKnowledgeBase
public org.drools.kiesession.rulebase.InternalKnowledgeBase getKnowledgeBase()
- Specified by:
getKnowledgeBasein interfaceInternalKnowledgeBaseProvider
-
getTypeBuilder
public TypeDeclarationBuilder getTypeBuilder()
- Specified by:
getTypeBuilderin interfaceTypeDeclarationContext
-
addPackageFromDrl
public void addPackageFromDrl(Reader reader) throws org.drools.drl.parser.DroolsParserException, IOException
Load a rule package from DRL source.- Throws:
org.drools.drl.parser.DroolsParserExceptionIOException
-
addPackageFromDrl
public void addPackageFromDrl(Reader reader, org.kie.api.io.Resource sourceResource) throws org.drools.drl.parser.DroolsParserException, IOException
Load a rule package from DRL source and associate all loaded artifacts with the given resource.- Parameters:
reader-sourceResource- the source resource for the read artifacts- Throws:
org.drools.drl.parser.DroolsParserExceptionIOException
-
createDumpDrlFile
public static File createDumpDrlFile(File dumpDir, String fileName, String extension)
-
addDsl
public void addDsl(org.kie.api.io.Resource resource) throws IOException- Throws:
IOException
-
addRuleFlow
public void addRuleFlow(Reader processSource)
Add a ruleflow (.rfm) asset to this package.
-
addProcessFromXml
@Deprecated public void addProcessFromXml(org.kie.api.io.Resource resource)
Deprecated.
-
getProcessBuilder
public ProcessBuilder getProcessBuilder()
-
addProcessFromXml
@Deprecated public void addProcessFromXml(Reader processSource)
Deprecated.
-
addKnowledgeResource
public void addKnowledgeResource(org.kie.api.io.Resource resource, org.kie.api.io.ResourceType type, org.kie.api.io.ResourceConfiguration configuration)
-
addPackage
public final void addPackage(org.drools.drl.ast.descr.PackageDescr packageDescr)
Adds a package from a Descr/AST also triggering its compilation and the generation of the corresponding rete/phreak network- Specified by:
addPackagein interfaceInternalKnowledgeBuilder
-
addPackageWithResource
protected void addPackageWithResource(org.drools.drl.ast.descr.PackageDescr packageDescr, org.kie.api.io.Resource resource)
-
wireAllRules
protected void wireAllRules()
-
processKieBaseTypes
protected void processKieBaseTypes()
-
addBuilderResult
public void addBuilderResult(org.kie.internal.builder.KnowledgeBuilderResult result)
- Specified by:
addBuilderResultin interfaceBuildResultCollector
-
getBuildResultCollector
protected BuildResultCollector getBuildResultCollector()
-
computeIfAbsent
public <T extends org.kie.api.internal.io.ResourceTypePackage<?>> T computeIfAbsent(org.kie.api.io.ResourceType resourceType, String namespace, Function<? super org.kie.api.io.ResourceType,T> mappingFunction)- Specified by:
computeIfAbsentin interfaceorg.kie.internal.builder.AssemblerContext
-
getOrCreatePackageRegistry
public PackageRegistry getOrCreatePackageRegistry(org.drools.drl.ast.descr.PackageDescr packageDescr)
- Specified by:
getOrCreatePackageRegistryin interfacePackageRegistryManager
-
registerPackage
public void registerPackage(org.drools.drl.ast.descr.PackageDescr packageDescr)
-
getPackageRegistryManager
protected PackageRegistryManager getPackageRegistryManager()
-
filterAccepts
public boolean filterAccepts(org.kie.internal.builder.ResourceChange.Type type, String namespace, String name)- Specified by:
filterAcceptsin interfaceTypeDeclarationContext
-
updateResults
public void updateResults()
-
updateResults
public void updateResults(List<org.kie.internal.builder.KnowledgeBuilderResult> results)
-
compileAll
public void compileAll()
-
reloadAll
public void reloadAll()
-
addPackage
public void addPackage(org.drools.core.definitions.InternalKnowledgePackage newPkg)
-
getAndRegisterTypeDeclaration
public org.drools.core.rule.TypeDeclaration getAndRegisterTypeDeclaration(Class<?> cls, String packageName)
- Specified by:
getAndRegisterTypeDeclarationin interfaceDroolsAssemblerContext- Specified by:
getAndRegisterTypeDeclarationin interfaceTypeDeclarationManager
-
getPackages
public org.drools.core.definitions.InternalKnowledgePackage[] getPackages()
-
getBuilderConfiguration
public KnowledgeBuilderConfigurationImpl getBuilderConfiguration()
Return the PackageBuilderConfiguration for this PackageBuilder session- Specified by:
getBuilderConfigurationin interfaceBuilderConfigurationProvider- Returns:
- The PackageBuilderConfiguration
-
getPackageRegistry
public PackageRegistry getPackageRegistry(String name)
- Specified by:
getPackageRegistryin interfaceDroolsAssemblerContext- Specified by:
getPackageRegistryin interfacePackageRegistryManager
-
getPackage
public org.drools.core.definitions.InternalKnowledgePackage getPackage(String name)
- Specified by:
getPackagein interfaceInternalKnowledgeBuilder
-
getPackageRegistry
public Map<String,PackageRegistry> getPackageRegistry()
- Specified by:
getPackageRegistryin interfacePackageRegistryManager
-
getPackageNames
public Collection<String> getPackageNames()
- Specified by:
getPackageNamesin interfacePackageRegistryManager
-
getPackageDescrs
public List<org.drools.drl.ast.descr.PackageDescr> getPackageDescrs(String packageName)
- Specified by:
getPackageDescrsin interfaceDroolsAssemblerContext- Specified by:
getPackageDescrsin interfaceTypeDeclarationContext
-
getDslExpander
public org.drools.drl.parser.lang.dsl.DefaultExpander getDslExpander()
Returns an expander for DSLs (only if there is a DSL configured for this package).
-
getGlobals
public Map<String,Type> getGlobals()
- Specified by:
getGlobalsin interfaceDroolsAssemblerContext- Specified by:
getGlobalsin interfaceGlobalVariableContext
-
addGlobal
public void addGlobal(String name, Type type)
- Specified by:
addGlobalin interfaceGlobalVariableContext
-
getGlobalVariableContext
protected GlobalVariableContext getGlobalVariableContext()
-
hasErrors
public boolean hasErrors()
This will return true if there were errors in the package building and compiling phase- Specified by:
hasErrorsin interfaceBuildResultCollector- Specified by:
hasErrorsin interfaceorg.kie.internal.builder.KnowledgeBuilder
-
getResults
public org.kie.internal.builder.KnowledgeBuilderResults getResults(org.kie.internal.builder.ResultSeverity... problemTypes)
Description copied from interface:BuildResultCollectorReturn the knowledge builder results for the listed severities.- Specified by:
getResultsin interfaceBuildResultCollector- Specified by:
getResultsin interfaceorg.kie.internal.builder.KnowledgeBuilder
-
hasResults
public boolean hasResults(org.kie.internal.builder.ResultSeverity... problemTypes)
- Specified by:
hasResultsin interfaceBuildResultCollector- Specified by:
hasResultsin interfaceorg.kie.internal.builder.KnowledgeBuilder
-
hasWarnings
public boolean hasWarnings()
-
hasInfo
public boolean hasInfo()
-
getWarnings
public List<DroolsWarning> getWarnings()
-
reportError
public void reportError(org.kie.internal.builder.KnowledgeBuilderError error)
- Specified by:
reportErrorin interfaceorg.kie.internal.builder.AssemblerContext
-
getErrors
public PackageBuilderErrors getErrors()
- Specified by:
getErrorsin interfaceDroolsAssemblerContext- Specified by:
getErrorsin interfaceorg.kie.internal.builder.KnowledgeBuilder- Returns:
- A list of Error objects that resulted from building and compiling the package.
-
resetErrors
public void resetErrors()
Reset the error list. This is useful when incrementally building packages. Care should be used when building this, if you clear this when there were errors on items that a rule depends on (eg functions), then you will get spurious errors which will not be that helpful.
-
resetWarnings
public void resetWarnings()
-
resetProblems
public void resetProblems()
-
getRootClassLoader
public ClassLoader getRootClassLoader()
- Specified by:
getRootClassLoaderin interfaceRootClassLoaderProvider
-
registerBuildResource
public void registerBuildResource(org.kie.api.io.Resource resource, org.kie.api.io.ResourceType type)
-
registerBuildResources
public void registerBuildResources(List<org.kie.api.io.Resource> resources)
-
undo
public void undo()
- Specified by:
undoin interfaceorg.kie.internal.builder.KnowledgeBuilder
-
removeObjectsGeneratedFromResource
public InternalKnowledgeBuilder.ResourceRemovalResult removeObjectsGeneratedFromResource(org.kie.api.io.Resource resource)
- Specified by:
removeObjectsGeneratedFromResourcein interfaceInternalKnowledgeBuilder
-
rewireAllClassObjectTypes
public void rewireAllClassObjectTypes()
- Specified by:
rewireAllClassObjectTypesin interfaceInternalKnowledgeBuilder
-
setAssetFilter
public void setAssetFilter(AssetFilter assetFilter)
-
getAssetFilter
protected AssetFilter getAssetFilter()
-
add
public void add(org.kie.api.io.Resource resource, org.kie.api.io.ResourceType type)- Specified by:
addin interfaceorg.kie.internal.builder.KnowledgeBuilder
-
batch
public org.kie.internal.builder.CompositeKnowledgeBuilder batch()
- Specified by:
batchin interfaceorg.kie.internal.builder.KnowledgeBuilder
-
add
public void add(org.kie.api.io.Resource resource, org.kie.api.io.ResourceType type, org.kie.api.io.ResourceConfiguration configuration)- Specified by:
addin interfaceorg.kie.internal.builder.KnowledgeBuilder
-
getKnowledgePackages
public Collection<org.kie.api.definition.KiePackage> getKnowledgePackages()
- Specified by:
getKnowledgePackagesin interfaceorg.kie.internal.builder.KnowledgeBuilder
-
newKieBase
public org.kie.api.KieBase newKieBase()
- Specified by:
newKieBasein interfaceorg.kie.internal.builder.KnowledgeBuilder
-
newKnowledgeBase
public org.kie.api.KieBase newKnowledgeBase(org.kie.api.KieBaseConfiguration conf)
-
getTypeDeclaration
public org.drools.core.rule.TypeDeclaration getTypeDeclaration(Class<?> cls)
- Specified by:
getTypeDeclarationin interfaceDroolsAssemblerContext- Specified by:
getTypeDeclarationin interfaceTypeDeclarationManager
-
getTypeDeclaration
public org.drools.core.rule.TypeDeclaration getTypeDeclaration(org.drools.core.base.ObjectType objectType)
- Specified by:
getTypeDeclarationin interfaceDroolsAssemblerContext- Specified by:
getTypeDeclarationin interfaceTypeDeclarationManager
-
buildPackages
public final void buildPackages(Collection<CompositePackageDescr> packages)
-
doFirstBuildStep
protected void doFirstBuildStep(Collection<CompositePackageDescr> packages)
Performs the actual building of rules, but may be empty in subclasses
-
doSecondBuildStep
protected void doSecondBuildStep(Collection<CompositePackageDescr> packages)
Used by subclasses that need to perform the build after the assemblers
-
buildPackagesWithoutRules
public void buildPackagesWithoutRules(Collection<CompositePackageDescr> packages)
-
-