package com.constellio.data.conf;
import static com.constellio.data.conf.SolrServerType.HTTP;
import java.io.File;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
import org.apache.solr.common.SolrInputDocument;
import org.joda.time.Duration;
import com.constellio.data.dao.services.transactionLog.SecondTransactionLogReplayFilter;
import com.constellio.data.utils.Factory;
public class PropertiesDataLayerConfiguration extends PropertiesConfiguration implements DataLayerConfiguration {
public static final String ZKHOST = "dao.records.cloud.zkHost";
public static final String RECORD_TYPE = "dao.records.type";
private File defaultTempFolder;
private File defaultFileSystemBaseFolder;
private boolean backgroundThreadsEnable = true;
public PropertiesDataLayerConfiguration(Map<String, String> configs, File defaultTempFolder,
File defaultFileSystemBaseFolder, File constellioProperties) {
super(configs, constellioProperties);
this.defaultTempFolder = defaultTempFolder;
this.defaultFileSystemBaseFolder = defaultFileSystemBaseFolder;
}
public static class InMemoryDataLayerConfiguration extends PropertiesDataLayerConfiguration {
private SecondTransactionLogReplayFilter filter;
private IdGeneratorType idGeneratorType;
private String uniqueKeyToBeCreated;
public InMemoryDataLayerConfiguration(PropertiesDataLayerConfiguration nested) {
super(new HashMap<String, String>(nested.configs), nested.defaultTempFolder, nested.defaultFileSystemBaseFolder,
new File(""));
}
@Override
public void writeProperty(String key, String value) {
configs.put(key, value);
}
public void setSettingsFileSystemBaseFolder(File value) {
setFile("dao.settings.filesystem.baseFolder", value);
}
public void setTempFolder(File value) {
setFile("tempFolder", value);
}
public void setContentDaoFileSystemFolder(File value) {
setFile("dao.contents.filesystem.folder", value);
}
public void setInRollbackTestMode(boolean value) {
setBoolean("secondTransactionLog.checkRollback", value);
}
public void setSecondTransactionLogBaseFolder(File value) {
setFile("secondTransactionLog.folder", value);
}
public void setSecondTransactionLogEnabled(boolean value) {
setBoolean("secondTransactionLog.enabled", value);
}
public void setSecondTransactionLogReplayFilter(SecondTransactionLogReplayFilter filter) {
this.filter = filter;
}
public SecondTransactionLogReplayFilter getSecondTransactionLogReplayFilter() {
return filter == null ? super.getSecondTransactionLogReplayFilter() : filter;
}
public void setSecondTransactionLogBackupCount(int value) {
setInt("secondTransactionLog.backupCount", value);
}
public void setSecondTransactionLogMergeFrequency(Duration duration) {
setDuration("secondTransactionLog.mergeFrequency", duration);
}
public void setSecondaryIdGeneratorType(IdGeneratorType idGeneratorType) {
this.idGeneratorType = idGeneratorType;
}
@Override
public IdGeneratorType getSecondaryIdGeneratorType() {
return idGeneratorType == null ? super.getSecondaryIdGeneratorType() : idGeneratorType;
}
public void setUniqueKeyToBeCreated(String uniqueKeyToBeCreated) {
this.uniqueKeyToBeCreated = uniqueKeyToBeCreated;
}
@Override
public String createRandomUniqueKey() {
return this.uniqueKeyToBeCreated == null ? super.createRandomUniqueKey() : uniqueKeyToBeCreated;
}
}
public SolrServerType getRecordsDaoSolrServerType() {
return (SolrServerType) getRequiredEnum(RECORD_TYPE, SolrServerType.class);
}
public String getRecordsDaoHttpSolrServerUrl() {
return getRequiredString("dao.records.http.url");
}
public String getRecordsDaoCloudSolrServerZKHost() {
return getRequiredString(ZKHOST);
}
public boolean isRecordsDaoHttpSolrServerFaultInjectionEnabled() {
return getBoolean("dao.records.http.faultInjection", false);
}
public ContentDaoType getContentDaoType() {
return (ContentDaoType) getRequiredEnum("dao.contents.type", ContentDaoType.class);
}
public String getContentDaoHadoopUrl() {
return getRequiredString("dao.contents.server.address");
}
public String getContentDaoHadoopUser() {
return getRequiredString("dao.contents.server.user");
}
public File getContentDaoFileSystemFolder() {
return getRequiredFile("dao.contents.filesystem.folder");
}
@Override
public DigitSeparatorMode getContentDaoFileSystemDigitsSeparatorMode() {
return (DigitSeparatorMode) getEnum("dao.contents.filesystem.separatormode", DigitSeparatorMode.TWO_DIGITS);
}
@Override
public void setContentDaoFileSystemDigitsSeparatorMode(DigitSeparatorMode mode) {
setString("dao.contents.filesystem.separatormode", mode == null ? null : mode.name());
}
public String getSettingsZookeeperAddress() {
return getRequiredString("dao.settings.server.address");
}
public File getTempFolder() {
return getFile("tempFolder", defaultTempFolder);
}
public IdGeneratorType getIdGeneratorType() {
return (IdGeneratorType) getEnum("idGenerator.type", IdGeneratorType.SEQUENTIAL);
}
@Override
public IdGeneratorType getSecondaryIdGeneratorType() {
return (IdGeneratorType) getEnum("secondaryIdGenerator.type", IdGeneratorType.UUID_V1);
}
@Override
public boolean isSecondTransactionLogEnabled() {
return getBoolean("secondTransactionLog.enabled", false);
}
@Override
public File getSecondTransactionLogBaseFolder() {
return getRequiredFile("secondTransactionLog.folder");
}
public ConfigManagerType getSettingsConfigType() {
return (ConfigManagerType) getRequiredEnum("dao.settings.type", ConfigManagerType.class);
}
public File getSettingsFileSystemBaseFolder() {
return getFile("dao.settings.filesystem.baseFolder", defaultFileSystemBaseFolder);
}
@Override
public void validate() {
}
@Override
public int getBackgroudThreadsPoolSize() {
return 2;
}
@Override
public Duration getSecondTransactionLogMergeFrequency() {
return getDuration("secondTransactionLog.mergeFrequency", Duration.standardMinutes(15));
}
@Override
public int getSecondTransactionLogBackupCount() {
return getInt("secondTransactionLog.backupCount", 2);
}
@Override
public boolean isBackgroundThreadsEnabled() {
return backgroundThreadsEnable;
}
@Override
public void setBackgroundThreadsEnabled(boolean backgroundThreadsEnabled) {
this.backgroundThreadsEnable = backgroundThreadsEnabled;
}
@Override
public SecondTransactionLogReplayFilter getSecondTransactionLogReplayFilter() {
return new SecondTransactionLogReplayFilter() {
@Override
public boolean isReplayingAdd(String id, String schema, SolrInputDocument solrInputDocument) {
return true;
}
@Override
public boolean isReplayingUpdate(String id, SolrInputDocument solrInputDocument) {
return true;
}
};
}
@Override
public boolean isWriteZZRecords() {
return getBoolean("writeZZRecords", false);
}
@Override
public HashingEncoding getHashingEncoding() {
return (HashingEncoding) getEnum("hashing.encoding", HashingEncoding.BASE64);
}
@Override
public void setWriteZZRecords(boolean enable) {
setBoolean("writeZZRecords", enable);
}
@Override
public boolean isLocalHttpSolrServer() {
return getRecordsDaoSolrServerType().equals(HTTP) &&
(getRecordsDaoHttpSolrServerUrl().contains("localhost") || getRecordsDaoHttpSolrServerUrl()
.contains("127.0.0.1"));
}
@Override
public boolean isInRollbackTestMode() {
return getBoolean("secondTransactionLog.checkRollback", false);
}
@Override
public String createRandomUniqueKey() {
Random random = new Random();
return random.nextInt(1000) + "-" + random.nextInt(1000) + "-" + random.nextInt(1000);
}
@Override
public void setHashingEncoding(HashingEncoding encoding) {
setString("hashing.encoding", encoding == null ? null : encoding.name());
}
}