package eu.scape_project.planning.application; import java.io.File; import java.io.FilenameFilter; import java.net.URI; import java.util.Arrays; import org.jboss.shrinkwrap.api.ShrinkWrap; import org.jboss.shrinkwrap.api.spec.JavaArchive; import org.jboss.shrinkwrap.api.spec.WebArchive; import org.jboss.shrinkwrap.resolver.api.DependencyResolvers; import org.jboss.shrinkwrap.resolver.api.maven.MavenDependencyResolver; public class PlatoDeploymentBuilder { private static MavenDependencyResolver resolver; static { resolver = DependencyResolvers.use(MavenDependencyResolver.class).loadMetadataFromPom( "pom.xml"); } public static MavenDependencyResolver getResolver(){ return resolver; } public static void addAsWebResources(WebArchive archive, URI base, File directory, FilenameFilter filter) { for (File f : directory.listFiles(filter)) { String rel = base.relativize(f.toURI()).toString(); if (f.isDirectory()) { addAsWebResources(archive, base, f, filter); } else { archive.addAsWebResource(f, rel); } } } /** * Creates a basic {@link WebArchive} for module plato. * * Additional classes from module plato have to be added as required. * * @return */ public static WebArchive createPlatoWebArchive() { // get plato-model and all of its dependencies File[] modelLibs = resolver.artifact("eu.scape-project.pw:plato-model").resolveAsFiles(); // to add a persistence.xml to the model we have to modify this jar JavaArchive modelLib = ShrinkWrap.createFromZipFile(JavaArchive.class, modelLibs[0]); modelLib.addAsResource("it_test-persistence.xml", "META-INF/persistence.xml"); // add additional libraries and their dependencies File[] libs = resolver.artifacts( "eu.scape-project.pw:planning-core", "eu.scape-project.pw:minimee" // , // "pt.gov.dgarq.roda:roda-client" ).resolveAsFiles(); // create the web archive WebArchive wa = ShrinkWrap .create(WebArchive.class, "plato.war") // MockAuthenticatedUserProvider .addAsWebInfResource("test-beans.xml", "beans.xml") .addAsLibrary(modelLib) .addAsLibraries( libs ) .addAsLibraries( Arrays.copyOfRange(modelLibs, 1, modelLibs.length) ) // NOTE: addPackages grabs all classes in a package, there is no restriction on the current module // do NOT add classes which are already in one of the libs included above .addPackages(true, "eu.scape_project.planning.services.pa") .addPackages(true, "eu.scape_project.planning.services.taverna") .addClass(MockAuthenticatedUserProvider.class) ; return wa; } }