/*
* JBoss, Home of Professional Open Source
* Copyright 2009, Red Hat Middleware LLC, and individual contributors
* by the @authors tag. See the copyright.txt in the distribution for a
* full listing of individual contributors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jboss.arquillian.warp.extension;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.jboss.arquillian.container.test.spi.RemoteLoadableExtension;
import org.jboss.arquillian.container.test.spi.client.deployment.ApplicationArchiveProcessor;
import org.jboss.arquillian.container.test.spi.client.deployment.AuxiliaryArchiveAppender;
import org.jboss.arquillian.core.api.Instance;
import org.jboss.arquillian.core.api.annotation.Inject;
import org.jboss.arquillian.core.spi.ServiceLoader;
import org.jboss.arquillian.test.spi.TestClass;
import org.jboss.arquillian.warp.ServerAssertion;
import org.jboss.arquillian.warp.assertion.AssertionRegistry;
import org.jboss.arquillian.warp.filter.WarpFilter;
import org.jboss.arquillian.warp.lifecycle.LifecycleManagerImpl;
import org.jboss.arquillian.warp.request.RequestContext;
import org.jboss.arquillian.warp.spi.LifecycleEvent;
import org.jboss.arquillian.warp.spi.WarpLifecycleExtension;
import org.jboss.arquillian.warp.test.LifecycleTestDriver;
import org.jboss.arquillian.warp.utils.SerializationUtils;
import org.jboss.shrinkwrap.api.Archive;
import org.jboss.shrinkwrap.api.spec.JavaArchive;
import org.jboss.shrinkwrap.api.spec.WebArchive;
import org.jboss.shrinkwrap.resolver.api.maven.Maven;
/**
* Adds all parts required by JSFUnit into web archive.
*
* @author Lukas Fryc
*
*/
public class DeploymentEnricher implements ApplicationArchiveProcessor {
@Inject
private Instance<ServiceLoader> serviceLoader;
@Override
public void process(Archive<?> applicationArchive, TestClass testClass) {
// TODO should check that testClass is annotated (no need to process each WAR)
if (applicationArchive instanceof WebArchive) {
WebArchive webArchive = (WebArchive) applicationArchive;
// add requred libraries
webArchive.addAsLibrary(Maven.withPom("pom.xml").dependency("commons-codec:commons-codec:1.6"));
// add all required packages
webArchive.addPackage(WarpFilter.class.getPackage());
webArchive.addPackage(WarpRemoteExtension.class.getPackage());
webArchive.addPackage(LifecycleManagerImpl.class.getPackage());
webArchive.addPackage(RequestContext.class.getPackage());
webArchive.addPackage(LifecycleTestDriver.class.getPackage());
webArchive.addPackage(AssertionRegistry.class.getPackage());
webArchive.addPackage(LifecycleEvent.class.getPackage());
// add all required classes
webArchive.addClasses(SerializationUtils.class, ServerAssertion.class);
// register remote extension
webArchive.addAsServiceProvider(RemoteLoadableExtension.class, WarpRemoteExtension.class);
// add all Arquillian's auxilliary archives
List<Archive<?>> auxiliarryArchives = new ArrayList<Archive<?>>();
Collection<AuxiliaryArchiveAppender> archiveAppenders = serviceLoader.get().all(AuxiliaryArchiveAppender.class);
for (AuxiliaryArchiveAppender archiveAppender : archiveAppenders) {
auxiliarryArchives.add(archiveAppender.createAuxiliaryArchive());
}
webArchive.addAsLibraries(auxiliarryArchives);
Collection<WarpLifecycleExtension> lifecycleExtensions = serviceLoader.get().all(WarpLifecycleExtension.class);
for (WarpLifecycleExtension extension : lifecycleExtensions) {
JavaArchive library = extension.getEnrichmentLibrary();
if (library != null) {
webArchive.addAsLibrary(library);
}
extension.enrichWebArchive(webArchive);
}
}
}
}