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 }