View Javadoc
1   package com.atlassian.refapp.sal.pluginsettings;
2   
3   import com.atlassian.plugin.spring.scanner.annotation.export.ExportAsService;
4   import com.atlassian.refapp.sal.FileBackedSettingsFileFactory;
5   import com.atlassian.refapp.sal.FileBackedSettingsService;
6   import com.atlassian.sal.api.ApplicationProperties;
7   import com.atlassian.sal.api.pluginsettings.PluginSettings;
8   import com.atlassian.sal.api.pluginsettings.PluginSettingsFactory;
9   import org.apache.log4j.Logger;
10  
11  import javax.inject.Inject;
12  import javax.inject.Named;
13  import java.util.List;
14  
15  /**
16   * This implementation can be backed by a file on the file system.  If a file in the current working directory called
17   * "com.atlassian.refapp.sal.pluginsettings.xml" exists (can be overridden with system property sal.com.atlassian.refapp.sal.pluginsettings.store) exists, it loads and
18   * persists all plugin settings to and from this file.  If no file exists, plugin settings are purely in memory.
19   */
20  @ExportAsService
21  @Named("pluginSettingsFactory")
22  public class RefimplPluginSettingsFactory extends FileBackedSettingsService implements PluginSettingsFactory {
23      private static final String CHARLIE_KEYS = "charlie.keys";
24  
25      private static final Logger log = Logger.getLogger(RefimplPluginSettingsFactory.class);
26  
27      @Inject
28      public RefimplPluginSettingsFactory(ApplicationProperties applicationProperties) {
29          super(FileBackedSettingsFileFactory.getFileAndProperties("sal.com.atlassian.refapp.sal.pluginsettings.store", "com.atlassian.refapp.sal.pluginsettings.xml", Boolean.valueOf(System.getProperty("sal.com.atlassian.refapp.sal.pluginsettings.usememorystore", "false")), applicationProperties));
30      }
31  
32      public PluginSettings createSettingsForKey(String key) {
33          if (key != null) {
34              List<String> charlies = (List<String>) new RefimplPluginSettings(new SettingsMap(null)).get(CHARLIE_KEYS);
35              if (charlies == null || !charlies.contains(key)) {
36                  throw new IllegalArgumentException("No Charlie with key " + key + " exists.");
37              }
38          }
39          return new RefimplPluginSettings(new SettingsMap(key));
40      }
41  
42      public PluginSettings createGlobalSettings() {
43          return createSettingsForKey(null);
44      }
45  
46  }