package org.objectstyle.wolips.eomodeler.core.sql;
import java.lang.reflect.InvocationTargetException;
import java.util.LinkedList;
import java.util.List;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IExtension;
import org.eclipse.core.runtime.IExtensionPoint;
import org.eclipse.core.runtime.Platform;
import org.objectstyle.wolips.eomodeler.core.Activator;
import org.objectstyle.wolips.eomodeler.core.model.EODatabaseConfig;
import org.objectstyle.wolips.eomodeler.core.model.EOModelException;
public interface IEOSQLReverseEngineerFactory {
public IEOSQLReverseEngineer reverseEngineer(EODatabaseConfig databaseConfig, ClassLoader eomodelClassLoader) throws SecurityException, NoSuchMethodException, ClassNotFoundException, IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException;
public class Utility {
public static IEOSQLReverseEngineerFactory reverseEngineerFactory() throws EOModelException {
IExtensionPoint extensionPoint = Platform.getExtensionRegistry().getExtensionPoint("org.objectstyle.wolips.eomodeler.sqlReverseEngineerFactory");
IExtension[] extensions = extensionPoint.getExtensions();
List<IEOSQLReverseEngineerFactory> sqlReverseEngineerFactories = new LinkedList<IEOSQLReverseEngineerFactory>();
for (IExtension extension : extensions) {
IConfigurationElement[] configurationElements = extension.getConfigurationElements();
for (IConfigurationElement configurationElement : configurationElements) {
try {
IEOSQLReverseEngineerFactory sqlReverseEngineerFactory = (IEOSQLReverseEngineerFactory) configurationElement.createExecutableExtension("class");
sqlReverseEngineerFactories.add(sqlReverseEngineerFactory);
} catch (CoreException e) {
e.printStackTrace();
Activator.getDefault().log("Could not create SQL generator factory from configuration element: " + configurationElement, e);
}
}
}
IEOSQLReverseEngineerFactory sqlReverseEngineerFactory = null;
if (sqlReverseEngineerFactories.size() > 1) {
throw new EOModelException("There was more than one SQL reverse engineer factory defined.");
} else if (sqlReverseEngineerFactories.size() == 0) {
throw new EOModelException("There was no SQL reverse engineer factory defined.");
} else {
sqlReverseEngineerFactory = sqlReverseEngineerFactories.get(0);
}
return sqlReverseEngineerFactory;
}
}
}