/*
* Copyright Aduna (http://www.aduna-software.com/) (c) 2007.
*
* Licensed under the Aduna BSD-style license.
*/
package org.openrdf.repository.manager;
import java.io.File;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.openrdf.model.vocabulary.RDF;
import org.openrdf.repository.Repository;
import org.openrdf.repository.RepositoryConnection;
import org.openrdf.repository.RepositoryException;
import org.openrdf.repository.config.RepositoryConfig;
import org.openrdf.repository.config.RepositoryConfigException;
import org.openrdf.repository.config.RepositoryConfigSchema;
import org.openrdf.repository.config.RepositoryConfigUtil;
import org.openrdf.repository.event.base.NotifyingRepositoryWrapper;
import org.openrdf.repository.sail.SailRepository;
import org.openrdf.sail.memory.MemoryStore;
/**
* FIXME: do not extend NotifyingRepositoryWrapper, because SystemRepository
* shouldn't expose RepositoryWrapper behaviour, just implement
* NotifyingRepository.
*
* @author Herko ter Horst
* @author Arjohn Kampman
*/
public class SystemRepository extends NotifyingRepositoryWrapper {
/*-----------*
* Constants *
*-----------*/
private final Logger logger = LoggerFactory.getLogger(this.getClass());
/**
* The repository identifier for the system repository that contains the
* configuration data.
*/
public static final String ID = "SYSTEM";
public static final String TITLE = "System configuration repository";
public static final String REPOSITORY_TYPE = "openrdf:SystemRepository";
/*--------------*
* Constructors *
*--------------*/
public SystemRepository(File systemDir)
throws RepositoryException
{
super();
super.setDelegate(new SailRepository(new MemoryStore(systemDir)));
}
/*---------*
* Methods *
*---------*/
@Override
public void initialize()
throws RepositoryException
{
super.initialize();
RepositoryConnection con = getConnection();
try {
if (con.isEmpty()) {
logger.info("Initializing empty {} repository", ID);
con.setAutoCommit(false);
con.setNamespace("rdf", RDF.NAMESPACE);
con.setNamespace("sys", RepositoryConfigSchema.NAMESPACE);
RepositoryConfig repConfig = new RepositoryConfig(ID, TITLE, new SystemRepositoryConfig());
RepositoryConfigUtil.updateRepositoryConfigs(con, repConfig);
con.commit();
}
}
catch (RepositoryConfigException e) {
throw new RepositoryException(e.getMessage(), e);
}
finally {
con.close();
}
}
@Override
public void setDelegate(Repository delegate)
{
throw new UnsupportedOperationException("Setting delegate on system repository not allowed");
}
}