View Javadoc
1   package com.atlassian.activeobjects.config.internal;
2   
3   import com.atlassian.activeobjects.ao.PrefixedSchemaConfiguration;
4   import com.atlassian.activeobjects.config.ActiveObjectsConfiguration;
5   import com.atlassian.activeobjects.config.ActiveObjectsConfigurationFactory;
6   import com.atlassian.activeobjects.config.PluginKey;
7   import com.atlassian.activeobjects.external.ActiveObjectsUpgradeTask;
8   import com.atlassian.activeobjects.internal.DataSourceTypeResolver;
9   import com.atlassian.activeobjects.internal.Prefix;
10  import com.atlassian.activeobjects.internal.SimplePrefix;
11  import com.atlassian.activeobjects.internal.config.NameConvertersFactory;
12  import com.atlassian.activeobjects.util.Digester;
13  import net.java.ao.RawEntity;
14  import net.java.ao.schema.NameConverters;
15  import org.apache.commons.lang3.StringUtils;
16  import org.osgi.framework.Bundle;
17  
18  import java.util.List;
19  import java.util.Set;
20  
21  import static com.atlassian.activeobjects.ao.ConverterUtils.toUpperCase;
22  import static com.google.common.base.Preconditions.checkNotNull;
23  
24  public final class DefaultActiveObjectsConfigurationFactory implements ActiveObjectsConfigurationFactory {
25      private final Digester digester;
26      private final NameConvertersFactory nameConvertersFactory;
27      private final DataSourceTypeResolver dataSourceTypeResolver;
28  
29      public DefaultActiveObjectsConfigurationFactory(Digester digester, NameConvertersFactory nameConvertersFactory, DataSourceTypeResolver dataSourceTypeResolver) {
30          this.digester = checkNotNull(digester);
31          this.nameConvertersFactory = checkNotNull(nameConvertersFactory);
32          this.dataSourceTypeResolver = checkNotNull(dataSourceTypeResolver);
33      }
34  
35      @Override
36      public ActiveObjectsConfiguration getConfiguration(Bundle bundle, String namespace, Set<Class<? extends RawEntity<?>>> entities, List<ActiveObjectsUpgradeTask> upgradeTasks) {
37          final PluginKey pluginKey = PluginKey.fromBundle(bundle);
38          final Prefix tableNamePrefix = getTableNamePrefix(bundle, namespace);
39          final NameConverters nameConverters = nameConvertersFactory.getNameConverters(tableNamePrefix);
40  
41          final DefaultActiveObjectsConfiguration defaultActiveObjectsConfiguration = new DefaultActiveObjectsConfiguration(pluginKey, dataSourceTypeResolver);
42          defaultActiveObjectsConfiguration.setTableNamePrefix(tableNamePrefix);
43          defaultActiveObjectsConfiguration.setNameConverters(nameConverters);
44          defaultActiveObjectsConfiguration.setSchemaConfiguration(new PrefixedSchemaConfiguration(tableNamePrefix));
45  
46          defaultActiveObjectsConfiguration.setEntities(entities);
47          defaultActiveObjectsConfiguration.setUpgradeTasks(upgradeTasks);
48  
49          return defaultActiveObjectsConfiguration;
50      }
51  
52      private Prefix getTableNamePrefix(Bundle bundle, String namespace) {
53          return getTableNamePrefix(StringUtils.isNotBlank(namespace) ? namespace : bundle.getSymbolicName());
54      }
55  
56      private Prefix getTableNamePrefix(String namespace) {
57          final String hash = digester.digest(namespace, 6);
58          return new SimplePrefix(toUpperCase(ActiveObjectsConfiguration.AO_TABLE_PREFIX + "_" + hash), "_");
59      }
60  }