package com.processpuzzle.litest.template; import com.processpuzzle.application.configuration.domain.ProcessPuzzleContext; import com.processpuzzle.artifact.domain.Artifact; import com.processpuzzle.artifact.domain.ArtifactFactory; import com.processpuzzle.artifact.domain.ArtifactFolder; import com.processpuzzle.artifact.domain.ArtifactFolderFactory; import com.processpuzzle.artifact.domain.ArtifactFolderRepository; import com.processpuzzle.artifact_type.domain.ArtifactTypeFactory; import com.processpuzzle.artifact_type.domain.ArtifactTypeRepository; import com.processpuzzle.artifact_type_group.domain.ArtifactTypeGroupFactory; import com.processpuzzle.artifact_type_group.domain.ArtifactTypeGroupRepository; import com.processpuzzle.commons.generics.GenericTypeParameterInvestigator; import com.processpuzzle.commons.persistence.UnitOfWork; import com.processpuzzle.litest.template.GenericTemplatedFixture; public abstract class ArtifactFactoryTestFixture<S extends ArtifactFactory<A>, A extends Artifact<?>> extends GenericTemplatedFixture<S> { private DefaultApplicationFixture<?> applicationFixture; protected ArtifactTypeFactory artifactTypeFactory; protected ArtifactTypeGroupFactory artifactTypeGroupFactory; protected ArtifactTypeGroupRepository artifactTypeGroupRepository; protected ArtifactTypeRepository artifactTypeRepository; protected Class<A> artifactClass; protected ProcessPuzzleContext applicationContext; protected S factory; protected ArtifactFolderFactory artifactFolderFactory; protected ArtifactFolderRepository artifactFolderRepository; protected ArtifactFactoryTestFixture( ArtifactFactoryTestEnvironment<S, ?> testEnvironment ) { super( testEnvironment ); this.applicationFixture = testEnvironment.getApplicationFixture(); } @SuppressWarnings("unchecked") @Override protected void configureBeforeSutInstantiation() { artifactClass = (Class<A>) GenericTypeParameterInvestigator.getTypeParameter( this.getClass(), 1 ); applicationContext = applicationFixture.getApplicationContext(); lookUpArtifactTypeGroupRepositoryAndFactory(); lookUpArtifactTypeRepositoryAndFactory(); } protected ArtifactFolder discoverContainingFolder( String instanceFolderPath, String instanceFolderName, UnitOfWork work ) { int indexOfNameStart = instanceFolderPath.lastIndexOf( instanceFolderName ); String containingFolderPath = instanceFolderPath.substring( 0, indexOfNameStart -1 ); ArtifactFolder containingFolder = artifactFolderRepository.findByPath( work, containingFolderPath ); return containingFolder; } @Override protected S instantiateSUT() { factory = (S) applicationContext.getEntityFactory( sutClass ); return factory; } private void lookUpArtifactTypeGroupRepositoryAndFactory(){ artifactTypeGroupFactory = applicationContext.getEntityFactory( ArtifactTypeGroupFactory.class ); artifactTypeGroupRepository = applicationContext.getRepository( ArtifactTypeGroupRepository.class ); } private void lookUpArtifactTypeRepositoryAndFactory(){ artifactTypeFactory = applicationContext.getEntityFactory( ArtifactTypeFactory.class ); artifactTypeRepository = applicationContext.getRepository( ArtifactTypeRepository.class ); artifactFolderFactory = applicationContext.getEntityFactory( ArtifactFolderFactory.class ); artifactFolderRepository = applicationContext.getRepository( ArtifactFolderRepository.class ); } }