/*
* Copyright 2015 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.drools.core.impl;
import java.io.IOException;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.drools.core.RuleBaseConfiguration;
import org.drools.core.SessionConfiguration;
import org.drools.core.base.ClassFieldAccessorCache;
import org.drools.core.common.InternalWorkingMemory;
import org.drools.core.common.RuleBasePartitionId;
import org.drools.core.definitions.InternalKnowledgePackage;
import org.drools.core.definitions.rule.impl.RuleImpl;
import org.drools.core.factmodel.traits.TraitRegistry;
import org.drools.core.reteoo.EntryPointNode;
import org.drools.core.reteoo.LeftTupleNode;
import org.drools.core.reteoo.LeftTupleSource;
import org.drools.core.reteoo.Rete;
import org.drools.core.reteoo.ReteooBuilder;
import org.drools.core.reteoo.SegmentMemory;
import org.drools.core.rule.InvalidPatternException;
import org.drools.core.rule.TypeDeclaration;
import org.drools.core.ruleunit.RuleUnitRegistry;
import org.drools.core.spi.FactHandleFactory;
import org.drools.core.spi.PropagationContext;
import org.drools.core.util.TripleStore;
import org.kie.api.builder.ReleaseId;
import org.kie.api.definition.process.Process;
import org.kie.api.io.Resource;
import org.kie.api.runtime.Environment;
import org.kie.api.runtime.rule.FactHandle;
import org.kie.internal.KnowledgeBase;
public interface InternalKnowledgeBase extends KnowledgeBase {
String getId();
RuleBasePartitionId createNewPartitionId();
RuleBaseConfiguration getConfiguration();
void readLock();
void readUnlock();
void lock();
void unlock();
void enqueueModification(Runnable modification);
boolean flushModifications();
int nextWorkingMemoryCounter();
int getWorkingMemoryCounter();
FactHandleFactory newFactHandleFactory();
FactHandleFactory newFactHandleFactory(int id, long counter) throws IOException;
Map<String, Class<?>> getGlobals();
int getNodeCount();
int getMemoryCount(String unitName);
void executeQueuedActions();
ReteooBuilder getReteooBuilder();
void registerAddedEntryNodeCache(EntryPointNode node);
Set<EntryPointNode> getAddedEntryNodeCache();
void registeRremovedEntryNodeCache(EntryPointNode node);
Set<EntryPointNode> getRemovedEntryNodeCache();
Rete getRete();
ClassLoader getRootClassLoader();
void assertObject(FactHandle handle,
Object object,
PropagationContext context,
InternalWorkingMemory workingMemory);
void retractObject(FactHandle handle,
PropagationContext context,
StatefulKnowledgeSessionImpl workingMemory);
void disposeStatefulSession(StatefulKnowledgeSessionImpl statefulSession);
StatefulKnowledgeSessionImpl getCachedSession(SessionConfiguration config, Environment environment);
TripleStore getTripleStore();
TraitRegistry getTraitRegistry();
Class<?> registerAndLoadTypeDefinition( String className, byte[] def ) throws ClassNotFoundException;
InternalKnowledgePackage getPackage(String name);
void addPackages(InternalKnowledgePackage[] pkgs );
void addPackage(InternalKnowledgePackage pkg);
void addPackages( final Collection<InternalKnowledgePackage> newPkgs );
Map<String, InternalKnowledgePackage> getPackagesMap();
ClassFieldAccessorCache getClassFieldAccessorCache();
InternalWorkingMemory[] getWorkingMemories();
boolean hasSegmentPrototypes();
void invalidateSegmentPrototype(LeftTupleNode rootNode);
SegmentMemory createSegmentFromPrototype(InternalWorkingMemory wm, LeftTupleSource tupleSource);
SegmentMemory.Prototype getSegmentPrototype(SegmentMemory segment);
void addRule( InternalKnowledgePackage pkg, RuleImpl rule ) throws InvalidPatternException;
void removeRule( InternalKnowledgePackage pkg, RuleImpl rule ) throws InvalidPatternException;
void removeRules( InternalKnowledgePackage pkg, List<RuleImpl> rules ) throws InvalidPatternException;
void addProcess( Process process );
void removeProcess( final String id );
void addGlobal(String identifier, Class clazz);
void removeGlobal(String identifier);
boolean removeObjectsGeneratedFromResource(Resource resource);
TypeDeclaration getTypeDeclaration( Class<?> clazz );
TypeDeclaration getExactTypeDeclaration( Class<?> clazz );
TypeDeclaration getOrCreateExactTypeDeclaration( Class<?> clazz );
Collection<TypeDeclaration> getTypeDeclarations();
void registerTypeDeclaration( TypeDeclaration newDecl, InternalKnowledgePackage newPkg );
ReleaseId getResolvedReleaseId();
void setResolvedReleaseId(ReleaseId currentReleaseId);
String getContainerId();
void setContainerId(String containerId);
void initMBeans();
RuleUnitRegistry getRuleUnitRegistry();
boolean hasUnits();
SessionConfiguration getSessionConfiguration();
}