Package org.hibernate.metamodel.source.annotations.xml.mocker

Source Code of org.hibernate.metamodel.source.annotations.xml.mocker.PersistenceMetadataMocker$DefaultListenerMocker

package org.hibernate.metamodel.source.annotations.xml.mocker;

import java.util.HashMap;
import java.util.Map;

import org.hibernate.internal.jaxb.mapping.orm.JaxbPersistenceUnitDefaults;
import org.hibernate.metamodel.source.annotations.xml.PseudoJpaDotNames;

import org.jboss.jandex.AnnotationInstance;
import org.jboss.jandex.AnnotationTarget;
import org.jboss.jandex.AnnotationValue;
import org.jboss.jandex.ClassInfo;
import org.jboss.jandex.DotName;

/**
* @author Strong Liu
*/
class PersistenceMetadataMocker extends AbstractMocker {
  private final JaxbPersistenceUnitDefaults persistenceUnitDefaults;
  private final GlobalAnnotations globalAnnotations = new GlobalAnnotations();
  /**
   * Map JPA Annotations name to Pseudo JPA Annotations name.
   */
  private final static Map<DotName, DotName> nameMapper = new HashMap<DotName, DotName>();

  static {
    nameMapper.put( ACCESS, PseudoJpaDotNames.DEFAULT_ACCESS );
    nameMapper.put( ENTITY_LISTENERS, PseudoJpaDotNames.DEFAULT_ENTITY_LISTENERS );
    nameMapper.put( POST_LOAD, PseudoJpaDotNames.DEFAULT_POST_LOAD );
    nameMapper.put( POST_REMOVE, PseudoJpaDotNames.DEFAULT_POST_REMOVE );
    nameMapper.put( POST_UPDATE, PseudoJpaDotNames.DEFAULT_POST_UPDATE );
    nameMapper.put( POST_PERSIST, PseudoJpaDotNames.DEFAULT_POST_PERSIST );
    nameMapper.put( PRE_REMOVE, PseudoJpaDotNames.DEFAULT_PRE_REMOVE );
    nameMapper.put( PRE_UPDATE, PseudoJpaDotNames.DEFAULT_PRE_UPDATE );
    nameMapper.put( PRE_PERSIST, PseudoJpaDotNames.DEFAULT_PRE_PERSIST );
    nameMapper.put(
        PseudoJpaDotNames.DEFAULT_DELIMITED_IDENTIFIERS,
        PseudoJpaDotNames.DEFAULT_DELIMITED_IDENTIFIERS
    );
  }

  PersistenceMetadataMocker(IndexBuilder indexBuilder, JaxbPersistenceUnitDefaults persistenceUnitDefaults) {
    super( indexBuilder );
    this.persistenceUnitDefaults = persistenceUnitDefaults;
  }

  /**
   * Mock global configurations defined in <persistence-unit-metadata> with pseudo JPA annotation name.
   * NOTE: These mocked annotations do not have {@link AnnotationTarget target}.
   */
  final void process() {
    parserAccessType( persistenceUnitDefaults.getAccess(), null );
    if ( persistenceUnitDefaults.getDelimitedIdentifiers() != null ) {
      create( PseudoJpaDotNames.DEFAULT_DELIMITED_IDENTIFIERS, null );
    }
    if ( persistenceUnitDefaults.getEntityListeners() != null ) {
      new DefaultListenerMocker( indexBuilder, null ).parser( persistenceUnitDefaults.getEntityListeners() );
    }
    indexBuilder.finishGlobalConfigurationMocking( globalAnnotations );
  }

  @Override
  protected AnnotationInstance push(AnnotationInstance annotationInstance) {
    if ( annotationInstance != null ) {
      return globalAnnotations.push( annotationInstance.name(), annotationInstance );
    }
    return null;
  }

  @Override
  protected AnnotationInstance create(DotName name, AnnotationTarget target, AnnotationValue[] annotationValues) {
    DotName defaultName = nameMapper.get( name );
    if ( defaultName == null ) {
      return null;
    }
    return super.create( defaultName, target, annotationValues );

  }

  private class DefaultListenerMocker extends ListenerMocker {
    DefaultListenerMocker(IndexBuilder indexBuilder, ClassInfo classInfo) {
      super( indexBuilder, classInfo );
    }

    @Override
    protected AnnotationInstance push(AnnotationInstance annotationInstance) {
      return PersistenceMetadataMocker.this.push( annotationInstance );
    }

    @Override
    protected AnnotationInstance create(DotName name, AnnotationTarget target, AnnotationValue[] annotationValues) {
      return PersistenceMetadataMocker.this.create( name, target, annotationValues );
    }

    @Override
    protected ListenerMocker createListenerMocker(IndexBuilder indexBuilder, ClassInfo classInfo) {
      return new DefaultListenerMocker( indexBuilder, classInfo );
    }
  }
}
TOP

Related Classes of org.hibernate.metamodel.source.annotations.xml.mocker.PersistenceMetadataMocker$DefaultListenerMocker

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.