package com.constellio.model.conf; import java.io.File; import java.util.HashMap; import java.util.Map; import org.joda.time.Duration; import com.constellio.data.conf.DataLayerConfiguration; import com.constellio.data.conf.PropertiesConfiguration; import com.constellio.data.conf.PropertiesDataLayerConfiguration; import com.constellio.data.utils.Factory; import com.constellio.model.services.encrypt.EncryptionServices; public class PropertiesModelLayerConfiguration extends PropertiesConfiguration implements ModelLayerConfiguration { private final DataLayerConfiguration dataLayerConfiguration; private final FoldersLocator foldersLocator; private boolean batchProcessesEnabled = true; public PropertiesModelLayerConfiguration(Map<String, String> configs, DataLayerConfiguration dataLayerConfiguration, FoldersLocator foldersLocator, File constellioProperties) { super(configs, constellioProperties); this.dataLayerConfiguration = dataLayerConfiguration; this.foldersLocator = foldersLocator; } @Override public void validate() { } public static class InMemoryModelLayerConfiguration extends PropertiesModelLayerConfiguration { private Factory<EncryptionServices> encryptionServicesFactory; public InMemoryModelLayerConfiguration(PropertiesModelLayerConfiguration nested) { super(new HashMap<String, String>(nested.configs), nested.dataLayerConfiguration, nested.foldersLocator, new File("")); } @Override public void writeProperty(String key, String value) { configs.put(key, value); } public void setConstellioEncryptionFile(File file) { setFile("encryption.file", file); } public void setImportationFolder(File importationFolder) { setFile("importationFolder", importationFolder); } public void setContentImportThreadFolder(File file) { setFile("content.import.thread.folder", file); } public void setDeleteUnusedContentEnabled(boolean value) { setBoolean("content.delete.unused.enabled", value); } public void setTokenDuration(Duration duration) { setDuration("token.duration", duration); } public void setTokenRemovalThreadDelayBetweenChecks(Duration duration) { setDuration("tokenRemovalThread.delayBetweenChecks", duration); } public void setEncryptionServicesFactory(Factory<EncryptionServices> encryptionServicesFactory) { this.encryptionServicesFactory = encryptionServicesFactory; } @Override public Factory<EncryptionServices> getEncryptionServicesFactory() { return encryptionServicesFactory == null ? super.getEncryptionServicesFactory() : encryptionServicesFactory; } public void setUnreferencedContentsThreadDelayBetweenChecks(Duration duration) { setDuration("unreferencedContentsThread.delayBetweenChecks", duration); } public void setDelayBeforeDeletingUnreferencedContents(Duration duration) { setDuration("unreferencedContentsThread.delayBeforeDeleting", duration); } } @Override public boolean isDocumentsParsedInForkProcess() { return getBoolean("parsing.useForkProcess", false); } @Override public File getTempFolder() { return dataLayerConfiguration.getTempFolder(); } @Override public String getComputerName() { return "mainserver"; } @Override public int getBatchProcessesPartSize() { //return getRequiredInt("batchProcess.partSize"); return 500; } @Override public int getNumberOfRecordsPerTask() { return 100; } @Override public int getForkParsersPoolSize() { return 20; } @Override public File getImportationFolder() { return getFile("importationFolder", foldersLocator.getDefaultImportationFolder()); } @Override public Duration getDelayBeforeDeletingUnreferencedContents() { return getDuration("unreferencedContentsThread.delayBeforeDeleting", Duration.standardMinutes(10)); } @Override public Duration getUnreferencedContentsThreadDelayBetweenChecks() { return getDuration("unreferencedContentsThread.delayBetweenChecks", Duration.standardSeconds(30)); } public Duration getTokenRemovalThreadDelayBetweenChecks() { return getDuration("tokenRemovalThread.delayBetweenChecks", Duration.standardHours(1)); } @Override public Duration getTokenDuration() { return getDuration("token.duration", Duration.standardHours(10)); } @Override public int getDelayBeforeSendingNotificationEmailsInMinutes() { return 42; } @Override public String getMainDataLanguage() { return getString("mainDataLanguage", "fr"); } @Override public boolean isPreviousPrivateKeyLost() { return getBoolean("previousPrivateKeyLost", false); } @Override public boolean isDeleteUnusedContentEnabled() { return getBoolean("content.delete.unused.enabled", true); } @Override public File getContentImportThreadFolder() { return getFile("content.import.thread.folder", null); } @Override public void setMainDataLanguage(String language) { setString("mainDataLanguage", language); } @Override public File getConstellioEncryptionFile() { return getFile("encryption.file", foldersLocator.getConstellioEncryptionFile()); } @Override public DataLayerConfiguration getDataLayerConfiguration() { return dataLayerConfiguration; } @Override public void setBatchProcessesEnabled(boolean enabled) { this.batchProcessesEnabled = enabled; } @Override public boolean isBatchProcessesThreadEnabled() { return batchProcessesEnabled; } @Override public Factory<EncryptionServices> getEncryptionServicesFactory() { return new Factory<EncryptionServices>() { @Override public EncryptionServices get() { return new EncryptionServices(isPreviousPrivateKeyLost()); } }; } }