Browse Source

Added "storagePolicy" setting, including startup validation.

Possible values are:

FOLLOWED_AND_VIEWED (default)
FOLLOWED
VIEWED
ALL
NONE

Nothing is affected by this setting yet, but this will be added shortly.
qdn
CalDescent 3 years ago
parent
commit
28fb11068e
  1. 7
      src/main/java/org/qortal/controller/arbitrary/ArbitraryDataManager.java
  2. 21
      src/main/java/org/qortal/settings/Settings.java
  3. 15
      src/main/java/org/qortal/utils/EnumUtils.java

7
src/main/java/org/qortal/controller/arbitrary/ArbitraryDataManager.java

@ -42,6 +42,13 @@ public class ArbitraryDataManager extends Thread {
private volatile boolean isStopping = false;
public enum StoragePolicy {
FOLLOWED_AND_VIEWED,
FOLLOWED,
VIEWED,
ALL,
NONE
}
/**
* Map of recent requests for ARBITRARY transaction data file lists.

21
src/main/java/org/qortal/settings/Settings.java

@ -5,10 +5,7 @@ import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.*;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
@ -24,9 +21,11 @@ import org.eclipse.persistence.exceptions.XMLMarshalException;
import org.eclipse.persistence.jaxb.JAXBContextFactory;
import org.eclipse.persistence.jaxb.UnmarshallerProperties;
import org.qortal.block.BlockChain;
import org.qortal.controller.arbitrary.ArbitraryDataManager.*;
import org.qortal.crosschain.Bitcoin.BitcoinNet;
import org.qortal.crosschain.Litecoin.LitecoinNet;
import org.qortal.crosschain.Dogecoin.DogecoinNet;
import org.qortal.utils.EnumUtils;
// All properties to be converted to JSON via JAXB
@XmlAccessorType(XmlAccessType.FIELD)
@ -263,6 +262,9 @@ public class Settings {
/** Data storage path (for temporary data). */
private String tempDataPath = "data/_temp";
/** Storage policy to indicate which data should be hosted */
private String storagePolicy = "FOLLOWED_AND_VIEWED";
/** Whether to validate every layer when building arbitrary data, or just the final layer */
private boolean validateAllDataLayers = false;
@ -417,6 +419,13 @@ public class Settings {
if (this.apiKey != null && this.apiKey.trim().length() < 8)
throwValidationError("apiKey must be at least 8 characters");
try {
StoragePolicy.valueOf(this.storagePolicy);
} catch (IllegalArgumentException ex) {
String possibleValues = EnumUtils.getNames(StoragePolicy.class, ", ");
throwValidationError(String.format("storagePolicy must be one of: %s", possibleValues));
}
}
// Getters / setters
@ -766,6 +775,10 @@ public class Settings {
return this.tempDataPath;
}
public StoragePolicy getStoragePolicy() {
return StoragePolicy.valueOf(this.storagePolicy);
}
public boolean shouldValidateAllDataLayers() {
return this.validateAllDataLayers;
}

15
src/main/java/org/qortal/utils/EnumUtils.java

@ -0,0 +1,15 @@
package org.qortal.utils;
import java.util.Arrays;
public class EnumUtils {
public static String[] getNames(Class<? extends Enum<?>> e) {
return Arrays.stream(e.getEnumConstants()).map(Enum::name).toArray(String[]::new);
}
public static String getNames(Class<? extends Enum<?>> e, String delimiter) {
return String.join(delimiter, EnumUtils.getNames(e));
}
}
Loading…
Cancel
Save