/**
* Copyright (C) 2008-2010, Squale Project - http://www.squale.org
*
* This file is part of Squale.
*
* Squale is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or any later version.
*
* Squale 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 Lesser General Public License
* along with Squale. If not, see <http://www.gnu.org/licenses/>.
*/
/*
* Cr�� le 8 janv. 04
*
* Pour changer le mod�le de ce fichier g�n�r�, allez � :
* Fen�tre>Pr�f�rences>Java>G�n�ration de code>Code et commentaires
*/
package org.squale.jraf.provider.persistence.hibernate;
import java.io.Serializable;
import java.util.Iterator;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.mapping.Column;
import org.hibernate.mapping.PersistentClass;
import org.hibernate.mapping.Table;
import org.squale.jraf.commons.exception.JrafConfigException;
import org.squale.jraf.commons.exception.JrafDaoException;
import org.squale.jraf.spi.initializer.IInitializableBean;
import org.squale.jraf.spi.persistence.IMetaData;
/**
* Classe d'acc�s au mod�le de mapping.
* <br>Elle est instanci�e
* par la classe SessionManagerImpl lors de la cr�ation du mapping.
* @author G.Courtial
*/
public class MetaDataImpl
implements IMetaData, Serializable, IInitializableBean {
/** session factory hibernate */
private SessionFactory sessions = null;
/** Configuration hibernate */
Configuration configuration = null;
/**
* Constructeur vide type IOC2
*/
public MetaDataImpl() {
super();
}
/**
* Constructeur avec parametre type IOC3
* @param sessions session factory hibernate
*/
public MetaDataImpl(SessionFactory sessions, Configuration cfg) {
setSessions(sessions);
setConfiguration(cfg);
afterPropertiesSet();
}
/* (non-Javadoc)
* @see org.squale.jraf.daolayer.itface.IMetaData#getIdentifierName(java.lang.Class)
*/
public String getIdentifierName(Class clazz) throws JrafDaoException {
String id = null;
try {
id = sessions.getClassMetadata(clazz).getIdentifierPropertyName();
} catch (Exception e) {
throw new JrafDaoException(
"Erreur MetaDataImpl m�thode : getIdentifierName("
+ clazz
+ ")");
}
return id;
}
/* (non-Javadoc)
* @see org.squale.jraf.spi.initializer.IInitializableBean#afterPropertiesSet()
*/
public void afterPropertiesSet() {
if (getSessions() == null) {
throw new JrafConfigException("La classe n'est pas initialisee correctement: la session factory Hibernate est null");
}
}
/**
* Retourne la session factory
* @return session factory
*/
public SessionFactory getSessions() {
return sessions;
}
/**
* Renseigne la session factory
* @param factory session factory
*/
public void setSessions(SessionFactory factory) {
sessions = factory;
}
/**
* @return
*/
public Configuration getConfiguration() {
return configuration;
}
/**
* @param configuration
*/
public void setConfiguration(Configuration config) {
this.configuration = config;
}
/**
* Retourne la longueur de la colonne ou sera stocke columnName de la classe clazz
* @param clazz Classe voulue
* @param columnName nom de la colonne
* @return la longueur de la colonne si elle existe
* @throws JrafConfigException si la colonne est pas touv� ou si le mode introspection n'est pas actif
*/
public int getColumnMaxSize(Class clazz, String columnName) throws JrafConfigException {
if(getConfiguration()==null) {
throw new JrafConfigException("L'introspection n'est pas active");
}
//Cette m�thode ne prend plus en param�tre un type Class plut�t un String.
PersistentClass persistentClass = configuration.getClassMapping(clazz.getName());
Table table = persistentClass.getTable();
Column column = getColumn(table, columnName);
if(column == null) throw new JrafConfigException("Column non trouve : " + columnName);
return column.getLength();
}
/**
* Retourne la colonne columnName de la table table
* @param table Table sur laquelle il faut chercher
* @param columnName Nm de la colonne a chercher
* @return La colonne ColumnName de la table table
*/
public Column getColumn(Table table, String columnName) {
Column column = null;
Iterator iter = table.getColumnIterator();
while (iter.hasNext()) {
column = (Column) iter.next();
if (column.getName().equals(columnName)) {
return column;
}
}
return null;
}
}