Package org.openrdf.repository.sail.config

Source Code of org.openrdf.repository.sail.config.SailRepositoryConfig

/*
* 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.Literal;
import org.openrdf.model.Model;
import org.openrdf.model.Resource;
import org.openrdf.model.util.ModelException;
import org.openrdf.repository.config.RepositoryImplConfigBase;
import org.openrdf.sail.config.SailFactory;
import org.openrdf.sail.config.SailImplConfig;
import org.openrdf.sail.config.SailRegistry;
import org.openrdf.store.StoreConfigException;

/**
* @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 StoreConfigException
  {
    super.validate();
    if (sailImplConfig == null) {
      throw new StoreConfigException("No Sail implementation specified for Sail repository");
    }

    sailImplConfig.validate();
  }

  @Override
  public Resource export(Model model) {
    Resource repImplNode = super.export(model);

    if (sailImplConfig != null) {
      Resource sailImplNode = sailImplConfig.export(model);
      model.add(repImplNode, SAILIMPL, sailImplNode);
    }

    return repImplNode;
  }

  @Override
  public void parse(Model model, Resource repImplNode)
    throws StoreConfigException
  {
    try {
      Resource sailImplNode = model.filter(repImplNode, SAILIMPL, null).objectResource();

      if (sailImplNode != null) {
        Literal typeLit = model.filter(sailImplNode, SAILTYPE, null).objectLiteral();

        if (typeLit != null) {
          SailFactory factory = SailRegistry.getInstance().get(typeLit.getLabel());

          if (factory == null) {
            throw new StoreConfigException("Unsupported Sail type: " + typeLit.getLabel());
          }

          sailImplConfig = factory.getConfig();
          sailImplConfig.parse(model, sailImplNode);
        }
      }
    }
    catch (ModelException e) {
      throw new StoreConfigException(e.getMessage(), e);
    }
  }
}
TOP

Related Classes of org.openrdf.repository.sail.config.SailRepositoryConfig

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.