All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.jfirer.jsql.analyse.template.execution.impl.ForEachExecution Maven / Gradle / Ivy

package com.jfirer.jsql.analyse.template.execution.impl;

import com.jfirer.jsql.analyse.template.execution.Execution;
import com.jfirer.jsql.analyse.template.execution.WithBodyExecution;
import com.jfirer.jfireel.expression.Expression;

import java.util.Collection;
import java.util.List;
import java.util.Map;

public class ForEachExecution implements WithBodyExecution
{
    private Execution[] body;
    private final String     itemName;
    private final Expression collection;

    public ForEachExecution(String itemName, Expression collection)
    {
        this.itemName = itemName;
        this.collection = collection;
    }

    @Override
    public boolean execute(Map variables, StringBuilder cache, List params)
    {
        Object result = collection.calculate(variables);
        if ( result == null )
        {
            return true;
        }
        if ( result instanceof Collection )
        {
            for (Object each : ((Collection) result))
            {
                variables.put(itemName, each);
                for (Execution execution : body)
                {
                    execution.execute(variables, cache, params);
                }
            }
            variables.remove(itemName);
        }
        return true;
    }

    @Override
    public void check()
    {
        // TODO Auto-generated method stub
    }

    @Override
    public void setBody(Execution... executions)
    {
        body = executions;
    }

    @Override
    public boolean isBodyNotSet()
    {
        return body == null;
    }
}