/*******************************************************************************
 * Copyright (c) 2007 Oracle. All rights reserved. This
 * program and the accompanying materials are made available under the terms of
 * the Eclipse Public License v1.0 which accompanies this distribution, and is
 * available at http://www.eclipse.org/legal/epl-v10.html
 * 
 * Contributors: Oracle. - initial API and implementation
 *******************************************************************************/
package org.eclipse.jpt.core.internal.platform;

import org.eclipse.jpt.core.internal.IPersistentType;
import org.eclipse.jpt.core.internal.mappings.IAbstractJoinColumn;

public abstract class AbstractJoinColumnContext<E extends IAbstractJoinColumn> extends BaseContext
{
	protected E column;
	
	public AbstractJoinColumnContext(IContext parentContext, E column) {
		super(parentContext);
		this.column = column;
	}
	
	@Override
	protected void initialize() {}
	
	public E getColumn() {
		return this.column;
	}
	
	public void refreshDefaults(DefaultsContext defaultsContext) {
		this.column.refreshDefaults(wrapDefaultsContext(defaultsContext));
	}
	
	public DefaultsContext wrapDefaultsContext(final DefaultsContext defaultsContext) {
		return new DefaultsContext() {
			public Object getDefault(String key) {
				if (key.equals(BaseJpaPlatform.DEFAULT_JOIN_COLUMN_NAME_KEY)) {
					return buildDefaultName();
				}
				if (key.equals(BaseJpaPlatform.DEFAULT_JOIN_COLUMN_REFERENCED_COLUMN_NAME_KEY)) {
					return buildDefaultReferencedColumnName();
				}
				return defaultsContext.getDefault(key);
			}
		
			public IPersistentType persistentType(String fullyQualifiedTypeName) {
				return defaultsContext.persistentType(fullyQualifiedTypeName);
			}
		};
	}
	
	protected abstract String buildDefaultName();
	
	protected abstract String buildDefaultReferencedColumnName();

}
