package org.molgenis.data;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.Map;
import java.util.stream.Stream;
import static java.util.Objects.requireNonNull;
/**
* Registry containing all {@link RepositoryCollection RepositoryCollections}.
*/
@Component
public class RepositoryCollectionRegistry
{
private final RepositoryCollectionDecoratorFactory repoCollectionDecoratorFactory;
private Map<String, RepositoryCollection> repoCollectionMap;
private RepositoryCollection defaultRepoCollection;
@Autowired
public RepositoryCollectionRegistry(RepositoryCollectionDecoratorFactory repoCollectionDecoratorFactory)
{
this.repoCollectionDecoratorFactory = requireNonNull(repoCollectionDecoratorFactory);
repoCollectionMap = new HashMap<>();
}
public Stream<RepositoryCollection> getRepositoryCollections()
{
return repoCollectionMap.values().stream()
.map(repoCollectionDecoratorFactory::createDecoratedRepositoryCollection);
}
public void addRepositoryCollection(RepositoryCollection repoCollection)
{
repoCollectionMap.put(repoCollection.getName(), repoCollection);
}
public RepositoryCollection getRepositoryCollection(String name)
{
RepositoryCollection repoCollection = repoCollectionMap.get(name);
return repoCollection != null ? repoCollectionDecoratorFactory
.createDecoratedRepositoryCollection(repoCollection) : null;
}
public boolean hasRepositoryCollection(String name)
{
return repoCollectionMap.containsKey(name);
}
public RepositoryCollection getDefaultRepoCollection()
{
return repoCollectionDecoratorFactory.createDecoratedRepositoryCollection(defaultRepoCollection);
}
void setDefaultRepoCollection(RepositoryCollection defaultRepoCollection)
{
this.defaultRepoCollection = requireNonNull(defaultRepoCollection);
}
}