gt:         UuidGeneratorImpl uuidGenerator = new UuidGeneratorImpl();
context: /*******************************************************************************
   * Copyright (c) 2013, 2015  Oracle and/or its affiliates. All rights reserved.
   * This program and the accompanying materials are made available under the
   * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
   * which accompanies this distribution.
   * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
   * and the Eclipse Distribution License is available at
   * http://www.eclipse.org/org/documents/edl-v10.php.
   *
   * Contributors:
   *     Guy Pelletier - initial API and implementation
   ******************************************************************************/
  package org.eclipse.persistence.internal.jpa.config.classes;
  
  import java.util.ArrayList;
  
  import org.eclipse.persistence.internal.jpa.config.additionalcriteria.AdditionalCriteriaImpl;
  import org.eclipse.persistence.internal.jpa.config.cache.CacheImpl;
  import org.eclipse.persistence.internal.jpa.config.cache.CacheIndexImpl;
  import org.eclipse.persistence.internal.jpa.config.cache.CacheInterceptorImpl;
  import org.eclipse.persistence.internal.jpa.config.columns.PrimaryKeyImpl;
  import org.eclipse.persistence.internal.jpa.config.listeners.EntityListenerImpl;
  import org.eclipse.persistence.internal.jpa.config.locking.OptimisticLockingImpl;
  import org.eclipse.persistence.internal.jpa.config.multitenant.MultitenantImpl;
  import org.eclipse.persistence.internal.jpa.config.queries.FetchGroupImpl;
  import org.eclipse.persistence.internal.jpa.config.queries.NamedNativeQueryImpl;
  import org.eclipse.persistence.internal.jpa.config.queries.NamedPlsqlStoredFunctionQueryImpl;
  import org.eclipse.persistence.internal.jpa.config.queries.NamedPlsqlStoredProcedureQueryImpl;
  import org.eclipse.persistence.internal.jpa.config.queries.NamedQueryImpl;
  import org.eclipse.persistence.internal.jpa.config.queries.NamedStoredFunctionQueryImpl;
  import org.eclipse.persistence.internal.jpa.config.queries.NamedStoredProcedureQueryImpl;
  import org.eclipse.persistence.internal.jpa.config.queries.QueryRedirectorsImpl;
  import org.eclipse.persistence.internal.jpa.config.queries.SqlResultSetMappingImpl;
  import org.eclipse.persistence.internal.jpa.config.sequencing.SequenceGeneratorImpl;
  import org.eclipse.persistence.internal.jpa.config.sequencing.TableGeneratorImpl;
  import org.eclipse.persistence.internal.jpa.config.sequencing.UuidGeneratorImpl;
  import org.eclipse.persistence.internal.jpa.metadata.accessors.classes.MappedSuperclassAccessor;
  import org.eclipse.persistence.internal.jpa.metadata.cache.CacheIndexMetadata;
  import org.eclipse.persistence.internal.jpa.metadata.listeners.EntityListenerMetadata;
  import org.eclipse.persistence.internal.jpa.metadata.queries.FetchGroupMetadata;
  import org.eclipse.persistence.internal.jpa.metadata.queries.NamedNativeQueryMetadata;
  import org.eclipse.persistence.internal.jpa.metadata.queries.NamedPLSQLStoredFunctionQueryMetadata;
  import org.eclipse.persistence.internal.jpa.metadata.queries.NamedPLSQLStoredProcedureQueryMetadata;
  import org.eclipse.persistence.internal.jpa.metadata.queries.NamedQueryMetadata;
  import org.eclipse.persistence.internal.jpa.metadata.queries.NamedStoredFunctionQueryMetadata;
  import org.eclipse.persistence.internal.jpa.metadata.queries.NamedStoredProcedureQueryMetadata;
  import org.eclipse.persistence.internal.jpa.metadata.queries.SQLResultSetMappingMetadata;
  import org.eclipse.persistence.jpa.config.AdditionalCriteria;
  import org.eclipse.persistence.jpa.config.Cache;
  import org.eclipse.persistence.jpa.config.CacheIndex;
  import org.eclipse.persistence.jpa.config.CacheInterceptor;
  import org.eclipse.persistence.jpa.config.EntityListener;
  import org.eclipse.persistence.jpa.config.FetchGroup;
  import org.eclipse.persistence.jpa.config.Multitenant;
  import org.eclipse.persistence.jpa.config.NamedNativeQuery;
  import org.eclipse.persistence.jpa.config.NamedPlsqlStoredFunctionQuery;
  import org.eclipse.persistence.jpa.config.NamedPlsqlStoredProcedureQuery;
  import org.eclipse.persistence.jpa.config.NamedQuery;
  import org.eclipse.persistence.jpa.config.NamedStoredFunctionQuery;
  import org.eclipse.persistence.jpa.config.NamedStoredProcedureQuery;
  import org.eclipse.persistence.jpa.config.OptimisticLocking;
  import org.eclipse.persistence.jpa.config.PrimaryKey;
  import org.eclipse.persistence.jpa.config.QueryRedirectors;
  import org.eclipse.persistence.jpa.config.SequenceGenerator;
  import org.eclipse.persistence.jpa.config.SqlResultSetMapping;
  import org.eclipse.persistence.jpa.config.TableGenerator;
  import org.eclipse.persistence.jpa.config.UuidGenerator;
  
  /**
   * JPA scripting API implementation.
   *
   * @author Guy Pelletier
   * @since EclipseLink 2.5.1
   */
  @SuppressWarnings("unchecked")
  public abstract class AbstractMappedClassImpl<T extends MappedSuperclassAccessor, R> extends AbstractClassImpl<T, R> {
  
      public AbstractMappedClassImpl(T t) {
          super(t);
  
          getMetadata().setCacheIndexes(new ArrayList<CacheIndexMetadata>());
          getMetadata().setEntityListeners(new ArrayList<EntityListenerMetadata>());
          getMetadata().setFetchGroups(new ArrayList<FetchGroupMetadata>());
          getMetadata().setNamedNativeQueries(new ArrayList<NamedNativeQueryMetadata>());
          getMetadata().setNamedQueries(new ArrayList<NamedQueryMetadata>());
          getMetadata().setNamedStoredFunctionQueries(new ArrayList<NamedStoredFunctionQueryMetadata>());
          getMetadata().setNamedStoredProcedureQueries(new ArrayList<NamedStoredProcedureQueryMetadata>());
          getMetadata().setNamedPLSQLStoredFunctionQueries(new ArrayList<NamedPLSQLStoredFunctionQueryMetadata>());
          getMetadata().setNamedPLSQLStoredProcedureQueries(new ArrayList<NamedPLSQLStoredProcedureQueryMetadata>());
          getMetadata().setSqlResultSetMappings(new ArrayList<SQLResultSetMappingMetadata>());
      }
  
      public CacheIndex addCacheIndex() {
          CacheIndexImpl cacheIndex = new CacheIndexImpl();
          getMetadata().getCacheIndexes().add(cacheIndex.getMetadata());
          return cacheIndex;
      }
  
      public EntityListener addEntityListener() {
          EntityListenerImpl listener = new EntityListenerImpl();
          getMetadata().getEntityListeners().add(listener.getMetadata());
          return listener;
      }
  
      public FetchGroup addFetchGroup() {
          FetchGroupImpl fetchGroup = new FetchGroupImpl();
          getMetadata().getFetchGroups().add(fetchGroup.getMetadata());
          return fetchGroup;
      }
  
      public NamedNativeQuery addNamedNativeQuery() {
          NamedNativeQueryImpl query = new NamedNativeQueryImpl();
          getMetadata().getNamedNativeQueries().add(query.getMetadata());
          return query;
      }
  
      public NamedPlsqlStoredFunctionQuery addNamedPLSQLStoredFunctionQuery() {
          NamedPlsqlStoredFunctionQueryImpl query = new NamedPlsqlStoredFunctionQueryImpl();
          getMetadata().getNamedPLSQLStoredFunctionQueries().add(query.getMetadata());
          return query;
      }
  
      public NamedPlsqlStoredProcedureQuery addNamedPLSQLStoredProcedureQuery() {
          NamedPlsqlStoredProcedureQueryImpl query = new NamedPlsqlStoredProcedureQueryImpl();
          getMetadata().getNamedPLSQLStoredProcedureQueries().add(query.getMetadata());
          return query;
      }
  
      public NamedQuery addNamedQuery() {
          NamedQueryImpl namedQuery = new NamedQueryImpl();
          getMetadata().getNamedQueries().add(namedQuery.getMetadata());
          return namedQuery;
      }
  
      public NamedStoredFunctionQuery addNamedStoredFunctionQuery() {
          NamedStoredFunctionQueryImpl query = new NamedStoredFunctionQueryImpl();
          getMetadata().getNamedStoredFunctionQueries().add(query.getMetadata());
          return query;
      }
  
      public NamedStoredProcedureQuery addNamedStoredProcedureQuery() {
          NamedStoredProcedureQueryImpl query = new NamedStoredProcedureQueryImpl();
          getMetadata().getNamedStoredProcedureQueries().add(query.getMetadata());
          return query;
      }
  
      public SqlResultSetMapping addSqlResultSetMapping() {
          SqlResultSetMappingImpl sqlResultSetMapping = new SqlResultSetMappingImpl();
          getMetadata().getSqlResultSetMappings().add(sqlResultSetMapping.getMetadata());
          return sqlResultSetMapping;
      }
  
      public AdditionalCriteria setAdditionalCriteria() {
          AdditionalCriteriaImpl additionalCriteria = new AdditionalCriteriaImpl();
          getMetadata().setAdditionalCriteria(additionalCriteria.getMetadata());
          return additionalCriteria;
      }
  
      public Cache setCache() {
          CacheImpl cache = new CacheImpl();
          getMetadata().setCache(cache.getMetadata());
          return cache;
      }
  
      public R setCacheable(Boolean cacheable) {
          getMetadata().setCacheable(cacheable);
          return (R) this;
      }
  
      public CacheInterceptor setCacheInterceptor() {
          CacheInterceptorImpl cacheInterceptor = new CacheInterceptorImpl();
          getMetadata().setCacheInterceptor(cacheInterceptor.getMetadata());
          return cacheInterceptor;
      }
  
      public R setExcludeDefaultListeners(Boolean excludeDefaultListeners) {
          getMetadata().setExcludeDefaultListeners(excludeDefaultListeners);
          return (R) this;
      }
  
      public R setExcludeSuperclassListeners(Boolean excludeSuperclassListeners) {
          getMetadata().setExcludeSuperclassListeners(excludeSuperclassListeners);
          return (R) this;
      }
  
      public R setExistenceChecking(String existenceChecking) {
          getMetadata().setExistenceChecking(existenceChecking);
          return (R) this;
      }
  
      public R setIdClass(String idClass) {
          getMetadata().setIdClassName(idClass);
          return (R) this;
      }
  
      public Multitenant setMultitenant() {
          MultitenantImpl multitenant = new MultitenantImpl();
          getMetadata().setMultitenant(multitenant.getMetadata());
          return multitenant;
      }
  
      public OptimisticLocking setOptimisticLocking() {
          OptimisticLockingImpl optimisticLocking = new OptimisticLockingImpl();
          getMetadata().setOptimisticLocking(optimisticLocking.getMetadata());
          return optimisticLocking;
      }
  
      public R setPostLoad(String methodName) {
          getMetadata().setPostLoad(methodName);
          return (R) this;
      }
  
      public R setPostPersist(String methodName) {
          getMetadata().setPostPersist(methodName);
          return (R) this;
      }
  
      public R setPostRemove(String methodName) {
          getMetadata().setPostRemove(methodName);
          return (R) this;
      }
  
      public R setPostUpdate(String methodName) {
          getMetadata().setPostUpdate(methodName);
          return (R) this;
      }
  
      public R setPrePersist(String methodName) {
          getMetadata().setPrePersist(methodName);
          return (R) this;
      }
  
      public R setPreRemove(String methodName) {
          getMetadata().setPreRemove(methodName);
          return (R) this;
      }
  
      public R setPreUpdate(String methodName) {
          getMetadata().setPreUpdate(methodName);
          return (R) this;
      }
  
      public PrimaryKey setPrimaryKey() {
          PrimaryKeyImpl primaryKey = new PrimaryKeyImpl();
          getMetadata().setPrimaryKey(primaryKey.getMetadata());
          return primaryKey;
      }
  
      public QueryRedirectors setQueryRedirectors() {
          QueryRedirectorsImpl queryRedirectors = new QueryRedirectorsImpl();
          getMetadata().setQueryRedirectors(queryRedirectors.getMetadata());
          return queryRedirectors;
      }
  
      public R setReadOnly(Boolean readOnly) {
          getMetadata().setReadOnly(readOnly);
          return (R) this;
      }
  
      public SequenceGenerator setSequenceGenerator() {
          SequenceGeneratorImpl sequenceGenerator = new SequenceGeneratorImpl();
          getMetadata().setSequenceGenerator(sequenceGenerator.getMetadata());
          return sequenceGenerator;
      }
  
      public TableGenerator setTableGenerator() {
          TableGeneratorImpl tableGenerator = new TableGeneratorImpl();
          getMetadata().setTableGenerator(tableGenerator.getMetadata());
          return tableGenerator;
      }
  
      public UuidGenerator setUuidGenerator() {
  