/*
 *  BaseLink - Generic object relational mapping
 *  Copyright (C) 2011  Ulrich Hilger, http://uhilger.de
 *
 *  This program is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program.  If not, see http://www.gnu.org/licenses/
 */

package de.uhilger.baselink;

import java.lang.reflect.Method;

/**
 * Class <code>Field</code> represents a field in a database table. Objects of 
 * class <code>Field</code> can be used to keep field name, field type, getter 
 * and setter methods in one place for reference.  
 * 
 * @author Copyright (c) Ulrich Hilger, http://uhilger.de
 * @author Published under the terms and conditions of
 * the <a href="http://www.gnu.org/licenses/" target="_blank">GNU General Public License</a>
 */
public class Field {

  private String columnName;
	private DBColumn.Type columnType;
	private Method getter;
	private Method setter;
	
	/**
	 * Create a new object of class <code>Field</code>
	 */
	public Field() {
		super();
	}

	/**
	 * Determine whether or not this object is equal to antoher object
	 * @param obj  the other object to compare with this object
	 * @return true if this object is equal to the other object, false if not
	 */
	@Override
	public boolean equals(Object obj) {
		boolean isEqual = false;
		if(obj != null && obj instanceof Field) {
			Field other = (Field) obj;
			isEqual = getColumnName().equals(other.getColumnName());
		}
		return isEqual;
	}

	/**
	 * Get the column name of this field
	 * @return  the column name
	 */
	public String getColumnName() {
		return columnName;
	}

	/**
	 * Set the column name of this field
	 * @param columnName  the column name
	 */
	public void setColumnName(String columnName) {
		this.columnName = columnName;
	}

	/**
	 * Get the column type of this field
	 * @return  the column type
	 */
	public DBColumn.Type getColumnType() {
		return columnType;
	}

	/**
	 * Set the column type of this field
	 * @param columnType  the column type
	 */
	public void setColumnType(DBColumn.Type columnType) {
		this.columnType = columnType;
	}

	/**
	 * Get the getter method for this field
	 * @return  the method to get the value of this field
	 */
	public Method getGetter() {
		return getter;
	}

	/**
	 * Set the getter method of this field
	 * @param getter  the method to get the value of this field
	 */
	public void setGetter(Method getter) {
		this.getter = getter;
	}

	/**
	 * Get the setter method of this field
	 * @param setter  the method to set the value of this field
	 */
	public Method getSetter() {
		return setter;
	}

	/**
	 * Set the setter method of this field
	 * @param setter  the method to set the value of this field
	 */
	public void setSetter(Method setter) {
		this.setter = setter;
	}
	
	
}