/*
 * Copyright 1999-2018 Alibaba Group Holding 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 com.alibaba.druid.mock;

import java.sql.ParameterMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class MockParameterMetaData implements ParameterMetaData {
    public MockParameterMetaData() {
    }

    private final List<Parameter> parameters = new ArrayList<Parameter>();

    public List<Parameter> getParameters() {
        return parameters;
    }

    @Override
    public <T> T unwrap(Class<T> iface) throws SQLException {
        return null;
    }

    @Override
    public boolean isWrapperFor(Class<?> iface) throws SQLException {
        return false;
    }

    @Override
    public int getParameterCount() throws SQLException {
        return parameters.size();
    }

    @Override
    public int isNullable(int param) throws SQLException {
        return parameters.get(param - 1).getNullable();
    }

    @Override
    public boolean isSigned(int param) throws SQLException {
        return parameters.get(param - 1).isSigned();
    }

    @Override
    public int getPrecision(int param) throws SQLException {
        return parameters.get(param - 1).getPrecision();
    }

    @Override
    public int getScale(int param) throws SQLException {
        return parameters.get(param - 1).getScale();
    }

    @Override
    public int getParameterType(int param) throws SQLException {
        return parameters.get(param - 1).getType();
    }

    @Override
    public String getParameterTypeName(int param) throws SQLException {
        return parameters.get(param - 1).getTypeName();
    }

    @Override
    public String getParameterClassName(int param) throws SQLException {
        return parameters.get(param - 1).getClassName();
    }

    @Override
    public int getParameterMode(int param) throws SQLException {
        return parameters.get(param - 1).getMode();
    }

    public static class Parameter {
        private int nullable;
        private boolean signed;
        private int mode;
        private String className;
        private int type;
        private String typeName;
        private int scale;
        private int precision;

        public int getType() {
            return type;
        }

        public void setType(int type) {
            this.type = type;
        }

        public int getNullable() {
            return nullable;
        }

        public void setNullable(int nullable) {
            this.nullable = nullable;
        }

        public boolean isSigned() {
            return signed;
        }

        public void setSigned(boolean signed) {
            this.signed = signed;
        }

        public int getMode() {
            return mode;
        }

        public void setMode(int mode) {
            this.mode = mode;
        }

        public String getClassName() {
            return className;
        }

        public void setClassName(String className) {
            this.className = className;
        }

        public String getTypeName() {
            return typeName;
        }

        public void setTypeName(String typeName) {
            this.typeName = typeName;
        }

        public int getScale() {
            return scale;
        }

        public void setScale(int scale) {
            this.scale = scale;
        }

        public int getPrecision() {
            return precision;
        }

        public void setPrecision(int precision) {
            this.precision = precision;
        }

    }
}
