View Javadoc
1   package com.atlassian.activeobjects.internal;
2   
3   import com.atlassian.activeobjects.config.ActiveObjectsConfiguration;
4   import com.atlassian.activeobjects.spi.DatabaseType;
5   import net.java.ao.EntityManager;
6   import net.java.ao.EntityManagerConfiguration;
7   import net.java.ao.SchemaConfiguration;
8   import net.java.ao.schema.NameConverters;
9   import net.java.ao.schema.info.CachingEntityInfoResolverFactory;
10  import net.java.ao.schema.info.EntityInfoResolverFactory;
11  
12  import javax.sql.DataSource;
13  
14  import static com.google.common.base.Preconditions.checkNotNull;
15  
16  public final class EntityManagerFactoryImpl implements EntityManagerFactory {
17      private final DatabaseProviderFactory databaseProviderFactory;
18  
19      public EntityManagerFactoryImpl(DatabaseProviderFactory databaseProviderFactory) {
20          this.databaseProviderFactory = checkNotNull(databaseProviderFactory);
21      }
22  
23      public EntityManager getEntityManager(DataSource dataSource, DatabaseType databaseType, String schema, ActiveObjectsConfiguration configuration) {
24          final DataSourceEntityManagerConfiguration entityManagerConfiguration =
25                  new DataSourceEntityManagerConfiguration(
26                          configuration.getNameConverters(),
27                          configuration.getSchemaConfiguration(),
28                          new CachingEntityInfoResolverFactory());
29  
30          return new EntityManager(databaseProviderFactory.getDatabaseProvider(dataSource, databaseType, schema), entityManagerConfiguration);
31      }
32  
33      private static class DataSourceEntityManagerConfiguration implements EntityManagerConfiguration {
34          private final NameConverters nameConverters;
35          private final SchemaConfiguration schemaConfiguration;
36          private final EntityInfoResolverFactory entityInfoResolverFactory;
37  
38          DataSourceEntityManagerConfiguration(NameConverters nameConverters, SchemaConfiguration schemaConfiguration, EntityInfoResolverFactory entityInfoResolverFactory) {
39              this.nameConverters = nameConverters;
40              this.schemaConfiguration = schemaConfiguration;
41              this.entityInfoResolverFactory = entityInfoResolverFactory;
42          }
43  
44          @Override
45          public boolean useWeakCache() {
46              return true;
47          }
48  
49          @Override
50          public NameConverters getNameConverters() {
51              return nameConverters;
52          }
53  
54          @Override
55          public SchemaConfiguration getSchemaConfiguration() {
56              return schemaConfiguration;
57          }
58  
59          @Override
60          public EntityInfoResolverFactory getEntityInfoResolverFactory() {
61              return entityInfoResolverFactory;
62          }
63      }
64  }