Package org.hibernate.ogm.test.integration.jboss.util

Source Code of org.hibernate.ogm.test.integration.jboss.util.ModuleMemberRegistrationDeployment

/*
* Hibernate OGM, Domain model persistence for NoSQL datastores
*
* License: GNU Lesser General Public License (LGPL), version 2.1 or later
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
*/
package org.hibernate.ogm.test.integration.jboss.util;

import org.hibernate.ogm.test.integration.jboss.ModuleMemberRegistrationScenario;
import org.hibernate.ogm.test.integration.jboss.controller.MemberRegistration;
import org.hibernate.ogm.test.integration.jboss.controller.MemberRegistrationWithJta;
import org.hibernate.ogm.test.integration.jboss.controller.MemberRegistrationWithResourceLocal;
import org.hibernate.ogm.test.integration.jboss.controller.RegistrationExecutor;
import org.hibernate.ogm.test.integration.jboss.model.Address;
import org.hibernate.ogm.test.integration.jboss.model.Member;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.asset.Asset;
import org.jboss.shrinkwrap.api.asset.EmptyAsset;
import org.jboss.shrinkwrap.api.asset.StringAsset;
import org.jboss.shrinkwrap.api.spec.WebArchive;
import org.jboss.shrinkwrap.descriptor.api.Descriptors;
import org.jboss.shrinkwrap.descriptor.api.persistence20.PersistenceDescriptor;
import org.jboss.shrinkwrap.descriptor.api.persistence20.PersistenceUnitTransactionType;
import org.jboss.shrinkwrap.descriptor.api.spec.se.manifest.ManifestDescriptor;

/**
* Creates a commeon archive that can be customized and deployed when running integration tests.
* <p>
* Different classes are going to be used if the persistence unit transaction type is set to RESOURCE_LOCAL instead of
* JTA.
*
* @author Davide D'Alto
*/
public class ModuleMemberRegistrationDeployment {

  private ModuleMemberRegistrationDeployment() {
    super();
  }

  public static class Builder {
    private final WebArchive archive;
    private boolean resourceLocal = true;

    public Builder(Class<?> clazz) {
      archive = ShrinkWrap
          .create( WebArchive.class, clazz.getSimpleName() + ".war" )
          .addClasses( clazz, MemberRegistration.class, RegistrationExecutor.class, Member.class, Address.class, ModuleMemberRegistrationScenario.class )
          .addAsWebInfResource( EmptyAsset.INSTANCE, "beans.xml" );
    }

    public Builder persistenceXml(PersistenceDescriptor descriptor) {
      resourceLocal = descriptor.getOrCreatePersistenceUnit().getTransactionType() == PersistenceUnitTransactionType._RESOURCE_LOCAL;
      String persistenceXml = descriptor.exportAsString();
      archive.addAsResource( new StringAsset( persistenceXml ), "META-INF/persistence.xml" );
      return this;
    }

    public Builder manifestDependencies(String dependencies) {
      archive.add( manifest( dependencies ), "META-INF/MANIFEST.MF" );
      return this;
    }

    public Builder addClasses(Class<?> clazz, Class<?>...furtherClasses) {
      archive.addClass( clazz );
      if ( furtherClasses != null ) {
        archive.addClasses( furtherClasses );
      }
      return this;
    }

    public Builder addAsWebInfResource(String resourceName) {
      archive.addAsWebInfResource( resourceName );
      return this;
    }

    public WebArchive createDeployment() {
      if (resourceLocal) {
        archive.addClasses( MemberRegistrationWithResourceLocal.class );
      }
      else {
        archive.addClasses( MemberRegistrationWithJta.class, JtaResources.class );
      }
      return archive;
    }

    private static Asset manifest(String dependencies) {
      String manifest = Descriptors.create( ManifestDescriptor.class )
          .attribute( "Dependencies", dependencies )
          .exportAsString();
      return new StringAsset( manifest );
    }
  }

}
TOP

Related Classes of org.hibernate.ogm.test.integration.jboss.util.ModuleMemberRegistrationDeployment

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.