package org.hibernate.auction.persistence;

import net.sf.hibernate.cfg.NamingStrategy;
import net.sf.hibernate.util.StringHelper;

/**
 * Tworzy przedrostki dla nazw kolumn i tabel bazy danych aplikacji CaveatEmptor.
 * <p>
 * Jest to implementacja interfejsu Hibernate <tt>NamingStrategy</tt>.
 * Hibernate wywołuję tę klasę przy tworzeniu schematu bazy danych.
 * Wszystkie nazwy tabel zostają poprzedzone tekstem "CE_" przy zachowaniu
 * ddomyślnych nazw właściwości pisanych wielką literą. Aby włączyć strategię,
 * ustaw ją w obiekcie <tt>SessionFactory</tt>, oto przykład:
 * <tt>HibernateUtil</tt>:
 * <p>
 * <pre>
 *    configuration = new Configuration();
 *    configuration.setNamingStrategy(new CENamingStrategy());
 *    sessionFactory = configuration.configure().buildSessionFactory();
 *
 * </pre>
 * Ogólnie <tt>NamingStrategy</tt> okazuje się bardzo użyteczne, bo daje swobodę
 * nazewnictwa tabel i kolumn według własnych standardów.
 *
 * @see HibernateUtil
 * @author Christian Bauer <christian@hibernate.org>
 */
public class CENamingStrategy implements NamingStrategy {

	public String classToTableName(String className) {
		return StringHelper.unqualify(className);
	}

	public String propertyToColumnName(String propertyName) {
	    return propertyName;
    }

	public String tableName(String tableName) {
		return "CE_" + tableName;
	}

	public String columnName(String columnName) {
	    return columnName;
    }

	public String propertyToTableName(String className, String propertyName) {
		return "CE_"
				+ classToTableName(className)
				+ '_'
				+ propertyToColumnName(propertyName);
	}

}
