package com.ics;

import com.webobjects.eoaccess.EOAdaptor;
import com.webobjects.eoaccess.EOAdaptorChannel;
import com.webobjects.eoaccess.EOAdaptorContext;
import com.webobjects.eoaccess.EODatabase;
import com.webobjects.eoaccess.EODatabaseChannel;
import com.webobjects.eoaccess.EODatabaseContext;
import com.webobjects.eoaccess.EOModel;
import com.webobjects.eoaccess.EOModelGroup;
import com.webobjects.eoaccess.EOSQLExpressionFactory;
import com.webobjects.eoaccess.synchronization.EOSchemaSynchronizationFactory;
import com.webobjects.eocontrol.EOEditingContext;
import com.webobjects.jdbcadaptor.JDBCAdaptor;
import com.webobjects.jdbcadaptor.JDBCPlugIn;

public class EOFStack {

	private EOFStack() {
	}
	
	public static EOModel model(String modelName) {
		return EOModelGroup.defaultGroup().modelNamed(modelName);
	}
	
	public static EODatabaseContext databaseContext(String modelName, EOEditingContext ec) {
		return EODatabaseContext.registeredDatabaseContextForModel(model(modelName), ec);
	}
	
	public static EODatabase database(String modelName, EOEditingContext ec) {
		return databaseContext(modelName, ec).database();
	}
	
	public static EOAdaptorContext adaptorContext(String modelName, EOEditingContext ec) {
		return databaseContext(modelName, ec).adaptorContext();
	}
	
	public static EOAdaptorChannel adaptorChannel(String modelName, EOEditingContext ec) {
		return databaseChannel(modelName, ec).adaptorChannel();
	}
	
	public static EODatabaseChannel databaseChannel(String modelName, EOEditingContext ec) {
		return databaseContext(modelName, ec).availableChannel();
	}
	
	
	
	
	public static EOAdaptor adaptor(String modelName) {
		return EOAdaptor.adaptorWithModel(model(modelName));
	}
	
	public static String pluginName(String modelName) {
		return adaptor(modelName).plugInName();
	}
	
	public static JDBCPlugIn plugin(String modelName) {
		EOAdaptor adaptor = adaptor(modelName);
		if (adaptor instanceof JDBCAdaptor) {
			return ((JDBCAdaptor)adaptor).plugIn();
		} else {
			return null;
		}
	}
	
	public static EOSQLExpressionFactory sqlExpressionFactory(String modelName) {
		return adaptor(modelName).expressionFactory();
	}
	
	public static EOSchemaSynchronizationFactory schemaSynchronizationFactory(String modelName) {
		return adaptor(modelName).schemaSynchronizationFactory();
	}
	
}
