package com.ctp.cdi.query.test.util; import java.net.URL; import java.util.Arrays; import java.util.ResourceBundle; import org.jboss.shrinkwrap.api.Archive; import org.jboss.shrinkwrap.api.ArchivePath; import org.jboss.shrinkwrap.api.ArchivePaths; import org.jboss.shrinkwrap.api.Filter; import org.jboss.shrinkwrap.api.ShrinkWrap; import org.jboss.shrinkwrap.api.asset.EmptyAsset; import org.jboss.shrinkwrap.api.spec.JavaArchive; import org.jboss.shrinkwrap.api.spec.WebArchive; import org.jboss.shrinkwrap.impl.base.filter.ExcludeRegExpPaths; import org.jboss.shrinkwrap.resolver.api.DependencyResolvers; import org.jboss.shrinkwrap.resolver.api.maven.MavenDependencyResolver; import com.ctp.cdi.query.AbstractEntityDao; import com.ctp.cdi.query.Dao; import com.ctp.cdi.query.EntityDao; import com.ctp.cdi.query.FirstResult; import com.ctp.cdi.query.MaxResults; import com.ctp.cdi.query.Modifying; import com.ctp.cdi.query.NonEntity; import com.ctp.cdi.query.Query; import com.ctp.cdi.query.QueryExtension; import com.ctp.cdi.query.QueryParam; import com.ctp.cdi.query.QueryResult; import com.ctp.cdi.query.WithEntityManager; import com.ctp.cdi.query.audit.AuditEntityListener; import com.ctp.cdi.query.builder.QueryBuilder; import com.ctp.cdi.query.criteria.Criteria; import com.ctp.cdi.query.criteria.CriteriaSupport; import com.ctp.cdi.query.criteria.QueryCriteria; import com.ctp.cdi.query.criteria.QueryDslSupport; import com.ctp.cdi.query.criteria.QuerySelection; import com.ctp.cdi.query.handler.QueryHandler; import com.ctp.cdi.query.home.DefaultNavigationProvider; import com.ctp.cdi.query.home.EntityHome; import com.ctp.cdi.query.meta.DaoComponents; import com.ctp.cdi.query.param.Parameters; import com.ctp.cdi.query.spi.DelegateQueryHandler; import com.ctp.cdi.query.spi.QueryInvocationContext; import com.ctp.cdi.query.test.TransactionalTestCase; import com.ctp.cdi.query.test.domain.AuditedEntity; import com.ctp.cdi.query.util.EntityUtils; public abstract class TestDeployments { public static Filter<ArchivePath> TEST_FILTER = new ExcludeRegExpPaths(".*Test.*class"); public static MavenDependencyResolver resolver() { return DependencyResolvers.use(MavenDependencyResolver.class).loadMetadataFromPom("pom.xml"); } public static WebArchive initDeployment() { return initDeployment(".*test.*"); } /** * Create a basic deployment containing API classes, the Extension class and * test persistence / beans descriptor. * * @return Basic web archive. */ public static WebArchive initDeployment(String testFilter) { Logging.reconfigure(); WebArchive archive = ShrinkWrap.create(WebArchive.class, "test.war") .addAsLibrary(createApiArchive()) .addClasses(QueryExtension.class) .addClasses(TransactionalTestCase.class) .addPackages(true, TEST_FILTER, createImplPackages()) .addPackages(true, AuditedEntity.class.getPackage()) .addPackages(true, new ExcludeRegExpPaths(testFilter), TransactionalTestCase.class.getPackage()) .addAsResource("test-settings.properties", ArchivePaths.create("test-settings.properties")) .addAsWebInfResource(classpathResource("test-persistence.xml", "META-INF/persistence.xml"), ArchivePaths.create("classes/META-INF/persistence.xml")) .addAsWebInfResource("META-INF/services/javax.enterprise.inject.spi.Extension", ArchivePaths.create("classes/META-INF/services/javax.enterprise.inject.spi.Extension")) .addAsWebInfResource(EmptyAsset.INSTANCE, ArchivePaths.create("beans.xml")); return addDependencies(archive); } public static Package[] createImplPackages() { return Arrays.asList( AuditEntityListener.class.getPackage(), QueryBuilder.class.getPackage(), QueryCriteria.class.getPackage(), QueryHandler.class.getPackage(), DaoComponents.class.getPackage(), Parameters.class.getPackage(), EntityUtils.class.getPackage(), DefaultNavigationProvider.class.getPackage() ).toArray(new Package[8]); } public static Archive<?> createApiArchive() { return ShrinkWrap.create(JavaArchive.class, "archive.jar") .addClasses(AbstractEntityDao.class, Dao.class, EntityDao.class, FirstResult.class, MaxResults.class, Modifying.class, NonEntity.class, Query.class, QueryParam.class, QueryResult.class, WithEntityManager.class) .addClasses(Criteria.class, QuerySelection.class, CriteriaSupport.class, QueryDslSupport.class) .addClasses(DelegateQueryHandler.class, QueryInvocationContext.class) .addPackage(EntityHome.class.getPackage()); } public static WebArchive addDependencies(WebArchive archive) { archive.addAsLibraries(resolver() .artifact("com.mysema.querydsl:querydsl-jpa") .resolveAsFiles()); if (includeLibs()) { archive.addAsLibraries(resolver() .artifact("org.jboss.solder:solder-api") .artifact("org.jboss.solder:solder-impl").resolveAsFiles()); } return archive; } public static boolean config(String property) { ResourceBundle bundle = ResourceBundle.getBundle("test-settings"); return Boolean.valueOf(bundle.getString(property)); } public static String classpathResource(String resource, String fallback) { URL url = TestDeployments.class.getClassLoader().getResource(resource); return url != null ? resource : fallback; } private static boolean includeLibs() { return config("arquillian.deploy.libs"); } }