package com.foo.tools.db.hibernate.reveng;

import org.hibernate.cfg.reveng.DelegatingReverseEngineeringStrategy;
import org.hibernate.cfg.reveng.ReverseEngineeringSettings;
import org.hibernate.cfg.reveng.ReverseEngineeringStrategy;
import org.hibernate.cfg.reveng.TableIdentifier;

import com.foo.core.db.hibernate.util.SpecialHibernateIdGenerator;


public class RSFReverseEngineeringStrategy extends DelegatingReverseEngineeringStrategy
{
	private ReverseEngineeringSettings settings = new ReverseEngineeringSettings(this);


	public RSFReverseEngineeringStrategy(ReverseEngineeringStrategy delegate)
	{
		super(delegate);
	}

	@Override
	public String getTableIdentifierStrategyName(TableIdentifier tableIdentifier)
	{
		return SpecialHibernateIdGenerator.class.getName();
	}

	@Override
	public boolean useColumnForOptimisticLock(TableIdentifier identifier, String column) {
		if(settings.getDetectOptimsticLock()) {
			return column.toLowerCase().endsWith("version");
		} else {
			return false;
		}
	}

	@Override
	public void setSettings(ReverseEngineeringSettings settings) {
		this.settings = settings;
		super.setSettings(settings);
	}
}
