Package org.mule.module.db.internal.resolver.param

Source Code of org.mule.module.db.internal.resolver.param.DefaultParamTypeResolver

/*
* Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.com
* The software in this package is published under the terms of the CPAL v1.0
* license, a copy of which has been included with this distribution in the
* LICENSE.txt file.
*/

package org.mule.module.db.internal.resolver.param;

import org.mule.module.db.internal.domain.connection.DbConnection;
import org.mule.module.db.internal.domain.param.QueryParam;
import org.mule.module.db.internal.domain.query.QueryTemplate;
import org.mule.module.db.internal.domain.type.DbType;
import org.mule.module.db.internal.domain.type.DbTypeManager;
import org.mule.module.db.internal.domain.type.DynamicDbType;
import org.mule.module.db.internal.domain.type.UnknownDbType;

import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;

/**
* Resolves unknown and dynamic types using metadata if possible
*/
public class DefaultParamTypeResolver implements ParamTypeResolver
{

    protected final DbTypeManager dbTypeManager;
    private ParamTypeResolver metadataParamTypeResolver;

    protected DefaultParamTypeResolver(DbTypeManager dbTypeManager, ParamTypeResolver metadataParamTypeResolver)
    {
        this.dbTypeManager = dbTypeManager;
        this.metadataParamTypeResolver = metadataParamTypeResolver;
    }

    public Map<Integer, DbType> getParameterTypes(DbConnection connection, QueryTemplate queryTemplate) throws SQLException
    {
        Map<Integer, DbType> resolvedParamTypes = new HashMap<Integer, DbType>();

        Map<Integer, DbType> metadataParamTypes = null;

        for (QueryParam queryParam : queryTemplate.getParams())
        {
            if (queryParam.getType() instanceof UnknownDbType)
            {
                if (metadataParamTypes == null)
                {
                    metadataParamTypes = getParamTypesUsingMetadata(connection, queryTemplate);
                }

                resolvedParamTypes.put(queryParam.getIndex(), metadataParamTypes.get(queryParam.getIndex()));
            }
            else if (queryParam.getType() instanceof DynamicDbType)
            {
                DbType dbType = dbTypeManager.lookup(connection, queryParam.getType().getName());

                resolvedParamTypes.put(queryParam.getIndex(), dbType);
            }
            else
            {
                resolvedParamTypes.put(queryParam.getIndex(), queryParam.getType());
            }
        }

        return resolvedParamTypes;
    }

    protected Map<Integer, DbType> getParamTypesUsingMetadata(DbConnection connection, QueryTemplate queryTemplate)
    {
        Map<Integer, DbType> metadataParamTypes;
        try
        {
            metadataParamTypes = metadataParamTypeResolver.getParameterTypes(connection, queryTemplate);
        }
        catch (SQLException e)
        {
            metadataParamTypes = getParamTypesFromQueryTemplate(queryTemplate);
        }
        return metadataParamTypes;
    }

    private Map<Integer, DbType> getParamTypesFromQueryTemplate(QueryTemplate queryTemplate)
    {
        Map<Integer, DbType> paramTypes = new HashMap<Integer, DbType>();

        for (QueryParam queryParam : queryTemplate.getParams())
        {
            paramTypes.put(queryParam.getIndex(), queryParam.getType());
        }

        return paramTypes;
    }
}
TOP

Related Classes of org.mule.module.db.internal.resolver.param.DefaultParamTypeResolver

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.