package com.processpuzzle.artifact_type.domain;
import com.processpuzzle.artifact.domain.Artifact;
import com.processpuzzle.artifact.domain.Document;
import com.processpuzzle.artifact.domain.ImageFile;
import com.processpuzzle.artifact_type_group.domain.ArtifactTypeGroup;
import com.processpuzzle.artifact_type_group.domain.ArtifactTypeGroupFactory;
import com.processpuzzle.artifact_type_group.domain.ArtifactTypeGroupRepository;
import com.processpuzzle.litest.template.FactoryTestEnvironment;
import com.processpuzzle.litest.template.FactoryTestFixture;
import com.processpuzzle.persistence.domain.DefaultUnitOfWork;
public class ArtifactTypeFactoryTestFixture extends FactoryTestFixture<ArtifactTypeFactory, ArtifactType>{
public static final String IMAGEFILE_TYPE_NAME = "ImageFileType";
public static final String IMAGEFILE_GROUP = "TestImageFiles";
public static final String IMAGEFILE_CLASSNAME = "com.processpuzzle.artifact.domain.ImageFile";
public static final String DOCUMENT_TYPE_NAME = "DocumentType";
public static final String DOCUMENT_GROUP = "SystemAdministration";
public static final String DOCUMENT_CLASSNAME = "com.processpuzzle.artifact.domain.Document";
private ArtifactType artifactType;
private ArtifactTypeFactory artifactTypeFactory;
private ArtifactTypeGroupFactory artifactTypeGroupFactory;
private ArtifactTypeGroupRepository artifactTypeGroupRepository;
private ArtifactTypeRepository artifactTypeRepository;
//Constructors
public ArtifactTypeFactoryTestFixture( FactoryTestEnvironment<ArtifactTypeFactory, ?> testEnvironment ) {
super( testEnvironment );
}
//Public accessors and mutators
public void setUpImageFileArtifactType() {
setUpArtifactType( IMAGEFILE_TYPE_NAME, IMAGEFILE_GROUP, ImageFile.class );
}
public void setUpDocumentArtifactType() {
setUpArtifactType( DOCUMENT_TYPE_NAME, DOCUMENT_GROUP, Document.class );
}
public void tearDownImageFileArtifactType() {
tearDownArtifactType( IMAGEFILE_TYPE_NAME );
}
public void tearDownDocumentArtifactType() {
tearDownArtifactType( DOCUMENT_TYPE_NAME );
}
//Properties
public ArtifactTypeGroup getImageTypeGroup(){ return artifactTypeGroupRepository.findByName( IMAGEFILE_GROUP ); }
//Protected, private helper methods
@Override
protected void configureAfterSutInstantiation() {
artifactTypeFactory = applicationContext.getEntityFactory( ArtifactTypeFactory.class );
artifactTypeGroupFactory = applicationContext.getEntityFactory( ArtifactTypeGroupFactory.class );
artifactTypeGroupRepository = applicationContext.getRepository( ArtifactTypeGroupRepository.class );
artifactTypeRepository = applicationContext.getRepository( ArtifactTypeRepository.class );
setUpArtifactTypeGroup( IMAGEFILE_GROUP );
}
private void setUpArtifactType( String artifactTypeName, String artifactGroupName, Class<? extends Artifact<?>> artifactClass ) {
DefaultUnitOfWork work = new DefaultUnitOfWork( true );
artifactType = artifactTypeRepository.findArtifactTypeByName( work, artifactTypeName );
if( artifactType == null ){
artifactType = artifactTypeFactory.create( artifactTypeName, artifactGroupName, artifactClass );
artifactTypeRepository.add( artifactType );
}
work.finish();
}
private ArtifactTypeGroup setUpArtifactTypeGroup( String typeGroupName ) {
ArtifactTypeGroup artifactTypeGroup = artifactTypeGroupFactory.create( typeGroupName );
artifactTypeGroupRepository.add( artifactTypeGroup );
return artifactTypeGroup;
}
private void tearDownArtifactType( String artifactTypeName ) {
DefaultUnitOfWork work = new DefaultUnitOfWork( true );
ArtifactType artifactType = artifactTypeRepository.findArtifactTypeByName( work, artifactTypeName );
if( artifactType != null ){
artifactTypeRepository.deleteArtifactType( work, artifactType );
}
work.finish();
}
}