View Javadoc
1   package com.atlassian.activeobjects.internal;
2   
3   import com.atlassian.sal.api.pluginsettings.PluginSettings;
4   import com.atlassian.sal.api.pluginsettings.PluginSettingsFactory;
5   import org.slf4j.Logger;
6   import org.slf4j.LoggerFactory;
7   
8   import static com.google.common.base.Preconditions.checkNotNull;
9   
10  /**
11   * Sole implementation of {@link com.atlassian.activeobjects.internal.DataSourceTypeResolver},
12   * configuration of data source type is 'simply' stored as a
13   * {@link com.atlassian.sal.api.pluginsettings.PluginSettings plugin setting}.
14   */
15  public final class DataSourceTypeResolverImpl implements DataSourceTypeResolver {
16      private final Logger logger = LoggerFactory.getLogger(this.getClass());
17  
18      private final PluginSettings pluginSettings;
19      private final DataSourceType defaultDataSourceType;
20      private final ActiveObjectsSettingKeys settingKeys;
21  
22      public DataSourceTypeResolverImpl(PluginSettingsFactory pluginSettingsFactory, ActiveObjectsSettingKeys settingKeys, DataSourceType defaultDataSourceType) {
23          checkNotNull(pluginSettingsFactory);
24          this.pluginSettings = checkNotNull(pluginSettingsFactory.createGlobalSettings());
25          this.settingKeys = checkNotNull(settingKeys);
26          this.defaultDataSourceType = checkNotNull(defaultDataSourceType);
27      }
28  
29      public DataSourceType getDataSourceType(Prefix prefix) {
30          final String setting = getSetting(prefix);
31          if (setting != null) {
32              try {
33                  return DataSourceType.valueOf(setting);
34              } catch (IllegalArgumentException e) {
35                  // if an incorrect value is stored, then we fall back on the default, not without a warning in the logs
36                  logger.warn("Active objects data source type setting <" + setting + "> for key <" + getSettingKey(prefix) + "> " +
37                          "could not be resolved to a valid " + DataSourceType.class.getName() + ". Using default value" +
38                          " <" + defaultDataSourceType + ">.");
39                  return defaultDataSourceType;
40              }
41          } else {
42              return defaultDataSourceType;
43          }
44      }
45  
46      private String getSetting(Prefix prefix) {
47          return (String) pluginSettings.get(getSettingKey(prefix));
48      }
49  
50      private String getSettingKey(Prefix prefix) {
51          return settingKeys.getDataSourceTypeKey(prefix);
52      }
53  }