package com.constellio.sdk.tests; import static com.constellio.data.conf.DigitSeparatorMode.THREE_LEVELS_OF_ONE_DIGITS; import static com.constellio.data.conf.HashingEncoding.BASE32; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; import java.io.File; import java.util.ArrayList; import java.util.List; import com.constellio.app.conf.AppLayerConfiguration; import com.constellio.app.conf.PropertiesAppLayerConfiguration; import com.constellio.app.conf.PropertiesAppLayerConfiguration.InMemoryAppLayerConfiguration; import com.constellio.app.services.extensions.plugins.ConstellioPluginManager; import com.constellio.app.services.factories.AppLayerFactory; import com.constellio.app.services.factories.ConstellioFactoriesDecorator; import com.constellio.data.conf.DataLayerConfiguration; import com.constellio.data.conf.PropertiesDataLayerConfiguration; import com.constellio.data.conf.PropertiesDataLayerConfiguration.InMemoryDataLayerConfiguration; import com.constellio.model.conf.FoldersLocator; import com.constellio.model.conf.ModelLayerConfiguration; import com.constellio.model.conf.PropertiesModelLayerConfiguration; import com.constellio.model.conf.PropertiesModelLayerConfiguration.InMemoryModelLayerConfiguration; public class TestConstellioFactoriesDecorator extends ConstellioFactoriesDecorator { boolean backgroundThreadsEnabled; boolean mockPluginManager; String systemLanguage; File setupProperties; File importationFolder; File configManagerFolder; File appTempFolder; File contentFolder; File pluginsFolder, pluginsToMoveOnStartup; List<DataLayerConfigurationAlteration> dataLayerConfigurationAlterations = new ArrayList<>(); List<ModelLayerConfigurationAlteration> modelLayerConfigurationAlterations = new ArrayList<>(); List<AppLayerConfigurationAlteration> appLayerConfigurationAlterations = new ArrayList<>(); final private boolean checkRollback; private File transactionLogWorkFolder; public TestConstellioFactoriesDecorator(boolean backgroundThreadsEnabled, boolean mockPluginManager, boolean checkRollback) { this.backgroundThreadsEnabled = backgroundThreadsEnabled; this.checkRollback = checkRollback; this.mockPluginManager = mockPluginManager; } @Override public DataLayerConfiguration decorateDataLayerConfiguration(DataLayerConfiguration dataLayerConfiguration) { InMemoryDataLayerConfiguration inMemoryDataLayerConfiguration = new InMemoryDataLayerConfiguration( (PropertiesDataLayerConfiguration) dataLayerConfiguration); inMemoryDataLayerConfiguration.setSettingsFileSystemBaseFolder(configManagerFolder); inMemoryDataLayerConfiguration.setTempFolder(appTempFolder); inMemoryDataLayerConfiguration.setContentDaoFileSystemFolder(contentFolder); inMemoryDataLayerConfiguration.setBackgroundThreadsEnabled(backgroundThreadsEnabled); inMemoryDataLayerConfiguration.setInRollbackTestMode(checkRollback); inMemoryDataLayerConfiguration.setSecondTransactionLogBaseFolder(transactionLogWorkFolder); inMemoryDataLayerConfiguration.setContentDaoFileSystemDigitsSeparatorMode(THREE_LEVELS_OF_ONE_DIGITS); inMemoryDataLayerConfiguration.setHashingEncoding(BASE32); if (transactionLogWorkFolder != null) { inMemoryDataLayerConfiguration.setSecondTransactionLogEnabled(true); } for (DataLayerConfigurationAlteration alteration : dataLayerConfigurationAlterations) { alteration.alter(inMemoryDataLayerConfiguration); } return inMemoryDataLayerConfiguration; } @Override public ModelLayerConfiguration decorateModelLayerConfiguration(ModelLayerConfiguration modelLayerConfiguration) { File key = new File(configManagerFolder, "key.txt"); InMemoryModelLayerConfiguration volatileModelLayerConfiguration = new InMemoryModelLayerConfiguration( (PropertiesModelLayerConfiguration) modelLayerConfiguration); volatileModelLayerConfiguration.setConstellioEncryptionFile(key); volatileModelLayerConfiguration.setImportationFolder(importationFolder); if (systemLanguage != null) { volatileModelLayerConfiguration.setMainDataLanguage(systemLanguage); } else { volatileModelLayerConfiguration.setMainDataLanguage("fr"); } for (ModelLayerConfigurationAlteration alteration : modelLayerConfigurationAlterations) { alteration.alter(volatileModelLayerConfiguration); } return volatileModelLayerConfiguration; } @Override public AppLayerConfiguration decorateAppLayerConfiguration(AppLayerConfiguration appLayerConfiguration) { InMemoryAppLayerConfiguration inMemoryAppLayerConfiguration = new InMemoryAppLayerConfiguration( (PropertiesAppLayerConfiguration) appLayerConfiguration); inMemoryAppLayerConfiguration.setSetupProperties(setupProperties); inMemoryAppLayerConfiguration.setPluginsFolder(pluginsFolder); inMemoryAppLayerConfiguration.setPluginsManagementOnStartupFile(pluginsToMoveOnStartup); // // doReturn(setupProperties).when(spiedAppLayerConfiguration).getSetupProperties(); // doReturn(pluginsFolder).when(spiedAppLayerConfiguration).getPluginsFolder(); // doReturn(pluginsToMoveOnStartup).when(spiedAppLayerConfiguration).getPluginsManagementOnStartupFile(); for (AppLayerConfigurationAlteration alteration : appLayerConfigurationAlterations) { alteration.alter(inMemoryAppLayerConfiguration); } return inMemoryAppLayerConfiguration; } @Override public AppLayerFactory decorateAppServicesFactory(AppLayerFactory appLayerFactory) { if (mockPluginManager) { appLayerFactory = spy(appLayerFactory); ConstellioPluginManager pluginManager = mock(ConstellioPluginManager.class, "pluginManager"); doReturn(pluginManager).when(appLayerFactory).getPluginManager(); } return appLayerFactory; } @Override public FoldersLocator decorateFoldersLocator(FoldersLocator foldersLocator) { return new FoldersLocator() { @Override public File getDefaultTempFolder() { return appTempFolder; } }; } public TestConstellioFactoriesDecorator setSetupProperties(File setupProperties) { this.setupProperties = setupProperties; return this; } public TestConstellioFactoriesDecorator setImportationFolder(File importationFolder) { this.importationFolder = importationFolder; return this; } public TestConstellioFactoriesDecorator setConfigManagerFolder(File configManagerFolder) { this.configManagerFolder = configManagerFolder; return this; } public TestConstellioFactoriesDecorator setAppTempFolder(File appTempFolder) { this.appTempFolder = appTempFolder; return this; } public TestConstellioFactoriesDecorator setContentFolder(File contentFolder) { this.contentFolder = contentFolder; return this; } public TestConstellioFactoriesDecorator setPluginsFolder(File pluginsFolder) { this.pluginsFolder = pluginsFolder; return this; } public TestConstellioFactoriesDecorator setPluginsToMoveOnStartupFile(File pluginsFolder) { this.pluginsToMoveOnStartup = pluginsFolder; return this; } public TestConstellioFactoriesDecorator setDataLayerConfigurationAlterations( List<DataLayerConfigurationAlteration> dataLayerConfigurationAlterations) { this.dataLayerConfigurationAlterations = dataLayerConfigurationAlterations; return this; } public TestConstellioFactoriesDecorator setModelLayerConfigurationAlterations( List<ModelLayerConfigurationAlteration> modelLayerConfigurationAlterations) { this.modelLayerConfigurationAlterations = modelLayerConfigurationAlterations; return this; } public TestConstellioFactoriesDecorator setAppLayerConfigurationAlterations( List<AppLayerConfigurationAlteration> appLayerConfigurationAlterations) { this.appLayerConfigurationAlterations = appLayerConfigurationAlterations; return this; } public void setSystemLanguage(String systemLanguage) { this.systemLanguage = systemLanguage; } public void setTransactionLogWorkFolder(File transactionLogWorkFolder) { this.transactionLogWorkFolder = transactionLogWorkFolder; } }