Package org.drools.clips

Source Code of org.drools.clips.FunctionHandlers

package org.drools.clips;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.drools.lang.descr.FunctionDescr;

public class FunctionHandlers {
    public static final FunctionHandlers INSTANCE = new FunctionHandlers();
   
    public static FunctionHandlers getInstance() {
        return INSTANCE;
    }
   
    private Map<String, Function> map = new HashMap<String, Function>();
   
    private FunctionHandlers() {
       
    }
   
    public Function getFunction(String name) {
        return this.map.get( name );
    }
   
    public void registerFunction(Function function) {
        this.map.put( function.getName(), function );
    }
   
    public static void dump(SExpression sExpression, Appendable appendable) {             
        if ( sExpression instanceof LispAtom ) {
            appendable.append( ( ( LispAtom ) sExpression).getValue() );
        } else {
            LispForm form = (LispForm) sExpression;
            String functionName =  ( (LispAtom) form.getSExpressions()[0]).getValue();
            Function function = FunctionHandlers.getInstance().getFunction( functionName );
            if ( function != null ) {
                function.dump(form, appendable );               
            } else if ( form.getSExpressions()[0] instanceof VariableLispAtom ){
                // try and execute this as a java call
                function = FunctionHandlers.getInstance().getFunction( "call" );
                function.dump(form, appendable );               
            } else {
                // execute as user function
                appendable.append( functionName + "(" );
                for ( int i = 1, length = form.getSExpressions().length; i < length; i++ ) {
                    dump( form.getSExpressions()[i], appendable );
                    if ( i < length -1 ) {
                        appendable.append( ", " );
                    }
                }
                appendable.append( ")" );               
            }
        }          
    }
   
    public static FunctionDescr createFunctionDescr(SExpression name, LispForm params, List<SExpression> content) {
        FunctionDescr descr = new FunctionDescr(((LispAtom)name).getValue(), "Object" );
        for ( SExpression sExpr  : params.getSExpressions() ) {
            String param = ((LispAtom)sExpr).getValue().trim();
            if ( param.charAt( 0 ) == '"' ) {
                param = param.substring( 1 );
            }
           
            if ( param.charAt( param.length()-1 ) == '"' ) {
                param = param.substring( 0, param.length()-1 );
            }
            descr.addParameter"Object",  param );
        }
       
        descr.setContent( content );
       
        return descr;
    }
   
}
TOP

Related Classes of org.drools.clips.FunctionHandlers

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.