package com.ldbc.driver.util;
import com.ldbc.driver.Db;
import com.ldbc.driver.DbException;
import com.ldbc.driver.OperationException;
import com.ldbc.driver.OperationHandler;
import com.ldbc.driver.Workload;
import com.ldbc.driver.WorkloadException;
import static java.lang.String.format;
public class ClassLoaderHelper
{
/**
* DB
*/
public static Db loadDb( String dbClassName ) throws DbException
{
try
{
return loadDb( loadClass( dbClassName, Db.class ) );
}
catch ( ClassLoadingException e )
{
throw new DbException( format( "Error creating DB [%s]", dbClassName ), e );
}
}
public static Db loadDb( Class<? extends Db> dbClass ) throws DbException
{
try
{
return dbClass.getConstructor().newInstance();
}
catch ( Exception e )
{
throw new DbException( format( "Error creating DB [%s]", dbClass.getName() ), e );
}
}
/**
* Workload
*/
public static Workload loadWorkload( String workloadClassName ) throws WorkloadException
{
try
{
return loadWorkload( loadClass( workloadClassName, Workload.class ) );
}
catch ( ClassLoadingException e )
{
throw new WorkloadException( format( "Error creating Workload [%s]", workloadClassName ), e );
}
}
public static Workload loadWorkload( Class<? extends Workload> workloadClass ) throws WorkloadException
{
try
{
return workloadClass.getConstructor().newInstance();
}
catch ( Exception e )
{
throw new WorkloadException( format( "Error creating Workload [%s]", workloadClass.getName() ), e );
}
}
public static OperationHandler loadOperationHandler( Class<? extends OperationHandler> operationHandlerClass )
throws OperationException
{
try
{
OperationHandler operationHandler = operationHandlerClass.getConstructor().newInstance();
return operationHandler;
}
catch ( Exception e )
{
throw new OperationException(
format( "Error creating OperationHandler [%s]", operationHandlerClass.getName() ),
e );
}
}
/**
* Helper Methods
*/
public static <C> Class<? extends C> loadClass( String className, Class<C> baseClass ) throws ClassLoadingException
{
try
{
ClassLoader classLoader = ClassLoaderHelper.class.getClassLoader();
Class<?> loadedClass = classLoader.loadClass( className );
// Class<?> loadedClass = Class.forName(className,false,classLoader)
return (Class<? extends C>) loadedClass;
}
catch ( ClassNotFoundException e )
{
throw new ClassLoadingException( format( "Error loading class [%s]", className ), e );
}
}
public static Class<?> loadClass( String className ) throws ClassLoadingException
{
try
{
ClassLoader classLoader = ClassLoaderHelper.class.getClassLoader();
Class<?> loadedClass = classLoader.loadClass( className );
return loadedClass;
}
catch ( ClassNotFoundException e )
{
throw new ClassLoadingException( format( "Error loading class [%s]", className ), e );
}
}
}