1 package com.atlassian.activeobjects.internal;
2
3 import com.atlassian.activeobjects.external.ModelVersion;
4 import com.atlassian.sal.api.pluginsettings.PluginSettings;
5 import com.atlassian.sal.api.pluginsettings.PluginSettingsFactory;
6
7 import java.util.concurrent.locks.Lock;
8 import java.util.concurrent.locks.ReadWriteLock;
9 import java.util.concurrent.locks.ReentrantReadWriteLock;
10
11 import static com.google.common.base.Preconditions.checkNotNull;
12
13
14
15
16
17
18
19 public final class SalModelVersionManager implements ModelVersionManager {
20 private final ReadWriteLock lock = new ReentrantReadWriteLock();
21
22 private final PluginSettingsFactory pluginSettingsFactory;
23 private final ActiveObjectsSettingKeys settingKeys;
24
25 public SalModelVersionManager(PluginSettingsFactory pluginSettingsFactory, ActiveObjectsSettingKeys settingKeys) {
26 this.pluginSettingsFactory = checkNotNull(pluginSettingsFactory);
27 this.settingKeys = checkNotNull(settingKeys);
28 }
29
30 @Override
31 public ModelVersion getCurrent(Prefix tableNamePrefix) {
32 final Lock read = lock.readLock();
33 read.lock();
34 try {
35 return ModelVersion.valueOf((String) getPluginSettings().get(settingKeys.getModelVersionKey(tableNamePrefix)));
36 } finally {
37 read.unlock();
38 }
39 }
40
41 @Override
42 public void update(Prefix tableNamePrefix, ModelVersion version) {
43 final Lock write = lock.writeLock();
44 write.lock();
45 try {
46 getPluginSettings().put(settingKeys.getModelVersionKey(tableNamePrefix), version.toString());
47 } finally {
48 write.unlock();
49 }
50 }
51
52 private PluginSettings getPluginSettings() {
53 return pluginSettingsFactory.createGlobalSettings();
54 }
55 }