package com.constellio.app.api.cmis.binding.global;
import java.io.File;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import org.apache.chemistry.opencmis.server.support.wrapper.CallContextAwareCmisService;
import com.constellio.app.api.cmis.CmisExceptions.CmisExceptions_ObjectNotFound;
import com.constellio.app.api.cmis.binding.collection.ConstellioCollectionRepository;
import com.constellio.app.api.cmis.binding.collection.ConstellioCollectionRepositoryInfoManager;
import com.constellio.app.api.cmis.binding.collection.ConstellioCollectionTypeDefinitionsManager;
import com.constellio.app.services.factories.AppLayerFactory;
import com.constellio.data.dao.managers.StatefulService;
import com.constellio.model.services.collections.CollectionsListManager;
import com.constellio.model.services.collections.CollectionsListManagerListener;
/**
* This class centralize cmis service and repository caches
*/
public class CmisCacheManager implements StatefulService, CollectionsListManagerListener {
private ThreadLocal<CallContextAwareCmisService> callContextAwareCmisServiceThreadLocal = new ThreadLocal<CallContextAwareCmisService>();
private final Map<String, ConstellioCollectionRepository> repositories = new HashMap<String, ConstellioCollectionRepository>();
private AppLayerFactory appLayerFactory;
public CmisCacheManager(AppLayerFactory appLayerFactory) {
this.appLayerFactory = appLayerFactory;
}
@Override
public void initialize() {
addCollectionsToRepository();
appLayerFactory.getModelLayerFactory().getCollectionsListManager().registerCollectionsListener(this);
}
public ConstellioCollectionRepository getRepository(String collection) {
return repositories.get(collection);
}
public Collection<ConstellioCollectionRepository> getRepositories() {
return repositories.values();
}
public ConstellioCollectionRepository getCollectionRepository(String repositoryId) {
ConstellioCollectionRepository result = repositories.get(repositoryId);
if (result == null) {
throw new CmisExceptions_ObjectNotFound("collection repository", repositoryId);
}
return result;
}
@Override
public void onCollectionCreated(String collection) {
addCollectionsToRepository(collection);
}
@Override
public void onCollectionDeleted(String collection) {
repositories.remove(collection);
}
private void addCollectionsToRepository() {
CollectionsListManager collectionsListManager = appLayerFactory.getModelLayerFactory().getCollectionsListManager();
for (String collection : collectionsListManager.getCollectionsExcludingSystem()) {
addCollectionsToRepository(collection);
}
}
private void addCollectionsToRepository(String collection) {
File zeFileSystemRootDir = new File("/home/developer/git/constellio-dev/zeRepository");
ConstellioCollectionTypeDefinitionsManager typeManager = new ConstellioCollectionTypeDefinitionsManager(
appLayerFactory, collection);
ConstellioCollectionRepositoryInfoManager repositoryInfoManager = new ConstellioCollectionRepositoryInfoManager(
collection, appLayerFactory.newMigrationServices().getCurrentVersion(collection));
ConstellioCollectionRepository zeCollectionRepository = new ConstellioCollectionRepository(collection,
zeFileSystemRootDir, typeManager,
repositoryInfoManager);
repositories.put(collection, zeCollectionRepository);
}
public ThreadLocal<CallContextAwareCmisService> getCallContextAwareCmisServiceThreadLocal() {
return callContextAwareCmisServiceThreadLocal;
}
@Override
public void close() {
}
}