/**********************************************************************************
* $URL: https://source.sakaiproject.org/svn/master/trunk/header.java $
* $Id: header.java 9220 2006-05-09 23:09:28Z ggolden@umich.edu $
***********************************************************************************
*
* Copyright (c) 2005, 2006, 2007, 2008 Sakai Foundation
*
* Licensed under the Educational Community 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.opensource.org/licenses/ECL-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 org.sakaiproject.springframework.orm.hibernate.impl;
import java.io.*;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.MappingException;
import org.hibernate.cfg.Configuration;
import org.sakaiproject.springframework.orm.hibernate.AdditionalHibernateMappings;
import org.sakaiproject.springframework.orm.hibernate.VendorHbmTransformer;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
public class AdditionalHibernateMappingsImpl implements AdditionalHibernateMappings, Comparable, ApplicationContextAware
{
protected final transient Log logger = LogFactory.getLog(getClass());
private Resource[] mappingLocations;
private Integer sortOrder = Integer.valueOf(Integer.MAX_VALUE);
private static VendorHbmTransformer vendorHbmTrasformer;
public void setMappingResources(String[] mappingResources)
{
this.mappingLocations = new Resource[mappingResources.length];
for (int i = 0; i < mappingResources.length; i++)
{
this.mappingLocations[i] = new ClassPathResource(mappingResources[i].trim());
}
}
public Resource[] getMappingLocations()
{
return mappingLocations;
}
public void processConfig(Configuration config) throws IOException, MappingException
{
for (int i = 0; i < this.mappingLocations.length; i++)
{
try {
logger.info("Loading hbm: " + mappingLocations[i]);
if (config == null) {
logger.warn("config is null!");
return;
}
if (vendorHbmTrasformer == null) {
logger.warn("vendor is null!");
return;
}
config.addInputStream(vendorHbmTrasformer.getTransformedMapping(this.mappingLocations[i].getInputStream()));
} catch (MappingException me) {
throw new MappingException("Failed to load "+ this.mappingLocations[i], me);
}
}
}
public int compareTo(Object o)
{
return getSortOrder().compareTo(((AdditionalHibernateMappingsImpl) o).getSortOrder());
}
public Integer getSortOrder()
{
return sortOrder;
}
public void setSortOrder(Integer sortOrder)
{
this.sortOrder = sortOrder;
}
public void setApplicationContext(ApplicationContext applicationContext)
throws BeansException {
// We do this so that we don't have to start the Sakai component manager.
vendorHbmTrasformer = (VendorHbmTransformer) applicationContext
.getBean(org.sakaiproject.springframework.orm.hibernate.VendorHbmTransformer.class
.getName());
}
}