/* Copyright 2004-2005 the original author or authors.
 * 
 * Licensed under the Apache 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.apache.org/licenses/LICENSE-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.hibernate.cfg;

import java.util.Map;

import org.hibernate.MappingException;
import org.hibernate.mapping.Collection;

/**
 * Class the allows the use of SecondPass compile within GrailsDomainBinder.
 *  
 * FIXME: This is a temporary solution until the SecondPass class is migrated out
 * of the HbmBinder class by the Hibernate team
 * 
 * @author Graeme Rocher
 */

public abstract class GrailsSecondPass extends HbmBinder.SecondPass  {
	public GrailsSecondPass (
			Mappings mappings, 
			Collection coll) {
			super(null, mappings, coll);
		}

		public Collection getCollection() {
			return collection;
		}

		public Mappings getMappings() {
			return mappings;
		}
		
	public abstract void secondPass(Map persistentClasses, Map inheritedMetas) throws MappingException;

}
