package com.processpuzzle.business.definition.domain; import java.lang.reflect.Constructor; import java.util.List; import org.junit.BeforeClass; import com.processpuzzle.application.configuration.domain.ProcessPuzzleContext; import com.processpuzzle.application.configuration.domain.PropertyContext; import com.processpuzzle.application.resource.domain.DataLoader; import com.processpuzzle.business.definition.domain.BusinessDataLoader; import com.processpuzzle.sharedfixtures.domaintier.DomainTierTestConfiguration; import com.processpuzzle.sharedfixtures.domaintier.ProcessPuzzleContextFixture; @SuppressWarnings("unchecked") public abstract class BusinessDataLoaderTest<L extends BusinessDataLoader<D>, D> { protected static String xPathKey; protected static ProcessPuzzleContextFixture contextFixture; protected static ProcessPuzzleContext applicationContext; protected static DataLoader dataLoader; protected static Class<? extends BusinessDataLoader<?>> dataLoaderClass; @BeforeClass public static void beforeAllTests() throws Exception { contextFixture = ProcessPuzzleContextFixture.getInstance( DomainTierTestConfiguration.APPLICATION_CONFIGURATION_DESCRIPTOR_PATH ); contextFixture.setUp(); applicationContext = contextFixture.getApplicationContext(); dataLoader = instantiateBusinessDataLoader( determineResoucePaths() ); dataLoader.loadData(); } public static BusinessDataLoader<?> instantiateBusinessDataLoader( String resourcePath ) throws Exception { return instantiateBusinessDataLoader( resourcePath, dataLoaderClass ); } public static BusinessDataLoader<?> instantiateBusinessDataLoader( String resourcePath, Class<? extends BusinessDataLoader<?>> dataLoaderClass ) throws Exception { Class<?>[] argumentClasses = { String.class }; Object[] arguments = { resourcePath }; Constructor<BusinessDataLoader<?>> applicationConstructor; BusinessDataLoader<?> dataLoader = null; try{ applicationConstructor = (Constructor<BusinessDataLoader<?>>) dataLoaderClass.getConstructor( argumentClasses ); dataLoader = (BusinessDataLoader<?>) applicationConstructor.newInstance( arguments ); }catch( Exception e ){ e.printStackTrace(); throw e; } return dataLoader; } protected static String determineResoucePaths() { PropertyContext propertyContext = applicationContext.getPropertyContext(); List<String> businessDefinitionPaths = propertyContext.getPropertyList( xPathKey ); String combinedPath = ""; for( String path : businessDefinitionPaths ){ combinedPath += path + ";"; } return combinedPath; } }