package com.foo.rma.reveng;

import org.hibernate.cfg.reveng.ReverseEngineeringStrategy;
import org.hibernate.cfg.reveng.TableIdentifier;

import com.foo.tools.db.hibernate.reveng.BaseReverseEngineeringStrategy;


public class RMAReverseEngineeringStrategy extends BaseReverseEngineeringStrategy
{
	private ReverseEngineeringStrategy delegate;

	private static final String STD_PREFIX = "STD";
	private static final String RMD_PREFIX = "RMD";

	public RMAReverseEngineeringStrategy(ReverseEngineeringStrategy delegate)
	{
		super(delegate);
		this.delegate = delegate;
	}

	@Override
	public String columnToPropertyName(TableIdentifier table, String column) {
		if (delegate != null)
		{
			String expectedColumnPrefix = null;

			if (table.getName().startsWith(STD_PREFIX))
			{
				expectedColumnPrefix = table.getName().substring(STD_PREFIX.length());
			}
			else if (table.getName().startsWith(RMD_PREFIX))
			{
				expectedColumnPrefix = table.getName().substring(RMD_PREFIX.length());
			}

			if (expectedColumnPrefix != null)
			{
				expectedColumnPrefix += "_";
				if (column.startsWith(expectedColumnPrefix))
				{
					return delegate.columnToPropertyName(table, column.substring(expectedColumnPrefix.length()));
				}
			}
			return delegate.columnToPropertyName(table, column);
		}
 		return null;
	}
}
