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 java.lang.Object implements InternalKnowledgeBuilder, TypeDeclarationContext, BuildResultCollector, GlobalVariableContext
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
KnowledgeBuilderImpl.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.Logger
logger
-
Constructor Summary
Constructors Constructor Description KnowledgeBuilderImpl()
Use this when package is starting from scratch.KnowledgeBuilderImpl(org.drools.base.definitions.InternalKnowledgePackage pkg)
This will allow you to merge rules into this pre existing package.KnowledgeBuilderImpl(org.drools.base.definitions.InternalKnowledgePackage pkg, org.kie.internal.builder.KnowledgeBuilderConfiguration configuration)
KnowledgeBuilderImpl(org.drools.kiesession.rulebase.InternalKnowledgeBase kBase)
KnowledgeBuilderImpl(org.drools.kiesession.rulebase.InternalKnowledgeBase kBase, org.kie.internal.builder.KnowledgeBuilderConfiguration configuration)
KnowledgeBuilderImpl(org.kie.internal.builder.KnowledgeBuilderConfiguration configuration)
Pass a specific configuration for the PackageBuilder
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Deprecated Methods Modifier and Type Method Description void
add(org.kie.api.io.Resource resource, org.kie.api.io.ResourceType type)
void
add(org.kie.api.io.Resource resource, org.kie.api.io.ResourceType type, org.kie.api.io.ResourceConfiguration configuration)
void
addBuilderResult(org.kie.internal.builder.KnowledgeBuilderResult result)
void
addDsl(org.kie.api.io.Resource resource)
void
addGlobal(java.lang.String name, java.lang.reflect.Type type)
void
addKnowledgeResource(org.kie.api.io.Resource resource, org.kie.api.io.ResourceType type, org.kie.api.io.ResourceConfiguration configuration)
void
addPackage(org.drools.base.definitions.InternalKnowledgePackage newPkg)
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 networkvoid
addPackageFromDrl(java.io.Reader reader)
Load a rule package from DRL source.void
addPackageFromDrl(java.io.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 void
addPackageWithResource(org.drools.drl.ast.descr.PackageDescr packageDescr, org.kie.api.io.Resource resource)
void
addProcessFromXml(java.io.Reader processSource)
Deprecated.void
addProcessFromXml(org.kie.api.io.Resource resource)
Deprecated.void
addRuleFlow(java.io.Reader processSource)
Add a ruleflow (.rfm) asset to this package.org.kie.internal.builder.CompositeKnowledgeBuilder
batch()
void
buildPackages(java.util.Collection<CompositePackageDescr> packages)
void
buildPackagesWithoutRules(java.util.Collection<CompositePackageDescr> packages)
void
compileAll()
<T extends org.kie.api.internal.io.ResourceTypePackage<?>>
TcomputeIfAbsent(org.kie.api.io.ResourceType resourceType, java.lang.String namespace, java.util.function.Function<? super org.kie.api.io.ResourceType,T> mappingFunction)
protected BuildContext
createBuildContext()
static java.io.File
createDumpDrlFile(java.io.File dumpDir, java.lang.String fileName, java.lang.String extension)
protected void
doFirstBuildStep(java.util.Collection<CompositePackageDescr> packages)
Performs the actual building of rules, but may be empty in subclassesprotected void
doSecondBuildStep(java.util.Collection<CompositePackageDescr> packages)
Used by subclasses that need to perform the build after the assemblersboolean
filterAccepts(org.kie.internal.builder.ResourceChange.Type type, java.lang.String namespace, java.lang.String name)
org.drools.base.rule.TypeDeclaration
getAndRegisterTypeDeclaration(java.lang.Class<?> cls, java.lang.String packageName)
protected AssetFilter
getAssetFilter()
BuildContext
getBuildContext()
KnowledgeBuilderConfigurationImpl
getBuilderConfiguration()
Return the PackageBuilderConfiguration for this PackageBuilder sessionprotected BuildResultCollector
getBuildResultCollector()
<T> T
getCachedOrCreate(java.lang.String key, java.util.function.Supplier<T> creator)
org.drools.drl.parser.lang.dsl.DefaultExpander
getDslExpander()
Returns an expander for DSLs (only if there is a DSL configured for this package).PackageBuilderErrors
getErrors()
java.util.Map<java.lang.String,java.lang.reflect.Type>
getGlobals()
protected GlobalVariableContext
getGlobalVariableContext()
org.drools.kiesession.rulebase.InternalKnowledgeBase
getKnowledgeBase()
java.util.Collection<org.kie.api.definition.KiePackage>
getKnowledgePackages()
PackageRegistry
getOrCreatePackageRegistry(org.drools.drl.ast.descr.PackageDescr packageDescr)
org.drools.base.definitions.InternalKnowledgePackage
getPackage(java.lang.String name)
java.util.List<org.drools.drl.ast.descr.PackageDescr>
getPackageDescrs(java.lang.String packageName)
java.util.Collection<java.lang.String>
getPackageNames()
java.util.Map<java.lang.String,PackageRegistry>
getPackageRegistry()
PackageRegistry
getPackageRegistry(java.lang.String name)
protected PackageRegistryManager
getPackageRegistryManager()
org.drools.base.definitions.InternalKnowledgePackage[]
getPackages()
ProcessBuilder
getProcessBuilder()
org.kie.api.builder.ReleaseId
getReleaseId()
org.kie.internal.builder.KnowledgeBuilderResults
getResults(org.kie.internal.builder.ResultSeverity... problemTypes)
Return the knowledge builder results for the listed severities.java.lang.ClassLoader
getRootClassLoader()
TypeDeclarationBuilder
getTypeBuilder()
org.drools.base.rule.TypeDeclaration
getTypeDeclaration(java.lang.Class<?> cls)
org.drools.base.rule.TypeDeclaration
getTypeDeclaration(org.drools.base.base.ObjectType objectType)
java.util.List<DroolsWarning>
getWarnings()
boolean
hasErrors()
This will return true if there were errors in the package building and compiling phaseboolean
hasInfo()
boolean
hasResults(org.kie.internal.builder.ResultSeverity... problemTypes)
boolean
hasWarnings()
org.kie.api.KieBase
newKieBase()
org.kie.api.KieBase
newKnowledgeBase(org.kie.api.KieBaseConfiguration conf)
protected void
processKieBaseTypes()
void
registerBuildResource(org.kie.api.io.Resource resource, org.kie.api.io.ResourceType type)
void
registerBuildResources(java.util.List<org.kie.api.io.Resource> resources)
void
registerPackage(org.drools.drl.ast.descr.PackageDescr packageDescr)
void
reloadAll()
InternalKnowledgeBuilder.ResourceRemovalResult
removeObjectsGeneratedFromResource(org.kie.api.io.Resource resource)
void
reportError(org.kie.internal.builder.KnowledgeBuilderError error)
void
resetErrors()
Reset the error list.void
resetProblems()
void
resetWarnings()
void
rewireAllClassObjectTypes()
void
setAssetFilter(AssetFilter assetFilter)
void
setBuildContext(BuildContext buildContext)
void
setReleaseId(org.kie.api.builder.ReleaseId releaseId)
void
undo()
void
updateResults()
void
updateResults(java.util.List<org.kie.internal.builder.KnowledgeBuilderResult> results)
protected void
wireAllRules()
-
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.base.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(org.drools.kiesession.rulebase.InternalKnowledgeBase kBase, org.kie.internal.builder.KnowledgeBuilderConfiguration configuration)
-
KnowledgeBuilderImpl
public KnowledgeBuilderImpl(org.kie.internal.builder.KnowledgeBuilderConfiguration 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.base.definitions.InternalKnowledgePackage pkg, org.kie.internal.builder.KnowledgeBuilderConfiguration 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:
getKnowledgeBase
in interfaceInternalKnowledgeBaseProvider
-
getTypeBuilder
public TypeDeclarationBuilder getTypeBuilder()
- Specified by:
getTypeBuilder
in interfaceTypeDeclarationContext
-
addPackageFromDrl
public void addPackageFromDrl(java.io.Reader reader) throws org.drools.drl.parser.DroolsParserException, java.io.IOException
Load a rule package from DRL source.- Throws:
org.drools.drl.parser.DroolsParserException
java.io.IOException
-
addPackageFromDrl
public void addPackageFromDrl(java.io.Reader reader, org.kie.api.io.Resource sourceResource) throws org.drools.drl.parser.DroolsParserException, java.io.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.DroolsParserException
java.io.IOException
-
createDumpDrlFile
public static java.io.File createDumpDrlFile(java.io.File dumpDir, java.lang.String fileName, java.lang.String extension)
-
addDsl
public void addDsl(org.kie.api.io.Resource resource) throws java.io.IOException
- Throws:
java.io.IOException
-
addRuleFlow
public void addRuleFlow(java.io.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(java.io.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:
addPackage
in 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:
addBuilderResult
in interfaceBuildResultCollector
-
getBuildResultCollector
protected BuildResultCollector getBuildResultCollector()
-
computeIfAbsent
public <T extends org.kie.api.internal.io.ResourceTypePackage<?>> T computeIfAbsent(org.kie.api.io.ResourceType resourceType, java.lang.String namespace, java.util.function.Function<? super org.kie.api.io.ResourceType,T> mappingFunction)
- Specified by:
computeIfAbsent
in interfaceorg.kie.internal.builder.AssemblerContext
-
getOrCreatePackageRegistry
public PackageRegistry getOrCreatePackageRegistry(org.drools.drl.ast.descr.PackageDescr packageDescr)
- Specified by:
getOrCreatePackageRegistry
in 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, java.lang.String namespace, java.lang.String name)
- Specified by:
filterAccepts
in interfaceTypeDeclarationContext
-
updateResults
public void updateResults()
-
updateResults
public void updateResults(java.util.List<org.kie.internal.builder.KnowledgeBuilderResult> results)
-
compileAll
public void compileAll()
-
reloadAll
public void reloadAll()
-
addPackage
public void addPackage(org.drools.base.definitions.InternalKnowledgePackage newPkg)
-
getAndRegisterTypeDeclaration
public org.drools.base.rule.TypeDeclaration getAndRegisterTypeDeclaration(java.lang.Class<?> cls, java.lang.String packageName)
- Specified by:
getAndRegisterTypeDeclaration
in interfaceDroolsAssemblerContext
- Specified by:
getAndRegisterTypeDeclaration
in interfaceTypeDeclarationManager
-
getPackages
public org.drools.base.definitions.InternalKnowledgePackage[] getPackages()
-
getBuilderConfiguration
public KnowledgeBuilderConfigurationImpl getBuilderConfiguration()
Return the PackageBuilderConfiguration for this PackageBuilder session- Specified by:
getBuilderConfiguration
in interfaceBuilderConfigurationProvider
- Returns:
- The PackageBuilderConfiguration
-
getPackageRegistry
public PackageRegistry getPackageRegistry(java.lang.String name)
- Specified by:
getPackageRegistry
in interfaceDroolsAssemblerContext
- Specified by:
getPackageRegistry
in interfacePackageRegistryManager
-
getPackage
public org.drools.base.definitions.InternalKnowledgePackage getPackage(java.lang.String name)
- Specified by:
getPackage
in interfaceInternalKnowledgeBuilder
-
getPackageRegistry
public java.util.Map<java.lang.String,PackageRegistry> getPackageRegistry()
- Specified by:
getPackageRegistry
in interfacePackageRegistryManager
-
getPackageNames
public java.util.Collection<java.lang.String> getPackageNames()
- Specified by:
getPackageNames
in interfacePackageRegistryManager
-
getPackageDescrs
public java.util.List<org.drools.drl.ast.descr.PackageDescr> getPackageDescrs(java.lang.String packageName)
- Specified by:
getPackageDescrs
in interfaceDroolsAssemblerContext
- Specified by:
getPackageDescrs
in 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 java.util.Map<java.lang.String,java.lang.reflect.Type> getGlobals()
- Specified by:
getGlobals
in interfaceDroolsAssemblerContext
- Specified by:
getGlobals
in interfaceGlobalVariableContext
-
addGlobal
public void addGlobal(java.lang.String name, java.lang.reflect.Type type)
- Specified by:
addGlobal
in 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:
hasErrors
in interfaceBuildResultCollector
- Specified by:
hasErrors
in interfaceorg.kie.internal.builder.KnowledgeBuilder
-
getResults
public org.kie.internal.builder.KnowledgeBuilderResults getResults(org.kie.internal.builder.ResultSeverity... problemTypes)
Description copied from interface:BuildResultCollector
Return the knowledge builder results for the listed severities.- Specified by:
getResults
in interfaceBuildResultCollector
- Specified by:
getResults
in interfaceorg.kie.internal.builder.KnowledgeBuilder
-
hasResults
public boolean hasResults(org.kie.internal.builder.ResultSeverity... problemTypes)
- Specified by:
hasResults
in interfaceBuildResultCollector
- Specified by:
hasResults
in interfaceorg.kie.internal.builder.KnowledgeBuilder
-
hasWarnings
public boolean hasWarnings()
-
hasInfo
public boolean hasInfo()
-
getWarnings
public java.util.List<DroolsWarning> getWarnings()
-
reportError
public void reportError(org.kie.internal.builder.KnowledgeBuilderError error)
- Specified by:
reportError
in interfaceorg.kie.internal.builder.AssemblerContext
-
getErrors
public PackageBuilderErrors getErrors()
- Specified by:
getErrors
in interfaceDroolsAssemblerContext
- Specified by:
getErrors
in 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 java.lang.ClassLoader getRootClassLoader()
- Specified by:
getRootClassLoader
in interfaceRootClassLoaderProvider
-
registerBuildResource
public void registerBuildResource(org.kie.api.io.Resource resource, org.kie.api.io.ResourceType type)
-
registerBuildResources
public void registerBuildResources(java.util.List<org.kie.api.io.Resource> resources)
-
undo
public void undo()
- Specified by:
undo
in interfaceorg.kie.internal.builder.KnowledgeBuilder
-
removeObjectsGeneratedFromResource
public InternalKnowledgeBuilder.ResourceRemovalResult removeObjectsGeneratedFromResource(org.kie.api.io.Resource resource)
- Specified by:
removeObjectsGeneratedFromResource
in interfaceInternalKnowledgeBuilder
-
rewireAllClassObjectTypes
public void rewireAllClassObjectTypes()
- Specified by:
rewireAllClassObjectTypes
in 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:
add
in interfaceorg.kie.internal.builder.KnowledgeBuilder
-
batch
public org.kie.internal.builder.CompositeKnowledgeBuilder batch()
- Specified by:
batch
in 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:
add
in interfaceorg.kie.internal.builder.KnowledgeBuilder
-
getKnowledgePackages
public java.util.Collection<org.kie.api.definition.KiePackage> getKnowledgePackages()
- Specified by:
getKnowledgePackages
in interfaceorg.kie.internal.builder.KnowledgeBuilder
-
newKieBase
public org.kie.api.KieBase newKieBase()
- Specified by:
newKieBase
in interfaceorg.kie.internal.builder.KnowledgeBuilder
-
newKnowledgeBase
public org.kie.api.KieBase newKnowledgeBase(org.kie.api.KieBaseConfiguration conf)
-
getTypeDeclaration
public org.drools.base.rule.TypeDeclaration getTypeDeclaration(java.lang.Class<?> cls)
- Specified by:
getTypeDeclaration
in interfaceDroolsAssemblerContext
- Specified by:
getTypeDeclaration
in interfaceTypeDeclarationManager
-
getTypeDeclaration
public org.drools.base.rule.TypeDeclaration getTypeDeclaration(org.drools.base.base.ObjectType objectType)
- Specified by:
getTypeDeclaration
in interfaceDroolsAssemblerContext
- Specified by:
getTypeDeclaration
in interfaceTypeDeclarationManager
-
getCachedOrCreate
public <T> T getCachedOrCreate(java.lang.String key, java.util.function.Supplier<T> creator)
-
buildPackages
public final void buildPackages(java.util.Collection<CompositePackageDescr> packages)
-
doFirstBuildStep
protected void doFirstBuildStep(java.util.Collection<CompositePackageDescr> packages)
Performs the actual building of rules, but may be empty in subclasses
-
doSecondBuildStep
protected void doSecondBuildStep(java.util.Collection<CompositePackageDescr> packages)
Used by subclasses that need to perform the build after the assemblers
-
buildPackagesWithoutRules
public void buildPackagesWithoutRules(java.util.Collection<CompositePackageDescr> packages)
-
-