ELContextBuilder.java 2.7 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
/*
 * Copyright 2010-2020 Alfresco Software, Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     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.activiti.core.el;

18
import static org.activiti.core.el.DateResolverHelper.addDateFunctions;
19
import static org.activiti.core.el.ListResolverHelper.addListFunctions;
20
import java.util.Collection;
21
import java.util.Collections;
22 23 24
import java.util.HashMap;
import java.util.List;
import java.util.Map;
25
import java.util.Objects;
26 27 28 29
import java.util.stream.Stream;
import javax.el.CompositeELResolver;
import javax.el.ELContext;
import javax.el.ELResolver;
30 31
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
32 33 34 35 36 37

/**
 * Builder of {@link javax.el.ELContext} instances.
 */
public class ELContextBuilder {

38 39
    private static final Logger logger = LoggerFactory.getLogger(ELContextBuilder.class);

40 41 42 43 44 45 46 47 48 49 50 51 52 53
    private List<ELResolver> resolvers;
    private Map<String, Object> variables;

    public ELContextBuilder withResolvers(ELResolver... resolvers) {
        this.resolvers = List.of(resolvers);
        return this;
    }

    public ELContextBuilder withVariables(Map<String, Object> variables) {
        this.variables = variables;
        return this;
    }

    public ELContext build() {
54
        CompositeELResolver elResolver = createCompositeResolver();
55 56 57
        return new ActivitiElContext(elResolver);
    }

58
    public ELContext buildWithCustomFunctions() {
59 60 61 62
        CompositeELResolver elResolver = createCompositeResolver();
        ActivitiElContext elContext = new ActivitiElContext(elResolver);
        try {
            addDateFunctions(elContext);
63
            addListFunctions(elContext);
64
        } catch (NoSuchMethodException e) {
65
            logger.error("Error setting up EL custom functions", e);
66 67 68 69
        }
        return elContext;
    }

70 71 72 73 74
    private void addResolvers(CompositeELResolver compositeResolver) {
        Stream.ofNullable(resolvers)
            .flatMap(Collection::stream)
            .forEach(compositeResolver::add);
    }
75 76 77 78 79 80 81

    private CompositeELResolver createCompositeResolver() {
        CompositeELResolver elResolver = new CompositeELResolver();
        elResolver.add(new ReadOnlyMapELResolver((Objects.nonNull(variables) ? new HashMap<>(variables) : Collections.emptyMap())));
        addResolvers(elResolver);
        return elResolver;
    }
82
}