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 }