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

panda.dao.sql.executor.JdbcSqlParameter Maven / Gradle / Ivy

Go to download

Panda Core is the core module of Panda Framework, it contains commonly used utility classes similar to apache-commons.

There is a newer version: 1.8.0
Show newest version
package panda.dao.sql.executor;

import panda.dao.DaoTypes;
import panda.dao.sql.adapter.TypeAdapter;
import panda.dao.sql.adapter.TypeAdapters;
import panda.lang.Objects;

/**
 */
public class JdbcSqlParameter {
	public static enum Mode {
		IN,
		OUT,
		INOUT
	}
	
	private final String name;
	private final String jdbcType;
	private final Integer sqlType;
	private final Integer scale;
	private final Object value;
	private final Mode mode;
	@SuppressWarnings("rawtypes")
	private final TypeAdapter typeAdapter;

	/**
	 * Constructor.
	 * @param name name
	 * @param value value
	 */
	public JdbcSqlParameter(String name, Object value) {
		this(name, value, null, null, null);
	}

	/**
	 * Constructor.
	 * @param name name
	 * @param value value
	 * @param jdbcType jdbc type
	 */
	public JdbcSqlParameter(String name, Object value, String jdbcType) {
		this(name, value, jdbcType, null, null);
	}

	/**
	 * Constructor.
	 * @param name name
	 * @param value value
	 * @param jdbcType jdbc type
	 * @param mode mode
	 */
	public JdbcSqlParameter(String name, Object value, String jdbcType, String mode) {
		this(name, value, jdbcType, null, mode);
	}

	/**
	 * Constructor.
	 * @param name name
	 * @param value value
	 * @param jdbcType jdbc type
	 * @param scale scale
	 * @param mode mode
	 */
	public JdbcSqlParameter(String name, Object value, String jdbcType, Integer scale, String mode) {
		this(name, value, jdbcType, scale, mode, TypeAdapters.i());
	}

	/**
	 * Constructor.
	 * @param name name
	 * @param value value
	 * @param typeAdapters typeAdapters
	 */
	public JdbcSqlParameter(String name, Object value, TypeAdapters typeAdapters) {
		this(name, value, null, null, null, typeAdapters);
	}
	
	/**
	 * Constructor.
	 * @param name name
	 * @param value value
	 * @param jdbcType jdbc type
	 * @param scale scale
	 * @param mode mode
	 * @param typeAdapters typeAdapters
	 */
	public JdbcSqlParameter(String name, Object value, String jdbcType, Integer scale, String mode, TypeAdapters typeAdapters) {
		this.name = name;
		this.value = value;

		this.jdbcType = jdbcType;
		if (jdbcType != null) {
			this.sqlType = DaoTypes.getType(jdbcType);
			if (this.sqlType == null) {
				throw new IllegalArgumentException("Illegal parameter '" + name + "': unknown JDBC type [" + jdbcType + "].");
			}
		}
		else {
			this.sqlType = null;
		}
		this.scale = scale;
		
		if (mode != null) {
			this.mode = Mode.valueOf(mode);
			if (this.mode == null) {
				throw new IllegalArgumentException("Illegal parameter '" + name + "': unknown mode [" + mode + "], it must be IN/OUT/INOUT.");
			}
		}
		else {
			this.mode = Mode.IN;
		}
		
		Class parameterValueClass = value == null ? null : value.getClass(); 
		this.typeAdapter = typeAdapters.getTypeAdapter(parameterValueClass, jdbcType);
		if (this.typeAdapter == null) {
			throw new IllegalArgumentException("Illegal parameter '" + name + "': unknown TypeAdapter [" + parameterValueClass + ", " + jdbcType + "].");
		}
	}

	/**
	 * isInputAllowed
	 * @return true if the parameter allowed to input
	 */
	public boolean isInputAllowed() {
		return !Mode.OUT.equals(mode);
	}
	
	/**
	 * isOutputAllowed
	 * @return true if the parameter allowed to output
	 */
	public boolean isOutputAllowed() {
		return (Mode.OUT.equals(mode) || Mode.INOUT.equals(mode));
	}
	
	/**
	 * @return the TypeAdapter of the parameter
	 */
	@SuppressWarnings("rawtypes")
	public TypeAdapter getTypeAdapter() {
		return typeAdapter;
	}

	/**
	 * @return sqlType
	 */
	public Integer getSqlType() {
		return sqlType;
	}

	/**
	 * @return jdbcType
	 */
	public String getJdbcType() {
		return jdbcType;
	}

	/**
	 * @return name
	 */
	public String getName() {
		return name;
	}

	/**
	 * @return value
	 */
	public Object getValue() {
		return value;
	}

	/**
	 * @return mode
	 */
	public Mode getMode() {
		return mode;
	}

	/**
	 * @return scale
	 */
	public Integer getScale() {
		return scale;
	}

	/**
	 * @return a string representation of the object.
	 */
	@Override
	public String toString() {
		return Objects.toStringBuilder()
				.append("name", name)
				.append("value", value)
				.append("jdbcType", jdbcType)
				.append("scale", scale)
				.append("mode", mode)
				.toString();
	}

	/**
	 * @return a hash code value for this object.
	 */
	@Override
	public int hashCode() {
		return Objects.hash(name, jdbcType, sqlType, scale, mode, value, typeAdapter);
	}

	/**
	 * @return true if this object is the same as the obj argument; false
	 *         otherwise.
	 */
	@Override
	public boolean equals(Object obj) {
		if (this == obj) {
			return true;
		}
		if (obj == null) {
			return false;
		}
		if (getClass() != obj.getClass()) {
			return false;
		}

		final JdbcSqlParameter rhs = (JdbcSqlParameter) obj;
		return Objects.equalsBuilder()
				.append(name, rhs.name)
				.append(jdbcType, rhs.jdbcType)
				.append(sqlType, rhs.sqlType)
				.append(scale, rhs.scale)
				.append(mode, rhs.mode)
				.append(value, rhs.value)
				.append(typeAdapter, rhs.typeAdapter)
				.isEquals();
	}


}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy