summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimon Rettberg2016-07-26 10:33:23 +0200
committerSimon Rettberg2016-07-26 10:33:23 +0200
commitc1b671d4837e00427f10aa7bc86063ebf05fb7a2 (patch)
tree81a0bf786b7d96294b8688e361690cdd3a5f1f16
parent[client] Add rudimentary menu entry to extend image expire date (diff)
downloadtutor-module-c1b671d4837e00427f10aa7bc86063ebf05fb7a2.tar.gz
tutor-module-c1b671d4837e00427f10aa7bc86063ebf05fb7a2.tar.xz
tutor-module-c1b671d4837e00427f10aa7bc86063ebf05fb7a2.zip
[server] Implement loading of SatelliteConfig from DB
-rw-r--r--dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/RuntimeConfig.java71
-rw-r--r--dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbConfiguration.java20
2 files changed, 69 insertions, 22 deletions
diff --git a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/RuntimeConfig.java b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/RuntimeConfig.java
index 3a0aaf79..987a3f90 100644
--- a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/RuntimeConfig.java
+++ b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/RuntimeConfig.java
@@ -1,47 +1,74 @@
package org.openslx.bwlp.sat;
+import java.sql.SQLException;
+
import org.openslx.bwlp.sat.database.Paginator;
+import org.openslx.bwlp.sat.database.mappers.DbConfiguration;
import org.openslx.bwlp.sat.util.Constants;
import org.openslx.bwlp.thrift.iface.ImagePermissions;
import org.openslx.bwlp.thrift.iface.LecturePermissions;
import org.openslx.bwlp.thrift.iface.SatelliteConfig;
+import org.openslx.util.GenericDataCache;
public class RuntimeConfig {
- private static final SatelliteConfig satConfig;
-
- static {
- // TODO: Periodically read from DB
- satConfig = new SatelliteConfig();
- satConfig.setDefaultImagePermissions(new ImagePermissions(true, true, false, false));
- satConfig.setDefaultLecturePermissions(new LecturePermissions(false, false));
- satConfig.setMaxImageValidityDays(220);
- satConfig.setMaxLectureValidityDays(220);
- satConfig.setPageSize(Paginator.PER_PAGE);
- satConfig.setMaxConnectionsPerTransfer(Constants.MAX_CONNECTIONS_PER_TRANSFER);
- satConfig.setMaxTransfers(Constants.MAX_UPLOADS_PER_USER);
- satConfig.setMaxLocationsPerLecture(4);
- }
+ private static GenericDataCache<SatelliteConfig> cache = new GenericDataCache<SatelliteConfig>(60000) {
+
+ @Override
+ protected SatelliteConfig update() throws Exception {
+ SatelliteConfig satConfig;
+ try {
+ satConfig = DbConfiguration.getSatelliteConfig();
+ } catch (SQLException e) {
+ satConfig = null;
+ }
+ if (satConfig == null) {
+ satConfig = new SatelliteConfig();
+ }
+ if (satConfig.defaultImagePermissions == null) {
+ satConfig.setDefaultImagePermissions(new ImagePermissions(true, true, false, false));
+ }
+ if (satConfig.defaultLecturePermissions == null) {
+ satConfig.setDefaultLecturePermissions(new LecturePermissions(false, false));
+ }
+ if (satConfig.maxImageValidityDays == 0) {
+ satConfig.setMaxImageValidityDays(220);
+ } else if (satConfig.maxImageValidityDays < 7) {
+ satConfig.maxImageValidityDays = 7;
+ }
+ if (satConfig.maxLectureValidityDays == 0) {
+ satConfig.setMaxLectureValidityDays(220);
+ } else if (satConfig.maxLectureValidityDays < 7) {
+ satConfig.setMaxLectureValidityDays(7);
+ }
+ satConfig.setPageSize(Paginator.PER_PAGE);
+ satConfig.setMaxConnectionsPerTransfer(Constants.MAX_CONNECTIONS_PER_TRANSFER);
+ satConfig.setMaxTransfers(Constants.MAX_UPLOADS_PER_USER);
+ satConfig.setMaxLocationsPerLecture(4);
+ return satConfig;
+ }
+ };
public static SatelliteConfig get() {
- return satConfig.deepCopy();
+ return cache.get().deepCopy();
}
public static long getMaxImageValiditySeconds() {
- return satConfig.getMaxImageValidityDays() * 86400l;
+ return cache.get().getMaxImageValidityDays() * 86400l;
}
public static long getMaxLectureValiditySeconds() {
- return satConfig.getMaxLectureValidityDays() * 86400l;
+ return cache.get().getMaxLectureValidityDays() * 86400l;
}
-
+
public static int getMaxLocationsPerLecture() {
- return satConfig.getMaxLocationsPerLecture();
+ return cache.get().getMaxLocationsPerLecture();
}
-
+
/**
- * How long a version that is not the latest version of an image will be kept.
- *
+ * How long a version that is not the latest version of an image will be
+ * kept.
+ *
* @return maximum lifetime in seconds
*/
public static long getOldVersionExpireSeconds() {
diff --git a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbConfiguration.java b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbConfiguration.java
index bce4d214..553034ee 100644
--- a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbConfiguration.java
+++ b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbConfiguration.java
@@ -20,6 +20,7 @@ import org.openslx.bwlp.sat.database.Database;
import org.openslx.bwlp.sat.database.MysqlConnection;
import org.openslx.bwlp.sat.database.MysqlStatement;
import org.openslx.bwlp.sat.mail.MailQueue.MailConfig;
+import org.openslx.bwlp.thrift.iface.SatelliteConfig;
import org.openslx.util.Json;
public class DbConfiguration {
@@ -30,6 +31,12 @@ public class DbConfiguration {
private static final String KEY_MAILCONFIG = "mailconfig";
+ private static final String KEY_LIMITS = "runtimelimits";
+
+ static {
+ Json.registerThriftClass(SatelliteConfig.class);
+ }
+
public static KeyStore loadKeyStore(String password) throws KeyStoreException, SQLException,
NoSuchAlgorithmException, CertificateException, IOException {
KeyStore keystore = KeyStore.getInstance("JKS");
@@ -98,4 +105,17 @@ public class DbConfiguration {
return Json.deserialize(new String(conf, StandardCharsets.UTF_8), MailConfig.class);
}
+ /**
+ * Return satellite runtime config.
+ *
+ * @return
+ * @throws SQLException
+ */
+ public static SatelliteConfig getSatelliteConfig() throws SQLException {
+ byte[] conf = retrieve(KEY_LIMITS);
+ if (conf == null)
+ return null;
+ return Json.deserializeThrift(new String(conf, StandardCharsets.UTF_8), SatelliteConfig.class);
+ }
+
}