package com.constellio.sdk.tests; import java.util.HashMap; import java.util.Map; import com.constellio.app.services.factories.ConstellioFactories; import com.constellio.app.services.factories.ConstellioFactoriesInstanceProvider; import com.constellio.app.services.factories.SingletonConstellioFactoriesInstanceProvider; import com.constellio.data.utils.Factory; public class SDKConstellioFactoriesInstanceProvider implements ConstellioFactoriesInstanceProvider { public static final String DEFAULT_NAME = "default"; ThreadLocal<String> nameThreadLocal = new ThreadLocal<>(); Map<String, ConstellioFactories> instances = new HashMap<>(); @Override public ConstellioFactories getInstance(Factory<ConstellioFactories> constellioFactoriesFactory) { String name = nameThreadLocal.get(); if (name == null) { name = DEFAULT_NAME; } return getInstance(constellioFactoriesFactory, name); } public ConstellioFactories getInstance(Factory<ConstellioFactories> constellioFactoriesFactory, String name) { ConstellioFactories constellioFactories = instances.get(name); if (constellioFactories == null) { boolean createdByThisThread = false; synchronized (SingletonConstellioFactoriesInstanceProvider.class) { if (constellioFactories == null) { constellioFactories = constellioFactoriesFactory.get(); instances.put(name, constellioFactories); constellioFactories.getAppLayerFactory().initialize(); createdByThisThread = true; } } if (createdByThisThread) { constellioFactories.getAppLayerFactory().postInitialization(); } //instance.getAppLayerFactory().initialize(); // ((PluginManagerImpl) instance.getAppLayerFactory().getPluginManager()).getPluginConfiguration() // .setConfiguration(ConstellioPlugin.class, "singletonInitializeMode", "true"); } // if (constellioFactories == null) { // constellioFactories = constellioFactoriesFactory.get(); // instances.put(name, constellioFactories); // //constellioFactories.getAppLayerFactory().getPluginManager().configure(); // constellioFactories.getAppLayerFactory().initialize(); // } return constellioFactories; } @Override public boolean isInitialized() { return !instances.isEmpty(); } @Override public void clear() { for (ConstellioFactories instance : instances.values()) { instance.getAppLayerFactory().close(); } instances.clear(); } }