Package org.apache.camel.web.groovy

Source Code of org.apache.camel.web.groovy.GroovyRendererTestSupport

/**
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements.  See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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.apache.camel.web.groovy;

import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import junit.framework.TestCase;
import groovy.lang.GroovyClassLoader;

import org.apache.camel.CamelContext;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.impl.DefaultCamelContext;
import org.apache.camel.model.RouteDefinition;
import org.apache.camel.web.util.GroovyRenderer;

/**
* An abstract class that provides basic support for GroovyRenderer test
*/
public abstract class GroovyRendererTestSupport extends TestCase {
    private String header = GroovyRenderer.HEADER;
    private final String footer = GroovyRenderer.FOOTER;

    private CamelContext context;

    /**
     * get the first route in camelContext
     */
    public RouteDefinition getRoute(String dsl) throws Exception {
        createAndAddRoute(dsl);
        List<RouteDefinition> list = context.getRouteDefinitions();
        if (!list.isEmpty()) {
            return list.get(0);
        }
        return null;
    }

    /**
     * get all routes in camelContext
     */
    public List<RouteDefinition> getRoutes(String dsl) throws Exception {
        createAndAddRoute(dsl);
        return context.getRouteDefinitions();
    }

    public String render(String dsl) throws Exception {
        RouteDefinition route = getRoute(dsl);
        assertNotNull(route);

        StringBuilder sb = new StringBuilder();
        GroovyRenderer.renderRoute(sb, route);
        return sb.toString();
    }

    /**
     * render a route with some import packages
     */
    public String render(String dsl, String[] imports) throws Exception {
        // add import
        StringBuilder sb = new StringBuilder();
        for (String importPackage : imports) {
            sb.append(importPackage).append("\n");
        }
        header = sb.toString() + "\n" + header;

        return render(dsl);
    }

    /**
     * render a route with some import packages and new object
     */
    public String render(String dsl, String[] imports, Map<String, String> newObjects) throws Exception {
        // add new objects
        StringBuilder sb = new StringBuilder();
        for (Entry<String, String> entry : newObjects.entrySet()) {
            String objectName = entry.getKey();
            String clazzName = entry.getValue();
            sb.append(clazzName).append(" ").append(objectName).append(" = new ").append(clazzName).append("();\n");
        }
        header += sb.toString();

        return render(dsl, imports);
    }

    public String renderRoutes(String dsl) throws Exception {
        List<RouteDefinition> routes = getRoutes(dsl);

        StringBuilder sb = new StringBuilder();
        GroovyRenderer.renderRoutes(sb, routes);
        return sb.toString();
    }

    /**
     * create routes using the dsl and add them into camelContext
     */
    private void createAndAddRoute(String dsl) throws Exception, InstantiationException, IllegalAccessException {
        if (context != null) {
            context.stop();
        }
        context = new DefaultCamelContext();

        String routeStr = header + dsl + footer;
        GroovyClassLoader classLoader = new GroovyClassLoader();
        Class clazz = classLoader.parseClass(routeStr);
        RouteBuilder builder = (RouteBuilder)clazz.newInstance();

        context.addRoutes(builder);
    }
}
TOP

Related Classes of org.apache.camel.web.groovy.GroovyRendererTestSupport

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.