View Javadoc
1   package com.atlassian.plugin.refimpl;
2   
3   import com.atlassian.plugin.manager.PluginEnabledState;
4   import com.atlassian.plugin.manager.PluginPersistentState;
5   import com.atlassian.plugin.manager.PluginPersistentStateStore;
6   import org.apache.commons.io.IOUtils;
7   import org.slf4j.Logger;
8   import org.slf4j.LoggerFactory;
9   
10  import java.io.File;
11  import java.io.FileInputStream;
12  import java.io.FileOutputStream;
13  import java.io.IOException;
14  import java.util.Map.Entry;
15  import java.util.Properties;
16  import java.util.Set;
17  import java.util.stream.Collectors;
18  
19  import static com.atlassian.plugin.manager.PluginEnabledState.getPluginEnabledStateWithCurrentTime;
20  
21  public class DefaultPluginPersistentStateStore implements PluginPersistentStateStore {
22      private static final Logger log = LoggerFactory.getLogger(DefaultPluginPersistentStateStore.class);
23  
24      private File file;
25  
26      public DefaultPluginPersistentStateStore(final File directory) {
27          try {
28              file = new File(directory.getParentFile(), "plugins.state");
29              if (!file.exists()) {
30                  file.createNewFile();
31              }
32          } catch (final IOException e) {
33              log.error("Error creating plugins.state file. " + e, e);
34          }
35      }
36  
37      public PluginPersistentState load() {
38          PluginPersistentState.Builder builder = PluginPersistentState.Builder.create();
39          try (FileInputStream inputStream = new FileInputStream(file)) {
40              final Properties properties = new Properties();
41              properties.load(inputStream);
42              builder.addPluginEnabledState(properties.entrySet().stream()
43                      .collect(Collectors.toMap(
44                              String::valueOf,
45                              value -> getPluginEnabledStateWithCurrentTime(Boolean.valueOf(String.valueOf(value))))));
46          } catch (final IOException e) {
47              log.error("Error creating/reading plugins.state file. ", e);
48          }
49          return builder.toState();
50      }
51  
52      public void save(final PluginPersistentState state) {
53          final Properties properties = new Properties();
54          final Set<Entry<String, PluginEnabledState>> entrySet = state.getStatesMap().entrySet();
55          for (final Entry<String, PluginEnabledState> entry : entrySet) {
56              properties.put(entry.getKey(), String.valueOf(entry.getValue().isEnabled()));
57          }
58          FileOutputStream outputStream = null;
59          try {
60              outputStream = new FileOutputStream(file);
61              properties.store(outputStream, "Saving plugins state");
62          } catch (final IOException e) {
63              log.error("Error saving to plugins.state file. " + e, e);
64          } finally {
65              IOUtils.closeQuietly(outputStream);
66          }
67      }
68  }