package org.drools.compiler;
import java.util.List;
import java.util.Map;
import org.drools.base.TypeResolver;
import org.drools.io.Resource;
import org.drools.lang.descr.BaseDescr;
import org.drools.lang.descr.FunctionDescr;
import org.drools.lang.descr.ProcessDescr;
import org.drools.lang.descr.RuleDescr;
import org.drools.rule.builder.AccumulateBuilder;
import org.drools.rule.builder.ConsequenceBuilder;
import org.drools.rule.builder.EnabledBuilder;
import org.drools.rule.builder.EngineElementBuilder;
import org.drools.rule.builder.EntryPointBuilder;
import org.drools.rule.builder.FromBuilder;
import org.drools.rule.builder.PackageBuildContext;
import org.drools.rule.builder.PatternBuilder;
import org.drools.rule.builder.PredicateBuilder;
import org.drools.rule.builder.QueryBuilder;
import org.drools.rule.builder.ReturnValueBuilder;
import org.drools.rule.builder.RuleBuildContext;
import org.drools.rule.builder.RuleClassBuilder;
import org.drools.rule.builder.RuleConditionBuilder;
import org.drools.rule.builder.SalienceBuilder;
/**
* A Dialect implementation handles the building and execution of code
* expressions and blocks for a rule. This api is considered unstable, and
* subject to change. Those wishing to implement their own dialects should look
* ove the MVEL and Java dialect implementations.
*
*/
public interface Dialect {
String getId();
// this is needed because some dialects use other dialects
// to build complex expressions. Example: java dialect uses MVEL
// to execute complex expressions
String getExpressionDialectName();
Map<Class<?>,EngineElementBuilder> getBuilders();
TypeResolver getTypeResolver();
SalienceBuilder getSalienceBuilder();
EnabledBuilder getEnabledBuilder();
PatternBuilder getPatternBuilder();
QueryBuilder getQueryBuilder();
RuleConditionBuilder getEvalBuilder();
AccumulateBuilder getAccumulateBuilder();
PredicateBuilder getPredicateBuilder();
ReturnValueBuilder getReturnValueBuilder();
ConsequenceBuilder getConsequenceBuilder();
RuleClassBuilder getRuleClassBuilder();
FromBuilder getFromBuilder();
EntryPointBuilder getEntryPointBuilder();
EngineElementBuilder getBuilder(Class<?> clazz);
AnalysisResult analyzeExpression(final PackageBuildContext context,
final BaseDescr descr,
final Object content,
final Map<String, Class<?>>[] availableIdentifiers);
AnalysisResult analyzeBlock(final PackageBuildContext context,
final BaseDescr descr,
final String text,
final Map<String, Class<?>>[] availableIdentifiers);
void compileAll();
void addRule(final RuleBuildContext context);
void addFunction(FunctionDescr functionDescr,
TypeResolver typeResolver,
Resource resource);
public void addImport(String importEntry);
public void addStaticImport(String importEntry);
List getResults();
void init(RuleDescr ruleDescr);
void init(ProcessDescr processDescr);
/**
* An interface with the results from the expression/block analysis
*
* @author etirelli
*/
public static interface AnalysisResult {
/**
* Returns the list<String> of all used identifiers
*
* @return
*/
public List<String> getIdentifiers();
/**
* Returns the array of lists<String> of bound identifiers
*
* @return
*/
public List<String>[] getBoundIdentifiers();
/**
* Returns the list<String> of not bounded identifiers
*
* @return
*/
public List<String> getNotBoundedIdentifiers();
/**
* Returns the list<String> of declared local variables
*
* @return
*/
public List<String> getLocalVariables();
}
void postCompileAddFunction(FunctionDescr functionDescr,
TypeResolver typeResolver);
void preCompileAddFunction(FunctionDescr functionDescr,
TypeResolver typeResolver);
}