/* * Copyright Aduna (http://www.aduna-software.com/) (c) 2007. * * Licensed under the Aduna BSD-style license. */ package org.openrdf.repository.sail.config; import static org.openrdf.repository.sail.config.SailRepositorySchema.SAILIMPL; import static org.openrdf.sail.config.SailConfigSchema.SAILTYPE; import org.openrdf.model.Graph; import org.openrdf.model.Literal; import org.openrdf.model.Resource; import org.openrdf.model.util.GraphUtil; import org.openrdf.model.util.GraphUtilException; import org.openrdf.repository.config.RepositoryConfigException; import org.openrdf.repository.config.RepositoryImplConfigBase; import org.openrdf.sail.config.SailConfigException; import org.openrdf.sail.config.SailFactory; import org.openrdf.sail.config.SailImplConfig; import org.openrdf.sail.config.SailRegistry; /** * @author Arjohn Kampman */ public class SailRepositoryConfig extends RepositoryImplConfigBase { private SailImplConfig sailImplConfig; public SailRepositoryConfig() { super(SailRepositoryFactory.REPOSITORY_TYPE); } public SailRepositoryConfig(SailImplConfig sailImplConfig) { this(); setSailImplConfig(sailImplConfig); } public SailImplConfig getSailImplConfig() { return sailImplConfig; } public void setSailImplConfig(SailImplConfig sailImplConfig) { this.sailImplConfig = sailImplConfig; } @Override public void validate() throws RepositoryConfigException { super.validate(); if (sailImplConfig == null) { throw new RepositoryConfigException("No Sail implementation specified for Sail repository"); } try { sailImplConfig.validate(); } catch (SailConfigException e) { throw new RepositoryConfigException(e.getMessage(), e); } } @Override public Resource export(Graph graph) { Resource repImplNode = super.export(graph); if (sailImplConfig != null) { Resource sailImplNode = sailImplConfig.export(graph); graph.add(repImplNode, SAILIMPL, sailImplNode); } return repImplNode; } @Override public void parse(Graph graph, Resource repImplNode) throws RepositoryConfigException { try { Resource sailImplNode = GraphUtil.getOptionalObjectResource(graph, repImplNode, SAILIMPL); if (sailImplNode != null) { Literal typeLit = GraphUtil.getOptionalObjectLiteral(graph, sailImplNode, SAILTYPE); if (typeLit != null) { SailFactory factory = SailRegistry.getInstance().get(typeLit.getLabel()); if (factory == null) { throw new RepositoryConfigException("Unsupported Sail type: " + typeLit.getLabel()); } sailImplConfig = factory.getConfig(); sailImplConfig.parse(graph, sailImplNode); } } } catch (GraphUtilException e) { throw new RepositoryConfigException(e.getMessage(), e); } catch (SailConfigException e) { throw new RepositoryConfigException(e.getMessage(), e); } } }