package org.molgenis.bootstrap;
import org.molgenis.data.EntityFactoryRegistrar;
import org.molgenis.data.RepositoryCollectionBootstrapper;
import org.molgenis.data.importer.ImportServiceRegistrar;
import org.molgenis.data.meta.system.SystemEntityTypeRegistrar;
import org.molgenis.data.meta.system.SystemPackageRegistrar;
import org.molgenis.script.ScriptRunnerRegistrar;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.stereotype.Component;
import static java.util.Objects.requireNonNull;
import static org.molgenis.data.postgresql.PostgreSqlRepositoryCollection.POSTGRESQL;
/**
* Bootstraps registries of {@link org.molgenis.data.RepositoryCollection repository collection},
* {@link org.molgenis.data.importer.ImportService importers} and {@link org.molgenis.script.ScriptRunner script runners}.
*/
@Component
public class RegistryBootstrapper
{
private static final Logger LOG = LoggerFactory.getLogger(RegistryBootstrapper.class);
private final RepositoryCollectionBootstrapper repoCollectionBootstrapper;
private final SystemEntityTypeRegistrar systemEntityTypeRegistrar;
private final SystemPackageRegistrar systemPackageRegistrar;
private final EntityFactoryRegistrar entityFactoryRegistrar;
private final ImportServiceRegistrar importServiceRegistrar;
private final ScriptRunnerRegistrar scriptRunnerRegistrar;
@Autowired
public RegistryBootstrapper(RepositoryCollectionBootstrapper repoCollectionBootstrapper,
SystemEntityTypeRegistrar systemEntityTypeRegistrar, SystemPackageRegistrar systemPackageRegistrar,
EntityFactoryRegistrar entityFactoryRegistrar, ImportServiceRegistrar importServiceRegistrar,
ScriptRunnerRegistrar scriptRunnerRegistrar)
{
this.repoCollectionBootstrapper = requireNonNull(repoCollectionBootstrapper);
this.systemEntityTypeRegistrar = requireNonNull(systemEntityTypeRegistrar);
this.systemPackageRegistrar = requireNonNull(systemPackageRegistrar);
this.entityFactoryRegistrar = requireNonNull(entityFactoryRegistrar);
this.importServiceRegistrar = requireNonNull(importServiceRegistrar);
this.scriptRunnerRegistrar = requireNonNull(scriptRunnerRegistrar);
}
public void bootstrap(ContextRefreshedEvent event)
{
LOG.trace("Registering repository collections ...");
repoCollectionBootstrapper.bootstrap(event, POSTGRESQL);
LOG.trace("Registered repository collections");
LOG.trace("Registering system entity types ...");
systemEntityTypeRegistrar.register(event);
LOG.trace("Registered system entity types");
LOG.trace("Registering system packages ...");
systemPackageRegistrar.register(event);
LOG.trace("Registered system packages");
LOG.trace("Registering entity factories ...");
entityFactoryRegistrar.register(event);
LOG.trace("Registered entity factories");
LOG.trace("Registering importers ...");
importServiceRegistrar.register(event);
LOG.trace("Registered importers");
LOG.trace("Registering script runners ...");
scriptRunnerRegistrar.register(event);
LOG.trace("Registered script runners");
}
}